API Twitter: как искать твиты на основе слов запроса и заданного промежутка времени + характеристики твитов - PullRequest
1 голос
/ 16 октября 2019

Начинающий программист здесь ищет помощи. У меня есть список хэштегов, для которых я хочу получить все исторические твиты с 01-01-2015 по 31-12-2018.

Я пытался использовать библиотеку Tweepy, но она разрешает доступ к твитам только за последние 7 дней. Я также пытался использовать GetOldTweets, так как он дает доступ к историческим твитам, но он постоянно падал. Так что теперь я приобрел премиальный доступ к API для Twitter, который также дает мне доступ ко всем историческим твитам.

Чтобы выполнить мой запрос с помощью API премиум-класса, я не могу использовать библиотеку Tweepy (так как она не имеет связи с API премиум-класса, верно?), И я могу выбрать между TwitterAPI и Search-Tweets.

1- Предоставляет ли TwitterAPI и Search-Tweets информацию относительно имени пользователя, местоположения пользователя, если пользователь подтвержден, язык твита, источник твита, количество ретвитов и избранного, а также дату каждогочирикать? (Как твипы). Я не смог найти никакой информации об этом.

2- Могу ли я указать интервал времени в моем запросе?

3- Как мне все это сделать?

Этобыл мой код для библиотеки Tweepy:

hashtags = ["#AAPL","#FB","#KO","#ABT","#PEPCO",...]

df = pd.DataFrame(columns = ["Hashtag", "Tweets", "User", "User_Followers",
"User_Location", "User_Verified", "User_Lang", "User_Status", 
"User_Method", "Fav_Count", "RT_Count", "Tweet_date"])

def tweepy_df(df,tags):
    for cash in tags:
        i = len(df)+1
        for tweet in tweepy.Cursor(api.search, q= cash, since = "2015-01-01", until = "2018-12-31").items():
            print(i, end = '\r')
            df.loc[i, "Hashtag"] = cash
            df.loc[i, "Tweets"] = tweet.text
            df.loc[i, "User"] = tweet.user.name
            df.loc[i, "User_Followers"] = tweet.followers_count
            df.loc[i, "User_Location"] = tweet.user.location
            df.loc[i, "User_Verified"] = tweet.user.verified
            df.loc[i, "User_Lang"] = tweet.lang
            df.loc[i, "User_Status"] = tweet.user.statuses_count
            df.loc[i, "User_Method"] = tweet.source
            df.loc[i, "Fav_Count"] = tweet.favorite_count
            df.loc[i, "RT_Count"] = tweet.retweet_count
            df.loc[i, "Tweet_date"] = tweet.created_at
            i+=1
    return df

Как мне адаптировать это, например, для библиотеки API Twitter?

Я знаю, что она должна быть адаптирована к чему-то вроде этого:

for tweet in api.request('search/tweets', {'q':cash})

Но ему все еще не хватает желаемого промежутка времени. И я не уверен, совпадают ли имена для характеристик с именами для этих библиотек.

1 Ответ

1 голос
/ 16 октября 2019

Используя TwitterAPI , вы можете отправлять запросы расширенного поиска следующим образом:

from TwitterAPI import TwitterAPI
SEARCH_TERM = '#AAPL OR #FB OR #KO OR #ABT OR #PEPCO'
PRODUCT = 'fullarchive'
LABEL = 'your label'
api = TwitterAPI('consumer key', 'consumer secret', 'access token key', 'access token secret')
r = api.request('tweets/search/%s/:%s' % (PRODUCT, LABEL), {'query':SEARCH_TERM})
for item in r:
    if 'text' in item:
        print(item['text'])
        print(item['user']['name'])
        print(item['followers_count'])
        print(item['user']['location'])
        print(item['user']['verified'])
        print(item['lang'])
        print(item['user']['statuses_count'])
        print(item['source'])
        print(item['favorite_count'])
        print(item['retweet_count'])
        print(item['created_at'])

Расширенный поиск doc объясняет поддерживаемые аргументы запроса. Чтобы сделать диапазон дат используйте это:

r = api.request('tweets/search/%s/:%s' % (PRODUCT, LABEL), 
                {'query':SEARCH_TERM, 'fromDate':201501010000, 'toDate':201812310000})
...