我注意到当我通过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,
http://a3.sphotos.ak.fbcdn.net/hphotos-ak-prn1/xxxxxx_xxxxxxxxxxxxxxx_xxxxxxxxxx_n.jpg
http://a3.sphotos.ak.fbcdn.net/hphotos-ak-prn1/s720x720/xxxxxx_xxxxxxxxxxxxxxx_xxxxxxxxxx_n.jpg
有没有办法直接访问全尺寸封面照片网址?我可以解析API返回的URL来剥离720x720,但我希望这是一种更优雅的方式直接获取全尺寸封面照片URL。
答案 0 :(得分:6)
在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;
}