typecho二次开发之使用python爬取数据并插入typecho

**1.前言**
和站主认识实在狗厂,离开后一直联系,因为在开发、产品、运营理念上很一致,所以陆陆续续开发了一些产品,其中[华文资讯][1]网就是和群主共同开发而成,耗时大概在两天左右,后面也陆续修改了下。
后来在下也独自使用typecho入库了一些数据,所以在使用上有一些心得分享下,期待能给使用typecho的伙伴们提供帮助,或者开拓各位的研发思路和扩宽产品的设计广度。
本篇讨论以下几个问题:
– 怎么往typecho插入爬取的数据?
– typecho的数据格式无法满足自身网站的要求怎么办?
– 往typecho提交数据时需要注意那些要点?

如果你能回答上面的问题就能避免很多的坑,从而开发出符合大众使用习惯的产品。

**2.怎么往typecho插入爬取的数据?**

相信熟悉[本网站][2]或者熟悉插件的同学都够清晰的知道答案,本网站有一篇精华帖子之前就有一则帖子关于《[如何调用typecho的API插入一篇文章][3]》。相信看完这个帖子后,你将会对怎么插入文章胸有成竹。
然后站主并没有详细的代码说明,一些技术遗漏点也限制了产品的设计广度。这里作一下说明:

**- 类别也就是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粉丝)

[1]: http://huawenzixun.com
[2]: http://typechodev.com
[3]: https://www.typechodev.com/index.php/archives/471/

原创文章,作者:admin,如若转载,请注明出处:https://www.typechodev.com/plugin/736.html

(0)
上一篇 2016-09-11 上午2:50
下一篇 2016-11-30 上午2:58

相关推荐

发表评论

您的电子邮箱地址不会被公开。