2013-06-19 13 views
0

使用Twitter API,我得到我的代码rate_limiting信息我已经写在下面:需要特定的速率限制数量的Twitter的API的Python

def limit(): 
twitter = Twitter(auth=OAuth('....')) 
g = twitter.application.rate_limit_status() 
print g 

这是伟大的,但我得到一个很大的混乱是这样的:

{u'rate_limit_context': {u'access_token': u'....'}, u'resources': {u'account': {u'/account/verify_credentials': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/account/settings': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}}, u'blocks': {u'/blocks/list': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/blocks/ids': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}}, u'users': {u'/users/contributors': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/users/lookup': {u'reset': 1371673471, u'limit': 180, u'remaining': 180}, u'/users/search': {u'reset': 1371673471, u'limit': 180, u'remaining': 180}, u'/users/suggestions/:slug/members': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/users/suggestions/:slug': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/users/show/:id': {u'reset': 1371673471, u'limit': 180, u'remaining': 180}, u'/users/suggestions': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/users/profile_banner': {u'reset': 1371673471, u'limit': 180, u'remaining': 180}, u'/users/contributees': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}}, u'friends': {u'/friends/list': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/friends/ids': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}}, u'saved_searches': {u'/saved_searches/show/:id': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/saved_searches/list': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/saved_searches/destroy/:id': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}}, u'lists': {u'/lists/subscriptions': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/lists/subscribers/show': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/lists/statuses': {u'reset': 1371673471, u'limit': 180, u'remaining': 180}, u'/lists/subscribers': {u'reset': 1371673471, u'limit': 180, u'remaining': 180}, u'/lists/list': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/lists/members/show': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/lists/show': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/lists/memberships': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/lists/members': {u'reset': 1371673471, u'limit': 180, u'remaining': 180}, u'/lists/ownerships': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}}, u'search': {u'/search/tweets': {u'reset': 1371673471, u'limit': 180, u'remaining': 180}}, u'application': {u'/application/rate_limit_status': {u'reset': 1371673401, u'limit': 180, u'remaining': 178}}, u'trends': {u'/trends/available': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/trends/closest': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/trends/place': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}}, u'followers': {u'/followers/list': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/followers/ids': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}}, u'favorites': {u'/favorites/list': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}}, u'friendships': {u'/friendships/outgoing': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/friendships/show': {u'reset': 1371673471, u'limit': 180, u'remaining': 180}, u'/friendships/incoming': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/friendships/no_retweets/ids': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/friendships/lookup': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}}, u'geo': {u'/geo/similar_places': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/geo/id/:place_id': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/geo/reverse_geocode': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/geo/search': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}}, u'direct_messages': {u'/direct_messages/show': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/direct_messages': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/direct_messages/sent': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/direct_messages/sent_and_received': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}}, u'statuses': {u'/statuses/retweets_of_me': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/statuses/retweeters/ids': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/statuses/mentions_timeline': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/statuses/user_timeline': {u'reset': 1371672792, u'limit': 180, u'remaining': 177}, u'/statuses/oembed': {u'reset': 1371673471, u'limit': 180, u'remaining': 180}, u'/statuses/show/:id': {u'reset': 1371673471, u'limit': 180, u'remaining': 180}, u'/statuses/home_timeline': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/statuses/retweets/:id': {u'reset': 1371672792, u'limit': 15, u'remaining': 0}}, u'help': {u'/help/tos': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/help/configuration': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/help/privacy': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}, u'/help/languages': {u'reset': 1371673471, u'limit': 15, u'remaining': 15}}}} 

我只需要它的一部分,但它。我只需要知道对此的其余限制:

u'/statuses/retweets/:id': {u'reset': 1371672792, u'limit': 15, u'remaining': 0} 

我该如何得到这个数字?

回答

1

不知道Twitter API的详细信息,它看起来像rate_limit_status()方法返回的dictionarydictionaries。所以你应该能够通过查找正确的键来获得你想要的数据:

>>> g = eval("{u'rate_limit_context': {u'access_token': u'....'}, u'resources': ... ") 
>>> g[u'resources'][u'statuses'][u'/statuses/retweets/:id'] 
{u'limit': 15, u'remaining': 0, u'reset': 1371672792} 
>>> g[u'resources'][u'statuses'][u'/statuses/retweets/:id'][u'remaining'] 
0 
+0

谢谢!我只是在做[u'statuses'] [u'/ status/retweets /:id'] [u'remaining'] – user1681664

0

这个问题让我在过去的72小时里感到沮丧。首先,我们应该在此澄清 - 您正在使用Tweepy库,对吗?我有一些使用PyPI列表顶部的twitter包的代码,但它并没有显示他们从API 1.0升级到API 1.1,也没有看到人气python-twitter中的#2似乎已经准备就绪,尽管API在一个月前停止运转。

整个速率限制方案已从API 1.0更改为API 1.1 - 之前您每小时有350个通用令牌,并且系统每小时复位一次。基于源IP不带身份验证的先前获得150个API令牌的搜索能力消失了。现在时间增量是十五分钟,你会得到15个帖子和180个获得。

https://dev.twitter.com/docs/rate-limiting/1.1

新的API提供粒度每个API接入点的水平 - 而不是仅仅的350个记号,它看起来像每一个可以想象的岗位类型的动作是通过类型限制为15%每个刻钟桶,并获得类型的行动是每季度限制为180。它看起来像Twitter将更好地处理API使用情况记帐。就我的目的而言,容量几乎是每小时350次/小时(4x180 = 720次/小时)的两倍。谢谢,Twitter。

其他响应者描述的访问方法很难看 - 我们必须深入到词典的四个层次,才能从概念上为端点/计数元组词典做一个词典?如果这是完整的结构,那就这样吧,但是真的需要一个简单的方法来命名所需的端点并获取一个整数。这将是可读的,这种字典引用的混淆不是。

0

你可以看到你在Twitter上的文档描述了返回对象的完整JSON结构的一个例子,here

由于已经由andersschuller这里所提到的,在Python中你可以得到你想要简单对象通过呼叫它的钥匙,g[u'resources'][u'statuses'][u'/statuses/retweets/:id']