2008年4月16日

有备无患:订阅所有豆瓣用户的广播

以前写过输出单个用户的友邻广播 feeds 的脚本,后来豆瓣把原来的“友邻”一分为二成双向的“朋友”和单向的“关注”,那个脚本就过时了。所以我重写了 pydmb.py,并让它能够输出多层友邻关系的豆瓣广播 feeds 的 OPML 文件根据六度分割理论,平均只需要六层关系就可以联系到任何两个互不相识的人。那么,从任何一个豆瓣用户出发输出六层友邻关系的广播,是不是最终也可以得到几乎所有豆瓣用户的广播呢?我没有试过,因为即使只输出了两层友邻关系的广播,我已经得到 8825个 feeds,如果输出六层的话会吓到人的。

使用方法

1,下载 pydmb.py

pydmb-0.2.tar.gz

2,解压缩到当前目录。

3,运行脚本。这里举一个例子,比如你想获得 keso阿北的三层朋友(不包括他们关注的人)的广播 feeds,可以输入命令:

$ ./pydmb.py keso ahbei --friend --depth 3

4,需要帮助可以运行命令:

$ ./pydmb.py --help
Usage: python pydmb.py [-fc] [-d DEPTH] user1 user2 ...

Options:
  -h, --help            show this help message and exit
  -f, --friend          output douban miniblog rss of your friends
  -c, --contact         output douban miniblog rss of your contact
  -d DEPTH, --depth=DEPTH
                        the depth of relationship to output


2008-04-18 UPDATE:

NullPointer 留言说想看看六度连接的试验结果,我也很感兴趣,所以昨天先试了试二度和三度的连接。结果从阿北出发的二度空间能连接到10214个人,三度空间能连接到117113个。

>>> from pydmb import *
>>> graph = UserGraph('ahbei')
>>> graph.search(2, 'fc')
>>> len(graph.dict.keys())
10214
... ...
>>> graph.search(3, 'fc')
>>> len(graph.dict.keys())
117113

结果还算理想,可是用的时间比较厉害,二度连接还好只用了十几分钟,但三度连接用了将近八个小时。照这样推算,分析六度连接(理论上说,就是要分析将近140万豆瓣用户的朋友和关注的人)可能会超过800个小时。所以用这个脚本来做就不太现实了,如果要做的话,最好把 urllib2BeautifulSoup 换成更快的库,然后用两个线程分别来抓取和分析网页,这样效率会高一些。

标签: ,

2 条评论:

Blogger NullPointer 说...

我支持你试试6度关联,就当实践一下“小世界”假设了:)用阿北做起点,看看6度连接之后能够关联多少豆瓣用户~ 很想知道实验结果。

2008-4-16 23:18:00
Blogger wyt 说...

我会试试的。我觉得可能不需要六度就可以大致覆盖整个豆瓣

2008-4-17 11:48:00

发表评论

指向此文章的链接:

创建链接

<< 主页