it-swarm.com.de

Wie bekomme ich eine große Foto-URL in einem API-Aufruf?

Ich möchte sofort große Fotos in der Feedansicht meiner Facebook-App anzeigen. Ist es möglich, die große Foto-Quell-URL mit einem API-Aufruf aus einem Stream/Feed abzurufen? Die Foto-ID wird im Stream/Feed zurückgegeben, und Sie können diese Foto-ID natürlich in einem zusätzlichen FQL- oder Diagramm-API-Aufruf angeben, um alle Informationen zu diesem Foto abzurufen. Gibt es eine Möglichkeit, mit mehreren Abfragen oder Batch-Aufrufen eine größere Foto-URL-URL mit einer API-Roundtrip zu erhalten?

39
John Wright

Ich habe dies nicht mit Stream-/Feed-Fotos versucht, aber der allgemein akzeptierte Weg, dies zu tun, ist:

http://graph.facebook.com/{ID of object}/picture

Wenn Sie die "große" Version wünschen, würden Sie Folgendes tun:

http://graph.facebook.com/{ID of object}/picture?type=large

Ich bin nicht 100% sicher, ob dies für ein aktuelles Foto funktionieren würde (anstelle eines Benutzerprofils oder eines Seitenprofils), aber ich habe eine Ahnung, dass dies der Fall ist - der einzige Nachteil ist, dass Sie offensichtlich einen angemeldeten Benutzer haben ist berechtigt, das Foto anzusehen (sofern es nicht öffentlich ist).

85
streetlogics

Wenn jemand darauf achtet und nicht groß genug ist, habe ich andere Lösungen gefunden.

Typ large ist irgendwie klein (fast 200px). Sie können ein größeres Bild erhalten, indem Sie beispielsweise ?width=1000 oder ?height=1000 hinzufügen. Facebook gibt ein Bild zurück, das der angegebenen Größe am nächsten kommt und das Seitenverhältnis beibehält. Wenn Sie beide Größen wie ?width=1000&height=1000 übergeben, schneidet Facebook das Bild auf die angegebenen Abmessungen (in diesem Fall quadratisch).

31
Lucas

Verwenden Sie die Facebook-Benutzer-ID (Oject-ID), um das Bild zu erhalten.

https://graph.facebook.com/173xxxx8635/picture?type=large&redirect=false

die JSON-Daten mit Bild-URL zurückgibt.

{
   "data": {
      "is_silhouette": false,
      "url": "https://fbcdn-profile-a.akamaihd.net/xxx/xyz/1cc066a2cae3f301d"
   }
}
2
Madan Sapkota

Als ich dieses Problem hatte, stellte sich heraus, dass es sich um das Bild handelte, das ich herunterlud, und nicht um die Größe, die ich eingestellt hatte.

Wenn ich zum Beispiel alle meine Fotos mit einer Anfrage von heruntergeladen habe

[FBRequestConnection startWithGraphPath:@"/me/photos?fields=created_time,name,picture&type=tagged" parameters:nil HTTPMethod:@"GET" completionHandler:^(FBRequestConnection * connection, id result, NSError *error) {

    NSDictionary * userData = (NSDictionary *)result;
    NSMutableArray * array = [[NSMutableArray alloc] initWithArray:userData[@"data"]];

    for (NSDictionary * dict in eventsToAdd) {

        UIImage * image = dict[@"picture"] 
    }
}];

Ich benutze die Wörterbuchschlüssel-Suche "Bild", wie ich das Bild haben möchte.

Dies führt jedoch zu einem Bild von geringerer Qualität, als wenn ich bei dieser Suche nach "Quelle" gesucht hätte:

[FBRequestConnection startWithGraphPath:@"/me/photos?fields=created_time,name,source&type=tagged" parameters:nil HTTPMethod:@"GET" completionHandler:^(FBRequestConnection * connection, id result, NSError *error) {

    NSDictionary * userData = (NSDictionary *)result;
    NSMutableArray * array = [[NSMutableArray alloc] initWithArray:userData[@"data"]];

    for (NSDictionary * dict in eventsToAdd) {

        UIImage * image = dict[@"source"] 
    }
}];

Wenn Sie den Facebook API Explorer aufrufen und nach Fotos suchen und dann auf die Bild- und Quell-JPG-Links klicken, können Sie den Unterschied in Größe und Qualität erkennen.

Seit dem Ändern dieser Methode ist es mir gelungen, die Typparameter zu entfernen, da dies anscheinend nicht anders ist. 

Hinweis: Ich verwende ein iPhone und kein iPad oder einen größeren Bildschirm, daher weiß ich nicht, wie sich dies auf größere Bildschirme auswirkt.

1
simon_smiley

Ein guter Trick mit der neuen API ist, das pic_cover-Feld aus der Ereignistabelle zu holen und es entsprechend der gewünschten Größe zu verarbeiten 

1
user1445685

Die Antwort von @streetlogics funktioniert gut, aber nur für Bilder, die {object_id} haben.

http://graph.facebook.com/{object_id}/picture

Ich wollte aber auch große Bilder für die freigegebenen Links des Feeds, die manchmal {object_id} nicht enthalten. Ich stellte schließlich fest, dass die {picture}-Thumbnail-URL die codierte URL für das große Bild der ursprünglichen Site enthält: 

https://external.xx.fbcdn.net/safe_image.php?d=AQBe9UvGd0vPbAHP&w=130&h=130&url=http%3A%2F%2Fskift.com%2Fwp-content%2Fuploads%2F2015%2F12%2Fpollution.jpg&cfs=1

-> enthält ->

http://skift.com/wp-content/uploads/2015/12/pollution.jpg

Also habe ich eine Schleife gemacht, die nach {object_id} sucht. Falls nicht vorhanden, wird die URL aus {picture} extrahiert:

if(isset($post['object_id'])) {
    echo "http://graph.facebook.com/".$post['object_id']."/picture";
    }
    elseif(isset($post['picture'])) {
        echo urldecode(preg_replace('/&cfs.*/', '', preg_replace('/.*url=/', '', $post['picture'])));
    } 
    else {
        echo "no_large_image";
}
0
williamtx