it-swarm.dev

Apakah ada API untuk memaksa Facebook untuk mengorek halaman lagi?

Saya sadar Anda dapat memaksa memperbarui cache halaman dengan memasukkan URL pada alat debugger Facebook saat login sebagai admin untuk aplikasi/halaman: https://developers.facebook.com/tools/debug

Tapi yang saya butuhkan adalah cara untuk secara otomatis memanggil titik akhir API atau sesuatu dari aplikasi internal kami setiap kali seseorang dari departemen Penjualan kami memperbarui gambar utama dari salah satu halaman kami. Ini bukan opsi untuk meminta ribuan orang penjualan untuk masuk sebagai admin dan memperbarui cache halaman secara manual setiap kali mereka memperbarui salah satu deskripsi atau gambar item kami.

Kami tidak dapat menunggu 24 jam sampai Facebook memperbarui cache-nya karena kami mendapat keluhan setiap hari dari klien kami setiap kali mereka tidak melihat perubahan muncul segera setelah kami mengubahnya di pihak kami.

42
Felipe Brahm

Metadata halaman bukanlah hal yang harus sering diubah, tetapi Anda dapat menghapus cache secara manual dengan membuka Alat Debug Facebook dan memasukkan URL yang ingin Anda gesek

Ada juga API untuk melakukan ini, yang berfungsi untuk objek OG :

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

Diperlukan access_token. Ini bisa berupa aplikasi atau halaman access_token; tidak diperlukan otentikasi pengguna.

74
Igy

Jika Anda ingin melakukan ini di PHP di tanpa menunggu balasan , fungsi berikut akan melakukan ini:

//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

Ini adalah implementasi ajax sederhana. Letakkan ini di halaman mana saja yang Anda ingin facebook untuk segera mengikis;

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

Jika Anda menggunakan javascript sdk, versi yang ingin Anda gunakan adalah

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

Saya kebetulan suka janji-janji, jadi versi alternatif menggunakan jQuery Deferreds mungkin

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

kemudian:

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

Perhatikan bahwa pengikis dapat menghabiskan banyak waktu untuk menyelesaikannya, jadi tidak ada jaminan bahwa pengikis akan cepat. Saya juga tidak tahu apa yang dipikirkan Facebook tentang penggunaan berulang atau otomatis dari metode ini, jadi mungkin lebih bijaksana dan konservatif untuk menggunakannya.

5
Dtipson

Solusi alternatif dari dalam pembaruan simpul Drupal menggunakan curl bisa berupa ini:

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

Perhatikan implementasi hook_node_postsave () yang bukan merupakan standar inti Drupal yang didukung . Saya harus menggunakan www.drupal.org/project/hook_post_action untuk mendapatkan pickup facebook scrape ini perubahan terakhir dilakukan pada node, karena hook_node_update () tidak dipicu setelah database diperbarui.

Facebook sekarang memerlukan token akses untuk menyelesaikan ini . Pedoman untuk memperoleh token dapat ditemukan di sini: https://smashballoon.com/custom-facebook-feed/access-token/

2
rawdesk.be

Ada perubahan pada Graph API v2.10:

Saat membuat permintaan GET terhadap URL yang belum pernah kami abaikan, kami juga akan menghilangkan bidang og_object. Untuk memicu gesekan dan mengisi og_object, terbitkan POST/{url}? Scrape = true. Setelah dihapus, og_object akan tetap di-cache dan dikembalikan pada semua permintaan baca di masa mendatang.

Kami akan meminta token akses untuk permintaan ini di semua versi Graph API mulai 16 Oktober 2017.

Sumber: Memperkenalkan Graph API v2.10

Jadi sekarang kita harus menggunakan metode POST untuk mengikis:

POST /{url}?scrape=true

Tidak

1
merkushin

Solusi dengan Facebook SDK PHP:

<?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

Saya penulis Facebook Object Debugger CLI , antarmuka baris perintah yang ditulis dalam PHP, bertujuan untuk menyegarkan kembali cache Facebook untuk satu URL atau sekelompok URL yang digunakan sebagai input file teks. Paket juga tersedia di Packagist dan dapat diinstal menggunakan Komposer .

0
noun

Inilah solusi Ruby saya menggunakan Koala gem dan 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 harus berupa hash atribut yang diambil dari tag meta og: pada halaman yang dikorek. 

0
Jesse Novotny