最近更改了网站的 og:image。该站点包含 100 多个页面,每个页面都包含各自的 og:image。我如何要求或强制 Facebook 重新抓取所有页面,以便更新图像?使用 facebook 调试器工具将是一项繁琐的任务。在 facebook 重新抓取该网站之前,我将无法为该应用提交收藏。
6 回答
您可以通过 API 强制重新抓取,如下所述:https ://developers.facebook.com/docs/opengraph/using-objects/#update :
POST /?id={object-instance-id or object-url}&scrape=true
(但如果你没有受影响 URL 的真实列表,这有点没有意义。我猜你只能等到它自动发生。)
在您的情况下,您有两种选择
根据 ysrb 的回答,使用 Open Graph Debugger 工具遍历您的 URL 列表
或者耐心等待 30 天,直到 Facebook 重新抓取您的页面,如文档中所述
Facebook 为什么以及何时抓取我的网站?
Facebook 需要抓取共享到 Facebook 的链接,以了解在 Facebook.com 或适用于 iOS 和 Android 的 Facebook 上显示哪些链接预览信息。这每 30 天发生一次,以确保属性是最新的。当 URL 输入到调试器工具中时,链接的页面也会被抓取。
Facebook 会观察您 URL 上的缓存标头 - 它会按优先顺序查看“过期”和“缓存控制”。但是,即使您指定更长的时间,Facebook 也会每 30 天抓取一次您的页面。
$config = array(
"appId" => 'APP_ID',
"secret" => 'APP_SECRET');
$fb = new Facebook($config);
$r=$fb->api('/','POST',array(
'id'=>PAGE_URL,
'scrape'=>'true'
));
请注意,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();
}
}
}
}
curl --insecure " https://graph.facebook.com/?id=[YOUR-URL-TO-SCRAPE]&scrape=true "
curl 应该支持 ssl(因为它是https://graph .. .)
您可以尝试从 url 列表中循环并执行
curl "http://developers.facebook.com/tools/debug/og/object?q=$url"