如何定期从远程txt文件中抓取和缓存字符串。-我的第一个插件

时间:2016-02-29 作者:Collin Barrett

我维护一个资源网站,FilterLists, 它本质上是一个围绕网络托管的txt文件目录。我正在尝试构建我的第一个WordPress插件,以(a)学习并(b)向该工具添加新功能。

我正在尝试抓取每个链接txt文件的最后修改时间(如作者在实际文本中提供的)。就目前而言,我的第一次访问插件工作正常,但在访问者(或者,在我的情况下,CDN每隔几个小时)请求站点时,会进行所有的抓取和解析,这需要很长时间才能完成列出的所有文件。理想情况下,我希望定期ping每个文件,可能使用类似wp cron的东西(我不熟悉它的存在),并缓存结果。如果我能让所有最后修改的日期每天更新一次左右,那就足够了。

这是plugin 到目前为止,您可以看到它在上面链接的FilterList站点上的前5个txt链接上实时工作。

Can anyone point me in the right direction to [have wp-cron] scrape the dates periodically rather than at page request time?

我对PHP和WP开发非常陌生,所以欢迎使用冗长的内容。

谢谢

1 个回复
最合适的回答,由SO网友:RRikesh 整理而成

这个Transient API 我可以在这里帮助你。瞬态是在规定的时间内存储的变量。

function filemtime_remote( $url )
{
    $list = file_get_contents( $url , null , null , 0 , 200);
    $important = explode("Last modified: ",$list)[1];
    $mydate = substr($important, 0, 21);
    return $mydate;
}
以上是您当前的代码,它会在每次加载页面时查找“上次修改”的时间。

您可以将其转换为:

function filemtime_remote( $url ){   
        # Get the transient
        $mydate = get_transient( \'lm_\' . esc_url( $url ) );

        if( false === $mydate ) {
            # The transient expired or does not exist, so we fetch the last modified again
            $list = file_get_contents( $url , null , null , 0 , 200);
            $important = explode("Last modified: ",$list)[1];
            $mydate = substr($important, 0, 21);

            # We then save that date in a transient(which we can prefix with something like "lm_")
            # We are saving the transient for 12 hours
            set_transient( \'lm_\' . esc_url( $url ), $mydate , 12 * HOUR_IN_SECONDS );
        }

        return $mydate;
    }
我没有尝试过,但逻辑是:使用get_transient() 查看是否记录了过去12小时的值。如果我们确实有一个值(返回的值FALSE), 使用该值。如果我们没有值(返回值为FALSE), 然后使用set_transient(), 12小时后到期。