Facebook GRAPH API + PHP SDK: получить URL-адрес большой картинки пользователя
Я пытаюсь переписать приложение Facebook (PHP-скрипт со встроенной небольшой многопользовательской Flash-игрой) из старого FBML в новый тип iFrame, и это вроде работает:
<?php
require_once('facebook.php');
define('FB_API_ID', '182820975103876');
define('FB_AUTH_SECRET', 'XXX');
$facebook = new Facebook(array(
'appId' => FB_API_ID,
'secret' => FB_AUTH_SECRET,
'cookie' => true,
));
if (! $facebook->getSession()) {
printf('<script type="text/javascript">top.location.href="%s";</script>',
$facebook->getLoginUrl(
array('canvas' => 1,
'fbconnect' => 0,
#'req_perms' => 'user_location',
)));
} else {
try {
$me = $facebook->api('/me');
$first_name = $me['first_name'];
$city = $me['location']['name'];
$female = ($me['gender'] != 'male');
$fields = $facebook->api('/me', array(
'fields' => 'picture',
'type' => 'large'
));
$avatar = $fields['picture'];
# then I print swf tag and pass first_name;city;avatar to it
} catch (FacebookApiException $e) {
print('Error: ' . $e);
}
}
?>
но я думаю, что вызов для получения изображения профиля пользователя заставляет мой скрипт выполнить 2-е извлечение CURL, чего, вероятно, можно избежать? А также я хотел бы использовать новый GRAPH API, а не старый REST API - но я не уверен, как переписать этот вызов (и мне нужно получить большую и прямую картинку пользователя).
2 ответа
Если вы знаете идентификатор пользователя, просто используйте:
<img src="http://graph.facebook.com/<UID>/picture?type=large" />
Также обратите внимание, что вы можете использовать этот URL для получения содержимого через cURL. При необходимости вы также можете использовать cURL для отслеживания перенаправлений и получения окончательного URL.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,
"http://graph.facebook.com/<UID>/picture?type=large");
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);
$url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
curl_close($ch);
var_dump($url);
Вместо двух вызовов API вы можете использовать FQL, например:
$result = $facebook->api(array(
'method'=>'fql.query',
'query'=>'SELECT uid,name,first_name,current_location,sex,pic_big FROM user WHERE uid=me()'
));
Конечно fql.query
это не графовый метод, но все же это способ использовать FQL.