2011-05-16 112 views
12

我正在写一个应用程序,上传照片到Facebook。我没有提供相册ID,因此我的应用程序会创建相册。Facebook图形API - 获取照片相册ID

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

当我GET的照片信息专辑不存在于JSON这是我的希望。

回答

4

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

专辑ID是隐藏在链接的价值,所以如果你有从图形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]; 

希望这可以帮助别人。

+0

这种解决方案看起来很脆弱,但我不知道替代方案。这张照片本身没有与其专辑的关联真是太可惜了。 – 2011-10-12 22:32:01

+3

现在这张专辑是一个您可以从照片对象访问的字段 - 即?fields = album - 使用https://developers.facebook.com/tools/explorer上的Graph API Explorer获取更多可添加的字段。 – 2013-07-28 11:23:32

+0

这是什么Facebook? – 2016-04-26 06:38:50

3

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

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

我想上面的代码,不幸的是,响应是一个空数组... – joseym 2011-05-16 21:03:38

+0

你上传你的照片用户的“Wall Photos”相册?如果是这样,我不确定它是否属于您可以查询的任何专辑;这有点奇怪。另外,你有'user_photos'权限吗? – 2011-05-16 21:07:48

+0

不,照片上传到由应用程序创建的相册中。是的,设置了user_photos权限。 – joseym 2011-05-16 21:11:14

2

长,笨重,但理论上有效的方法: http://graph.facebook.com/userid/albums将让你的所有用户,您可以看到,那么你就可以搜索专辑对象专辑列表(api herefor created_times与您创建相册的时间相匹配,您可以在创建相册时存储该相册。

这几乎肯定是一个可怕的方式来做到这一点,但它应该工作。

+0

是的,不完全是优雅的,但我没有多少像找到一个更好的解决方案...我会继续看,如果我继续空虚我会给这个镜头。 – joseym 2011-05-16 19:53:59

1

由于专辑ID与服务器响应中映像的链接传递,我最终只使用了旧版REST api。然后我用一个正则表达式将id拉出来。

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

+0

你能详细说明你是如何做到这一点的,以及用什么方法?我正在查看graph.facebook.com对照片ID的请求的回复,并且我没有看到任何网址中的任何相册ID。 – slacy 2011-08-17 18:58:56

+0

是的,这就是我不得不放弃使用Graph并使用REST – joseym 2011-08-23 01:00:45

9

吉米Sawczuk的答案是接近,但不工作,因为FQL照片表列aidpid是REST/FQL API IDS,没有图形API的ID。

好在此表中的object_idalbum_object_id列是可转位(contrary to the documentation),所以这应该给你的专辑都休息/ FQL &图形标识:

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网址有set参数;在这种情况下,我认为你可以找到它的其他参数的REST/FQL API带照片的身份证,然后使用REST/FQL API来获取相册ID:

这将有很大的帮助如果Facebook可以记录一些关于两种类型的ID。此外,图形API照片模式应该包含相册的图形API ID。

+0

link的'set'参数(如果存在)包含Graph API相册ID。 – 2011-10-26 05:10:12

+0

我也见过一些link链接,其中'set'的形式为'。$ {ALBUMID}。$ {REST}'。哇,这很复杂。 – 2011-10-26 05:50:14

2

理查德·巴尼特的解决方案很适合我,我以此为FQL查询通过图形API来获取一个JSON响应就像我会为任何其他图形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解析这些内容不会起到长期修复的作用。

+0

这对我有用。谢谢@Seth – 2013-02-25 04:28:00

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

这是最简单的方式获得它:

+1

这对我不起作用。 FB给我“无效的相册ID” – 2012-12-11 17:28:19

相关问题