48

そのアプリ/ページの管理者としてログインしているときにFacebookのデバッガツールにURLを入力することで、ページのキャッシュを強制的に更新できることを認識しています: https ://developers.facebook.com/tools/debug

しかし、私が必要としているのは、営業部門の誰かがページの1つのメイン画像を更新するたびに、内部アプリからAPIエンドポイントなどを自動的に呼び出す方法です。何千人もの営業担当者に管理者としてログインし、アイテムの説明や画像の1つを更新するたびに、ページのキャッシュを手動で更新するように依頼することはできません。

Facebookがキャッシュを更新するのを24時間待つ余裕はありません。なぜなら、私たちの側で変更するとすぐに変更が表示されない場合はいつでも、クライアントから毎日苦情が寄せられているからです。

4

10 に答える 10

81

ページのメタデータは、頻繁に変更する必要のある種類のものではありませんが、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です。ユーザー認証は必要ありません。

于 2012-08-24T00:12:02.767 に答える
15

応答を待たずに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);
}
于 2015-10-02T21:55:39.387 に答える
5

javascript sdkを使用している場合、使用したいバージョンは次のとおりです。

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

私はたまたまpromiseが好きなので、jQueryDeferredsを使用した別のバージョンは

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がこのメソッドの繰り返しまたは自動化された使用法についてどのように考えているかもわからないので、それを使用することについては賢明で保守的であることがおそらく報われます。

于 2015-04-30T02:41:23.580 に答える
5

これは単純な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);
           }
    });
于 2017-01-31T19:10:15.997 に答える
2

curlを使用したDrupalノード更新内からの代替ソリューションは次のようになります。

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

標準のDrupalコアがサポートされていないhook_node_postsave()の実装に注意してください。データベースが更新された後にhook_node_update()がトリガーされないため、このfacebookスクレイプピックアップがノードに最後に変更を加えたようにするには、www.drupal.org / project/ hook_post_actionを使用する必要がありました。

Facebookは、これを実行するためにアクセストークンを必要とします。トークンを取得するためのガイドラインはここにあります: https ://smashballoon.com/custom-facebook-feed/access-token/

于 2017-01-22T13:10:34.353 に答える
1

私は、 PHPで記述されたコマンドラインインターフェイスであるFacebook Object Debugger CLIの作成者であり、テキストファイルを入力として使用して単一のURLまたは一連のURLのFacebookキャッシュを更新することを目的としています。このパッケージPackagistでも入手でき、 Composerを使用してインストールできます。

于 2017-03-31T00:09:58.970 に答える
1

GraphAPIv2.10に変更があります。

以前にスクレイプしたことのないURLに対してGETリクエストを行う場合は、og_objectフィールドも省略します。スクレイプをトリガーしてog_objectにデータを入力するには、POST / {url}?scrape=trueを発行します。スクレイプされると、og_objectはキャッシュされたままになり、今後のすべての読み取り要求で返されます。

2017年10月16日以降、GraphAPIのすべてのバージョンでこれらのリクエストにアクセストークンが必要になります。

出典:GraphAPIv2.10の紹介

したがって、スクレイピングにはPOSTメソッドを使用する必要があります。

POST /{url}?scrape=true

いいえ

于 2017-08-11T08:35:18.733 に答える
0

PHP Facebook SDKを使用したソリューション:

<?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();
   }
?>
于 2017-02-18T18:18:50.927 に答える
0

これがコアラの宝石とFacebookAPIv2.9を使用した私のRubyソリューションです

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

responseog:スクレイプされたページのメタタグから取得された属性のハッシュである必要があります。

于 2017-12-08T18:05:08.700 に答える
-1

私はこれと同じ問題に直面していました。キャッシュをクリアする簡単な方法があります。

  1. http://developers.facebook.com/tools/debug
  2. 次のURLをfbrefresh=CAN_BE_ANYTHINGで入力します

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

于 2016-07-19T08:31:04.837 に答える