在处理比较多的数据的时候,我还是习惯用ThinkPHP轻量级的框架来做,现在有需求,系统是使用的Typecho搭建,现在要经常性的根据接口内容,来更新文章数据,因此便用 ThinkPHP 框架来实现。
文章源自陈学虎-https://chenxuehu.com/article/2021/12/7820.html
1、ThinkPHP 新建数据库模型,因为我们主要只是针对文章进行新增、更新操作,所以我们需要建立三个模型,Metas,Relationships,Contents :文章源自陈学虎-https://chenxuehu.com/article/2021/12/7820.html
<?php
namespace app\model;
use think\Model;
class Metas extends Model
{
protected $name = "typecho_metas";
}
<?php
namespace app\model;
use think\Model;
class Relationships extends Model
{
protected $name = "typecho_relationships";
}
<?php
namespace app\model;
use think\Model;
class Contents extends Model
{
protected $name = "typecho_contents";
}
2、我们主要使用命令行来执行数据的更新,用定时任务执行,因此我们直接建立自定义命令即可,在app\command下建立,基本格式:文章源自陈学虎-https://chenxuehu.com/article/2021/12/7820.html
<?php
declare (strict_types = 1);
namespace app\command;
use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\input\Option;
use think\console\Output;
use app\model\Contents;
use app\model\Metas;
use app\model\Relationships;
use Overtrue\Pinyin\Pinyin;
class Shopinsert extends Command
{
protected function configure()
{
// 指令配置
$this->setName('shopinsert')
->setDescription('导入数据');
}
protected function execute(Input $input, Output $output)
{
$this->insertData($title,$text,$slug);
$output->writeln("done ...");
}
private function insertData($title,$text,$slug)
{
$insertDataModel = new Contents();
$insertDataModel->title = $title;
$insertDataModel->slug = $this->checkPostSlug($slug);
echo $this->checkPostSlug($slug);
$insertDataModel->created = time();
$insertDataModel->modified = time();
$insertDataModel->text = $text;
$insertDataModel->order=0;
$insertDataModel->authorId=1;
// $insertDataModel->template="";
$insertDataModel->type="post";
$insertDataModel->status="publish";
// $insertDataModel->password="";
// $insertDataModel->commentsNum="";
$insertDataModel->allowComment=1;
$insertDataModel->allowPing=1;
$insertDataModel->allowFeed=1;
$insertDataModel->parent=0;
$insertDataModel->save();
// 绑定分类,这里就直接指定了,因为没有其他类别的需求
$metaName = "默认分类";
$insertMetaRelation = new Relationships();
$insertMetaRelation->cid = $insertDataModel->id;
$insertMetaRelation->mid = $this->getCategoryIdByName($metaName);
$insertMetaRelation->save();
// 处理标签,没有就新增
$tagName = [$title,$metaName];
foreach($tagName as $tagUse)
{
$insertTagRelation = new Relationships();
$insertTagRelation->cid = $insertDataModel->id;
$insertTagRelation->mid = $this->getTagIdByName($tagUse);
$insertTagRelation->save();
}
}
//获取标签 ID
protected function getTagIdByName($name)
{
$metainfo = Metas::where(["name"=>$name,"type"=>"tag"])->find();
if($metainfo)
{
$metainfo->count += 1;
$metainfo->save();
return $metainfo->mid;
}else{
return $this->insertTag($name);
}
}
// 检测文章 slug 是否存在,存在则增加表示
protected function checkPostSlug($slug)
{
$insertDataModel = Contents::where(["slug"=>$slug])->count();
if($insertDataModel >0)
{
return $slug.'-'.time().'-'.mt_rand(10000,99999);
}else{
return $slug;
}
}
//新增标签
protected function insertTag($name)
{
$metainfo = new Metas();
$pinyin = new Pinyin();
$metainfo->name = $name;
$metainfo->slug = $pinyin->permalink($name);
$metainfo->count = 1;
$metainfo->type = "tag";
$metainfo->description = $name;
if($metainfo->save())
{
return $metainfo->id;
}else{
return 0;
}
}
//获取分类 ID
protected function getCategoryIdByName($name)
{
$metainfo = Metas::where(["name"=>$name,"type"=>"category"])->find();
$metainfo->count += 1;
$metainfo->save();
return $metainfo->mid;
}
}
文章源自陈学虎-https://chenxuehu.com/article/2021/12/7820.html
3、在配置中增加命令,在 app\config\console.php中配置:文章源自陈学虎-https://chenxuehu.com/article/2021/12/7820.html
<?php
// +----------------------------------------------------------------------
// | 控制台配置
// +----------------------------------------------------------------------
return [
// 指令定义
'commands' => [
'shopinsert' => 'app\command\Shopinsert',
],
];
文章源自陈学虎-https://chenxuehu.com/article/2021/12/7820.html
到此,就完成了ThinkPHP操作Typecho数据库,实现内容同步更新了,需要注意的是,Typecho对标签和分类的数量有统计,因此在处理的时候,要特别注意,否则,通过后台操作更新等就会出错。文章源自陈学虎-https://chenxuehu.com/article/2021/12/7820.html
文章源自陈学虎-https://chenxuehu.com/article/2021/12/7820.html















评论