Включение критериев фильтрации в API Tweepy Streaming - PullRequest
0 голосов
/ 02 октября 2018

Я хотел бы собрать все твиты, содержащие следующие слова: Биткойн, Эфириум, Литкойн или Денарий

Однако я хочу исключить твиты, которые можно классифицировать как ретвиты итвиты, содержащие ссылки.Со следующего веб-сайта (https://www.followthehashtag.com/help/hidden-twitter-search-operators-extra-power-followthehashtag) я знаю, что могу добавить -фильтр: ссылки , чтобы исключить твиты, содержащие ссылки. Это хорошо видно при сравнении следующего поискового запроса;

https://twitter.com/search?f=tweets&vertical=news&q=Bitcoin&src=typd

enter image description here

с https://twitter.com/search?f=tweets&q=Bitcoin%20-filter%3Alinks&src=typd

enter image description here

То же самое относится и к ретвитам, где я могу использовать -фильтр: ретвиты (см. https://twitter.com/search?f=tweets&q=Bitcoin%20-filter%3Aretweets&src=typd)

. Я хочу добавить эти критерии, чтобы убедиться, что я уменьшаю «шум» и меньшеможет нарушить любые ограничения API. Я написал следующий Python-скрипт:

import sys
import time
import json
import pandas as pd
from tweepy import OAuthHandler
from tweepy import Stream
from tweepy.streaming import StreamListener

USER_KEY = ''
USER_SECRET = ''
ACCESS_TOKEN = ''
ACCESS_SECRET = ''

crypto_tickers = ['bitcoin', 'ethereum', 'litecoin', 'denarius', '-filter:links', '-filter:retweets']

class StdOutListener(StreamListener):

def on_data(self, data):
    tweet = json.loads(data)
    print(tweet)


def on_error(self, status):
    if status == 420:
        sys.stderr.write('Enhance Your Calm; The App Is Being Rate Limited For Making Too Many Requests')
        return True
    else:
        sys.stderr.write('Error {}n'.format(status))
        return True

if __name__ == "__main__":
listener =  StdOutListener()
auth = OAuthHandler(USER_KEY, USER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)

stream = Stream(auth, listener)
stream.filter(languages=['en'], track=crypto_tickers)

Однако в выводе четко показаны твиты, которые являются ретвитами и содержат ссылки. enter image description here

Q1: Как правильно включить критерии поиска в свой скрипт и получить правильный вывод?

Q2: Согласно официальной документации, API потоковой передачи позволяет использовать до 400 ключевых слов отслеживания (https://developer.twitter.com/en/docs/tweets/filter-realtime/overview/statuses-filter.html). Мои два критерия фильтра классифицируются как ключевые слова с двумя треками?

Заранее спасибо,

1 Ответ

0 голосов
/ 04 октября 2018

A1.Вы не можете использовать синтаксис -filter: в Streaming API.Полный список доступных опций здесь в документации .Синтаксис, который вы пытаетесь использовать, специфичен для API поиска REST, а не для стандартного API фильтра в реальном времени (обратите внимание, что в корпоративном API PowerTrack в реальном времени вы можете достичь того, о чем вы спрашиваете, но этокоммерческий API).

A2.В вашем коде 6 ключевых слов отслеживания, включая элементы -filter:, но они никогда не будут совпадать.

...