FacebookSDK按用户名/页面名称搜索

时间:2015-07-18 03:43:12

标签: php facebook-graph-api facebook-php-sdk

我试图根据用户/页面名称访问用户的公共信息。

我这样做:

$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中基于用户名搜索用户?我已经看到了其他稍微过时的例子,但我和他们声称的工作方式几乎相同。

修改 我们想要获取的信息主要是跟随者数量。

2 个答案:

答案 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();