Обновить открытое графическое изображение при совместном использовании через Facebook [дубликат]

, если вы находитесь в узле:

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

41
задан Felipe Brahm 23 August 2012 в 22:57
поделиться

10 ответов

Метаданные страницы - это не то, что должно меняться очень часто, но вы можете вручную очистить кеш, перейдя в инструмент 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; аутентификация пользователя не требуется.

72
ответ дан andrewtweber 4 September 2018 в 10:01
поделиться

Изменения в 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

Не

1
ответ дан Dmitry Merkushin 4 September 2018 в 10:01
поделиться

Если вы используете 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 думает о повторных или автоматизированных способах использования этого метода, поэтому, вероятно, он будет разумным и консервативным в использовании.

5
ответ дан Dtipson 4 September 2018 в 10:01
поделиться

Вот мое решение 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: на странице, которая была очищена.

0
ответ дан Jesse Novotny 4 September 2018 в 10:01
поделиться

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

0
ответ дан noun 4 September 2018 в 10:01
поделиться

Альтернативное решение из обновления узла 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/

2
ответ дан rawdesk.be 4 September 2018 в 10:01
поделиться

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

  1. http://developers.facebook.com/tools/debug
  2. Введите URL-адрес следующего по fbrefresh = CAN_BE_ANYTHING

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

-1
ответ дан samip jain 4 September 2018 в 10:01
поделиться

Если вы хотите сделать это на 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);
}
12
ответ дан Shawn Conn 4 September 2018 в 10:01
поделиться

Это простая реализация 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);
           }
    });
5
ответ дан tcrady 4 September 2018 в 10:01
поделиться

Решение с 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();
   }
?>
0
ответ дан Westy92 4 September 2018 в 10:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: