18

最近更改了网站的 og:image。该站点包含 100 多个页面,每个页面都包含各自的 og:image。我如何要求或强制 Facebook 重新抓取所有页面,以便更新图像?使用 facebook 调试器工具将是一项繁琐的任务。在 facebook 重新抓取该网站之前,我将无法为该应用提交收藏。

4

6 回答 6

34

您可以通过 API 强制重新抓取,如下所述:https ://developers.facebook.com/docs/opengraph/using-objects/#update :

POST /?id={object-instance-id or object-url}&scrape=true

(但如果你没有受影响 URL 的真实列表,这有点没有意义。我猜你只能等到它自动发生。)

于 2013-05-03T06:35:00.700 回答
14

在您的情况下,您有两种选择

  1. 根据 ysrb 的回答,使用 Open Graph Debugger 工具遍历您的 URL 列表

  2. 或者耐心等待 30 天,直到 Facebook 重新抓取您的页面,如文档中所述

Facebook 为什么以及何时抓取我的网站?

Facebook 需要抓取共享到 Facebook 的链接,以了解在 Facebook.com 或适用于 iOS 和 Android 的 Facebook 上显示哪些链接预览信息。这每 30 天发生一次,以确保属性是最新的。当 URL 输入到调试器工具中时,链接的页面也会被抓取。

Facebook 会观察您 URL 上的缓存标头 - 它会按优先顺序查看“过期”和“缓存控制”。但是,即使您指定更长的时间,Facebook 也会每 30 天抓取一次您的页面。

于 2013-05-03T05:52:06.997 回答
5
       $config = array(
            "appId" => 'APP_ID',
            "secret" => 'APP_SECRET');

        $fb = new Facebook($config);
        $r=$fb->api('/','POST',array(
            'id'=>PAGE_URL,
            'scrape'=>'true'
        ));
于 2014-01-23T07:09:36.713 回答
3

请注意,Facebook 要求参数通过POST. Facebook 只是忽略GET请求。

这是 C# 中的代码。

HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(
    "https://graph.facebook.com/?id="
    + HttpUtility.UrlEncode("http://www.example.com/index.html")
    + "&scrape=true");
httpRequest.Method = "POST";
using (HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse())
{
    using (Stream responsestream = httpResponse.GetResponseStream())
    {
        if (responsestream != null)
        {
            using (StreamReader bodyreader = new StreamReader(responsestream))
            {
                string fbResp = bodyreader.ReadToEnd();
            }
        }
    }
}
于 2015-08-08T03:33:19.367 回答
2

curl --insecure " https://graph.facebook.com/?id=[YOUR-URL-TO-SCRAPE]&scrape=true "

curl 应该支持 ssl(因为它是https://graph .. .)

于 2015-04-14T19:30:53.400 回答
1

您可以尝试从 url 列表中循环并执行

curl "http://developers.facebook.com/tools/debug/og/object?q=$url"
于 2013-05-03T05:23:15.087 回答