typecho二次开发之使用python爬取数据并插入typecho
1.前言
和站主认识实在狗厂,离开后一直联系,因为在开发、产品、运营理念上很一致,所以陆陆续续开发了一些产品,其中华文资讯网就是和群主共同开发而成,耗时大概在两天左右,后面也陆续修改了下。
后来在下也独自使用typecho入库了一些数据,所以在使用上有一些心得分享下,期待能给使用typecho的伙伴们提供帮助,或者开拓各位的研发思路和扩宽产品的设计广度。
本篇讨论以下几个问题:
- 怎么往typecho插入爬取的数据?
- typecho的数据格式无法满足自身网站的要求怎么办?
- 往typecho提交数据时需要注意那些要点?
如果你能回答上面的问题就能避免很多的坑,从而开发出符合大众使用习惯的产品。
2.怎么往typecho插入爬取的数据?
相信熟悉本网站或者熟悉插件的同学都够清晰的知道答案,本网站有一篇精华帖子之前就有一则帖子关于《如何调用typecho的API插入一篇文章》。相信看完这个帖子后,你将会对怎么插入文章胸有成竹。
然后站主并没有详细的代码说明,一些技术遗漏点也限制了产品的设计广度。这里作一下说明:
- 类别也就是category可以自己入库指定。
相关的补充代码片段如下:
$category_mgr = $this->widget('Widget_Metas_Category_Edit');
$mid = 0;
//判断分类名称是否存在
if (!empty($category)){
//注意:nameExists方法,用于判断是否不存在,TE命名规范有问题,这里需要注意一下。
if($category_mgr->nameExists($category)){
//没有则需要新建
$row = array();
$row['name'] = $category;
$row['slug'] = Typecho_Common::slugName($category);
$row['type'] = 'category';
$row['description'] = $category;
$row['order'] = $category_mgr->getMaxOrder('category', $category['parent']) + 1;
$mid = $category_mgr->insert($row);
}else{
$db= Typecho_Db::get();
$row = $db->fetchRow($this->db->select()
->from('table.metas')
->where('type = ?', 'category')
->where('name = ?', $category)->limit(1));
$mid = $row['mid'];
}
}
在 $request->setParams 函数入库代码:
'category'=>empty($mid)?"":array($mid),
注意:
这里赋值的是一个数组,也就是可以允许多个分类,中间表关系将会在relationship表中体现。
同样,如果你需要入库多个标签(tag),也可以使用大体的办法。不过唯一不同的是,不需要自己手动入库,而是直接将标签原文赋值到tags字段即可,底层源码会帮你逐个入库然后插入到relationship表中关联起来(为嘛typecho的创作者不把category也用同样的办法入库呢?匪夷所思)。
代码如下:
$tags = $request->get('tags','');
...
$request->setParams(
array(
...
'tags'=>$tags,//这里的$tags是一个以英文逗号分开的字符串。
)
)
最后需要提醒的是,如果需要自定义字段,那么将怎么办呢?下一个系列文章中将会回答第二个问题。
-----------------天使漫步(一个typecho粉丝)
版权声明:未经书面授权禁止转载、摘编、复制或建立镜像。对既成事实本站将保留所有的权利。
评论已关闭