如何通过一次调用从Facebook图API获取给定网址的图片网址

时间:2016-03-01 14:30:39

标签: facebook api facebook-graph-api

我正在尝试从Facebook图形API中的共享链接获取图像网址数据。我可以得到这个,但它似乎是一个非常hacky的方式这样做,因为它涉及双服务器调用并依赖于旧的API版本,我宁愿用一个很好的干净方式来使用当前版本的API - 2.5。< / p>

直到2.4我可以使用2.3 API来请求下面的链接的网址我试图获取一个图像 https://graph.facebook.com/v2.3/?id=http%3A%2F%2Fwww.google.co.uk&access_token=xxxxx

它将返回与2.5版API相同的内容:

{
   "og_object": {
      "id": "383886459583",
      "description": "Happy St. David's Day 2016 #GoogleDoodle",
      "title": "Google",
      "type": "website",
      "updated_time": "2016-03-01T10:58:02+0000",
      "url": "http://www.google.co.uk/"
   },
   "share": {
      "comment_count": 0,
      "share_count": 329164
   },
   "id": "http://www.google.co.uk"
}

从这里我可以获取og_object ID并进行完全相同的调用,但这次使用ID代替返回包含图像url的scrape信息:

https://graph.facebook.com/v2.3/?id=383886459583&access_token=xxxxx

{
   "created_time": "2007-11-07T12:09:31+0000",
   "title": "Google",
   "type": "website",
   "description": "Happy St. David's Day 2016 #GoogleDoodle",
   "image": [
      {
         "height": 210,
         "url": "http://www.google.com/logos/doodles/2016/st-davids-day-2016-5676738174517248-thp.png",
         "width": 525
      }
   ],
   "is_scraped": true,
   "updated_time": "2016-03-01T10:58:02+0000",
   "url": "http://www.google.co.uk/",
   "id": "383886459583"
}

从那里我有一个我可以使用的图像网址然而在2.5中使用相同的方法来获取图像产生这个

{
   "created_time": "2007-11-07T12:09:31+0000",
   "title": "Google",
   "type": "website",
   "id": "383886459583"
}

有没有办法使用ID获取2.5中的图像数据,或者更好的方法是使用目标链接的URL进行单个调用并立即返回所有og数据?

这个实例的例子是

var url = "https://graph.facebook.com/v2.3/{{{{id}}}}?access_token={{{{token}}}}";
var token = "xxxxx";
var id = "http%3A%2F%2Fwww.google.co.uk";
url = url.replace('{{{{token}}}}', token);

$.getJSON( url.replace('{{{{id}}}}', id), 
  function( data ) {
    console.log(data);
    if (data && data.og_object && data.og_object.id)
      $.getJSON( url.replace('{{{{id}}}}', data.og_object.id), 
        function( data ){
          console.log(data, data.image);
          //Do something with og data
        }
      );
  }
);
编辑:感谢您指出声明字段CBroe(我更新了标题以更好地反映我想要的答案)但是您标记的副本没有提到嵌套字段,这些字段必须完全回答这一点并将其限制为单个API调用虽然它确实让我走上了正确的道路。完整的解决方案也会返回先前返回的og数据:

https://graph.facebook.com/v2.5/http%3A%2F%2Fwww.google.co.uk?access_token=xxxxx&fields=og_object{id,description,title,type,url,site_name,image,is_scraped,updated_time,audio,video,locale},id,share

其中fields=是我们的声明字段,而og_object是顶级JSON对象 - 但是它自己指定它只会给我们减去og_object的缩减版本减去图像。为了获取图像,我们需要使用声明字段的嵌套语法钻取到og_object以获取图像字段:

og_object{image}

然后我们需要声明所有其他的og_object字段,因为它们不再默认发送(加上其他一些感兴趣的字段),我们只会得到图像字段

fields=og_object{id,description,title,type,url,site_name,image,is_scraped,updated_time,audio,video,locale},id,share

1 个答案:

答案 0 :(得分:1)

单个API调用解决方案,它还返回先前返回的og数据:

https://graph.facebook.com/v2.5/?id=http%3A%2F%2Fwww.google.co.uk?access_token=xxxxx&fields=og_object{id,description,title,type,url,site_name,image,is_scraped,updated_time,audio,video,locale},id,share

其中fields是我们的声明性字段,而og_object是顶级JSON对象 - 但是它自己指定它只会给我们减去og_object的缩小版本减去图像。为了获取图像,我们需要使用声明字段的嵌套语法钻取到og_object以获取图像字段:

og_object{image}

然后我们需要声明所有其他的og_object字段,因为它们不再默认发送(加上其他一些感兴趣的字段),我们只会得到图像字段

fields=og_object{id,description,title,type,url,site_name,image,is_scraped,updated_time,audio,video,locale},id,share