web-dev-qa-db-ja.com

Twitterフィードを言語のみでフィルタリングする

Twitterフィードの抽出にTweepy APIを使用しています。特定の言語のすべてのTwitterフィードのみを抽出します。言語フィルターは、trackフィルターが提供されている場合にのみ機能します。次のコードは406エラーを返します。

l = StdOutListener()
auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
stream = Stream(auth, l)
stream.filter(languages=["en"])

Tweepyを使用して特定の言語からallツイートを抽出するにはどうすればよいですか?

21
Sudo

(特別なアクセスなしでは)できません。ストリーミングallツイート(フィルタリングなし)には firehose への接続が必要です。これはTwitterによって特定のユースケースでのみ許可されます。正直なところ、ファイアホースは実際には必要ありません。 track を適切に使用すると、処理方法がわからないほど多くのツイートを取得できます。

次のようなものを使用してみてください。

stream.filter(languages=["en"], track=["a", "the", "i", "you", "u"]) # etc

そのような単語でフィルタリングすると、非常に多くのツイートが得られます。最も頻繁に使用される単語の実際のデータが必要な場合は、Timeのこの記事をご覧ください。 Twitterで最も頻繁に使用される500個の単語最大4 キーワードを使用できますが、特定の時間間隔で1%のツイート制限に近づく可能性があります。 trackパラメーターが特定の時間にすべてのツイートの60%に一致する場合でも、1%のみを取得します(これは多くのツイートです)。

21
Luigi

フィルタリングされたツイートを直接取得する以外に、異なる言語のすべてのツイートを取得した後にフィルタリングすることができます:

tweets = api.search("python")
for Tweet in tweets:
   if Tweet.lang == "en":
      print(Tweet.text)
      #Do the stuff here

それが役に立てば幸い。

4
Jay Mehta

Cursor()の_lang='en'_ paramを試してください。

tweepy.Cursor(.. lang='en')

3
Aziz Alto

これは私のために働いた。

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
a=input("Enter Tag: ")
tweets = api.search(a, count=200)
a=[]
for Tweet in tweets:
    if Tweet.lang == "en":
        a.append(Tweet.text)
0
Smit Jethwa

Githubコードでtrackメソッドの引数を確認できます https://github.com/tweepy/tweepy/blob/master/tweepy/streaming.py

ISO_639-1_codesの配列に言語を入れます。

彼らです:

filter(self, follow=None, track=None, is_async=False, locations=None,
               stall_warnings=False, languages=None, encoding='utf8', filter_level=None):

したがって、言語ごとに追跡するには、次のようにします。

class Listener(StreamListener):

    def on_data(self, data):
        j = json.loads(data)
        t = {
          'screenName' : j['user']['screen_name'],
          'text:': j['text']
          }
        print(t)
        return(True)

    def on_status(self, status):
        print(status.text)


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

stream = Stream(auth=auth, listener=Listener(),wait_on_rate_limit=True,wait_on_rate_limit_notify=True)

stream.filter(track=['Trump'],languages=["en","fr","es"])
0
Walker Rowe