2015-07-18 4 views
0

Я пытаюсь получить доступ к общедоступной информации для пользователя на основе их имени пользователя/имени домена.FacebookSDK поиск по имени пользователя/pagename

Я делаю это:

$uname = 'csga5000'; 

$session = new Facebook\Facebook([ 
    'app_id' => self::$FACEBOOK_APP_ID, 
    'app_secret' => self::$FACEBOOK_APP_SECRET, 
    'default_graph_version' => 'v2.2' 
]); 

try { 
    // Returns a `Facebook\FacebookResponse` object 
    $response = $session->get('/search?q='+$uname+'&type=user'); 
} catch(Facebook\Exceptions\FacebookResponseException $e) { 
    print_r($e); 
    echo 'Graph returned an error: ' . $e->getMessage(); 
    exit; 
} catch(Facebook\Exceptions\FacebookSDKException $e) { 
    echo 'Facebook SDK returned an error: ' . $e->getMessage(); 
    exit; 
} 

Но исключение, здесь выход:

Graph returned an error: (#803) Some of the aliases you requested do not exist: v2.20 

В качестве альтернативы (Got это смотреть на исходный код)

$response = $session->sendRequest('GET','/search',['q'=>$uname,'type'=>'user']); 

Returns "Graph возвратил ошибку: для запроса этого ресурса требуется токен доступа". Я украл ссылку откуда-то, используя идентификатор приложения и секрет, как маркер в этом формате:

$response = $session->sendRequest('GET','/search',['q'=>$uname,'type'=>'user'], self::$FACEBOOK_APP_ID.'|'.self::$FACEBOOK_APP_SECRET); 

Это проливает: «Graph возвратил ошибку: Маркер доступа пользователя должен запросить этот ресурс.»

Я не понимаю, почему требуется маркер доступа пользователя:/

Кто знает, как искать пользователя на основе имени пользователя в PHP? Я видел другие примеры, которые были немного устарели, но я был почти таким же, как и то, что они утверждали.

Редактировать: Информация, которую мы хотим приобрести, - это в первую очередь подсчет последователей.

ответ

0

Кажется, что это не так (в то время) для доступа к более имени пользователя публично. OAuth требуется для доступа к общедоступному профилю (который является разрешением по умолчанию).

Используя графический api explorer, вы можете проверить это с помощью конечной точки/{user-id} и попытаться получить дополнительную информацию для пользователя с любым идентификатором.

Возвращение, как это:

{ 
    "name": "John Doe", 
    "id": "100003216243221" 
} 

Вы можете получить имя и фамилию, а также путем добавления:

?fields=name,first_name,last_name 

Но доступ к другой информации не удается, даже если общественность. (Я только проверял местоположение, у которого явно есть дополнительное разрешение).

EDIT!

ОДНАКО: Если вы хотите получить доступ к facebook страницу, некоторая информация доступна.

Это некоторая информация, возвращаемая, если не указано ни одного поля: about, id, can_post, category, check_ins, has_added_app, is_community_page, is_published, нравится, ссылка, местоположение, имя, телефон, talk_about_count, имя пользователя, сайт, are_here_count ,

Использование конечной точки:

{page-username-or-id}?fields=engagement,is_permanently_closed,emails,picture 

Можно получить другие информационные поля (при условии, что они общественности).

Так код для этого: Facebook SDK v4:

$session = FacebookSession::newAppSession(); 
$session->validate(); 

$ret = new FacebookRequest(
     $session, 'GET', '/'.$uname.'?fields=name,engagement,phone,link,is_community_page,is_permanently_closed,influences,hometown,general_info,emails,bio,birthday,description,location,username,likes,picture' 
    ); 

$ret = $ret->execute()->getGraphObject()->asArray(); 

Если вы хотите, чтобы поймать исключения, вы можете посмотреть брошенные исключения до: https://developers.facebook.com/docs/php/

Это работает по той же просьбой о facebook sdk v5 (хотя, я не знаю, что способ, которым я вызвал запрос на отправку, рекомендуется):

$uname = 'tbdsolutions5000'; 

$session = new Facebook\Facebook([ 
    'app_id' => self::$FACEBOOK_APP_ID, 
    'app_secret' => self::$FACEBOOK_APP_SECRET, 
    'default_graph_version' => 'v2.2' 
]); 
try { 

    $response = $session->sendRequest('GET','/'.$uname,[ 
      //Optionally: 
      //'fields' => 'comma, separated, fields' 
     ], 
     self::$FACEBOOK_APP_ID.'|'.self::$FACEBOOK_APP_SECRET 
    ); 
} catch(Facebook\Exceptions\FacebookResponseException $e) { 
    print_r($e); 
    echo 'Graph returned an error: ' . $e->getMessage(); 
    exit; 
} catch(Facebook\Exceptions\FacebookSDKException $e) { 
    echo 'Facebook SDK returned an error: ' . $e->getMessage(); 
    exit; 
} 

$response = $response->getGraphObject()->asArray(); 
1

Прежде всего, вы больше не можете искать пользователей по имени пользователя. Раньше это было возможно, просто используя простой вызов API: graph.facebook.com/username

Это не работает, и API поиска только позволяет искать имя (первое/последнее). Вы больше не должны использовать имя пользователя.

Это означает, что вам необходимо авторизоваться и использовать токен пользователя, как сообщает об этом сообщение об ошибке. That's просто, как это, и вы можете прочитать в документации тоже:

  • Searches across Page and Place objects requires an app access token.
  • All other endpoints require a user access token.

Источник: https://developers.facebook.com/docs/graph-api/using-graph-api/v2.4#search

Более подробную информацию о маркерах:

+0

Спасибо за ответ. Может ли мое приложение каким-либо образом получить доступ к общедоступной пользовательской информации? У меня есть имя пользователя, все, что мне нужно, это идентификатор, я считаю. В случае, если для этих поисковых запросов требуется токен пользователя, разрешен ли этот пользователь, или я могу использовать своего собственного пользователя-пользователя, чтобы получить этот барьер разрешения? – csga5000

+1

вы можете получать информацию только о пользователе, если этот пользователь разрешил ваше приложение. опять же, вы больше не должны использовать имя пользователя. люди, которые не санкционировали ваше приложение, не являются вашим бизнесом, поскольку вы по каким-либо причинам не можете получить к ним доступ. – luschn

+0

вы можете использовать только своего пользователя-разработчика. не пытайтесь обойти систему;) – luschn