【问题标题】:PHP fetch all Twitter Followers and compare them to friendsPHP 获取所有 Twitter 关注者并将它们与朋友进行比较
【发布时间】:2011-02-03 22:49:31
【问题描述】:

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

  • 用户登录
  • 从 Twitter 获取所有好友
  • 从 Twitter 获取所有关注者
  • 显示所有非关注者的朋友

问题:如何以可扩展的方式完成?一个用户最多可以拥有 200 万个朋友或关注者。目前,我将两者都存储在 SQLite 表中并通过循环比较它们。当用户回来时,表格被清除并重新开始。

这适用于 100 - 1000 个朋友,但对于 500000 个朋友来说会很棘手。我无法缓存列表,因为它们时时刻刻都在变化。

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

【问题讨论】:

  • 某人将拥有 500,000 个朋友真的很现实吗?

标签: php twitter


【解决方案1】:

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

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来获取不是follower的朋友了。

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 列表,因此您仍应至少为热门用户缓存该列表。

【讨论】:

    【解决方案2】:

    需要指出的另一件事 - 您是否需要同时显示 所有 不是关注者的朋友?如果您一次只需要显示一个有限的数字,例如 20,那么您可以计算这 20 个;如果他们要求更多,则即时计算更多(或在他们浏览您的网站时在后台进行;在每个请求中,生成更多)。

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

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

    • 使用statuses/friends API 获取他们的一大群朋友(看来您每次请求获得 100 个)
    • 为每个检索到的朋友
      • 使用friendships/show确定两者之间的关注者状态
      • 如果你有足够的结果(例如 20 个)然后打破,你就完成了

    这种方法确实需要比 twitter 的 rate limiting 策略允许的更多请求,但话又说回来,以每个请求 100 个朋友的方式获取具有 2,000,000 个朋友的用户的整个朋友列表也将远远超出限制全部获取(150 个请求 x 100 个请求 = 15, 000)。您打算如何解决这个问题?

    【讨论】:

    • 你总是可以让用户导出他们自己的关注者提要并作为启动过程的一部分提交......好奇是否有一种安全的方法可以将它传递给第三方处理器(dobutful)
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-22
      • 2011-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2012-06-28
      • 1970-01-01
      相关资源
      最近更新 更多