如何知道从Facebook Graph API返回的节点是个人资料还是网页?

时间:2014-03-11 22:37:56

标签: facebook facebook-graph-api

我正在编程的网站的一部分,用户可以通过手动输入每个页面的用户名或ID手动将Facebook页面添加到列表中。提交后,我连接到Facebook图形API以检查所有提供的ID或用户名是否有效。

我只能接受Facebook页面,而不是个人资料。

图形API用于返回一个字段,告诉返回的每个节点的类型(用户,页面,应用程序......),但它们不再提供该字段。

以下是页面ID(/ {node-id})

的示例输出
{
  "about": "http://www.365juegos.com", 
  "can_post": true, 
  "category": "Entertainment website", 
  "is_published": true, 
  "new_like_count": 1, 
  "offer_eligible": true, 
  "promotion_eligible": true, 
  "talking_about_count": 1, 
  "unread_message_count": 0, 
  "unread_notif_count": 3, 
  "unseen_message_count": 0, 
  "username": "365juegos", 
  "website": "http://www.365juegos.com", 
  "were_here_count": 0, 
  "id": "415033875603", 
  "name": "365 juegos", 
  "link": "https://www.facebook.com/365juegos", 
  "likes": 1289, 
  "cover": {
    "cover_id": "10151386385585604", 
    "source": "https://scontent-a.xx.fbcdn.net/hphotos-prn1/t1/s720x720/64727_10151386385585604_2060575120_n.jpg", 
    "offset_y": 0, 
    "offset_x": 0
  }
}

这是来自个人资料ID(/ {node-id}):

{
  "id": "1013953243", 
  "name": "Nilo Vélez", 
  "first_name": "Nilo", 
  "last_name": "Vélez", 
  "link": "https://www.facebook.com/nilovelez", 
  "gender": "male", 
  "timezone": 1, 
  "locale": "en_US", 
  "verified": true, 
  "updated_time": "2014-03-08T22:04:45+0000", 
  "username": "nilovelez"
}

首先,我查找了字段的存在,因为它是页面独有的,但是如果像y计数那么它就不会返回。

其他一些字段如* first_name *或 locale 是个人资料所独有的,但我不确定它们是否会一直存在,或者用户是否能够在不久的将来隐藏它们。

有什么想法可以简单地将页面与个人资料区分开来吗?

1 个答案:

答案 0 :(得分:19)

对象的类型通常属于元数据,除非您指定,否则不会随请求一起返回。为了请求对象的type,请在请求结束时添加?metadata=1。类似的东西:

http://graph.facebook.com/{object_id}?metadata=1

例如,请求:

http://graph.facebook.com/1013953243?metadata=1

将返回以下数据:

{
   "id": "1013953243",
   "name": "Nilo V\u00e9lez",
   "first_name": "Nilo",
   "last_name": "V\u00e9lez",
   "gender": "male",
   "locale": "en_US",
   "username": "nilovelez",
   "metadata": {
      "connections": XXX
       .
       .
       .
       .
       .
       .
      "type": "user"
   }
}