Facebook Graph API - получите идентификатор фотоальбома

Пишу приложение, которое загружает фото в фейсбук. Я не указываю идентификатор альбома, поэтому альбом создается от имени моего приложения.

У меня вопрос: как мне узнать идентификатор альбома, в который была загружена фотография?

Когда я GET информацию о фотографии, альбом не присутствует в JSON, на что я надеялся.


person joseym    schedule 16.05.2011    source источник


Ответы (7)


Эта проблема тоже меня беспокоила некоторое время, но я думаю, что раскололся.

Идентификатор альбома скрыт в значении ссылки, поэтому, если у вас есть объект фото-публикации из Graph API, вы можете получить идентификатор альбома следующим образом:

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

Надеюсь, это может кому-то помочь.

person HonkyHonk    schedule 29.08.2011
comment
Это решение кажется хрупким, но я не знаю альтернативы. Очень жаль, что само фото не имеет отношения к его альбому. - person Mike Hornblade; 13.10.2011
comment
В наши дни альбом представляет собой поле, к которому вы можете получить доступ из объекта фотографии, то есть? Fields = album. Используйте Graph API Explorer по адресу developers.facebook.com/tools/explorer, чтобы узнать о других полях, которые вы можете добавить. - person Steve McGill; 28.07.2013
comment
что здесь фейсбук? - person Rushang Prajapati; 26.04.2016

Ответ Джимми Савчука близок, но не работает, потому что столбцы aid и pid таблицы FQL Photo являются идентификаторами Rest / FQL API, а не идентификаторами Graph API.

К счастью, столбцы object_id и album_object_id в этой таблице индексируются (вопреки документации), поэтому это должно дать вы оба идентификатора Rest / FQL и Graph для альбома:

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

Обычно object_id поля в ответах Rest / FQL API представляют собой идентификатор Graph API (за исключением уведомлений о фотографиях, где это идентификатор Rest / FQL).

Что касается ответа HonkyHonk: не все URL-адреса фотографий link имеют параметр set; в этом случае я думаю, что вы можете найти идентификатор фотографии Rest / FQL API из других его параметров, а затем использовать Rest / FQL API, чтобы получить идентификатор альбома:

Было бы очень полезно, если бы Facebook мог задокументировать что-то о двух типах идентификаторов. Также схема Graph API Photo должна включать идентификатор Graph API альбома.

person Richard Barnett    schedule 26.10.2011
comment
Параметр set link, если он присутствует, содержит идентификатор альбома Graph API. - person Richard Barnett; 26.10.2011
comment
Я также видел несколько link URL-адресов, где set имеет форму at.${ALBUMID}.${REST}. Вау, это сложно. - person Richard Barnett; 26.10.2011

Это простой способ получить:

person ROLANDO    schedule 05.10.2012

Если я правильно вас понял, у вас есть удостоверение личности с фотографией, но вам нужен идентификатор альбома. Вы можете попробовать использовать таблицу photo FQL со следующим запросом:

SELECT aid, pid FROM photo WHERE pid = '<your photo id>'
person Jimmy Sawczuk    schedule 16.05.2011
comment
Вы загружаете свою фотографию в альбом пользователя на стене? Если так, то я не уверен, что он принадлежит к какому-либо альбому, к которому вы можете обратиться; это как-то странно. Кроме того, есть ли у вас user_photos разрешение? - person Jimmy Sawczuk; 17.05.2011
comment
Нет, фотография загружается в альбом, созданный приложением. Да, разрешение user_photos установлено. - person joseym; 17.05.2011

Длинный, неуклюжий, но теоретически допустимый способ: http://graph.facebook.com/userid/albums предоставит вам список всех альбомов, которые пользователь позволяет вам просматривать, затем вы сможете выполнять поиск по объектам альбомов (api здесь) for created_times, которые соответствуют времени создания альбома, которое вы можете сохранить при создании альбома.

Это почти наверняка ужасный способ сделать это, но он должен работать.

person gailbear    schedule 16.05.2011
comment
Да, не совсем элегантно, но мне не очень хочется найти лучшее решение ... Я буду продолжать искать, и если я продолжу возвращаться с пустыми руками, я попробую. - person joseym; 16.05.2011

Решение Ричарда Барнетта хорошо работает для меня, я использую его как запрос FQL через Graph API, чтобы получить ответ JSON, как и на любой другой запрос Graph API:

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

Это возвращает:

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

Затем вы можете получить доступ к идентификатору альбома, используя:

<?php

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

?>

Это самое чистое решение, которое я нашел, поскольку Facebook постоянно меняет формат URL-адресов своих фотографий и альбомов, поэтому их анализ с помощью RegEx не сработает в качестве долгосрочного решения.

person Seth    schedule 09.02.2012

В итоге я просто использовал устаревший API REST, поскольку идентификатор альбома передается со ссылкой на изображение в ответе сервера. Затем я использовал регулярное выражение, чтобы вытащить идентификатор.

Не лучшее решение, и я бы не рекомендовал его, но я считаю, что это лучше, чем добавлять в код еще несколько запросов к серверу.

person joseym    schedule 18.05.2011
comment
Не могли бы вы подробнее рассказать, как именно вы это сделали и какими методами? Я смотрю ответ на запрос graph.facebook.com для идентификатора фотографии, и я не вижу ничего ни в одном из URL-адресов, которые являются идентификатором альбома, откуда он пришел. - person slacy; 17.08.2011
comment
Да, вот как мне пришлось отказаться от Graph и просто использовать REST - person joseym; 23.08.2011