【问题标题】:Retrieve top 10 friends of user on Facebook (get their UIDs) PHP, Facebook API在 Facebook 上检索用户的前 10 位朋友(获取他们的 UID) PHP、Facebook API
【发布时间】:2012-06-09 15:32:05
【问题描述】:

如何获取用户前 10 位好友的 uid,并用指定的字符串包裹每个 uid?

来自:Get list of top friends for facebook app,我看到了这个:

$statuses = $facebook->api('/me/statuses');

foreach($statuses['data'] as $status){
// processing likes array for calculating fanbase. 

        foreach($status['likes']['data'] as $likesData){
            $frid = $likesData['id']; 
            $frname = $likesData['name']; 
            $friendArray[$frid] = $frname;
        }

 foreach($status['comments']['data'] as $comArray){
 // processing comments array for calculating fanbase
            $frid = $comArray['from']['id'];
            $frname = $comArray['from']['name'];

}

但这会返回什么?它是否在数组中返回朋友的用户 ID?我想把它放在一个数组中,即搜索的结果,所以我可以使用 foreach 包装每个 ID 并用它做我想做的事。

如果上面的代码足够了,我是否应该为顶级朋友数组调用$frid?我只需要理解。 :o)

感谢您的宝贵时间。


假设已授予权限。
(这仅在用户允许权限后才会发生,因此假设我们已经拥有权限。)

【问题讨论】:

  • var_dump($statuses['data'])var_dump($statuses)检查退货。
  • 如果您不确定 PHP 中任何内容的返回类型,请使用 var_dump,它会告诉您。
  • 谢谢你们,它返回了array(0) { } ... 那么,该怎么办? :)
  • var_dump($statuses) 返回 array(1) { ["data"]=> array(0) { } } var_dump($statuses['data']) 返回 array(0) { }
  • 听起来您没有有效的访问令牌。请参阅开发人员网站上的 Authentication section。如果您是新手,Authenticating as an app 是最简单的方法。

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


【解决方案1】:

前往https://github.com/facebook/facebook-php-sdk/zipball/master确保您拥有最新的SDK

解压,你有一个如下所示的布局

/facebook-php-sdk
index.php

其中index.php与文件被用来在浏览器中显示好友的数量

在 PHP 文件的开头包含 SDK

require('sdk/src/facebook.php');

转到https://developers.facebook.com/apps,选择您的应用并获取您的应用 ID 和应用密钥,在 PHP 文件中创建一个实例

$facebook = new Facebook(array(
  'appId'  => 'YOUR_APP_ID_HERE',
  'secret' => 'YOUR_SECRET_HERE',
));

然后检索$user数据,这样我们就知道当前用户是经过身份验证的

$user = $facebook->getUser();

在发送任何呼叫之前,请检查身份验证是否正确

if ($user) {
  try {
    $user_profile = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
  }
}

现在拨打/me/statuses 可以在https://developers.facebook.com/docs/reference/api/user/#statuses 获得文档

$statuses = $facebook->api('/me/statuses');

这应该返回所有当前用户状态消息的http://developers.facebook.com/docs/reference/api/status/ 中定义的结构状态消息的数组。

现在你需要决定什么决定了顶级朋友

  • 点赞数 + cmets
  • cmets 数量
  • 点赞数

让我们选择选项1,给每个权重1。即点赞和评论在确定好友数量时是等价的

所以创建一个变量来保存它,例如 $friendArray

然后对所有状态消息进行迭代,但整个 JSON 响应以包装的 data 开头

{
  "data": [

所以访问$statuses['data'],foreach 会将所有状态消息作为status 项提供

foreach($statuses['data'] as $status){

在这个循环中迭代所有的喜欢并增加每个出现的 id 的值

foreach($status['likes']['data'] as $likesData){
    $frid = $likesData['id']; 
    $friendArray[$frid] = $friendArray[$frid] + 1;
}

在这个循环中迭代所有的 cmets 并增加每个出现的 id 的值

foreach($status['comments']['data'] as $comArray){
    $frid = $comArray['from']['id'];
    $friendArray[$frid] = $friendArray[$frid] + 1;
}

在外部循环foreach($statuses['data'] as $status){ 的末尾,您应该有一个数组$friendArray,其中包含分数。

调用asorthttp://www.php.net/manual/en/function.asort.php 对数组进行排序,然后您可以循环获取前x 个分数。

您显示的代码不是函数,实际上缺少右括号,它实际上没有返回任何内容,因为它不是函数。

注意事项/me/statuses 每次调用仅返回一组有限的状态消息,您需要获取previous 页面调用以迭代所有您的消息。返回的顶级朋友只是基于我上面制定的限制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多