RSS importer几乎可说是安装Pligg后必用插件,我们可以用它来从指定的Feed定时抓取更新。在安装了Pligg Beta 9.9.5之后,可以使用管理员账号从管理面板进入Module Management,找到RSS importer安装并启用。
抓取中文内容标题与内容为空的问题
如果抓取的目标文章title是中文的话,极有可能写入后title、content均为空——事实上,直接submit一个中文标题的story也会出现这种情况。
检查/libs/link.php发现,Pligg插入Link的流程是
先插入一条含作者、创建时间、分类等关联内容的条目,这些列的类型多为int或timestamp。
然后再通过update来为刚插入的行写入title、content、title_url、tags以及extend fields等文本内容,这些列的内容多为varchar或text。
在update这个流程,它会先给这些数据分别做db-escape,如果title_url为空的话,它还将使用一个makeUrlFriendly函数处理title,赋予title_url。
这个函数在处理中文时返回的结果多数情况下会导致包含该字串的sql不能被顺利执行,以致link更新失败,从而出现link写入成功但是标题和内容均为空的问题。
比较理想的做法是如同wordpress插件cos_translator那样,利用google translate取回一个英文翻译结果赋予title_url。不想费这个劲的话,直接把titile赋给title_url也行。
修改/libs/link.php 把139行注释替换为
//if($link_title_url == ""){$link_title_url = makeUrlFriendly($this->title);}
if($link_title_url == ""){$link_title_url = $link_title;}
这样修改解决了未设置title_url时的问题,但使用RSS importer抓取的时候,插件已经先行一步使用makeUrlFriendly给title_url赋值了,这也需要取消掉。
修改/modules/rss_import/templates/import_fields_center.tpl 把78行注释替换为
//$linkres->title_url = makeUrlFriendly($linkres->title);
$linkres->title_url = $linkres->title;
抓取时重复更新计数的问题
在RSS importer里可以给一个Feed设置Random Votes,以后从该Feed抓取回来的链接,每一条都会被先预置Votes。比如我们给一个Feed预置5-10的votes,那么取回来的文章会随机的得到在这之间的一个votes。
问题就在这里设置votes的流程是
先往votes表里插入一条vote,计算该link的votes数并更新..
再往votes表里插入一条vote,计算该link的votes数并更新…
如此往复….
如果votes为200的话,那就重复200次。
我们可以把计算votes数并更新这个流程移出来,做一次就可以了。
具体是修改/modules/rss_import/templates/import_fields_center.tpl 147行,把这行起看到的第一个}移到这行之前。
