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

时间:2013-11-28 16:56:00

标签: php jquery facebook dom curl

我正在尝试在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来执行此操作。

有什么想法吗?我在这里迷失了......

1 个答案:

答案 0 :(得分:0)

所有这些数据都可以通过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 Explorer玩游戏,看看还有什么可用。

PHP示例:

<?php

    $pageData = json_decode(
        file_get_contents('https://graph.facebook.com/EduKarmaDK')
    );

    echo($pageData->cover->source);