2014-07-09 9 views
5

Wenn ich ein Foto von Facebook verlangen, einige Urls wie diese sind:Facebook-Foto erhalten Parameter und Foto für zur Verfügung, wie lange

https://{hidden_for_privacy}79141548_n.jpg 

Und andere sind wie folgt aus:

https://{hidden_for_privacy}23364315_n.jpg?oh=c566c56ca9fd7eb1ed5d8bfca4255e84&oe=544AF123&__gda__=1414682395_6d2cb778f5b2c857d1be1c781e81cdfa 

Die zweite hat ein paar zusätzliche GET Parameter (oh, oe und __gda_ _ (Platz ist da, um Fett zu verhindern).

Wenn diese Parameter vorhanden sind, wird das Bild nach ein paar Tagen ungültig sein, weil diese Werte unterschiedlich sein werden (Sie ca n Überprüfen Sie dies, indem Sie einen neuen API-Aufruf ausführen, um das gleiche Foto zu erhalten.

Was bedeuten diese Parameter und wie hängen sie mit dem maximalen Zeitrahmen zusammen?

Danke!

+0

Haben Sie etwas dazu gefunden? Ich hatte gerade das gleiche Problem. – cappie013

+0

Es gibt keine echte Lösung. Was wir getan haben, um dieses Problem zu umgehen. Um das Bild innerhalb von 24 Stunden herunterzuladen und woanders zu speichern. – Luc

Antwort

-1

Ich fand die Antwort (endlich). Der Punkt ist, dass die Fotos nicht öffentlich sind. Wenn Sie ein privates Foto über die API anfordern, fügen sie eine Abfragezeichenfolge hinzu, so dass die URL nach einiger Zeit nicht mehr gültig ist. Daher ist das Foto immer noch etwas "privat". Die Funktion ist verständlich und es gibt keine andere Problemumgehung als das Herunterladen des Bildes an einen anderen Ort.

+0

Für die Neugierigen, wo hast du deine Antwort gefunden? Ich nehme natürlich nirgends in der FB-Graph-Dokumentation an. –

+0

Wissen Sie vielleicht, wie diese Zeitspanne "nach einiger Zeit" definiert ist? Ich möchte eine Aktualisierungsfunktion zum Aktualisieren der Bild-URLs erstellen – xetra11

1

Ich denke, sie sind Facebook Bild Session-Keys und sie produziert von Facebook auf jedem Bild zeigt. So denken fb-Server, dass die Anfrage nach einem Bild von Facebook selbst erlaubt und bekannt ist.

Entschuldigung für mein schlechtes Englisch und meinen oberflächlichen Kommentar, aber ich denke, die Lösung dieses Problems könnte darin bestehen, eine URL für eine neue Bildsitzung zu holen, wenn die alte abgelaufen ist. Oder ich kenne Ihr gesamtes System nicht, aber vielleicht können Sie sich direkt mit dem Mechanismus zum Zuweisen von Tasten für Bilder von Facebook verbinden und alle neuen Links erhalten.

Wenn ich recht habe über diese Parameter 'arbeiten Mechanismen Zwecke, ich denke, es gibt keine zweite Lösung. Sorry für mein schlechtes Englisch wieder.

9

Ich kenne etwas Geschichte und seinen Zweck.

Ursprünglich url facebook Bild so aussehen
https: // {* snipped *} /XXXXXXXXXXX_b.jpg
aber es gibt mehr als auf die Größe des Bildes zur Verfügung, damit die Menschen haben Zugriff auf ein Bild einfach Suffix _b ersetzen mit _n
(So, jetzt ist es https: // {* snipped *} /XXXXXXXXXXX_n.jpg)
größere Version des Bildes zuzugreifen (falls vorhanden).

Einige Zeit später implementiert Facebook zentrales Bildsystem, das dynamisch zuschneiden und die Größe Bild on the fly auf Anfrage.
Die URL von Facebook zu diesem Zeitpunkt vorgesehen ist, kann wie folgt aussehen:
https: // {* snipped *} .fbcdn.net/hprofile-xxx1/v/t1.0-1/p32x32/12345678_123412341234123_4123412341234123412_n.jpg
Und wenn Leute die URL sehen, entsteht ihre Neugier.

versuchen Lassen Sie einige Parameter aus der URL entfernen.
https: // {* gekappt *} .fbcdn.net/hprofile-xxx1/v/12345678_123412341234123_4123412341234123412_n.jpg
Und was sie bekommen ist die größte und vollständigste Version des Bildes, das sie möglicherweise von Facebook Server bekommen können.

Diese Methode hat lange funktioniert.
Wenn Leute Bild in ihrer E-Mail sehen (meistens Profilbild), können sie eine vollständige Version des Bildes erhalten, ohne sich sogar bei Facebook anzumelden.
Es funktionierte überall mit privaten Profilbild.

Die schnellste und günstigste Lösung für Facebook ist, den Anfragepfad mit einem Signaturalgorithmus zu signieren.
Ich denke, sie verwenden HMAC als Kernalgorithmus und leiten HMAC-Eingabe von verschiedenen Quellen einschließlich Anfragepfad.
Dies stellt sicher, dass die einzige Partei, die eine gültige URL erzeugen kann, derjenige ist, der einen HMAC-Schlüssel hat. (vermutlich nur facebook)

Jetzt ist das alte Problem behoben, das Sie nicht mehr verwenden können, aber es gibt mehr als ein Problem, das durch Hinzufügen von MAC behoben werden kann.

Es ist Ungültigmachung des Zugriffs auf Bilder.
Lassen Sie sagen, dass die Leute einmal ihr Foto veröffentlichen (jetzt können andere sowohl einen gültigen Anfragepfad als auch eine signierte Unterschrift von Facebook haben) und später ändern sie ihre Meinung und machen das Foto privat.

Allerdings können Personen mit gültiger URL und Signatur das Bild immer noch vom Facebook-Server abrufen.
Um dieses Problem mit super günstigen Ressourcen zu lösen, berücksichtigt sie, dass sie bereits HMAC-Berechnung implementiert.
(Und um die Tatsache zu verdecken, dass Facebook nicht wirklich Ihr Bild von ihrem System löscht, wenn Sie es löschen.)
Sie beschlossen, den vom Zeitstempel abgeleiteten Wert in den Eingang von HMAC zu mischen.
(Siehe RFC-6238 für ähnliche Verwendung)

So ist in regelmäßigen Abständen Signaturaktualisierung von Facebook erforderlich, um Zugriff auf Foto zu erhalten.
Dies löste das letzte Problem mit sehr billigen zusätzlichen Ressourcen.

Und hier haben Sie es.
Einige der Geschichte und Begründung hinter den Parametern von Facebook.

Ich bin mir sicher, dass es kein offizielles Dokument über den Zeitrahmen gibt, aber es sollte nicht schwierig sein, selbst zu experimentieren, da Sie jetzt wissen, dass der Wert des Zeitrahmens fest und vorhersehbar ist.

Verwandte Themen