Facebook Graph API - получить идентификатор альбома
Я пишу приложение, которое загружает фотографию в facebook. Я не поставляю идентификатор альбома, поэтому альбом создается от имени моего приложения.
Мой вопрос: как мне получить идентификатор альбома, на который была загружена фотография?
Когда я GET
информация о фотографии альбома отсутствует в JSON, которая была моей надеждой.
Ответы
Ответ 1
Этот вопрос также прослушивал меня, но я думаю, что я расколол орех.
Идентификатор альбома скрыт в значении ссылки, поэтому, если у вас есть объект post-post из 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];
Надеюсь, это поможет кому-то.
Ответ 2
Ответ Jimmy Sawczuk близок, но не работает, потому что столбцы таблицы FQL Photo aid
и pid
являются идентификаторами API Rest/FQL API, а не идентификаторами API Graph.
К счастью, столбцы object_id
и album_object_id
в этой таблице индексируются (вопреки документации), поэтому это должно дать вам как Rest/FQL и Graph для альбома:
select aid, album_object_id from photo where object_id = ${GRAPH_PHOTO_ID}
В общем случае object_id
поля в ответах API Rest/FQL являются идентификаторами API Graph (кроме уведомлений о фотографии, где это идентификатор Rest/FQL).
Re HonkyHonk ответ: не все фото link
urls имеют параметр set
; в этом случае я думаю, что вы можете найти идентификатор фотографии Rest/FQL API из других параметров, а затем использовать Rest/FQL API для получения идентификатора альбома:
- Для пользователей с 32-разрядными идентификаторами пользователей: расчет
(id << 32) | pid
- В противном случае соедините
id
, _
и pid
Это поможет много, если Facebook может документировать что-то о двух типах идентификаторов. Кроме того, схема Graph API Photo должна включать в себя идентификатор альбома API Graph.
Ответ 3
Это простой способ получить его:
![]()
Ответ 4
Если я правильно понимаю вас, у вас есть идентификатор фотографии, но вам нужен идентификатор альбома. Вы можете попробовать таблицу photo
FQL со следующим запросом:
SELECT aid, pid FROM photo WHERE pid = '<your photo id>'
Ответ 5
Длинный, неуклюжий, но теоретически правильный способ:
http://graph.facebook.com/userid/albums
предоставит вам список всех альбомов, которые пользователь увидит, затем вы можете искать объекты альбома (api здесь) for created_times
, которые соответствуют времени создания альбома, который вы можете сохранить при создании альбома.
Это почти наверняка ужасный способ сделать это, но он должен работать.
Ответ 6
Решение Ричарда Барнетта хорошо работает для меня, я использую это как запрос FQL через API-интерфейс Graph, чтобы получить ответ JSON, как и для любого другого запроса API Graph:
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 не будет работать как долговременное решение.
Ответ 7
В итоге я просто использовал устаревший REST api, так как идентификатор альбома передается со ссылкой на изображение в ответе сервера. Затем я использовал регулярное выражение, чтобы вытащить id.
Не лучшее решение, и я бы не рекомендовал его, но я чувствую его лучше, чем добавление еще нескольких запросов сервера на код.
Ответ 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);