曾经在老的博客(wordpress)里尝试并且成功运行过的一个方案,定时去请求某个比如“每天60秒读懂世界”这样的api,获取到数据,然后根据数据更新某一篇博文的内容。因为有“轻微”的强迫症,所以习惯把不用的东西直接“rm -rf”删除,某天想删除掉html文件夹下的wordpress安装包,结果手一滑没输入后缀,刚打完wordpress就按下了回车,于是一整个站点的文件都被自己删除了。T_T
源自网络的代码
这是一段摘自网络的代码,阐述了新增一篇文章的逻辑,似乎是用于文章采集的。顺便提一嘴采集,ai自动生成也好,采集也好,无疑会打击原创者的积极性,问渠哪得清如许,为有源头活水来,原创内容才是互联网的活水。
phprequire_once 'simple_html_dom.php';
function get_content($url,$charset ='UTF-8'){
$html = file_get_html($url);
$content = iconv($charset,'UTF-8',$html->find('div.content',0)->innertext);
return $content;
}
function auto_publish($params){
$url ='';
$title ='这是一篇测试文章';
$content = get_content($url);
$options = Typecho_Widget::widget('Widget_Options');
$db = Typecho_Db::get();
$fields = array(
'title'=>$title,
'slug'=> Typecho_Common::slugify($title),
'created'=> time(),
'modified'=> time(),
'text'=>$content,
'authorId'=>1,
'template'=>'',
'type'=>'post',
'status'=> isset($params['status'])&& in_array($params['status'],
array('publish','waiting'))?$params['status']:'publish',
'commentsNum'=>0,
'categories'=>$options->plugin('AutoPublish')->category,
'allowComment'=> isset($params['allowComment'])?$params['allowComment']: 1);
$db->query($db->insert('table.contents')->rows($fields));
}
新建一篇测试用文章
博主只是想根据api定时更新某一篇文章的内容,所以用不到太多的参数,只需要根据文章的cid修改text内容就可以了,先新建一篇用于测试的文章,然后记录一下文章的cid,因为博客偶尔会有来访,所以把这篇没有实际意义的文章设置为了隐藏。
typecho运行自定义php
记得在wordpress里,可以用这样的形式来运行php文件,比如在根目录下新建立一个php文件,然后用站点地址加新建文件名(含后缀php)的方式来直接运行,写文章的时候在typecho里测试了一下这种方式,只能够得到一个空白页面,同样,将文件放在主题文件夹内也是无法被运行的。
在typecho中,想测试一下某一个功能,可以通过自定义模板的方式来运行一些自定义的php语句,比如在主题文件夹中建立一个page_update.php
的文件名,然后输入如下内容:
<?php
/**
*更新文章
*
* @package custom
*/
?>
<?php if (!defined('__TYPECHO_ROOT_DIR__')) exit; ?>
<!DOCTYPE HTML>
<html lang="zh-CN">
<?php
$db = Typecho_Db::get();
$update = $db->update('table.contents')->rows(array('text'=>'hello world!'))->where('cid=?',715);
echo $update;
$updateRows= $db->query($update);
?>
上述代码会更新cid为715的文章的内容,将其内容变更为'hello world!',cid715正是博主刚才新建的那一篇测试用文章,当前内容为空。
保存文件后,新建一个独立页面,应用我们刚创建的“更新文章”这个模板,发布后记住这个独立页面的地址,访问一下就可以看到结果了。因为这个独立页面只用于更新数据,为了避免其他用户访问它,同样可以将它设置为隐藏。
试验结果
测试文章内被成功写入了内容,测试过程很顺利,没有出现错误,相较于wordpress,typecho的资料虽然不多,但胜在针对性强,准确率高。