Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 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 для получения идентификатора альбома:

Это поможет много, если 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);