【问题标题】:Clear Facebook share cache with cURL and lint使用 cURL 和 lint 清除 Facebook 共享缓存
【发布时间】:2012-01-25 15:38:09
【问题描述】:

我在我的网站上分享 Facebook 内容时遇到问题。它实现了“喜欢”按钮,但是当您“喜欢”您的 Facebook 个人资料上的图片时,会显示旧图片(显然是缓存的图片)。那个网站上的东西是这样工作的......每天都有一张当天女孩的新照片,但网址总是一样的(由apache重写)。

我必须想办法自动并定期(当在网站上设置新图片时)清除 facebook 缓存。

当我将要刷新缓存的 URL 直接放入 fb 调试工具 (lint) 表单并按“调试”时,它会在 somobody 喜欢我网站上的内容时清除缓存并刷新内容。

但问题是当我尝试自动刷新缓存时(通过 php 脚本或通过 cron 作业)。 像这样的东西不起作用:

wget http://developers.facebook.com/tools/debug/og/object?q=http://www.vecernji.hr/djevojka-dana

或者这样也不行:

curl http://developers.facebook.com/tools/debug/og/object?q=http://www.vecernji.hr/djevojka-dana

另外,php 脚本不工作:

$url = "http://developers.facebook.com/tools/debug/og/object?q=http://www.vecernji.hr/djevojka-dana";
$useragent = "Opera/9.80 (X11; Linux x86_64; U; en) Presto/2.10.229 Version/11.60";

if ( $ch = curl_init( $url ) )
{
    curl_setopt( $ch , CURLOPT_HEADER , 0 );
    curl_setopt( $ch , CURLOPT_RETURNTRANSFER , true );
    curl_setopt( $ch , CURLOPT_USERAGENT , $useragent );

    $str_response = curl_exec( $ch );

    if( curl_errno( $ch ) != 0 )
    {
        $message = 'Girl of the day - cURL exec error: ' . $ch;

        error_log( $message );
    }

    curl_close( $ch );
}
else
{
    $message = 'Girl of the day - cURL init with url: ' . $url . ' failed';

    error_log( $message );
}

喜欢的内容在网址上:

http://www.vecernji.hr/djevojka-danahttp://www.vecernji.hr/decko-dana

有谁知道我无法通过 php 脚本、wget 或 curl 刷新缓存的原因,但是当我将给定的 url 直接手动放入 lint 表单并按下提交按钮时,内容会刷新?

【问题讨论】:

    标签: php facebook caching curl lint


    【解决方案1】:

    我偶然发现了这个,因为我在工作状态下的一个类似脚本突然不再起作用了。我认为 Facebook 禁止这样做是因为很多人都在使用它并导致负载过重。

    无论如何,为了节省时间,我可以做的下一件最好的事情是制作一个脚本,输出所有需要刷新的 lint 工具的链接。然后,我使用 Linky 之类的工具一次性打开所有链接。 Bam,所有缓存都清除了。

    如果您需要每天执行一次,我想使用此解决方案可能会有点痛苦,但它可以在 5 秒内完成,同时喝咖啡,也可以委派给任何人,因为这是一项非常简单的任务。如果需要,我相信您可以获得一个脚本,该脚本会在特定时间自动在该 URL 上打开您的页面,选择所有并使用 Linky。应该比想办法绕过 Facebook 反对 CURL 来完成这项任务更容易。

    【讨论】:

      【解决方案2】:

      有关 facebook 缓存的更多信息,请参阅下面我以前的答案的链接:

      http://facebook.stackoverflow.com/a/9019926/558021

      【讨论】:

      • 我看到了,但这对我不起作用,因为我需要使用一些 php 脚本自动“攻击”Lint 工具。问题是当我手动转到 Lint url 并将我想要清除缓存的 url 放入文本框中时,一切都很顺利。缓存被清除。但是当我尝试使用 wget 或 cURL 之类的工具时,它不起作用。缓存未清除。我想我可以使用 wget 或 cURL,因为我们放置 url 以清除缓存的表单使用简单的 GET 请求。
      • 这取自documentationcurl https://developers.facebook.com/tools/lint/?url={YOUR_URL}&format=jsoncURL 代码将强制您的 URL 被 scraped...
      【解决方案3】:

      您需要添加以下行:

      curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
      

      (感谢 Sidnious:URL linter not working from cURL

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-04
        • 2018-07-19
        • 2011-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-22
        相关资源
        最近更新 更多