2010-04-03 82 views
6

我正在寻找可扩展的方式来做到以下几点:PHP获取所有Twitter的追随者,并比较他们的朋友

  • 用户登录
  • 从Twitter
  • 抓取所有的朋友从Twitter
  • 抓取所有关注者
  • 显示所有没有粉丝的好友

问题:这怎么能以可扩展的方式完成?用户可以有多达200万的朋友或追随者。目前我存储在SQLite表内并通过循环比较它们。当用户回来时,表格被清除并且进程再次开始。

这个作品在100 - 1000个朋友..但将与500000个朋友棘手。我无法缓存列表,因为他们可以随时改变。

有谁知道处理如此大量数据的好方法吗?

+2

真的有些人会有50万朋友吗? – 2010-04-11 07:38:16

回答

0

我不知道你的数据库是什么样的,但这是我如何设置它。

CREATE TABLE twitter_users (
    user_id INTEGER PRIMARY KEY NOT NULL, 
    screen_name VARCHAR(20) NOT NULL 
); 

CREATE TABLE friends (
    friend_id INTEGER PRIMARY KEY NOT NULL 
); 

CREATE TABLE followers (
    follower_id INTEGER PRIMARY KEY NOT NULL 
); 

然后,您可以使用此SQL来获取不是追随者的朋友。

SELECT friend_id, screen_name 
FROM friends 
LEFT JOIN followers ON follower_id = friend_id 
LEFT JOIN twitter_users ON user_id = friend_id 
WHERE follower_id IS NULL 

如果屏幕名称为NULL这意味着他们不在你twitter_users表。您可以查找缺失的用户并将其存储以备后用。屏幕名称可能会更改,因此您可能需要定期更新表格。

使用friends/idsfollowers/ids API可一次获取好友和关注者ID为5,000的列表。使用users/lookup API可以获得最多100个屏幕名称。如果用户拥有2,000,000个朋友,则需要400个API调用才能获取ID列表,因此您至少应该为受欢迎的用户缓存该列表。

0

要指出的另一件事 - 你需要显示所有朋友是不是跟随者在同一时间?如果你只需要一次显示一个有限的数字,例如20,那么你可以计算出这20个;如果他们请求更多,然后计算更多(或者在浏览您的网站时在后台执行此操作;每次请求时会生成更多)。

我无法真正想象一种情况,即需要在一页中显示几百万个结果,即使这是理论极限。

所以,可能工作(不必在他们的API文档简要浏览)的方法是

  • 抢他们的朋友一大块使用(看来你得到100个请求,反正) statuses/friends API
  • 每个检索到的朋友
    • 使用friendships/show确定两个
    • 之间的跟随状态,如果你有足够的结果(如20)再突破,大功告成

这种方法确实需要更多的对服务器的请求比由Twitter的rate limiting政策允许的,但话又说回来,在100得到一个用户的所有好友列表2,000,000朋友在每次请求获得全部请求之前,每个请求的朋友也会超出限制(每个请求150个请求x 100 = 15,000)。你打算如何解决这个问题?

+0

您可以随时让用户导出自己的追随者订阅源,并将其作为启动过程的一部分提交......好奇如果有一种安全的方式将其传递给第三方处理器(可靠) – jcolebrand 2010-04-12 14:38:07

0

不是唯一的方法来做到这一点,但有效:运行一个crontab每天从一个拥有公共列表的站点(或者twitter本身)下载一个twitter用户列表,然后索引这些朋友(每运行1000个天)。然后通过PHP使用cUrl访问twitter API来检索你的朋友列表并匹配数组。这很有效,因为您可以随时改进算法 - 如上所述,限制策略会阻止您执行其他任何操作。祝你好运! =)

相关问题