在Facebook上发送消息时,如果您包含URL,它通常会从网页抓取图片并将其作为缩略图添加到底部。然后,您可以通过网站上的一些图片进行选择。
我可以看到如何构建它,但为了省去麻烦,我想知道某人是否已经以公开格式完成了它?
谢谢!
答案 0 :(得分:4)
好吧,我为你准备的代码示例太长了,无法添加为第一个的评论。所以这里是正确的代码,经过验证可以在我的本地PHP环境(5.3.1)上运行:
<?php
/**
* Sample CURL Image Extractor
*
* Prepared for stackoverflow.com
*
* @author Sam Skjonsberg <skoneberg@gmail.com>
**/
if(!function_exists('json_encode'))
{
die('You need at least PHP 5.2 to use this script.');
}
//
// JSON & No-Cache Headers
// Uncoment when implemented as an actual JSON service
//
//header('Cache-Control: no-cache, must-revalidate');
// Date in the past to ensure it isn't cached
//header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
//header('Content-type: application/json');
//
//$url = parse_url($_REQUEST['url']);
// Harcoded url for demonstration
// Shameless self-plug :)
$url = 'http://www.codeviking.net';
if(!empty($url))
{
if(!preg_match('%^https?://%i', $url))
{
echo get_json_error('Invalid URL');
}
$ch = curl_init();
curl_setopt_array(
$ch,
array
(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true
)
);
$html = curl_exec($ch);
if(!empty($html))
{
$doc = new DOMDocument($html);
$doc->loadHTML($html);
$images = $doc->getElementsByTagName('img');
$image_srcs = array();
foreach($images as $img) {
foreach($img->attributes as $attribute_name => $attribute_node)
{
if($attribute_name == 'src')
{
$src = $attribute_node->nodeValue;
// Parse image into absolute URL
if(!preg_match('%^https?://%i', $src))
{
$src = $url . '/' . preg_replace('%^\.?/%', '', $src);
}
$image_srcs[] = $src;
}
}
}
echo json_encode($image_srcs);
// And there you have it, a collection of image
// paths to parse through on the client and add <img src="image_src" /> for each.
//
// So, for instance as your ajax success callback
//
//
// var images = parseJSON(image_json);
// for(var i = 0; i < images.length; i++)
// {
// image_src = images[i];
// /* Requires jQuery */
// $('body').append($('<img />').attr('src', image_src));
// }
}
else
{
echo get_json_error('Invalid URL');
}
}
else
{
echo get_json_error('Invalid URL');
}
function get_json_error($msg)
{
$error = array('error' => $msg);
return json_encode($error);
}
真的应该有效。此外,我很欣赏对答案的投票,因为我试图打破100分!谢谢,祝你好运!
答案 1 :(得分:1)
真的不应该难以实施。编码很有趣,拿走它并滚动它:
$ch = curl_init();
curl_setopt_array($ch, array(CURLOPT_URL => $_POST['url'], CURLOPT_FOLLOWLOCATION => true, CURLOPT_RETURNTRANSFER, true));
$results = curl_exec($ch);
$doc = new DOMDocument();
$doc->loadHTML($results);
$images = $doc->getElementsByTagName('img');
这应该返回一个DOMNodeList我相信 - 从那里你迭代并拉出每个图像的src属性,将它粘贴到json_encode(),然后编写一个不错的web服务来提交一个url并返回漂亮的小集合图像。
我意识到这不是你所要求的,而是它的开始。