使用cURL和lint清除Facebook共享缓存

时间:2012-01-25 15:38:09

标签: php facebook caching curl lint

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

我必须找到一些方法来自动和定期(当在网站上设置新图片时)清除facebook缓存。

当我在fb调试工具(lint)表单中直接刷新我想要刷新缓存的url并按下'debug'时,当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刷新缓存的原因,但是当我在lint表单中直接手动输入给定的url并按下提交按钮时,内容会刷新?

3 个答案:

答案 0 :(得分:2)

我偶然发现了这一点,因为我在工作状态下突然出现的类似剧本再也没有完成它的工作。我认为Facebook禁止这一点,因为很多人都在使用它并造成沉重的负担。

无论如何,我能做的第二件事就是制作一个脚本,输出所有需要刷新的lint工具的链接。然后,我使用像Linky这样的工具一次打开所有链接。 Bam,所有缓存都已清除。

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

您需要添加以下行:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

(感谢Sidnicious:URL linter not working from cURL