如何使用图形api从feed中获取大图?

use*_*951 20 facebook-graph-api

从一个页面加载Facebook Feed时,如果Feed中存在图片,我想显示大图片.

我怎么能得到graph API?Feed中的图片链接不是大图片链接.

谢谢.

CBr*_*roe 44

所述图形API照片对象具有picture连接(类似于用户对象具有):

"专辑大小的照片视图.[...]返回:HTTP 302重定向到图片的网址."

因此,请求https://graph.facebook.com/{object-id-from-feed}/picture会立即将您重定向到相册大小的照片版本.(不仅可以在浏览器中显示它,而且如果你想将图像下载到你的服务器,使用cURL并设置了follow_redirect选项.)


编辑:

从API v2.3开始,/picture不推荐使用Feed帖子的边缘.
然而,作为一个领域,仍然可以请求图片 - 但它将是一个小的.

但是full_picture也有.

因此/{object-id-from-feed}?fields=picture,full_picture可以用来请求那些,或者可以直接请求其他的Feed数据,如此/page-id/feed?fields=picture,full_picture,…(必须以相同的方式指定其他字段,例如消息等).


use*_*951 23

什么对我有用:从feed获取图片链接并用" _s.jpg" 替换" _n.jpg"

  • @ user1105951我试过了CBroe的回答.那不再适用了.它返回一个带有消息`"的#OAuthException`(#100)没有指定节点"`. (7认同)

JK *_*iho 16

好的,我找到了更好的方法.使用图形API检索订阅源时,任何类型为的订阅源项photo都会调用一个字段object_id,而普通status类型的项目则不存在.使用该ID查询Graph API,例如https://graph.facebook.com/1234567890.请注意,对象ID不是下划线分隔的值,就像该Feed项的主ID一样.

object_id查询的结果将是一个新的JSON字典,您将拥有一个source属性,其中包含一个图像的URL,该图像到目前为止已满足我的需求.

另外还有一个images数组,其中包含更多图像的不同大小的图像URL,但其中的大小似乎不可预测,并且并非所有实际上都与该URL后面的图像的物理尺寸相对应.

我仍然希望有一种方法可以通过单个Graph API调用来完成此操作,但它看起来不像是有一个.


mat*_*yer 8

对于高分辨率图像链接:

  • 链接帖子
  • 视频帖子
  • 照片帖子

我使用以下内容:

注:我给的理由_s -> _o黑客优先的object_id/picture做法是因为OBJECT_ID做法是不返回所有图像的效果.

var picture = result.picture;
if (picture) {
    if (result.type === 'photo') {
        if (picture.indexOf('_s') !== -1) {
            console.log('CONVERTING');
            picture = picture.replace(/_s/, '_o');
        } else if (result.object_id) {
            picture = 'https://graph.facebook.com/' + result.object_id + '/picture?width=9999&height=9999';
        }
    } else {
        var qps = result.picture.split('&');
        for (var i = 0; i < qps.length; i++) {
            var qp = qps[i];
            var matches = qp.match(/(url=|src=)/gi);
            if (matches && matches.length > 0) picture = decodeURIComponent(qp.split(matches[0])[1]);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Sil*_*oia 7

这是一种获取大图像的新方法.它出现在预览方法不起作用之后

     /**
     * return a big url of facebook
     * works onky for type PHOTO
     * @param picture 
     * @param is a post type link
     * @return url of image
     */
    @Transactional
    public String getBigImageByFacebookPicture(String pictrue,Boolean link){
        if(link && pictrue.contains("url=http")){
            String url = pictrue.substring(pictrue.indexOf("url=") + 4);
            try {
                url = java.net.URLDecoder.decode(url, "UTF-8");
            } catch (UnsupportedEncodingException e) {
                StringBuffer sb = new StringBuffer("Big image for Facebook link not found: ");
                sb.append(link);
                loggerTakePost.error(sb.toString());
                return null;
            }
            return url;
        }else{
            try {
                Document doc = Jsoup.connect(pictrue).get();
                return doc.select("#fbPhotoImage").get(0).attr("src");
            } catch (Exception e) {
                StringBuffer sb = new StringBuffer("Big image for Facebook link not found: ");
                sb.append(link);
                loggerTakePost.error(sb.toString());
                return null;
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

享受你的大图像:)