【问题标题】:Twitter List Membership Count Per User每个用户的 Twitter 列表成员数
【发布时间】:2010-12-26 15:21:39
【问题描述】:

Twitter API 具有 friends_countfollowers_count 可用作 users/showaccount/verify_credentials 方法的缓存值。据我所知,确定用户所属列表数量的唯一方法是调用 GET list memberships 并使用光标进行分页来计算一个人所属的列表总数.这是次优的;理想情况下,lists_count 将在 users/show 上可用。

有没有更简单的方法来确定用户是使用 Twitter API 的成员的列表的原始数量?我错过了什么?

【问题讨论】:

  • 值得一提的是,无论你从哪里获取这些值,它们都会被缓存起来,而且几乎永远不会是对的。
  • 偷偷摸摸,同意,值得一提,但对于这个特定任务来说,“足够接近”的值是可以的。

标签: ruby rest twitter


【解决方案1】:

忘记 API :),直接访问 HTML 站点几乎一样容易。只需获取 xhtml,将其加载到您最喜欢的 Xml 解析器中,然后使用 xpath 查询来提取您想要的数据。

var client = new HttpClient();
client.DefaultHeaders.Authorization = Credential.CreateBasic("username", "password");

var response = client.Get("http://www.twitter.com/{username}/lists/memberships");
var doc = new XmlDocument();
doc.Load(response.Content.ReadAsXmlReader( new XmlReaderSettings() {ProhibitDtd = false}));

var nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("xh", "http://www.w3.org/1999/xhtml");
var xpathToCount = "//xh:li[@id='on_lists_tab']/xh:a[1]/xh:span";
var count = doc.SelectSingleNode(xpathToCount,nsmgr).InnerText;

【讨论】:

  • 易碎。依赖用户名是脆弱的。在处理过其他几个 Twitter 应用程序之后,人们确实会更改他们的用户名。通过 user_ids 访问数据效果更好。依靠twitter的页面布局是脆弱的; xpath 查询很脆弱。使用//*[@id="lists_count"] 会更安全。最后,不需要身份验证,但我们还是使用 OAuth(不是用户/密码)。
  • ...但是,不幸的是,这可能是目前唯一的直接方式。仍然值得点赞。
  • 据我了解,依赖 twitter API 响应的格式首先是脆弱的 :-)。我没有看到 ID 为“lists_count”的元素。听起来绝对是更好的选择。
【解决方案2】:

更新:Twitter 将listed_count 添加到用户负载中。


看起来将lists_count 添加到用户有效负载是on the todo list

我们的待办事项清单上有这个。它需要相当广泛的异步片段失效,因此它不像将计数添加到有效负载中那么简单。不过我们已经把它列在了名单上。

同时,Darrel's suggestion 是唯一直接的方法,但语言及其库的简洁性确实很重要:

require 'rubygems'
require 'nokogiri'
require 'open-uri'

username = "twitterapi"
page = Nokogiri::HTML(open("http://twitter.com/#{username}"))
page.at_css("#lists_count").text.gsub(/\D/, "").to_i          # => 1299

【讨论】:

    猜你喜欢
    • 2014-06-23
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2012-11-17
    • 1970-01-01
    • 2013-04-13
    • 1970-01-01
    相关资源
    最近更新 更多