批量抓饭脚本:一次性打包输出自己全部的饭否消息!

一直盼望哪位大侠能写个“批量导出饭否消息”的程序。咨询过饭否官方,fanfou还没有批量导出全部消息的api。现有的api最多只能导出20条消息。于是我使用perl+curl实现了全部抓取的功能。现在还是perl脚本版的。有对话框界面的不急,慢慢来。

已经实现的功能:

  • 根据fanfou id,批量导出fanfou消息。
  • 导出的内容有:fanfou消息本身,该消息发布的时间,该消息的id号,形如oj1Wil-g4wk。

Todo List:

  • 做成gui版的。
  • 批量删除、分享(自己的消息)。
  • 使用sqlite实现本地存储、sql语言查询。
  • 支持标签分类。需要在发布消息时在消息开头或末尾加上[]、[]等分隔符。

如果您想批量导出自己的fanfou消息,同时知道如何运行perl脚本,那么直接改动下面的脚本即可;如果您不愿自己动手,我可以代劳。您只须加我(zhasm)为好友,然后饭密我一条消息,发个请求即可。这是为了保证您要抓取的,是您自己的内容。敬请谅解。我会在最晚2个工作日之内发给您。

饭密给我的消息,可以包含如下内容:

  1. 您的邮箱。
  2. 分隔符,默认是tab,您也可以;、,诸如此类。
  3. 序号(1-N,还是N-1.默认是n-1)。
  4. 是否加上时间戳。(默认包含)。
  5. 是否加上消息的id. 此处指的是fanfou为您每一条消息自动生成的形如oj1Wil-g4wk序列号。如果您不明白此为何物,可不必包含此项。如果批量删除或批量分享,则保留此项。

好了,以下是代码部分,附有注释。您如果在您的机器中运行此代码,需确保安装有WWW::Curl::Easy模块。需要说明的是,该脚本的运行速度取决于网络速度与机器自身速度。在我的机器上,抓取700余条消息大约花费3分钟时间。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/perl -w
#
# this script is to grab all the fanfou items for the given id.
# rex.zhasm rex[at]zhasm[dot]com
# 27 jan 2007
#
#
 
use strict;
use WWW::Curl::Easy;
my $output="output.txt";
open(OUT,">$output") or die "can not open file to out put!";
#print all the messages into the file: output.txt";
 
my $id="zhasm";			#specify the user's id.
my $url = "http://fanfou.com/".$id;
 
# Init the curl session
my $curl= WWW::Curl::Easy->new() or die "curl init failed!\n";
$curl->setopt(CURLOPT_URL, $url);
2008年1月27日18:03
  • 2008年8月30日11:51 | #1

    我也是觉得这个很麻烦的。
    还有,如果加一个日历视图感觉也不错。

  • 2009年2月2日13:30 | #2

    zhasm,你好,请问怎样安装www::curl::easy包?帮助文档中的“1. Specify your curl include directory on the line "my @include = qw()".”没有看懂。
    谢谢!

    • 2009年2月2日13:48 | #3

      如果在linux下很好办,好像在ubuntu的apt源里,就有perl-curl模块,直接勾选安装即可。在windows下,是需要编译环境的,反正我一直没有安装成功过perl的curl模块。因此,我如果不得不使用perl+curl,我就使用perl的exec(或system)函数来调用curl.exe文件,实现curl的下载功能。现在,我更倾向于使用python语言了,具体可见我的另一篇文章:使用饭否新版API编写批量抓取饭否消息的程序(http://iregex.org/blog/fanfou-msg-extractor-via-n...

发表评论

XHTML: 您可以使用这些标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">