使用cURL和PHP DOM从Facebook页面获取第一张图像


Grapping first image from Facebook Page using cURL and PHP DOM

我正在尝试获取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&amp;set=a.540825239284769.1073741827.540818775952082&amp;type=1" rel="theater" ajaxify="https://www.facebook.com/photo.php?fbid=632540440113248&amp;set=a.540825239284769.1073741827.540818775952082&amp;type=1&amp;src=https%3A%2F%2Fscontent-b.xx.fbcdn.net%2Fhphotos-ash3%2F579116_632540440113248_872174037_n.png&amp;size=851%2C315&amp;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);