Twitter Streaming APIではリアルタイムにツイートを取得できる。sampleとfilterの2種類の機能があるが、filterではキーワードを指定することで、このキーワードを含むツイートを取得することができる。と思っていたのだが、実際にfilterを使ってツイートを収集してみると、期待通りのツイートが取得できていない。
実際にキーワードを指定して収集してみる。以下コードはTwitter Streaming APIで省略されていないツイートテキストを取得するのコードを変更して、filterでキーワード「スイーツ」を指定したもの。これにより、「スイーツ」を含むツイートが取得できることを期待している。
import tweepy # Twitter APIの認証情報 # Twitterの開発者向けのページで取得したキーとトークンを使う CONSUMER_KEY = 'Consumer Key' CONSUMER_SECRET = 'Consumer Secret' ACCESS_TOKEN = 'Access Token' ACCESS_TOKEN_SECRET = 'Access Token Secret' class TwStream(tweepy.Stream): def _get_text(self, status): # 拡張ツイートの場合 if hasattr(status, 'extended_tweet'): return status.extended_tweet['full_text'] else: return status.text def on_status(self, status): # status(APIで取得できるデータ)を受け取ったときにon_statusが実行される print('-------------------------') # リツイートの場合は「RT」+ メンション分だけ文字数オーバーするので省略されることがある if hasattr(status, 'retweeted_status'): text = self._get_text(status.retweeted_status) else: text = self._get_text(status) # スクリーンネームとツイートを表示 print(f'@{status.author.screen_name} {text}') def main(): twstream = TwStream(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET) # キーワード「スイーツ」を指定してツイートを取得 twstream.filter(track=['スイーツ'], languages=['ja']) if __name__ == '__main__': main()
実際に取得できたツイートすべてに「スイーツ」が含まれるが、よくよくみるとハッシュタグ「#スイーツ」や「スイーツ」のあとに空白があるツイートのみしか取得できていない。Twitterで「スイーツ」で検索した結果と比べてみても、それが確認できる。
Twitter APIの仕様を確認すると、Standard streaming API request parametersには以下の一文がある。
Non-space separated languages, such as CJK are currently unsupported.
つまり、filterでは日本語などの単語がスペースで区切られていない言語は未サポートということ。キーワードとして「スイーツ」を指定した場合、スイーツの直後にスペースがあるハッシュタグは取得できるが、ツイートテキスト内に「スイーツ」があっても取得対象にならない。過去のツイートを取得できるSearch APIでは、キーワード「スイーツ」を指定して「スイーツ」を含むツイートを取得できるが、Streaming APIでは同様のことはできないようだ。
Stream APIのfilterで日本語を使う場合は、特定のハッシュタグを含むツイートを取得する場合など、限定的な使い方になりそう。
0 件のコメント:
コメントを投稿