通过API:如何获取被锁定或设置为私有的Facebook相册的公开可共享链接?

时间:2012-12-30 02:01:31

标签: facebook facebook-graph-api facebook-fql

有没有办法通过可以共享的 Facebook API (graph / fql)获取Facebook相册的公开 链接那些不在Facebook上的人?

此相册无法公开访问。它受用户设置的专辑的共享权限限制。但是我正在寻找一种方法来生成这个受限制的专辑的公共链接,这样无论谁发送此链接都可以无条件地查看该专辑。

我知道这可能通过Facebook网站上的分享相册功能通过分享对话框:您可以通过给他们链接将此相册发送给朋友或亲戚

我无法在图谱API中找到解决方法。

编辑:我在谈论Facebook上通过此功能提供的公共链接:facebook.com/help/124590517619792

2 个答案:

答案 0 :(得分:1)

您没有提供示例或测试用例,也没有提供任何API代码。我将使用Facebook用户名 Hostess 的以下链接作为示例( Twinkies万岁!)。:

主要:https://www.facebook.com/Hostess
相册:https://www.facebook.com/Hostess/photos_albums

首先,我们需要Facebook用户号码 您可以执行GET请求或在浏览器中输入此请求:
Facebook用户信息:http://graph.facebook.com/Hostess

要继续此示例,我们将使用上一步提供的Facebook编号:
Facebook ID:145369525544570

  

有没有办法通过网站获取Facebook相册的公共链接   Facebook API(graph / fql),可以与那些不在的人共享   Facebook的?

是的,有办法!此链接将为您提供所有相册的json结果,在这种情况下为6:
通过jsonhttp://graph.facebook.com/145369525544570/albums

Facebook相册

要限制返回的结果,您可以使用?limit=1(其中1是返回的相册数量):
Facebook专辑(1)通过jsonhttp://graph.facebook.com/145369525544570/albums?limit=1

  

此相册无法公开访问。它受到份额的限制   用户设置的相册的权限。但我正在寻找一种方法   生成此受限制专辑的公共链接,无论是谁   发送此链接可以无条件查看相册。

你运气不好,没有办法。但是,您无需成为Facebook会员即可查看相册中的图像。使用上一步中的json数据可以在相册公开时使用只需使用简单的GET请求:

jsFiddle DEMO: Facebook Albums Links from Facebook ID

// Console log messages are provided, activate your browsers console.

$.ajax({
  url: 'http://graph.facebook.com/145369525544570/albums',
  dataType: "json",
  success: function(yourVar) {

    // Make sure the request, 1 json object, was returned.
    if (yourVar) {

      console.log('This is the jQuery Object received. Click on it to explore contents');
      console.log(yourVar);

      // This will parse the Objects received in 'data' variable.
      // Having said that, it's coincidental the data the wrapped in a 'data' name.
      $(yourVar.data).each(function(index) {

        // Only process Objects that have valid Album links.
        // Having said that, only Photo Albums are returned in initial data, not Video Albums.
        if(this.link){

          // Display in console the jQuery zero indexed number
          console.info('Album Index object: ' + index);
          //
          // Display in HTML via append, the same information.
          $('body').append('<b>Album Index Object: </b>' + index + '<br />');


          // Display in console the Album Names available
          console.info('Name: ' + this.name);
          //
          // Display in HTML via append, the same information.
          $('body').append('<b>Name: </b>' + this.name + '<br />');


          // Display in console the Album Name Url;
          console.log('Url: ' + this.link);
          //
          // Display in HTML via append, the same information.
          $('body').append('<b>Url: </b>' + this.link + '<br />');


          // Display in console dashed lines before next item is shown.
          console.log('-------');
          //
          // Display in HTML via append, the same information.
          $('body').append('<hr><br /><br />');

        }

      });

    } else {
        console.log('Was data expected? Check your jQuery or JavaScript for errors.');
    }
  }

});

// Power-Tip!
// You can also use .ajax() with a YQL Rest Query url.
// See YQL Console with Rest Statement at: 
// http://developer.yahoo.com/yql/console/?q=SELECT%20data.link%20FROM%20json%20WHERE%20url%3D%22https%3A%2F%2Fgraph.facebook.com%2F145369525544570%2Falbums%22&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys
// As seen there, the   data.link   is providing just the links.
// Change   data.link   to   *   to see all data nodes available in json tree.
// That being said, your .ajax() url for above is at the bottom: The Rest Query.

答案 1 :(得分:0)

详细信息:为什么不能这样做。 (否则这是一个安全问题!)

照片和相册的Facebook设置:
When I share something, how do I choose who can see it?

上述Facebook文档指出,如果通过仅限我将相册设置为私有,则只有您可以使用 ,即使您可能拥有可共享的链接对于它。

为了证明相册/照片确实已锁定且无法共享,以下是使用 Yahoo进行的实际实时测试!查询语言以对锁定的相册执行请求:

随意点击图片访问上述YQL声明。

可以肯定的是,上面的示例本身表明链接不是问题,内容确实是主题,因为锁定的项目需要Facebook令牌密钥