通过图形API访问全尺寸(851x315)时间线封面照片

时间:2012-08-11 20:02:39

标签: facebook-graph-api

我注意到当我通过Graph API(使用PHP)访问时间线封面照片URL时,返回的照片是720x266而不是851x315。使用<graph api url>/userId/?field=cover或访问访问['cover']['source']时返回的json数组的<graph api url>/userID中的网址

我一直无法找到检索全尺寸封面照片的方法。使用firebug我可以看到Facebook加载完整大小的851x315图像,URL中唯一的区别似乎是API返回的路径中有720x720,

Facebook加载的内容:

  

http://a3.sphotos.ak.fbcdn.net/hphotos-ak-prn1/xxxxxx_xxxxxxxxxxxxxxx_xxxxxxxxxx_n.jpg

Graph API返回的内容

  

http://a3.sphotos.ak.fbcdn.net/hphotos-ak-prn1/s720x720/xxxxxx_xxxxxxxxxxxxxxx_xxxxxxxxxx_n.jpg

有没有办法直接访问全尺寸封面照片网址?我可以解析API返回的URL来剥离720x720,但我希望这是一种更优雅的方式直接获取全尺寸封面照片URL。

3 个答案:

答案 0 :(得分:6)

访问facebook用户的全尺寸时间线封面照片


在php中,我们可以执行以下操作。 它是一个小小的黑客,我不保证它会终身工作。

如您所见,返回的照片网址中有s720x720。现在我们将用l720(L720)替换它。借助于php中的preg_replace()。


$coverphoto_url="https://a3.sphotos.ak.fbcdn.net/hphotos-ak-prn1/s720x720/xxxxxx_xxxxxxxxxxxxxxx_xxxxxxxxxx_n.jpg";

$coverphoto_url = preg_replace('/s720/i','l720',$coverphoto_url);

这将返回,

  

https://a3.sphotos.ak.fbcdn.net/hphotos-ak-prn1/ l720x720 /xxxxxx_xxxxxxxxxxxxxxx_xxxxxxxxxx_n.jpg


您也可以使用javascript执行此操作。

coverphoto_url = coverphoto_url.replace(/s720/i, 'l720');

如果您不知道如何通过图形API检索coverphoto,请阅读此问题。

How to get a securl cover URL?

希望这有助于某人:)

答案 1 :(得分:3)

现在用新的Facebook Graph API打破了接受的答案,我能够使用此功能在JavaScript中获得高质量的封面照片:

FB.api("/hawaiianchimp?fields=cover", function(response){
        FB.api("/"+response.cover.id, function(response){
            var img_src = response.images[0].source;
        });
      });

这会获取封面照片ID,然后执行第二次Graph API调用以获取图像源

答案 2 :(得分:1)

在我的测试中看来,网址的这一部分是问题的症结所在: .../c0.0.851.315/...

因此请执行以下请求:

$url = "https://graph.facebook.com/{$id}?fields=cover";

// // this points it to the actual banner, not the fullsized one 
$key_851 = 'c0.0.851.315';

$response = json_decode( file_get_contents( $url ) );

if( is_object( $response ) && property_exists( $response->cover , 'source' ) ) {
    $coverphoto_url = preg_replace( '/s720(\w*\.*)\d*(?<!\/)/i', $key_851 ,$response->cover->source );
    echo $coverphoto_url;
}