119

我们使用了链接:

http://www.facebook.com/sharer.php?u=[shared URL]

...共享特定页面。但是,Facebook Sharer 使用图像和标题的缓存版本。有没有办法快速清除 Facebook 缓存,或者我们需要等多久才能更新数据?

我放在<link rel='image_src' href='[preview image]' />标签之间。

4

10 回答 10

239

我找到了解决我的问题的方法。你可以去这个网站:

https://developers.facebook.com/tools/debug

...然后输入您要分享的页面的URL,然后单击“调试”。它会自动提取您的元标记上的所有信息并清除缓存。

于 2011-03-10T09:03:16.180 回答
10

使用 api是否有 API 可以强制 Facebook 再次抓取页面?

$furl = 'https://graph.facebook.com';

$ch = curl_init();

curl_setopt( $ch, CURLOPT_URL, $furl );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_POST, true );
$params = array(
    'id' => '<update_url>',
    'scrape' => true );
$data = http_build_query( $params );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $data );

curl_exec( $ch );
$httpCode = curl_getinfo( $ch, CURLINFO_HTTP_CODE );
于 2013-10-17T06:12:47.280 回答
10

Facebook 将每个 url 视为唯一的,并根据该 url 缓存页面,因此如果您想共享最新的 url,最简单的解决方案是添加一个查询字符串,其中包含正在共享的 url。简单来说,只需在 url 末尾添加 ?v=1 即可。任何数字都可以用来代替 1。

帽子提示:Umair Jabbar

于 2014-04-22T17:57:27.060 回答
3

我认为这两个链接对您的问题相关内容进行了广泛的讨论。fb:ref 通过调用清除现金

fbml.refreshRefUrl

像这样

<tt>fbml.refreshRefUrl("http://www.mysite.com/someurl.php")

你可以从这里fb:ref学习相关的东西。我希望它对你有用

于 2011-03-10T07:05:03.293 回答
3

执行此操作的页面位于https://developers.facebook.com/tools/debug/并且与其他一些答案相比略有变化。

将您的 URL 粘贴在那里并点击“调试”。然后点击 URL 文本字段下的“获取新的抓取信息”按钮,你应该已经设置好了。它会从您的页面中提取新的元标记,但它们仍会缓存,因此请记住,无论何时更改它们,您都需要执行此操作。如果您正在使用元标记来获取 FB 共享 URL 以按照您希望它们在 facebook 内部的方式格式化,这非常重要。

于 2015-08-27T15:59:06.480 回答
3

此答案适用于开发人员。

清除缓存意味着该网页的新共享将显示OG标签中提供的新内容。但前提是您正在处理的 URL 的交互次数少于 50 次(喜欢 + 分享)。它也不会影响已在 Facebook 上发布的该网页的旧链接。只有当再次在 Facebook 上分享 URL 时,Facebook 显示链接的方式才会更新。

catandmouse 的回答是正确的,但您也可以通过向 graph.facebook.com 发送帖子请求来让 Facebook 清除 OG(OpenGraph)缓存(在撰写此答案时适用于 http 和 https)。您不需要访问令牌。

对 graph.facebook.com 的发布请求可能如下所示:

POST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: graph.facebook.com
Content-Length: 63
Accept-Encoding: gzip
User-Agent: Mojolicious (Perl)

id=<url_encoded_url>&scrape=true

在 Perl 中,您可以使用以下代码,其中 Mojo::UserAgent 库用于发送和接收 HTTP 请求:

sub _clear_og_cache_on_facebook {
    my $fburl     = "http://graph.facebook.com";
    my $ua        = Mojo::UserAgent->new;
    my $clearurl  = <the url you want Facebook to forget>;
    my $post_body = {id => $clearurl, scrape => 'true'};
    my $res       = $ua->post($fburl => form => $post_body)->res;
    my $code      = $res->code;
    unless ($code eq '200') {
        Log->warn("Clearing cached OG data for $clearurl failed with code $code.");
        }
    }
}

可以使用以下命令通过终端发送此发布请求:

curl -F id="<URL>" -F scrape=true graph.facebook.com
于 2016-04-29T09:59:39.423 回答
1

将 ?v=random_string 附加到 url。如果您将此想法用于 Facebook 分享,请确保响应中的 og:url 参数与您分享的 url 匹配。这也适用于 google plus。

对于 Facebook,您还可以通过向https://graph.facebook.com发出发布请求来强制重新抓取

{id: url,
scrape: true}
于 2016-01-23T18:38:32.073 回答
1

我刚刚在此处的相关帖子上发布了一个简单的解决方案,需要 5 秒钟 - Facebook 调试器:清除整个站点缓存

简短答案...将永久链接设置中的 worpdress 站点上的永久链接更改为自定义链接。我只是添加了一个下划线。
/_%postname%/
然后 facebook 将它们全部作为新网址、新帖子进行抓取。

于 2017-05-09T14:27:07.617 回答
0

如果您使用带有缓存插件的 wordpress,请确保清除所有缓存。还要确保您使用的图像具有推荐的 facebook 尺寸:1200(w) x 630(h) 或 600 x 315。

于 2016-09-01T08:42:13.810 回答
0

如果您使用托管 wordpress 或缓存插件,您必须在 facebook 调试器工具获取新信息之前清除您的缓存!

几个星期以来,我一直在努力弄清楚为什么我所做的更改不会在 24 小时内出现在 facebook 调试器中!!!!解决方法是我必须进入我的 wordpress 仪表板,单击顶部的 godaddy 图标,然后单击“刷新缓存”。我认为许多托管的 wordpress 主机都有一个缓存来弄清楚如何清除它,你会很高兴的。

于 2017-08-09T15:43:08.267 回答