import warnings
warnings.filterwarnings('ignore')
import tweepy

"""
Explanation: Для удобного получения твитов пользователей будем использовать библиотеку tweepy.
End of explanation
"""


access_token = ""
access_token_secret = ""
consumer_key = ""
consumer_secret = ""

# Чтобы получить данные разработчика, нужно зарегистрироваться на https://dev.twitter.com и добавить свое приложение.

"""
Explanation: Вводим данные разработчика.
End of explanation
"""


auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

"""
Explanation: Получаем доступ к Twitter API.
End of explanation
"""


def limit_handled(cursor):
    while True:
        try:
            yield cursor.next()
        except tweepy.RateLimitError:
            time.sleep(15 * 60)
            print('raised RateLimitError')

data = {}
for friend in limit_handled(tweepy.Cursor(api.friends).items()):
    user_timeline = api.user_timeline(screen_name=friend.screen_name, count=100)
    tweets = []
    for status in user_timeline:
        tweets.append(status.text)
    # У некоторых пользователей может быть меньше 100 твитов, поэтому будем дополнять их пустыми строками,
    # чтобы дальше было удобнее работать с записью в файл
    while (len(tweets) < 100):
        tweets.append('')
    data.update({friend.screen_name : tweets})

"""
Explanation: Теперь считаем твиты каждого моего подписчика. Будем брать последние 100 твитов.
End of explanation
"""


import pandas as pd
df = pd.DataFrame.from_dict(data)
df.to_csv('twitter-data.csv', encoding='utf8')

"""
Explanation: Данные получены, теперь нужно их красиво оформить в файл.
Для этого запишем данные в DataFrame из библиотеки pandas.
End of explanation
"""


