PHP获取所有Twitter粉丝并将其与朋友进行比较

时间:2010-04-03 05:54:36

标签: php twitter

我正在寻找可扩展的方法来执行以下操作:

  • 用户登录
  • 从Twitter获取所有好友
  • 从Twitter获取所有粉丝
  • 显示所有不是追随者的朋友

问题:如何以可扩展的方式完成?用户最多可以拥有200万朋友或粉丝。目前我将它们存储在SQLite表中并通过循环进行比较。当用户返回时,表格被清除并且处理再次开始。

这适用于100-1000名朋友..但对于500000名朋友来说会很棘手。我无法缓存列表,因为它们可以随时改变..

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

3 个答案:

答案 0 :(得分:0)

需要指出的另一点是 - 您是否需要同时显示非强客的所有朋友?如果您只需要一次显示一个有限的数字,例如20,那么您可以只计算那20个;如果他们要求更多,那么计算更多(或在他们浏览您的网站时在后台进行计算;在每次请求时,再生成一些)。

我无法想象你需要在一个页面上显示几百万个结果的情况,即使这是理论上的限制。

因此,可能有效的方法(通过简要浏览其API文档)将是

  • 使用statuses/friends API
  • 抓住他们朋友的一大块(看来你的每个请求似乎得到100)
  • 为每个检索到的朋友
    • 使用friendships/show确定两者之间的关注者身份
    • 如果你有足够的结果(例如20)然后休息,你就完成了

这种方法确实需要比Twitter的rate limiting政策允许的服务器更多的请求,但是再一次,每个请求获得100个朋友的2,000,000个朋友的用户的整个朋友列表也将超出限制在你得到它们之前(150个请求x 100每个请求= 15,000)。您打算如何解决这个问题?

答案 1 :(得分:0)

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

答案 2 :(得分: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一次获取5,000个好友和关注者ID列表。使用users/lookup API可以获得最多100个屏幕名称。如果用户有2,000,000个朋友,则需要400个api调用来获取ID列表,因此您仍应至少为热门用户缓存该列表。