使用 Graph API v2.5 和访问令牌的 Facebook 个人资料图片抓取工具

Facebook Profile Picture scraper using Graph API v2.5 and access token

我正在构建 Facebook 个人资料图片抓取工具并使用 Phasher class 将抓取的图片转换为十六进制值并将其存储在数据库中以比较相似图片,现在我正在使用此 http 请求获取这些图片在 Graph API v2.5

的最新更新之前一直运行良好

graph.facebook.com/'.$fid.'/picture?width=378&height=378

graph.facebook.com/'.$fid.'/picture?type=large

您可以更改“.$fid”。 Mark 帐户的用户 ID 示例:

graph.facebook.com/4/picture?width=378&height=378

如您所见,它给了我马克·扎克伯格的帐户图片。

它现在不工作,我做了一个简单的搜索我注意到他们改变了 v2.5 中的 API 以使用访问令牌所以我创建了一个应用程序给我 App id 和 App secret 来使用它在 access_token=

正如您在这一行中看到的那样: graph.facebook.com/[ID]/picture?width=378&height=378&access_token=

现在,当我使用访问令牌时,它不起作用,之前是在给我头像文件夹中的抓取图片和数据库中的散列值之前,现在它给了我 0 字节的图片并且它是空白的。(奇怪的是,当我启动抓取工具时,它是抓取的300张头像中抓取了184张和249张头像)

我需要知道为什么会这样?

您可以在我的 Github 帐户上查看完整代码: github.com/jadolyo/FBpp

也欢迎任何建议,谢谢。

http://php.net/manual/en/migration56.openssl.php

一份官方文档,描述了在 PHP 5.6 中打开 ssl 所做的更改 从这里我了解到我应该设置为 false 的另一个参数:"verify_peer_name"=>false

所以我的工作代码如下所示:

$arrContextOptions=array(
    "ssl"=>array(
        "verify_peer"=>false,
        "verify_peer_name"=>false,
    ),
);

$img = file_get_contents('https://graph.facebook.com/'.$fid.'/picture?width=378&height=378', false, stream_context_create($arrContextOptions));