2016-04-12 1 views
0

Я пытаюсь извлечь отдельные фрагменты данных из общего потока твитов для двух отслеживаемых ключевых слов, используя пакет Python TwitterAPI.Как получить исходный любимый счетчик и подсчет каждого пользователя из API потоковой передачи Twitter в Python

Я бы в идеале хотел бы получить подсчитывать оригинальные любимые для retweeted_status объекта (не для status оболочки пользователя), но у меня возникают трудности, делая это, так как и print(retweeted_status['favorite_count']) и print(status['favorite_count']) всегда возвращает нулевое значение.

В противном случае я хотел бы иметь возможность подсчитывать количество последователей каждого пользователя в потоке. Я могу видеть объект под названием «friends_count» в полном формате JSON вернулся из каждого твита, когда я бегу print(item), но если я бегу 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 или самого API Twitter после нескольких часов поиска.

EDIT: это то, что API потоковой передачи возвращается для сообщения одного пользователя при запуске for user in f print(user) (я не знаю, как сделать его более читаемым/обернуть текст в Stack Overflow, извините) - вы можете видеть как " friends_count 'и' followers_count 'возвращают число, но я не знаю, как распечатать их отдельно, без его просто в результате 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} 
+0

Я не думаю, что это синтаксис ошибки, но я не знаю этого API. 'KeyError' будет то, что вы пытаетесь получить доступ к тому, что не существует. Что вы видите в 'для пользователя в f: print user' для начала отладки? Вам нужно будет предоставить json, я думаю, или, по крайней мере, его структуру в примере. Это может также содержать ответ на вопрос, почему ваши попытки с «статусом» дают нулевые результаты. – roganjosh

+0

@roganjosh. Я добавил пример того, что происходит, когда я запускаю пользователя в f: print user - надеюсь, это что-то открывает! –

+0

Хорошо, приближаясь. Редактирование недействительно json, поэтому я не уверен, почему API вернет что-то подобное. Я пытаюсь понять это; в результате редактирования отображается один «пользователь»? – roganjosh

ответ

0

Я решил это и подумал, что это проблема со мной, не понимая, как извлечь JSON из вложенных словарей. Это сработало:

if 'retweeted_status' in item: 

    item2 = item['retweeted_status'] 
    print(item2['favorite_count']) 
Смежные вопросы