一般来说,Calibre Recipe关注的内容是定期更新的,比如说知乎日报的内容,文章列表每天都会全部更新。
但如果某些内容并不是完全更新,只是部分更新,怎么处理呢?
比如说简书的每周热门文章,某些文章因为热门会持续几周都在其中。这样的话Recipe应该怎么处理才能保证只抓取新的文章,而忽略以前收录的文章呢?
一个朴素的想法就是,把之前收录过的文章都保存起来,然后在recipe里添加要抓取文章之前先check一下有没有抓取过了。
然而在尝试这个朴素的想法的时候,发现在Recipe里保存数据是个问题——保存的文件找不到!
稍微debug了一下,然后看了一下calibre的实现,发现它在抓取过程中的working directory是`/tmp/`下的一个临时目录,完成之后还会被删掉,当然找不到了。。。
尝试一:绝对路径,它work,但是太丑了。
尝试二:如下python里一般获取cwd的方法都不work
os.getcwd() print os.path.dirname(os.path.realpath(__file__))
因为calibre在__init__.py里有`self.cwd = None` 然后`os.chdir()`
尝试三:遍历inpsect一层层的stack,结果只能找到`/usr/bin/`里面去
尝试四:最后突然想到,既然只是个环境变量,那在os.environ里一定有相关的信息嘛,直接打印看一下,发现
os.environ['PWD']
就是我想要的目录。于是,用这个目录当CWD就搞定了。
具体的code直接看这个commit了。