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粉丝)


版权声明:未经书面授权禁止转载、摘编、复制或建立镜像。对既成事实本站将保留所有的权利。