【问题标题】:Facebook Graph API - get a photos album IDFacebook Graph API - 获取相册 ID
【发布时间】:2014-02-08 08:52:40
【问题描述】:

我正在编写一个将照片上传到 facebook 的应用程序。我没有提供专辑 ID,因此代表我的应用创建了专辑。

我的问题是:如何获取照片上传到的相册 ID?

当我GET 时,相册中的照片信息不存在于 JSON 中,这是我的希望。

【问题讨论】:

    标签: facebook facebook-graph-api


    【解决方案1】:

    Jimmy Sawczuk 的答案很接近,但不起作用,因为 FQL 照片表列 aidpid 是 Rest/FQL API id,而不是 Graph API id。

    幸运的是,此表中的 object_idalbum_object_id 列是可索引的 (contrary to the documentation),因此这应该为您提供专辑的 Rest/FQL 和 Graph id:

    select aid, album_object_id from photo where object_id = ${GRAPH_PHOTO_ID}
    

    通常,Rest/FQL API 响应中的 object_id 字段是 Graph API id(照片通知除外,它是 Rest/FQL id)。

    回复HonkyHonk的回答:并非所有照片link url 都有set 参数;在这种情况下,我认为您可以从其他参数中找到 Rest/FQL API 照片 id,然后使用 Rest/FQL API 获取相册 id:

    如果 Facebook 能够记录有关这两种类型的 id 的信息,那将大有帮助。此外,Graph API Photo 架构应包含相册的 Graph API id。

    【讨论】:

    • linkset 参数(如果存在)包含 Graph API 专辑 ID。
    • 我还看到了一些link 网址,其中set 的格式为at.${ALBUMID}.${REST}。哇,这很复杂。
    【解决方案2】:

    这是获得它的简单方法:

    【讨论】:

      【解决方案3】:

      这个问题也困扰了我一段时间,但我想我已经破解了。

      相册 ID 隐藏在链接值中,因此如果您有来自 Graph API 的照片发布对象,您可以像这样检索相册 ID:

      NSString *link = [item valueForKey:@"link"];
      NSString *album_id = nil;
      NSRange fRange = [link rangeOfString:@"set=a."];
      if(fRange.location != NSNotFound) {         
          NSInteger firstPos = fRange.location + 6;
          NSInteger endPos = [link rangeOfString:@"." options:NSLiteralSearch range:NSMakeRange(firstPos, 25)].location;
          album_id = [[link substringWithRange:NSMakeRange(firstPos, endPos - firstPos)] copy];
      }
      

      它可能都可以简化为一行代码,但我认为这更具可读性。 要获取专辑信息,请使用:

      [facebook requestWithGraphPath:album_id andDelegate:delegate];
      

      要获取相册中的所有照片,请使用:

      [facebook requestWithGraphPath:[NSString stringWithFormat:@"%@/photos", album_id] andDelegate:delegate];
      

      希望这可以帮助某人。

      【讨论】:

      • 这个解决方案似乎很脆弱,但我不知道有什么替代方案。很遗憾,照片本身与相册没有关联。
      • 现在相册是一个可以从照片对象访问的字段 - 即 ?fields=album - 使用 developers.facebook.com/tools/explorer 的 Graph API Explorer 获取更多可以添加的字段。
      • 这里的 facebook 是什么?
      【解决方案4】:

      如果我的理解正确,您有照片 ID,但需要相册 ID。您可以尝试通过以下查询使用the photo FQL table

      SELECT aid, pid FROM photo WHERE pid = '<your photo id>'
      

      【讨论】:

      • 您是否正在将您的照片上传到用户的“Wall Photos”相册?如果是这样,我不确定它是否属于您可以查询的任何专辑;这有点奇怪。另外,你有user_photos 权限吗?
      • 否,照片已上传到应用创建的相册中。是的,已设置 user_photos 权限。
      【解决方案5】:

      冗长、笨重但理论上有效的方法: http://graph.facebook.com/userid/albums将为您提供用户允许您查看的所有相册的列表,然后您可以搜索与您创建相册的时间相匹配的相册对象 (api here) for created_times,您可以在创建时存储专辑。

      这几乎可以肯定是一种可怕的方法,但它应该可以工作。

      【讨论】:

      • 是的,不是很优雅,但我不太想找到更好的解决方案......我会继续寻找,如果我一直空着,我会试一试。跨度>
      【解决方案6】:

      Richard Barnett 的解决方案对我来说效果很好,我将其用作通过 Graph API 的 FQL 查询来获得 JSON 响应,就像我对任何其他 Graph API 查询一样:

      https://graph.facebook.com/fql?q=select+album_object_id+FROM+photo+WHERE+object_id='[PHOTOID]'
      

      这会返回:

      {
         "data": [
            {
               "album_object_id": "10150531092908837"
            }
         ]
      }
      

      然后您可以使用以下方式访问专辑 ID:

      <?php
      
      $strPhotoAlbumID = $objFacebookAPI->data[0]->album_object_id;
      
      ?>
      

      这是我发现的最干净的解决方案,因为 Facebook 会不断更改其照片和相册 URL 的格式,因此使用 RegEx 解析这些不会作为长期解决方案。

      【讨论】:

        【解决方案7】:

        我最终只使用了旧版 REST api,因为专辑 ID 是通过服务器响应中的图像链接传递的。然后我使用正则表达式将 id 提取出来。

        不是最好的解决方案,我不会推荐它,但我觉得它比在代码中添加另外几个服务器请求更好。

        【讨论】:

        • 您能否详细说明您是如何做到这一点的,以及使用什么方法?我正在查看 graph.facebook.com 对照片 ID 请求的响应,但在专辑 ID 来源的任何 URL 中都看不到任何内容。
        • 是的,这就是我不得不放弃 Graph 而只使用 REST 的原因
        【解决方案8】:
        function get_album_id_by_album_name($album_name){//return array of data
            $fql = 'SELECT aid, owner, name, object_id FROM album WHERE owner=me() and name="'.$album_name.'"';
            $param = array(
                'method'    => 'fql.query',
                'query'     => $fql,
                'callback'  => ''
            );
            $fqlResult = $this->facebook->api($param);
            return $fqlResult;
        }
        

        【讨论】:

          【解决方案9】:
          String albumID = "https://www.facebook.com/photo.php?fbid=192570127478130&set=a.135556629846147.24342.100001754323389&type=1";
          albumID = albumID.split("&set=a.")[1];
          albumID = albumID.split("\\.")[0];
          System.out.println(albumID);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-04-04
            • 2018-11-23
            • 1970-01-01
            • 2012-04-26
            • 1970-01-01
            • 1970-01-01
            • 2011-03-03
            相关资源
            最近更新 更多