我正在编写一个将照片上传到Facebook的应用程序。我没有提供相册ID,因此代表我的应用创建了相册。
我的问题是:如何获取照片上传到的相册ID?
当我GET
照片信息时,JSON中没有相册,这是我的希望。
答案 0 :(得分:9)
Jimmy Sawczuk 的答案很接近,但不起作用,因为FQL Photo表列aid
和pid
是Rest / FQL API ID,而不是Graph API ID 。
幸运的是,此表中的object_id
和album_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:
(id << 32) | pid
2360873244068853905
id
,_
和pid
100002937903251_155052
如果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 here)for 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);