通过PHP SDK和Graph API获取Facebook封面照片

12

我想知道是否有一种简单的方法可以通过Facebook php sdk从用户获取封面照片。我已经成功检索到了封面相册的封面照片id,但我的解决方案只能部分工作。(正如您所看到的,它不太有效,并且如果添加了更多的相册并移动到其他页面,则此方法将无法工作)。

    $albums = $facebook->api('/me/albums','GET');
    for($i = 0;$i<count($albums['data']);$i++){
        for($j = 0;$j<count($albums['data'][$i]);$j++){
            if($albums['data'][$i]['name'] == "Cover Photos"){
                echo $facebook->api('/me/albums/'.$albums['data'][$i]['cover_photo'],'GET');
            }
        }
    }

2
请勿破坏您的帖子。通过在本网站上发布内容,您已经无法撤回地授予了 Stack Exchange 网络根据 CC BY-SA 4.0 许可证 分发该内容的权利,只要它认为有必要这样做。如需删除的替代方案,请参见:我反思了我的问题;我能删除它吗? - Sabito stands with Ukraine
12个回答

36

又出问题了。API 中没有“cover”选项。请参考以下链接: https://developers.facebook.com/docs/graph-api/reference/v2.0/user/picture - darksoulsong
1
这仍然有效。参考:https://developers.facebook.com/docs/graph-api/reference/v2.0/user/。我使用Graph Explorer工具(https://developers.facebook.com/tools/explorer/)检查了“/me?fields=id,name,cover”,并得到了预期的结果。 - Priyadarshan Salkar
我似乎无法让它工作...将用户ID传递到用户名字段中返回{ "error": { "message": "不支持的获取请求。 请阅读 https://developers.facebook.com/docs/graph-api 上的Graph API文档", "type": "GraphMethodException", "code": 100 } } - jsetting32
我正在尝试在iOS上使用Facebook Graph API使其工作。也许这已经不再受支持了?我似乎能够在Facebook调试器中使用访问令牌访问封面照片,但是只有这种方式。 - jsetting32
似乎在使用JS SDK获取事件时无法正常工作,根据这里的回复,似乎不值得依赖它... - Mr_Chimp
如何在iOS SDK或Graph API中获取Facebook群组的封面源代码?参考资料1:https://developers.facebook.com/docs/graph-api/reference/v2.6/group 参考资料2:https://developers.facebook.com/docs/graph-api/reference/cover-photo/ - Sujay

25

我认为最简单的方法是使用图形API:

http://graph.facebook.com/{user_id or page_id}?fields=cover

并解析返回的JSON。

{
  "cover": {
    "id": "XXX", 
    "source": "https://fbcdn-sphotos-a-a.akamaihd.net/hphotos-ak-ash4/311205_989690200741_1231438675_n.jpg", 
    "offset_y": 66
  }, 
  "id": "XXXXXX"
}

@Omri,你的回答非常有帮助,但我们能否直接获取封面照片的URL?因为在这里,我们需要进行双重调用才能获得最终的封面照片URL。 - Dhaval H. Nena
我需要请求什么权限?我已经这样做了,但我一直收到。 - code-8
1
{"error":{"message":"An active access token must be used to query information about the current user.","type":"OAuthException","code":2500,"fbtrace_id":"CILN\/fxVBjn"}} - code-8

9

Facebook的文档非常贫乏且过时......目前,通过Graph API没有适当的方法来实现这一点,但是通过FQL是可能的。

SELECT pic_cover FROM user WHERE uid='yourUserId'

字段pic_cover没有文档说明,但是可以使用。 响应应该像这样:

[
 {
  "pic_cover": {
   "cover_id": someId,
   "source": "someUrl",
   "offset_y": someOffset
  }
 }
]

我认为这很新。当我在我的项目上工作时,我没有看到过。 - funerr
有趣。我使用了这个方法 https://dev59.com/9m435IYBdhLWcg3wrR9B#12469541 - Thiago Ganzarolli

4
最新版本的Graph API(当前版本为2.4)支持“picture”字段,返回用户的个人资料图片。值得一提的是,请务必检查该功能。
/<user-id>?fields=id,name,picture

2

我认为询问相册类型比询问名称更好。

$albums = $facebook->api("/me/albums");
$album_id = ""; 
foreach($albums["data"] as $item){
//echo $item["id"]." - ".$item["name"]." - ".$item["type"]." - ".$item["cover_photo"]."<br/>";
    if($item["type"] == "profile"){
        $album_id = $item["id"];
    $profile_picture_id = $item["cover_photo"];
    break;
    }
}

1

看起来在这个阶段,等待Facebook更新文档后,您的方法似乎是检索用户时间线封面的唯一“确保成功”的方法。
如果您发现此方法速度慢或效率低下-也许您可以尝试将其作为cron作业运行,并具有最小的更新延迟。例如,每天运行两次cron(甚至更多),处理两到三个用户,并每2分钟运行一次cron...
不是一个完美的解决方案,只是一个建议。


我该如何通过照片ID检索照片信息?或者我可以使用FQL做些什么?我可能可以利用那里得到的ID进行一些操作。 - funerr
1
如果你有一个photo_id,那么你只需要像这样查询图形API:https://graph.facebook.com/{photo_id}。或者使用FQL,像这样:SELECT {any_fields_you_need} FROM photo WHERE pid={photo_id} - Lix
谢谢,它起作用了。但现在我想知道如何改进我的代码,我的意思是,如何始终找到封面照片相册? - funerr
据我所知,有某种法律问题阻止Facebook向所有用户推送新的时间线功能,并且涉及时间线封面照片。也许一旦这个问题公开化,Facebook会更新他们的文档,我们就能在图形API中看到封面照片的端点... - Lix

1

我使用了https://graph.facebook.com/facebookuserid?fields=cover链接,但它没有起作用。当我搜索Facebook SDK文档时,我看到了可以解决问题的答案。

希望这对你有所帮助。
[FBRequestConnection startWithGraphPath:[NSString stringWithFormat:@"/%@?fields=cover", [user objectForKey:@"id"]]
                      completionHandler:^(
                                          FBRequestConnection *connection,
                                          id result,
                                          NSError *error
                                          ) {
                          NSLog(@"%@",[[result objectForKey:@"cover"]objectForKey:@"source"]);
                          /* handle the result */
                      }];

结果是字典类型。您可以在“cover”标签下看到用户封面照片的链接以及其“source”标签。


1

我使用:http://graph.facebook.com/{user_id或page_id}?fields=cover

在浏览器中返回:

{
  "cover": {
    "id": "XXX", 
    "source": "https://fbcdn-sphotos-a-a.akamaihd.net/hphotos-ak-ash4/311205_989690200741_1231438675_n.jpg", 
    "offset_y": 66
  }, 
  "id": "XXXXXX"
}

我该如何将字段“source”赋值给PHP变量?

很抱歉,我无法回复,所以在这里发布了。:(


1
我使用用户名代替ID,它可以正常工作:

http://graph.facebook.com/{username}?fields=cover

相应地解析JSON。

1
它尝试通过 PHP 自动恢复图像。
$json = file_get_contents("https://graph.facebook.com/PROFILE_ID?fields=cover");
$obj = json_decode($json);
echo $obj->cover ->source;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接