2013-05-03 15 views
14

L'immagine: il sito Web è stato modificato di recente. Il sito contiene più di 100 pagine, ognuna contenente la propria immagine: immagine. Come posso chiedere o forzare Facebook a riesaminare tutte le pagine, in modo che l'immagine venga aggiornata? Utilizzare lo strumento di debugger di Facebook sarà un compito troppo noioso. Fino a quando Facebook non riesaminerà il sito, non potrò inviare la raccolta per l'app.Chiedi a facebook di riscrivere l'URL

risposta

12

Hai due alternative qui, nella tua situazione

  1. Come per loop risposta di ysrb attraverso la lista dei tuoi URL con l'Open Strumento grafico Debugger

  2. Oppure attendere pazientemente per 30 giorni fino a quando Facebook riproverà le pagine come indicato nella documentazione here

Perché e quando fa Facebook raschiare il mio sito web?

Facebook ha bisogno di racchiudere i collegamenti condivisi su Facebook per sapere quale collegamento visualizzare le informazioni di anteprima su Facebook.com o su Facebook per iOS e Android. Ciò accade ogni 30 giorni per garantire che le proprietà siano aggiornate. Anche la pagina collegata viene raschiata quando l'URL viene inserito nello strumento Debugger.

Facebook osserva le intestazioni della cache sui tuoi URL - guarderà "Scadenza" e "Controllo della cache" in ordine di preferenza. Tuttavia, anche se si specifica un tempo più lungo, Facebook rascherà la pagina ogni 30 giorni.

+0

grazie mille ..:) –

+3

@ChrisHoughton - https://developers.facebook.com/docs/plugins/faqs/#scraperinfo (al 2015.04.08) – changokun

+0

Questo non è più corretto. C'è un endpoint API che Doug e altri spiegano in un'altra risposta. –

1

Si può provare ad anello dalla lista di URL e fare

curl "http://developers.facebook.com/tools/debug/og/object?q=$url" 
+0

Ok. L'elenco esatto di URL è sconosciuto. Circa ora ci sono 310 url. Specificare manualmente ognuno di essi per il ciclo richiederà molto tempo e potremmo perdere qualche url a causa dell'errore humman –

+0

Devi avere una sorta di sitemap.xml o qualcosa del genere. Anche se si tratta di file statici, puoi elencarlo e creare l'url – ysrb

+3

Testato: questo metodo non funziona. – GTCrais

31

È possibile forzare una ri-raschiare via API, come descritto qui: https://developers.facebook.com/docs/opengraph/using-objects/#update:

POST /?id={object-instance-id or object-url}&scrape=true 

(Ma se non si dispone di un vero e proprio elenco degli URL interessati, questo è un pò discutibile. poi si può solo aspettare fino a quando non avviene automaticamente, immagino.)

+0

Questa è ottima. La risposta include anche i dati aggiornati dell'OR, quindi puoi controllarlo tu stesso durante lo scraping – bloudermilk

+0

Questa è la vera risposta e dovrebbe essere il prescelto, peccato che l'altro sia, dal momento che non è nemmeno una risposta – vsync

+2

Questa è sicuramente la risposta corretta POSTing /? id = & scrape = true a https://graph.facebook.com/ imporrà un re-scrap dei tag og per hte url Si deve ricordare che questa deve essere una richiesta POST, non una richiesta GET, altrimenti si ottiene solo il numero di condivisioni e se si aggiunge un altro parametro chiamato callback = , puoi farlo tramite una richiesta JSONP AJAX all'interno del browser e non è necessario legare il tuo server. –

5
 $config = array(
      "appId" => 'APP_ID', 
      "secret" => 'APP_SECRET'); 

     $fb = new Facebook($config); 
     $r=$fb->api('/','POST',array(
      'id'=>PAGE_URL, 
      'scrape'=>'true' 
     )); 
3

Si noti che Facebook richiede che i parametri vengano passati tramite POST. Facebook ignora semplicemente le richieste GET.

Ecco il codice in C#.

HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(
    "https://graph.facebook.com/?id=" 
    + HttpUtility.UrlEncode("http://www.example.com/index.html") 
    + "&scrape=true"); 
httpRequest.Method = "POST"; 
using (HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse()) 
{ 
    using (Stream responsestream = httpResponse.GetResponseStream()) 
    { 
     if (responsestream != null) 
     { 
      using (StreamReader bodyreader = new StreamReader(responsestream)) 
      { 
       string fbResp = bodyreader.ReadToEnd(); 
      } 
     } 
    } 
} 
Problemi correlati