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 件のコメント:
コメントを投稿