2009-12-15 142 views
0

Twitter APIfriends_countfollowers_count可用作users/showaccount/verify_credentials方法的缓存值。据我所知,确定用户所属列表的数量的唯一方法是致电GET list memberships并通过使用光标来计算一个人所属列表的总数。这是次优的;理想情况下,lists_count将在users/show上提供。Twitter列表成员计数每个用户

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

+0

值得一提的是,无论你在哪里获得,它们被缓存这些值,几乎从不会是正确的。 – Sneakyness 2009-12-18 02:43:33

+0

偷偷摸摸,一致认为,值得一提的是,这个特定任务的“足够接近”值是可以的。 – 2009-12-18 02:51:52

回答

1

更新:微博加入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 
2

忘记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; 
+0

脆。依靠用户名是脆弱的。处理了其他几个Twitter应用程序后,人们确实改变了他们的用户名。通过user_ids访问数据效果更好。依赖于twitter的页面布局很脆弱; xpath查询很脆弱。使用'// * [@ id =“lists_count”]'会更安全。最后,认证对此没有必要,但我们仍然使用OAuth(不是用户/密码)。 – 2009-12-17 03:23:22

+0

...但不幸的是,这可能是现在唯一的直接方式。仍然值得赞扬。 – 2009-12-17 04:50:17

+0

根据我的理解,依赖twitter API响应的格式首先是脆弱的:-)。我没有看到带有“lists_count”id的元素。肯定听起来像是一个更好的选择。 – 2009-12-17 12:02:52

相关问题