, если вы находитесь в узле:
https://github.com/googleapis/nodejs-firestore/blob/master/src/index.js#L533
/**
* Retrieves multiple documents from Firestore.
*
* @param {...DocumentReference} documents - The document references
* to receive.
* @returns {Promise>} A Promise that
* contains an array with the resulting document snapshots.
*
* @example
* let documentRef1 = firestore.doc('col/doc1');
* let documentRef2 = firestore.doc('col/doc2');
*
* firestore.getAll(documentRef1, documentRef2).then(docs => {
* console.log(`First document: ${JSON.stringify(docs[0])}`);
* console.log(`Second document: ${JSON.stringify(docs[1])}`);
* });
*/
Метаданные страницы - это не то, что должно меняться очень часто, но вы можете вручную очистить кеш, перейдя в инструмент Debug от Google и введя 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; аутентификация пользователя не требуется.
Изменения в Graph API v2.10:
. При создании запроса GET по URL-адресу, который мы еще не очищали, мы также опустим поле og_object. Чтобы вызвать очистку и заполнить объект og_object, введите POST / {url}? Scrape = true. После того, как scraped, og_object останется кешированным и будет возвращен во все будущие запросы на чтение.
Нам понадобится токен доступа для этих запросов во всех версиях Graph API, начиная с 16 октября 2017 года.
< / blockquote>Источник: Представляем Graph API v2.10
Итак, теперь мы должны использовать POST-метод для выскабливания:
POST /{url}?scrape=true
Не
Если вы используете 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;
}
then:
scrapeLink([SOME-URL]).done(function(){
//now the link should be scraped/rescraped and ready to use
});
Обратите внимание, что скребок может занять некоторое время, чтобы завершить, поэтому нет гарантий, что он будет быстрым. Я также не знаю, что Facebook думает о повторных или автоматизированных способах использования этого метода, поэтому, вероятно, он будет разумным и консервативным в использовании.
Вот мое решение 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
должно быть хэшем атрибутов, полученных из метатег og:
на странице, которая была очищена.
Я автор CLI объекта CLI , интерфейс командной строки, написанный на PHP, нацелен на обновление кеша Facebook для одного URL-адреса или нескольких URL-адресов, используя в качестве ввода текст файл. Пакет также доступен на Packagist и может быть установлен с помощью Composer .
Альтернативное решение из обновления узла Drupal с использованием curl может быть примерно таким:
<?php
function your_module_node_postsave($node) {
if($node->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 (), которая не является стандартным ядром Drupal. Мне пришлось использовать www.drupal.org/project/hook_post_action , чтобы получить эту последнюю попытку скремблирования в facebook последними внесенными изменениями в узел, поскольку hook_node_update () не запускается после обновления баз данных.
Для этого требуется Facebook теперь токен доступа. Инструкции по приобретению токена можно найти здесь: https://smashballoon.com/custom-facebook-feed/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);
}
Это простая реализация 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);
}
});
Решение с SDK PHP Facebook:
<?php
try {
$params = [
'id' => '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();
}
?>