2012-10-19 26 views
0

我正在检索我的用户的朋友的ID阵列使用打开图形api。Facebook的开放图朋友阵列结果是有限的

$friends = $facebook->api('/me/friends?limit=2000'); 
$friendsList = array(); 
      foreach ($friends as $key=>$value) 
      { 
       foreach ($value as $fkey=>$fvalue) { 

        $friendsList[] = $fvalue[id]; 
       } 

      } 

我遇到的问题是,不管我放在极限内,我最多只能接收超过500个朋友的500个朋友ID值。我一直在阅读Facebook开发人员信息中的限制和分页,但没有运气。

我需要做什么来检索所有用户的朋友ID的任何想法?为什么数组中的最后一个值显示为“h”?所有其他值都是id的。

谢谢!!!

+0

那么当你按照响应中的分页链接时会发生什么? 当你打电话给'/我/朋友?limit-500&offset = 500'时遇到什么问题? – Igy

+0

我试过并得到数组([0] => h) – user1669232

回答

3

为什么数组中的最后一个值显示为“h”?

因为您正在循环中进行循环。

在外层循环中,您将遍历实际API响应的两个属性 - datapaging

然后,在内部循环中,通过这些属性指向的每个数组。这是以名称和编号形式出现的很多结果;然后第二次内部循环穿过阵列的paging属性点,并具有其名称/键next和值只有一个属性现在https://graph.facebook.com/…

,因为你试图基于索引的访问在$fvalue[id]的第一个值上,由于$fvalue实际上包含文本字面值https://graph.facebook.com/…,并且没有声明名为id的声明,PHP首先将其解释为仿佛"id"是ment,然后将此字符串值转换为整数0以进行基于索引的访问$fvalue。这让你 - 因为PHP也允许在一个字符串变量指数为基础的访问字节(字符) - 第一个字节,其ASCII码表示是字符h ...


所以,你想要做的实际上只是循环一次,但直接在$friends['data']的内容上。

+0

感谢您的快速反应,我不知道我会做什么,但不能参考此网站。这是我为了摆脱“h”问题所做的......我仍然限制为500个id,即使我的限制设置为5000。 $ frindslist2 = array(); \t \t \t的foreach($朋友[ '数据']为$朋友){$ friendslist2 [] = $朋友[ 'ID']; } 然后我用阵列用逗号来列出结果。 – user1669232

1

如果你只是需要facebook id,那么你应该尝试只用id字段,它应该返回所有的朋友id。与此我记得我的应用程序处理了一个有1500个朋友的用户。

$friends = $facebook->api('/me/friends?fields=id');