我正在尝试获取Facebook页面上的第一张图片。它在其他网站上工作-使用:
$image = $doc->getElementsByTagName('img')->item(0);
但出于某种原因,Facebook已经把我需要的东西包起来了,比如:
<code class="hidden_elem" id="u_0_7"><!-- <div class="timelineLoggedOutSignUp"><div class="_5h60" id="pagelet_loggedout_sign_up" data-referrer="pagelet_loggedout_sign_up"></div></div><div class="fbTimelineTopSectionBase fbTimelineLoggedOutTopSection"><div class="_5h60" id="pagelet_above_header_timeline" data-referrer="pagelet_above_header_timeline"></div><div id="above_header_timeline_placeholder"></div><div class="fbTimelineSection mtm fbTimelineTopSection"><div id="fbProfileCover"><div class="cover" id="u_0_4"><a class="coverWrap coverImage" href="https://www.facebook.com/photo.php?fbid=632540440113248&set=a.540825239284769.1073741827.540818775952082&type=1" rel="theater" ajaxify="https://www.facebook.com/photo.php?fbid=632540440113248&set=a.540825239284769.1073741827.540818775952082&type=1&src=https%3A%2F%2Fscontent-b.xx.fbcdn.net%2Fhphotos-ash3%2F579116_632540440113248_872174037_n.png&size=851%2C315&source=10" title="Coverbillede" id="fbCoverImageContainer"><img class="coverPhotoImg photo img" src="https://scon
请注意,它被包装成一个:<!-- -->
。
有什么办法可以避免这种情况吗?也许将用户代理更改为旧的浏览器,在那里他们不使用<!-- -->
包装?我可以这样做,在我的CURL设置中使用CURLOPT_USERAGENT
。
有什么想法吗?我在这里迷路了。。
所有这些数据都可以通过Facebook Graph API获得,因此您不需要篡改DOM或抓取页面,也不需要通过身份验证即可获取。这意味着您不需要Facebook的SDK,也不必担心在获取公共信息时注册应用程序。此外,Facebook一直在更改他们的HTML,所以抓取内容会慢慢让你发疯。
下面是一个快速的JS示例,这将获得您页面的封面照片:
$('#GetCoverImage').click(function() {
$.getJSON(
'https://graph.facebook.com/EduKarmaDK',
function(pageData) {
console.log(pageData.cover.source);
}
);
});
pageData对象中提供了有关该页面的其他公共信息。玩一玩Graph API资源管理器,看看还有什么可用的。
PHP示例:
<?php
$pageData = json_decode(
file_get_contents('https://graph.facebook.com/EduKarmaDK')
);
echo($pageData->cover->source);