Есть ли API, чтобы заставить Facebook снова очистить страницу?

Я знаю, что вы можете принудительно обновить кеш страницы, введя URL-адрес средства отладчика Facebook, когда он был зарегистрирован в качестве администратора для этого приложения / страницы: https://developers.facebook.com/tools/debug

Но мне нужен способ автоматического вызова конечной точки API или что-то из нашего внутреннего приложения, когда кто-либо из нашего отдела продаж обновляет основной образ одной из наших страниц . Невозможно попросить тысячи продавцов войти в систему в качестве администратора и вручную обновить кеш страницы, когда они будут обновлять одно из описания или изображения нашего элемента.

Мы не можем позволить себе ждать 24 часа, чтобы Facebook обновил свой кеш, потому что мы получаем ежедневные жалобы от наших клиентов, когда они не видят изменений, которые появляются, как только мы меняем его на нашей стороне.

Метаданные страницы – это не то, что должно меняться очень часто, но вы можете вручную очистить кеш, перейдя в инструмент Debug от Facebook и введя URL-адрес, который вы хотите очистить

Для этого также существует API, который работает для любого объекта OG :

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

Теперь требуется access_token. Это может быть приложение или страница access_token; аутентификация пользователя не требуется.

Если вы хотите сделать это на PHP в ожидании ответа , следующая функция сделает это:

 //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); } 

Если вы используете javascript sdk, версия, которую вы хотите использовать, это

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

Мне нравятся обещания, поэтому альтернативная версия, использующая jQuery Deferreds, может быть

 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; } 

тогда:

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

Обратите внимание, что скребок может занимать различное количество времени для завершения, поэтому никаких гарантий, что он будет быстрым. Я также не знаю, что Facebook думает о повторных или автоматизированных способах использования этого метода, поэтому, вероятно, он будет разумным и консервативным в использовании.

Это простая реализация ajax. Поместите это на любую страницу, на которую вы хотите мгновенно очистить facebook;

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

Альтернативное решение из обновления узла Drupal с использованием curl может быть примерно таким:

 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); } } 

Обратите внимание на реализацию hook_node_postsave (), которая не является стандартным kernelм Drupal. Мне пришлось использовать http://www.drupal.org/project/hook_post_action для того, чтобы получить последние изменения в файле facebook scrape pickup, поскольку hook_node_update () не запускается после обновления баз данных.

Для этого Facebook требует теперь токена доступа. Инструкции по приобретению токена можно найти здесь: https://smashballoon.com/custom-facebook-feed/access-token/

В Graph API v2.10 есть изменения:

Когда вы делаете запрос GET по URL-адресу, который мы еще не очищали, мы также опустим поле og_object. Чтобы вызвать очистку и заполнить объект og_object, введите POST / {url}? Scrape = true. После очистки, og_object останется кешированным и будет возвращен во все будущие запросы на чтение.

Нам потребуется токен доступа для этих запросов во всех версиях API Graph, начиная с 16 октября 2017 года.

Источник: Введение в Graph API v2.10

Итак, теперь мы должны использовать POST-метод для выскабливания:

POST /{url}?scrape=true

Не

Решение с SDK PHP Facebook:

  '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(); } ?> 

Я являюсь автором CLI Facebook Object Debugger CLI , интерфейса командной строки, написанного на PHP, для обновления кеша Facebook для одного URL-адреса или множества URL-адресов, использующих в качестве текстового файла. Пакет также доступен на Packagist и может быть установлен с использованием Composer .

Вот мое решение Ruby с использованием Koala gem и 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 должен быть hashем атрибутов, полученных из тегов og: met на странице, которая была очищена.

Я столкнулся с этой же проблемой. Существует простой способ очистки кеша.

  1. http://developers.facebook.com/tools/debug
  2. Введите URL-адрес, указанный fbrefresh = CAN_BE_ANYTHING

Примеры: http://www.example.com?fbrefresh=CAN_BE_ANYTHING

  • Почему размер кеша L1 меньше, чем размер кэша L2 на большинстве процессоров?
  • Варианты кеширования / заметок / hashирования в R
  • Когда Asp.Net удаляет устаревшие элементы кэша?
  • MemoryCache Empty: возвращает null после установки
  • Отключение кеширования браузеров для всех браузеров из ASP.NET
  • Chrome не кэширует изображения / js / css
  • Почему значения кеширования classа Integer в диапазоне от -128 до 127?
  • Что такое __pycache__?
  • Как хранить данные в кеше для повторного использования?
  • Борьба с кешированием на стороне клиента в Django
  • Очистить кеш запросов MySQL без перезапуска сервера
  • Interesting Posts

    Как ASP.NET многопоточен?

    Таблица Excel, вставляющая старую формулу в новые строки. Как я могу вернуться к новой формуле?

    Как я могу создать jQuery UI ‘draggable ()’ div, перетаскиваемый для сенсорного экрана?

    Почему компиляторы C и C ++ допускают длину массива в сигнатурах функций, когда они никогда не применяются?

    Инициализация внутреннего classа с помощью частного конструктора

    Автоматическое соединение HTTPS / redirect с node.js / express

    Включение отсутствующих значений в таблицу () приводит к R

    Проверка файла XML с использованием нескольких схемных определений

    Выполните еще одну банку в программе java

    Создание линейных диаграмм, чтобы линия проходила через все точки данных

    Как лучше всего отключить предупреждение о неиспользуемых переменных?

    Как получить часть файла после строки, которая соответствует выражению grep? (первое совпадение)

    Android: Есть ли в любом случае, чтобы получить емкость аккумулятора в устройстве?

    Android Studio не показывает предварительный просмотр макета

    Как округлить целое число до сотен?

    Давайте будем гением компьютера.