Facebook Graph API - получить идентификатор альбома фотографий - PullRequest
12 голосов
/ 16 мая 2011

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

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

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

Ответы [ 9 ]

9 голосов
/ 26 октября 2011

Jimmy Sawczuk ответ близок, но не работает, потому что столбцы таблицы FQL Photo aid и pid являются идентификаторами 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 поля в ответах API Rest / FQL представляют собой идентификатор API графика (кроме уведомлений о фотографиях, где это идентификатор Rest / FQL).

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

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

6 голосов
/ 05 октября 2012

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

4 голосов
/ 30 августа 2011

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

Идентификатор альбома скрыт в значении ссылки, поэтому, если у вас есть объект пост-фотографии из 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];

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

3 голосов
/ 16 мая 2011

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

SELECT aid, pid FROM photo WHERE pid = '<your photo id>'
2 голосов
/ 09 февраля 2012

Решение Ричарда Барнетта хорошо работает для меня, я использую его как 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 не будет работать в качестве долгосрочного решения.

2 голосов
/ 16 мая 2011

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

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

1 голос
/ 18 мая 2011

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

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

0 голосов
/ 29 июня 2012
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);
0 голосов
/ 20 апреля 2012
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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...