Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 类似Facebook的点播元内容刮刀_Php_Facebook_Metadata_Scraper - Fatal编程技术网

Php 类似Facebook的点播元内容刮刀

Php 类似Facebook的点播元内容刮刀,php,facebook,metadata,scraper,Php,Facebook,Metadata,Scraper,你们曾经看到过FB在你将你在facebook上发布的链接(状态、消息等)粘贴到链接字段并显示各种元数据、图像拇指、页面链接中的各种图像或视频相关链接(如youtube)中的视频拇指后,立即将其刮除 你知道如何复制这个函数吗?我正在考虑一对gearman workers,或者更好的只是javascript,它可以基于正则表达式或类似的东西进行xhr请求和解析内容。。。有什么想法吗?有链接吗?是否有人已经尝试过这样做,并将其包装在一个漂亮的类中?有什么吗?:) 谢谢 Facebook查看页面HTML

你们曾经看到过FB在你将你在facebook上发布的链接(状态、消息等)粘贴到链接字段并显示各种元数据、图像拇指、页面链接中的各种图像或视频相关链接(如youtube)中的视频拇指后,立即将其刮除

你知道如何复制这个函数吗?我正在考虑一对gearman workers,或者更好的只是javascript,它可以基于正则表达式或类似的东西进行xhr请求和解析内容。。。有什么想法吗?有链接吗?是否有人已经尝试过这样做,并将其包装在一个漂亮的类中?有什么吗?:)


谢谢

Facebook查看页面HTML中的各种元信息,并将其粘贴到链接字段中。
标题
说明
是两个显而易见的选项,但开发人员也可以使用
提供首选屏幕抓图。我想你可以检查一下这些东西。如果缺少此标记,您可以随时使用服务。

FB从HTML中删除元标记

即,当您输入URL时,FB将显示页面标题,后跟URL(截断),然后是元素的内容

至于缩略图的选择,我认为FB可能只选择超过特定尺寸的缩略图,即跳过按钮图形、1px间隔等

编辑:我不知道您到底在寻找什么,但这里有一个PHP函数,用于从页面中删除相关数据。
这使用了
中的简单HTML DOM库

我已经看了FB是如何做到的,看起来刮片是在服务器端完成的

class ScrapedInfo { public $url; public $title; public $description; public $imageUrls; } function scrapeUrl($url) { $info = new ScrapedInfo(); $info->url = $url; $html = file_get_html($info->url); //Grab the page title $info->title = trim($html->find('title', 0)->plaintext); //Grab the page description foreach($html->find('meta') as $meta) if ($meta->name == "description") $info->description = trim($meta->content); //Grab the image URLs $imgArr = array(); foreach($html->find('img') as $element) { $rawUrl = $element->src; //Turn any relative Urls into absolutes if (substr($rawUrl,0,4)!="http") $imgArr[] = $url.$rawUrl; else $imgArr[] = $rawUrl; } $info->imageUrls = $imgArr; return $info; } 第二类 { 公共$url; 公有产权; 公共说明; 公共$ImageURL; } 函数url($url) { $info=新的ScrapedInfo(); $info->url=$url; $html=file\u get\u html($info->url); //抓取页面标题 $info->title=trim($html->find('title',0)->纯文本); //抓取页面描述 foreach($html->find('meta')作为$meta) 如果($meta->name==“description”) $info->description=trim($meta->content); //抓取图像URL $imgArr=array(); foreach($html->find('img')作为$element) { $rawUrl=$element->src; //将任何相对URL转换为绝对URL if(substr($rawUrl,0,4)!=“http”) $imgArr[]=$url.$rawUrl; 其他的 $imgArr[]=$rawUrl; } $info->imageURL=$imgArr; 返回$info; }
当我开发这样一个项目时,它不像看起来那么容易,编码问题,用javascript呈现内容,存在这么多非语义网站是我遇到的一个大问题。尤其是提取视频信息和尝试自动播放行为总是很棘手,有时甚至是不可能的。你可以在中看到一个演示,它是用.net编写的,但它有一个服务接口,因此你可以通过javascript调用它,还有javascript api,可以获得与fb相同的ui/行为。

c'mon guys。。。认真地没有人?;)像这样的任何东西都需要一个定制的工具,用于你从中抓取的每个站点。尽量避免使用
RegEx
,改用
DOM
。在抓取他们的实际网页之前,尝试从网站中查找原始数据源。如果您找不到原始数据,我强烈建议您使用存储在服务器上的静态文件进行测试。我已经有了一个与fb刮板产生相同输出的工作原型,唯一的问题是可伸缩性…哦,真的;)-我的意思是更多的海量数据。他们在页面中使用图片而不是截图。你认为截图是什么?这是一幅画!他们收集页面中的所有图像,并选择其中一个作为预览缩略图。它们不会生成页面的屏幕截图。页面上的图片是随机的。那么你的悬赏标准是什么?你在答案上下了很大的功夫,那么就去拿悬赏吧。问题是,如果人们不知道答案的标准,他们怎么能回答?