2014-07-09 20 views
5

Quando richiedo una foto da Facebook, alcuni URL sono come questo:Facebook foto ottenere i parametri e le foto disponibili per quanto tempo

https://{hidden_for_privacy}79141548_n.jpg 

E gli altri sono come questo:

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

Il secondo ha alcuni parametri GET aggiuntivi (oh, oe e __gda_ _ (lo spazio è lì per evitare il grassetto.)

Quando questi parametri esistono, l'immagine non sarà valida dopo alcuni giorni perché quei valori saranno diversi (si ca n controlla questo facendo una nuova chiamata API per ottenere la stessa foto).

Cosa significano questi parametri e in che modo sono collegati al periodo di tempo massimo?

Grazie!

+0

Hai trovato qualcosa a riguardo? Ho appena avuto lo stesso problema. – cappie013

+0

Non esiste una soluzione reale. Cosa abbiamo fatto per aggirare questo problema. Per scaricare l'immagine entro 24 ore e conservarla altrove. – Luc

risposta

-1

Ho trovato la risposta (finalmente). Il punto è che le foto non sono pubbliche. Se richiedi una foto privata tramite l'API, aggiungono una stringa di query in modo che l'URL non sia più valido dopo un po 'di tempo. Pertanto la foto è ancora un po '"privata". La funzione è comprensibile e non c'è soluzione alternativa oltre al download dell'immagine in qualche altro posto.

+0

Per i curiosi, dove hai trovato la tua risposta? Presumo da nessuna parte nella documentazione del grafico FB, ovviamente. –

+0

Sai forse come viene definito questo intervallo "dopo un po 'di tempo"? Mi piacerebbe creare una funzionalità di aggiornamento per aggiornare gli URL immagine – xetra11

1

Penso che siano le chiavi di sessione immagine di Facebook e hanno prodotto da Facebook su ogni immagine che mostra. Quindi i server fb ritengono che la richiesta di un'immagine sia consentita e conosciuta da Facebook stesso.

Ci scusiamo per il mio pessimo inglese e il mio commento superficiale, ma penso che la soluzione di questo problema potrebbe essere quella di recuperare un URL per una nuova sessione di immagine quando scadeva il vecchio. Oppure non conosco il tuo intero sistema, ma forse puoi collegarti direttamente al meccanismo di assegnare le chiavi per immagini di Facebook e ottenere tutti i link nuovi.

Se ho ragione a proposito dei meccanismi di funzionamento dei parametri, penso che non ci sia una seconda soluzione. Scusa ancora per il mio pessimo inglese.

9

Conosco un po 'di storia e il suo scopo.

Originariamente Facebook Immagine URL simile a questa
https: // {* snipped *} /XXXXXXXXXXX_b.jpg
ma ci sono più che sulla dimensione dell'immagine disponibili così le persone hanno accesso miniatura a può semplicemente sostituire il suffisso _b con _n
(Quindi ora è https: // {* snipped *} /XXXXXXXXXXX_n.jpg)
per accedere a una versione più grande dell'immagine (se disponibile).

Qualche tempo dopo facebook implementa un sistema di immagini centrale che può ritagliare e ridimensionare dinamicamente l'immagine al volo su richiesta.
l'URL fornito da Facebook a questo punto del tempo può apparire come segue:
https: // {* snipped *} .fbcdn.net/hProfile-xxx1/v/t1.0-1/p32x32/12345678_123412341234123_4123412341234123412_n.jpg
E quando la gente vede l'url, la loro curiosità sorge.

Proviamo a rimuovere alcuni parametri dall'URL.
https: // {* snipped *} .fbcdn.net/hProfile-xxx1/v/12345678_123412341234123_4123412341234123412_n.jpg
E ciò che ottengono è la versione più grande e completa delle immagini che possono eventualmente ottenere dal server di facebook.

Questo metodo funzionava da molto tempo.
Quando le persone vedono l'immagine nella loro e-mail (per la maggior parte foto del profilo) possono ottenere la versione completa dell'immagine senza nemmeno accedere a Facebook.
Stava funzionando ovunque includere foto profilo privato.

La soluzione rapida e la soluzione più economica per Facebook è quella di firmare il percorso della richiesta con un algoritmo di firma.
Immagino che utilizzino l'HMAC come algoritmo principale e derivino l'input HMAC da varie fonti incluso il percorso della richiesta.
Ciò garantirà che l'unica parte che può generare URL valido sia quella con la chiave HMAC. (presumibilmente solo facebook)

Ora il vecchio problema è stato risolto, non è più possibile utilizzarlo ma ci sono più di un problema che è possibile risolvere aggiungendo MAC.

È l'annullamento dell'accesso alle immagini.
Diciamo che le persone una volta pubblicano la loro foto (ora altre possono avere sia un percorso di richiesta valido che una firma firmata da facebook) e in seguito cambiano idea e rendono la foto privata.

Tuttavia, le persone con url e firma validi possono ancora recuperare l'immagine dal server di Facebook.
Per risolvere questo problema con una risorsa super economica, considerato che implementano già il calcolo HMAC.
(E per oscurare il fatto che Facebook non cancella effettivamente la tua immagine dal loro sistema quando la elimini.)
Hanno deciso di mescolare il valore derivato dal timestamp in input di HMAC.
(Vedi RFC-6238 per uso simile)

Quindi è necessario periodicamente l'aggiornamento di firma da Facebook per ottenere l'accesso alla foto.
Questo ha risolto quest'ultimo problema con una risorsa aggiuntiva molto economica.

E qui ce l'hai.
Alcuni di storia e logica dietro i parametri di Facebook.

Sono certo che non esiste un documento ufficiale sull'intervallo di tempo, ma non dovrebbe essere difficile fare qualche esperimento da soli considerato che ora si sa che il valore del frame temporale desiderato è fisso e prevedibile.