Facebook Graph API - 获取相册ID

时间:2011-05-16 19:38:07

标签: facebook facebook-graph-api

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

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

当我GET照片信息时,JSON中没有相册,这是我的希望。

9 个答案:

答案 0 :(得分:9)

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

幸运的是,此表中的object_idalbum_object_id列是可索引的(contrary to the documentation),因此这应该为您提供Rest / FQL和&相册的图表ID:

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

Rest / FQL API响应中的一般object_id字段是图谱API ID(照片通知除外,它是Rest / FQL ID)。

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

如果Facebook可以记录两种类型的ID,那将会有很大帮助。此外,Graph API Photo架构还应包含相册的图谱API ID。

答案 1 :(得分:6)

这是获得它的简单方法:

答案 2 :(得分:4)

这个问题一直困扰着我,但我想我已经破解了这个问题。

相册ID隐藏在链接值中,因此如果您有来自Graph API的photo-post对象,则可以像这样检索相册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];

希望这可以帮助某人。

答案 3 :(得分:3)

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

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

答案 4 :(得分:2)

漫长,笨重但理论上有效的方式: http://graph.facebook.com/userid/albums会为您提供用户可以看到的所有相册的列表,然后您可以搜索与您创建相册的时间相匹配的相册对象(api herefor created_times您可以在创建相册时存储。

这几乎肯定是一种可怕的方式,但它应该有用。

答案 5 :(得分:2)

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不断更改其照片和相册网址的格式,因此使用RegEx解析这些不会作为长期修复工作。

答案 6 :(得分:1)

我最终只使用旧版REST api,因为相册ID与服务器响应中的图像链接一起传递。然后我用一个正则表达式将id拉出来。

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

答案 7 :(得分:0)

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;
}

答案 8 :(得分:0)

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);