我试图根据用户/页面名称访问用户的公共信息。
我这样做:
$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
或者(从查看源代码得到这个)
$response = $session->sendRequest('GET','/search',['q'=>$uname,'type'=>'user']);
返回" Graph返回错误:请求此资源需要访问令牌。"我使用app id和secret作为此格式的令牌从某个地方偷了一个引用:
$response = $session->sendRequest('GET','/search',['q'=>$uname,'type'=>'user'], self::$FACEBOOK_APP_ID.'|'.self::$FACEBOOK_APP_SECRET);
抛出:" Graph返回错误:请求此资源需要用户访问令牌。"
我不明白为什么需要USER访问令牌:/
任何人都知道如何在php中基于用户名搜索用户?我已经看到了其他稍微过时的例子,但我和他们声称的工作方式几乎相同。
修改 我们想要获取的信息主要是跟随者数量。
答案 0 :(得分:1)
首先,您不能再按用户名搜索用户了。之前只需使用简单的API调用就可以实现:graph.facebook.com/username
这不再起作用,Search API只允许搜索名称(第一个/最后一个)。您不应再使用用户名。
话虽如此,您需要授权自己并使用用户令牌,因为错误消息告诉您。就是这样,你也可以在文档中阅读它:
- 搜索Page和Place对象需要应用访问令牌。
- 所有其他端点都需要用户访问令牌。
来源:https://developers.facebook.com/docs/graph-api/using-graph-api/v2.4#search
有关令牌的更多信息:
答案 1 :(得分:0)
似乎不可能(当时)公开访问超过用户的名称。 OAuth需要访问公共个人资料(这是默认权限)。
使用图形api资源管理器,您可以使用端点/ {user-id}验证这一点,并尝试获取具有任何ID的用户的其他信息。
回报是这样的:
{
"name": "John Doe",
"id": "100003216243221"
}
您也可以通过附加:
获取名字和姓氏?fields=name,first_name,last_name
但即使公开,访问其他信息也会失败。 (我只测试了位置,显然还有其他权限)。
修改<!/强>
<强>但是:强> 如果您想访问 Facebook页面,可以访问一些信息。
如果没有指定字段,则返回一些信息:about,id,can_post,category,check_ins,has_added_app,is_community_page,is_published,likes,link,location,name,phone,talking_about_count,username,website,were_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();