API Graph de Facebook: obtenga una ID de álbum de fotos

Estoy escribiendo una aplicación que sube una foto a facebook. No estoy proporcionando un ID de álbum, por lo que se crea un álbum en nombre de mi aplicación.

Mi pregunta es: ¿cómo obtengo el ID del álbum al que se cargó la foto?

Cuando GET la información de la foto del álbum no está presente en el JSON, que era mi esperanza.

preguntado el 16 de mayo de 11 a las 19:05

9 Respuestas

Este problema también me ha estado molestando por un tiempo, pero creo que me he roto la tuerca.

El ID del álbum está oculto en el valor del enlace, por lo que si tiene un objeto de publicación de fotos de la API Graph, puede recuperar el ID del álbum de esta manera:

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

Probablemente todo podría reducirse a una línea de código, pero creo que esto es más legible. Para obtener la información del álbum, utilice:

[facebook requestWithGraphPath:album_id andDelegate:delegate];

Para obtener todas las fotos de un álbum, utilice:

[facebook requestWithGraphPath:[NSString stringWithFormat:@"%@/photos", album_id] andDelegate:delegate];

Espero que esto pueda ayudar a alguién.

Respondido 14 ago 12, 19:08

Esta solución parece frágil, pero no conozco otra alternativa. Realmente es una pena que la foto en sí no tenga conexión con su álbum. - Mike Hornblade

En estos días, el álbum es un campo al que puede acceder desde el objeto de la foto, es decir,? Fields = album, use el Graph API Explorer en developers.facebook.com/tools/explorer para ver más campos que puede agregar. - Steve McGill

que es facebook aqui? - Rushang Prajapati

Jimmy SawczukLa respuesta es cercana, pero no funciona porque las columnas de la tabla FQL Photo aid y pid son ID de API Rest / FQL, no ID de API Graph.

Afortunadamente el object_id y album_object_id las columnas de esta tabla son indexables (contrario a la documentación) así que esto debería darte los ID de Rest / FQL y Graph para el álbum:

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

En general object_id Los campos en las respuestas de la API Rest / FQL son el ID de la API Graph (excepto para las notificaciones de fotos, donde es el ID de Rest / FQL).

Re HonkyHonkrespuesta: no todas las fotos link las URL tienen un set parámetro; en este caso, creo que puede encontrar la identificación de la foto de la API Rest / FQL de sus otros parámetros, y luego usar la API Rest / FQL para obtener la identificación del álbum:

Sería de gran ayuda si Facebook pudiera documentar algo sobre los dos tipos de identificadores. Además, el esquema de fotos de la API Graph debe incluir la identificación de la API Graph del álbum.

Respondido 27 Oct 11, 10:10

La set parámetro de link, si está presente, contiene el ID de álbum de Graph API. - Richard Barnett

También he visto algunos link URL donde set es de la forma at.${ALBUMID}.${REST}. Vaya, esto es complejo. - Richard Barnett

Esta es la forma fácil de conseguirlo:

Respondido 05 Oct 12, 20:10

Si te entiendo correctamente, tienes la identificación con foto, pero necesitas la identificación del álbum. Podrías intentar usar que el photo Tabla FQL con la siguiente consulta:

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

Respondido 12 Jul 13, 14:07

¿Estás subiendo tu foto al álbum "Fotos de pared" del usuario? Si es así, no estoy seguro de que pertenezca a ningún álbum que puedas consultar; es algo extraño. Además, ¿tiene el user_photos ¿permiso? - Jimmy Sawczuk

No, la foto se carga en un álbum creado por la aplicación. Sí, se ha establecido el permiso user_photos. - joseym

Manera larga, torpe, pero teóricamente válida: http://graph.facebook.com/userid/albumsobtendrá una lista de todos los álbumes que el usuario le permite ver, luego podrá buscar los objetos del álbum (api aquí) for created_times que coincidan con la hora en que creó el álbum, que puede almacenar cuando crea el álbum.

Es casi seguro que esta es una forma horrible de hacerlo, pero debería funcionar.

contestado el 16 de mayo de 11 a las 23:05

Sí, no es exactamente elegante, pero no tengo muchas ganas de encontrar una solución mejor ... Seguiré buscando y si sigo con las manos vacías, le daré una oportunidad. - joseym

La solución de Richard Barnett funciona bien para mí, la uso como una consulta FQL a través de la API Graph para obtener una respuesta JSON como lo haría con cualquier otra consulta de la API Graph:

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

Esto devuelve:

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

Luego puede acceder a la ID del álbum usando:

<?php

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

?>

Esta es la solución más limpia que he encontrado, ya que Facebook cambia constantemente el formato de las URL de sus fotos y álbumes, por lo que analizarlos con RegEx no funcionará como una solución a largo plazo.

Respondido 12 Jul 13, 14:07

Terminé usando la API REST heredada ya que la ID del álbum se pasa con el enlace a la imagen en la respuesta del servidor. Luego usé una expresión regular para sacar la identificación.

No es la mejor solución y no la recomendaría, pero creo que es mejor que agregar otras solicitudes de servidor al código.

contestado el 18 de mayo de 11 a las 18:05

¿Puede dar algunos detalles sobre cómo lo hizo exactamente y con qué métodos? Estoy mirando la respuesta a la solicitud de graph.facebook.com de una identificación con foto, y no veo nada en ninguna de las URL que sea la identificación del álbum de donde vino. - Slacy

Sí, así es como tuve que dejar de usar Graph y usar REST - joseym

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

Respondido 12 Jul 13, 14:07

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

Respondido 12 Jul 13, 14:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.