如何从 Python 中的 Twitter 流 API 中获取原始收藏计数和每个用户的关注者计数
How to get original favorite count, and each user's follower count, from Twitter streaming API in Python
我正在尝试使用 Python 程序包 TwitterAPI 从 public 推文流中为两个跟踪的关键字提取单独的数据片段。
理想情况下,我想获得 retweeted_status
object 的原始收藏计数(不是用户的 status
包装器),但这样做有困难,因为 print(retweeted_status['favorite_count'])
和 print(status['favorite_count'])
总是 return 零。
否则,我希望能够获得流中每个用户的关注者数量。当我 运行 print(item)
时,我可以在每条推文的完整 json return 中看到一个名为 'friends_count' 的实体,但是如果我 运行 print(user['friends_count'])
我收到以下错误:
Traceback (most recent call last):
File "twitter.py", line 145, in <module>
friends()
File "twitter.py", line 110, in favourites
print(user['friends_count'])
KeyError: 'friends_count'
目前我的完整代码如下所示:
import sys
sys.path.append('/Library/Python/2.6/site-packages')
from TwitterAPI import TwitterAPI
import string
OAUTH_SECRET = "foo"
OAUTH_TOKEN = "foo"
CONSUMER_KEY = "foo"
CONSUMER_SECRET = "foo"
def friends():
TRACK_TERM = 'hello'
api = TwitterAPI(CONSUMER_KEY, CONSUMER_SECRET, OAUTH_TOKEN, OAUTH_SECRET)
f = api.request('statuses/filter', {'track': TRACK_TERM})
for user in f:
print(user['friends_count'])
def favorite():
TRACK_TERM = 'kanye'
api = TwitterAPI(CONSUMER_KEY, CONSUMER_SECRET, OAUTH_TOKEN, OAUTH_SECRET)
h = api.request('statuses/filter', {'track': TRACK_TERM})
for retweeted_item in h:
print(retweeted_item['favorite_count'])
if __name__ == '__main__':
try:
friends()
favorite()
except KeyboardInterrupt:
print '\nGoodbye!'
任何建议或信息将不胜感激 - 我假设我在语法中的某处犯了错误(我是 Python 初学者!)它抛出 KeyErrors 但无法解决它来自 TwitterAPI 包的文档,或者经过数小时搜索后的 Twitter API 本身。
编辑:当我 运行 for user in f print(user)
(我不知道如何让它更多 readable/wrap Stack Overflow 上的文字,抱歉) - 你可以看到 'friends_count' 和 'followers_count' return 一个数字,但我不知道如何打印它们单独出来而不会导致 KeyError。
{u'contributors': None, u'truncated': False, u'text': u'Hearing Kanye spit on a Drake beat is just really a lot for me!!!! I was not prepared!!', u'is_quote_status': False, u'in_reply_to_status_id': None, u'id': 719940912453853184, u'favorite_count': 0, u'source': u'<a href="http://twitter.com/download/iphone" rel="nofollow">Twitter for iPhone</a>', u'retweeted': False, u'coordinates': None, u'timestamp_ms': u'1460482264041', u'entities': {u'user_mentions': [], u'symbols': [], u'hashtags': [], u'urls': []}, u'in_reply_to_screen_name': None, u'id_str': u'719940912453853184', u'retweet_count': 0, u'in_reply_to_user_id': None, u'favorited': False, u'user': {u'follow_request_sent': None, u'profile_use_background_image': True, u'default_profile_image': False, u'id': 247986350, u'verified': False, u'profile_image_url_https': u'https://pbs.twimg.com/profile_images/715358123108601856/KM-OCY2D_normal.jpg', u'profile_sidebar_fill_color': u'DDEEF6', u'profile_text_color': u'333333', u'followers_count': 277, u'profile_sidebar_border_color': u'FFFFFF', u'id_str': u'247986350', u'profile_background_color': u'C0DEED', u'listed_count': 1, u'profile_background_image_url_https': u'https://pbs.twimg.com/profile_background_images/695740599/089d0a4e4385f2ac9cad05498169e606.jpeg', u'utc_offset': -25200, u'statuses_count': 6024, u'description': u'this is my part, nobody else speak', u'friends_count': 298, u'location': u'las vegas', u'profile_link_color': u'FFCC4D', u'profile_image_url': u'http://pbs.twimg.com/profile_images/715358123108601856/KM-OCY2D_normal.jpg', u'following': None, u'geo_enabled': True, u'profile_banner_url': u'https://pbs.twimg.com/profile_banners/247986350/1454553801', u'profile_background_image_url': u'http://pbs.twimg.com/profile_background_images/695740599/089d0a4e4385f2ac9cad05498169e606.jpeg', u'name': u'princess laser tag', u'lang': u'en', u'profile_background_tile': True, u'favourites_count': 9925, u'screen_name': u'hannahinloafers', u'notifications': None, u'url': u'http://eecummingsandgoings.tumblr.com', u'created_at': u'Sun Feb 06 00:49:24 +0000 2011', u'contributors_enabled': False, u'time_zone': u'Pacific Time (US & Canada)', u'protected': False, u'default_profile': False, u'is_translator': False}, u'geo': None, u'in_reply_to_user_id_str': None, u'lang': u'en', u'created_at': u'Tue Apr 12 17:31:04 +0000 2016', u'filter_level': u'low', u'in_reply_to_status_id_str': None, u'place': None}
我已经解决了,我认为这是我不了解如何从嵌套词典中检索 JSON 的问题。这有效:
if 'retweeted_status' in item:
item2 = item['retweeted_status']
print(item2['favorite_count'])
我正在尝试使用 Python 程序包 TwitterAPI 从 public 推文流中为两个跟踪的关键字提取单独的数据片段。
理想情况下,我想获得 retweeted_status
object 的原始收藏计数(不是用户的 status
包装器),但这样做有困难,因为 print(retweeted_status['favorite_count'])
和 print(status['favorite_count'])
总是 return 零。
否则,我希望能够获得流中每个用户的关注者数量。当我 运行 print(item)
时,我可以在每条推文的完整 json return 中看到一个名为 'friends_count' 的实体,但是如果我 运行 print(user['friends_count'])
我收到以下错误:
Traceback (most recent call last):
File "twitter.py", line 145, in <module>
friends()
File "twitter.py", line 110, in favourites
print(user['friends_count'])
KeyError: 'friends_count'
目前我的完整代码如下所示:
import sys
sys.path.append('/Library/Python/2.6/site-packages')
from TwitterAPI import TwitterAPI
import string
OAUTH_SECRET = "foo"
OAUTH_TOKEN = "foo"
CONSUMER_KEY = "foo"
CONSUMER_SECRET = "foo"
def friends():
TRACK_TERM = 'hello'
api = TwitterAPI(CONSUMER_KEY, CONSUMER_SECRET, OAUTH_TOKEN, OAUTH_SECRET)
f = api.request('statuses/filter', {'track': TRACK_TERM})
for user in f:
print(user['friends_count'])
def favorite():
TRACK_TERM = 'kanye'
api = TwitterAPI(CONSUMER_KEY, CONSUMER_SECRET, OAUTH_TOKEN, OAUTH_SECRET)
h = api.request('statuses/filter', {'track': TRACK_TERM})
for retweeted_item in h:
print(retweeted_item['favorite_count'])
if __name__ == '__main__':
try:
friends()
favorite()
except KeyboardInterrupt:
print '\nGoodbye!'
任何建议或信息将不胜感激 - 我假设我在语法中的某处犯了错误(我是 Python 初学者!)它抛出 KeyErrors 但无法解决它来自 TwitterAPI 包的文档,或者经过数小时搜索后的 Twitter API 本身。
编辑:当我 运行 for user in f print(user)
(我不知道如何让它更多 readable/wrap Stack Overflow 上的文字,抱歉) - 你可以看到 'friends_count' 和 'followers_count' return 一个数字,但我不知道如何打印它们单独出来而不会导致 KeyError。
{u'contributors': None, u'truncated': False, u'text': u'Hearing Kanye spit on a Drake beat is just really a lot for me!!!! I was not prepared!!', u'is_quote_status': False, u'in_reply_to_status_id': None, u'id': 719940912453853184, u'favorite_count': 0, u'source': u'<a href="http://twitter.com/download/iphone" rel="nofollow">Twitter for iPhone</a>', u'retweeted': False, u'coordinates': None, u'timestamp_ms': u'1460482264041', u'entities': {u'user_mentions': [], u'symbols': [], u'hashtags': [], u'urls': []}, u'in_reply_to_screen_name': None, u'id_str': u'719940912453853184', u'retweet_count': 0, u'in_reply_to_user_id': None, u'favorited': False, u'user': {u'follow_request_sent': None, u'profile_use_background_image': True, u'default_profile_image': False, u'id': 247986350, u'verified': False, u'profile_image_url_https': u'https://pbs.twimg.com/profile_images/715358123108601856/KM-OCY2D_normal.jpg', u'profile_sidebar_fill_color': u'DDEEF6', u'profile_text_color': u'333333', u'followers_count': 277, u'profile_sidebar_border_color': u'FFFFFF', u'id_str': u'247986350', u'profile_background_color': u'C0DEED', u'listed_count': 1, u'profile_background_image_url_https': u'https://pbs.twimg.com/profile_background_images/695740599/089d0a4e4385f2ac9cad05498169e606.jpeg', u'utc_offset': -25200, u'statuses_count': 6024, u'description': u'this is my part, nobody else speak', u'friends_count': 298, u'location': u'las vegas', u'profile_link_color': u'FFCC4D', u'profile_image_url': u'http://pbs.twimg.com/profile_images/715358123108601856/KM-OCY2D_normal.jpg', u'following': None, u'geo_enabled': True, u'profile_banner_url': u'https://pbs.twimg.com/profile_banners/247986350/1454553801', u'profile_background_image_url': u'http://pbs.twimg.com/profile_background_images/695740599/089d0a4e4385f2ac9cad05498169e606.jpeg', u'name': u'princess laser tag', u'lang': u'en', u'profile_background_tile': True, u'favourites_count': 9925, u'screen_name': u'hannahinloafers', u'notifications': None, u'url': u'http://eecummingsandgoings.tumblr.com', u'created_at': u'Sun Feb 06 00:49:24 +0000 2011', u'contributors_enabled': False, u'time_zone': u'Pacific Time (US & Canada)', u'protected': False, u'default_profile': False, u'is_translator': False}, u'geo': None, u'in_reply_to_user_id_str': None, u'lang': u'en', u'created_at': u'Tue Apr 12 17:31:04 +0000 2016', u'filter_level': u'low', u'in_reply_to_status_id_str': None, u'place': None}
我已经解决了,我认为这是我不了解如何从嵌套词典中检索 JSON 的问题。这有效:
if 'retweeted_status' in item:
item2 = item['retweeted_status']
print(item2['favorite_count'])