Existe-t-il une API pour forcer Facebook à retrouver une page?

Je sais que vous pouvez forcer la mise à jour du cache d’une page en saisissant l’URL sur l’outil de débogage de Facebook alors que vous étiez connecté en tant qu’administrateur pour cette application / cette page: https://developers.facebook.com/tools/debug

Mais ce dont j’ai besoin, c’est d’un moyen d’ appeler automatiquement un sharepoint terminaison API ou quelque chose de notre application interne chaque fois que quelqu’un de notre service commercial met à jour l’image principale d’une de nos pages . Ce n’est pas une option pour demander à des milliers de commerciaux de se connecter en tant qu’administrateur et de mettre à jour manuellement le cache d’une page chaque fois qu’ils mettent à jour une description ou une image de notre élément.

Nous ne pouvons pas nous permettre d’attendre 24 heures pour que Facebook mette à jour son cache car nous recevons des plaintes quotidiennes de nos clients dès qu’ils ne voient pas de changement apparaître dès que nous le changeons de notre côté.

Les métadonnées de page ne sont pas le genre de chose qui devrait changer très souvent, mais vous pouvez effacer manuellement le cache en accédant à l’outil de débogage de Facebook et en entrant l’URL que vous souhaitez utiliser.

Il existe également une API pour ce faire, qui fonctionne pour tout object OG :

curl -X POST \ -F "id={object-url OR object-id}" \ -F "scrape=true" \ -F "access_token={your access token}" \ "https://graph.facebook.com" 

Un access_token est maintenant requirejs. Cela peut être une application ou une page access_token; aucune authentification de l’utilisateur n’est requirejse.

Si vous souhaitez faire cela en PHP sans attendre une réponse , la fonction suivante le fera:

 //Provide a URL in $url to empty the OG cache function clear_open_graph_cache($url, $token) { $vars = array('id' => $url, 'scrape' => 'true', 'access_token' => $token); $body = http_build_query($vars); $fp = fsockopen('ssl://graph.facebook.com', 443); fwrite($fp, "POST / HTTP/1.1\r\n"); fwrite($fp, "Host: graph.facebook.com\r\n"); fwrite($fp, "Content-Type: application/x-www-form-urlencoded\r\n"); fwrite($fp, "Content-Length: ".strlen($body)."\r\n"); fwrite($fp, "Connection: close\r\n"); fwrite($fp, "\r\n"); fwrite($fp, $body); fclose($fp); } 

Si vous utilisez le sdk javascript, la version que vous souhaitez utiliser est

 FB.api('https://graph.facebook.com/', 'post', { id: [your-updated-or-new-link], scrape: true }, function(response) { //console.log('rescrape!',response); }); 

J’apprécie les promesses, donc une autre version utilisant jQuery Deferreds pourrait être

 function scrapeLink(url){ var masterdfd = $.Deferred(); FB.api('https://graph.facebook.com/', 'post', { id: [your-updated-or-new-link], scrape: true }, function(response) { if(!response || response.error){ masterdfd.reject(response); }else{ masterdfd.resolve(response); } }); return masterdfd; } 

puis:

 scrapeLink([SOME-URL]).done(function(){ //now the link should be scraped/rescraped and ready to use }); 

Notez que le racloir peut prendre un certain temps pour se terminer, alors rien ne garantit que ce sera rapide. Je ne sais pas non plus ce que Facebook pense des utilisations répétées ou automatisées de cette méthode. Il est donc probablement judicieux et prudent de l’utiliser.

Ceci est une simple implémentation ajax. Mettez ceci sur n’importe quelle page que vous voulez que Facebook gratte immédiatement;

 var url= "your url here"; $.ajax({ type: 'POST', url: 'https://graph.facebook.com?id='+url+'&scrape=true', success: function(data){ console.log(data); } }); 

Une solution alternative dans une mise à jour de noeud Drupal utilisant curl pourrait être quelque chose comme ceci:

 type == 'your_type') { $url = url('node/'.$node->nid,array('absolute' => TRUE)); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://graph.facebook.com/v1.0/?id='. urlencode($url). '&scrape=true'); $auth_header = 'Oauth yOUR-ACCESS-TOKEn'; curl_setopt($ch, CURLOPT_HTTPHEADER, array($auth_header)); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $r = curl_exec($ch); curl_close ($ch); } } 

Notez l’implémentation hook_node_postsave () qui n’est pas prise en charge par le kernel Drupal standard. J’ai dû utiliser http://www.drupal.org/project/hook_post_action pour obtenir les dernières modifications apscopes au nœud sur Facebook, car hook_node_update () n’est pas déclenché après la mise à jour des bases de données.

Facebook exige maintenant le jeton d’access pour que cela soit fait. Les directives pour acquérir un jeton peuvent être trouvées ici: https://smashballoon.com/custom-facebook-feed/access-token/

Il y a des changements dans l’API Graph v2.10:

Lorsque vous effectuez une requête GET sur une URL que nous n’avons pas encore récupérée, nous omettons également le champ og_object. Pour déclencher un raclage et remplir le og_object, émettez un POST / {url}? Scrape = true. Une fois gratté, le og_object rest en cache et est renvoyé sur toutes les futures demandes de lecture.

Nous aurons besoin d’un jeton d’access pour ces demandes dans toutes les versions de l’API Graph à compter du 16 octobre 2017.

Source: Présentation de Graph API v2.10

Alors maintenant, nous devrions utiliser la méthode POST pour gratter:

POST /{url}?scrape=true

ne pas

Une solution avec PHP Facebook SDK:

  'https://www.mysitetoscrape.com/page', 'scrape' => 'true', ]; $response = $fb->post('/', $params); print_r($response); } catch(\Facebook\Exceptions\FacebookResponseException $e) { // When Graph returns an error echo 'Graph returned an error: ' . $e->getMessage(); } catch(\Facebook\Exceptions\FacebookSDKException $e) { // When validation fails or other local issues echo 'Facebook SDK returned an error: ' . $e->getMessage(); } ?> 

Je suis l’auteur de Facebook Object Debugger CLI , une interface de ligne de commande écrite en PHP, visant à actualiser le cache Facebook pour une seule URL ou un groupe d’URL utilisant comme entrée un fichier texte. Le package est également disponible sur Packagist et peut être installé à l’aide de Composer .

Voici ma solution Ruby utilisant Koala gem et Facebook API v2.9

  api = Koala::Facebook::API.new(access_token) response = api.put_object(nil, nil, {scrape: true, id: "url-of-page-to-scrape"}) 

response doit être un hachage d’atsortingbuts récupérés à partir des balises méta og: sur la page qui a été analysée.

Je faisais face à ce même problème. Il existe un moyen simple d’effacer le cache.

  1. http://developers.facebook.com/tools/debug
  2. Entrez l’URL suivante par fbrefresh = CAN_BE_ANYTHING

Exemples: http://www.example.com?fbrefresh=CAN_BE_ANYTHING