用户名不是用户表facebook api的成员

时间:2015-01-29 19:14:14

标签: php facebook api facebook-fql fql.multiquery

在过去的几年里,我使用Facebook的FQL,我收集了粉丝在我的一个页面上的最新评论数据。为此,我被迫使用2个表连接。我可以用fql.multiquery帮助做到这一点。

这个小代码:

$query1 = "SELECT source_id, post_id, created_time , actor_id, target_id, message FROM stream WHERE source_id = ".$page_id." AND actor_id != ".$page_id." 
ORDER BY created_time DESC
LIMIT 3";        
$query2 = "SELECT username, uid, first_name, last_name FROM user WHERE uid in (SELECT actor_id FROM #query1)";

$multiQuery = array
(
   "query1" => $query1,
   "query2" => $query2,
);

$param = array(       
   'method' => 'fql.multiquery',       
   'queries' => $multiQuery,       
   'callback' => '');       
$queryresults = $facebook->api($param);

今天我收到错误“用户名不是用户表Facebook API的成员”。

  • 我搜索了Facebook用户表字段(可能已更改)。
  • 尝试'SELECT *' - 其他错误(不允许)

在Facebook上我发现很快(4月份),API 2.0将被关闭。并且不推荐使用2.1 FQL。

我想以简单的方式解决这个问题。

任何信息都会有所帮助。

3 个答案:

答案 0 :(得分:2)

你是对的。 API v2.0及更高版本中删除了用户名字段。所以你无法访问它。

答案 1 :(得分:1)

使用Graph API v2.0及更高版本不推荐使用username字段是正确的。我建议改为使用uid字段。

问题是您在FQL查询中使用了错误的端点。 fql.multiquery解析为旧的REST API,将于2015年4月30日弃用。

Graph API中的常规“新”FQL端点为/fql?q={query},您可以使用Batch API一次触发多个请求。如果你有一个v2.0应用程序,你可以使用FQL直到2016年8月7日。

答案 2 :(得分:0)

好的,这是我现在的解决方案......感谢Tobi,我选择/ fql?q =方法 所以这是我的代码,如果有人需要。

function getcontents($query,$access_token)
{
  $url = "https://graph.facebook.com/fql?q=".urlencode($query);
  $url .= "&access_token=".$access_token;
  $content = file_get_contents($url);
  $content = json_decode($content);

  return $content;
}

// --------

$query1 = "SELECT source_id, post_id, created_time , actor_id, target_id, message FROM stream WHERE source_id = ".$page_id." AND actor_id != ".$page_id." 
ORDER BY created_time DESC
LIMIT 3
";       

$content = getcontents($query1,$access_token);     

$actor_ids = array();
foreach ($content->data as $key => $value) 
{
  $data[$value->actor_id] = $value;
  $actor_ids[] = $value->actor_id;  
}

$query2 = "SELECT username, uid, first_name, last_name FROM user WHERE uid in (".implode(",",$actor_ids).")";  
$content = getcontents($query2,$access_token); 

foreach ($content->data as $key => $value) 
{
   $data[$value->uid] = array_merge((array) $data[$value->uid],(array) $value);
} 

现在可以使用......