山傘のプログラミング勉強日記

プログラミングに関する日記とどうでもよい雑記からなるブログです。

Pythonクローリング&スクレイピング[増補改訂版] ―データ収集・解析のための実践開発ガイドー その10

第5章 クローリング・スクレイピングの実践とデータの活用

クローリングではなく、API を利用してデータを活用してスクレイピングを行います。

Twitter API の利用

Twitter APITwitter Developers に申請することで使うことができます。

Twitter API 登録 (アカウント申請方法) から承認されるまでの手順まとめ ※2019年8月時点の情報 - Qiita

申請をするなかで英語で API をどのように利用するかなどを記述しなければいけませんが、適当に埋めて申請しました。個人利用であれば簡単に申請が通ると思います。

タイムラインの表示 (Requests-OAuthlib)

アクセストークンなどは隠すべき情報なので、".env" ファイルを作成し、そこに、

TWITTER_API_KEY=*************
TWITTER_API_SECRET_KEY=*************
TWITTER_ACCESS_TOKEN=*************
TWITTER_ACCESS_TOKEN_SECRET=*************

github を使うときは、.env は .gitignore ファイルに適切に設定する必要があります。

import os

from requests_oauthlib import OAuth1Session

# 環境変数から認証情報を取得する
TWITTER_API_KEY = os.environ['TWITTER_API_KEY']
TWITTER_API_SECRET_KEY = os.environ['TWITTER_API_SECRET_KEY']
TWITTER_ACCESS_TOKEN = os.environ['TWITTER_ACCESS_TOKEN']
TWITTER_ACCESS_TOKEN_SECRET = os.environ['TWITTER_ACCESS_TOKEN_SECRET']

CK = TWITTER_API_KEY
CS = TWITTER_API_SECRET_KEY
AT = TWITTER_ACCESS_TOKEN
AS = TWITTER_ACCESS_TOKEN_SECRET
twitter = OAuth1Session(CK, CS, AT, AS)

response = twitter.get('https://api.twitter.com/1.1/statuses/home_timeline.json')

for status in response.json():
  print('@' + status['user']['screen_name'], status['text'])

f:id:yamakasa3:20190903225136p:plain

タイムラインの表示 (tweepy)

PythonTwitter API を利用するためのライブラリである tweepy を使うと先ほどのものと似たような感じで記述できます。

import os
import tweepy

# 環境変数から認証情報を取得する
TWITTER_API_KEY = os.environ['TWITTER_API_KEY']
TWITTER_API_SECRET_KEY = os.environ['TWITTER_API_SECRET_KEY']
TWITTER_ACCESS_TOKEN = os.environ['TWITTER_ACCESS_TOKEN']
TWITTER_ACCESS_TOKEN_SECRET = os.environ['TWITTER_ACCESS_TOKEN_SECRET']

# 認証情報

auth = tweepy.OAuthHandler(TWITTER_API_KEY, TWITTER_API_SECRET_KEY)
auth.set_access_token(TWITTER_ACCESS_TOKEN, TWITTER_ACCESS_TOKEN_SECRET)

api = tweepy.API(auth)
public_tweets = api.home_timeline()

for status in public_tweets:
  print('@' + status.user.screen_name, status.text)

感想

Twitter API を利用するには多少の手間がかかりましたが、Twitter を利用したアプリの作成ややデータ分析などをするには必要な手順ですね。まあ、画期的なアイディアが思い浮かばない限りこの API を利用したものは作らないと思います。