【初心者向け】PythonでTwitterデータ収集&Spread Sheetに書き込みまでを自動化する

目次

# 1. はじめに
・できるものはどんなもの?
・どんな人に読んでもらいたい?
・このチュートリアルで具体的に何が学べるの?
・読む前に必要な準備はある?
・何の役に立つの?
・実際にどんな事例で活用されているの?
# 2. チュートリアル実践
・Pythonを動かせるようになるための準備
・Twitterのデータにアクセスできるようになる
・Twitterでユーザー情報を取得してみる
・Twitterで特定のワードを含むツイートを収集する
・Spread Sheetにアクセスできるようになる
・Twitterで収集したデータをSpread Sheetに書き込む
・Herokuにデプロイして自動で定期的にデータ収集させる
# 3. さいごに


# 1. はじめに

こんにちは。仮想サーファー(@virtual_techX)です!

さぼりエンジニアがお届けするチュートリアルコンテンツ第1弾は、「Twitter APIにアクセスして取得したデータをSpread Sheetに出力する作業を自動化する」です!

今回紹介するプログラムを扱えるようになれば、Twitterから提供されているデータの範囲でなら大抵のことができるようになります👏

TwitterのAPIは様々なデータを扱うことができるし、Spread Sheetは簡易的なデータベースとして使えるので、これらをパッと実装できるようになると、会社での仕事や自分の普段の作業をパッと自動化することができるようになって、プログラミングでできることの幅がグッと広がります。


それでは最初に、今回のチュートリアルでできるようになることを簡単にまとめておきますね。



できるものはどんなもの?

このチュートリアルを終え、最終的にできるもののイメージがコチラ。

「Progate」に関してTwitterでツイートしているものを収集してSpread Sheetに自動更新させています。
(画像をクリックするとSpread Sheetに飛びます。著者以外は編集できない設定にしています。)

1時間に1回自動でTwitterのデータにアクセスして収集するプログラムにしていますが、「Progate」に関するつぶやき多すぎて、1ヶ月もすればSpread Sheetのデータ上限にひっかかってしまいそうな勢い。Progateの人気すごい ( ・v・)/



どんな人に読んでもらいたい?

こちらのnoteは、プログラミング初心者だけどプログラミングをもっと学習したい!という方向けのコンテンツになっています。

・Progateをある程度やってみて、プログラミングの本を読んだりもしたけど、もっと実践的なプログラミングをしたい。
・エンジニアじゃないけど、業務の効率化に使える簡易的なプログラミングができるようになりたい。

上のいずれかに該当する方に読んでもらいたいと思っています!

プログラミングを一度も触ったことがない方や、Twitterのデータ興味ないという方は、このチュートリアルを読み進めても確実に苦戦するし無駄になってしまうので、これ以上読み進めない方がいいです。



このチュートリアルで具体的に何が学べるの?

このチュートリアルを通して学べるプログラミング技術は以下のものです。

① Pythonの基本的なプログラミング
② Twitter APIへのアクセス(Twitter上のデータ取得)
③ Spread Sheet APIへのアクセス(Spread Sheetへの自動書き込み)
④ Herokuへアプリケーションのデプロイ(自動で②と③が動くようにする)

チュートリアルの最後④まで進めることで、Twitterデータを取得してSpread Sheetに書き込むところまでを完全自動で定期的に動くよう設定することができます。

とはいえ、いきなり④まで進めることが難しい場合もあるかもしれません。そんな方は、欲しい時に自動でTwitterのデータを取得してSpread Sheetに書き込みできるだけでも、できることの幅が大きく広がります。まずは③まで進めることを目指すとよいです。

③までは、プログラミング経験があまりない方だと3~4時間程度、プログラミング経験がある方だと1~2時間程度で進められる想定です。



読む前に必要な準備はある?

・MacのPC
・インターネットに接続できる環境(このnoteが普通に読めていればOK)
・ツイッターのアカウント
・Googleのアカウント(GmailアカウントがあればOK)

上に書いているもの以外、事前の準備は必要ありません。
すべてチュートリアル内の情報だけで完結できるように設計しています。

ただし、最低限のプログラミングの知識がないと読み進めていくのが辛いと思うので、ProgateのGit、Command Line、Pythonの内容は理解できていると良いです。

(画像:Progateのコース選択画面



何の役に立つの?

Twitter上のデータを収集し、分析をする時に活用できます。
以下、今回のチュートリアルをすることでできるようになることの例。

・エゴサーチを自動化し、データを蓄積する
・自分の携わっているサービスの口コミを収集して分析できる
・特定のテーマのイベント情報をいち早く知れる
・自分の気になる本や映画の口コミを収集できる

Twitter上のデータ分析がしたい場合、今回のチュートリアルをやり終えることで、上にあげたもの以外でもできることはかなり増えます。



実際にどんな事例で活用されているの?

・自社サービスへのクレームの検知
・自社サービスの口コミ量の増減の分析

僕は、今回のチュートリアルで扱うプログラムを上のような用途で利用しています。

特にWebサービスの分析に重宝していて、口コミや緊急度の高いクレームをいちいちお問い合わせフォームから送信してくれるユーザーは少なくてツイートで晒されることが多いので、自社サービスのクレーム検知・口コミ量の増減はサービスの認知度や健全さを分析する上でTwitterのデータを収集することの価値は大きいです。

普段お世話になっている他社のCOOにも話したところ反響があったので、その会社のサービスに関してもササっと実装しました。



# 2. チュートリアル実践

それでは、チュートリアルに入っていきます!


Pythonの実行環境の準備

今回はPythonというプログラミング言語でプログラミングをしていくので、まずは、Pythonを実行することができる環境を準備していきます。

* 注意 *
すでにPythonを実行できる環境がある方は、「Twitterのデータにアクセスできるようになる」の箇所まで読み飛ばしてください。


①Terminalの用意

Finder > Applications > Terminalと遷移し、Macに標準で搭載されているアプリケーションTerminalを開きます。

Terminalって何?という方は、命令文を打ち込むことでパソコンを操作できる便利ツールだと捉えるとよいです。

上の画像のように黒い画面(Terminal)に命令文を打ち込んでいくことで、プログラムやPCに操作をさせることができます。

試しに、$マークの後ろに「$ echo Pythonのチュートリアルなう!」と打ち込んで、(Enterボタンを押して)命令文を実行してみてください。

「Pythonのチュートリアルなう!」という文章が表示されたはずです。「echo」という命令文は、「その後に続く文章をTerminalに表示する」という命令文を意味するので、このように文章を表示することができました。


②Homebrewのインストール

Terminalを使う準備ができたら、次にPythonを使用できるように準備していきましょう。まずは、PythonをTerminalで簡単にインストールできるように、Homebrewというものをインストールします。

先ほどと同じように、Terminalの$マーク以降の場所に次の命令文を入力します。「$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"」

「Press RETURN to continue or any other key to abort」と表示されたら、Enterボタンを押してください。また、「Password:」と表示されたら、いつもパソコンにログインする時に使っているパスワードを入力してください。

これによって、Homebrewがインストールされます。

Homebrewのインストールが成功したかどうかは、「$ brew -v」というHomebrewのバージョンを確認する命令文を打ち込むことで確認できます。

試しに「$ brew -v」と打ち込んでみましょう。

上の画像のように、「$ brew -v」と打ち込んで、「Homebrew 1.7.6」のようにバージョン番号が表示されればインストール成功しています(バージョン番号は異なる場合があります)。


③Pythonのインストール

最後に、Pythonを使えるようにインストールしていきます。

pythonのバージョンは、3のもの(2018年10月現在で最新版)をインストールします。

これまでと同じように、「$ brew install python3」と打ち込みます。

ぼくはすでにPythonをインストールしているのでErrorとなっていますが、初めてPythonを利用する場合はインストールが成功したような表示がされるはずです。

これで自分のPC環境にPythonがインストールされたはずです。 このPythonを簡単に使えるようにするため、パスの設定をしておきましょう。

Terminalに「$ open ~/.bash_profile」と打ち込みます。

上記の命令文を打ち込むと、「.bash_profile」という名前のファイルが開かれます。

開いたファイルに、「export PATH=/usr/local/bin:$PATH」という文章をコピペして、ファイルの変更を保存します(「command」ボタンと「S」ボタン同時押しで保存するショートカットおすすめです)。

「command + S」は、Macでファイルの保存をしたい時によく使うショットカットキーです。

ファイルの保存ができたら、ファイルを閉じ、再びTerminalに戻り「$ source ~/.bash_profile」という命令文を打ち込みます。

以上によって、Terminalで「$ python」と打ち込むことで、Pythonを動かせるようになりました。

入力できる場所が「>>> 」という表示になっていれば、Pythonが起動できています。

試しに、「>>> 1 + 1」と入力して、Enterを押してみてください。

上の画像のように「2」と表示されていればOKです!

ここまでで、Pythonを動かせる準備は終了です!

僕の周りのプログラミング未経験者のうち1/3の人は、環境構築を完了にたどり着けないので、ここまで達成できただけでも未経験者にとっては大きな進歩です!(僕はプログラミングを初めて2ヶ月間は、できる人に環境構築を任せっきりでした。笑)



Twitterのデータにアクセスできるようになる

Pythonを実行できる環境も整ったので、早速TwitterへアクセスしてTwitterのデータを取得していきます!

Twitterにアクセスするためには、以下のような手順が必要です。

・Twitterへアクセスするためのアクセストークンを取得する
・Twitterにアクセスするプログラムを書く
・Twitterにアクセスするプログラムを実行する

それでは、チュートリアルを進めていきましょう。


①Twitterへアクセスするためのアクセストークンを取得する

まずはTwitterへプログラムでアクセスするために、アクセストークンを取得していきます。

ツイッターにログインした状態で、以下のリンク先をクリックして、ツイッターのアプリケーション管理画面に移動します。

移動すると、下の画像のような画面になっているはずです。

上の画面で、「Apply for a developer account」というボタンを押して新規アプリケーションを作成するために開発者登録をします。


「Continue」をクリックします。


個人利用にチェックをいれ、情報入力して「Continue」をクリック。

次の画面でTwitter APIの利用用途を聞かれるのですが、300文字も入力するのが辛いので以下の文章も参考に進めてみてください。

(英語がおかしい箇所はお許しください。)

I'm using Twitter APIs to analyze some data for my web service development. I think Twitter data is precious and I can know many things. It helps me to know what people's insight by using Twitter API. It's going to be limited to personal use. I'm not using tweet some text or update some data with Twitter API.


最後まで進むとメール認証画面になるので、ツイッターに登録しているメールアドレスの受信メールを確認してメール認証をしましょう。

上の画像のようなメールを受信しているので、「Confirm your email」をクリックします。

「Confirm your email」をクリック


メールの認証をすると、上の画像のように「審査するからちょっと待ってね」と言われます。

半年前に初めてTwitterAPIの登録をした時は承認なしですぐ使えたのですが、徐々に制限が厳しくなっているようです。まだTwitter API登録したことない方は、早めに登録した方が良さそう。


登録したものが承認されると、Appsに表示されています。

Appsの右端の「Details」というボタンをクリック。


Keys and tokensというタブに、「API Key」・「API Secret Key」・「Access Token」・「Access Token Secret」の値が表示されています。

Twitter社はこれらの値を使ってTwitterにアクセスしてきているユーザーを識別しています。これら4つの値は後ほど使うので控えておきましょう。他人に漏れてしまうと悪用できてしまうので注意しましょう。

以上でプログラムでTwitterにアクセスする準備完了です。



Twitterでユーザー情報を取得してみる

手始めに、先ほど用意したAPI Keyなどを利用して、PythonでTwitterの自分のプロフィールのデータを取得してみます。


まずは、tweepyというライブラリ(簡単にTwitterのデータにアクセスすることができる便利なツール)をインストールします。

$ pip install tweepy
Terminalで「$ pip install tweepy」と打ち込んで、実行する。


下のコマンドを実行してtweepyのバージョンが表示されれば、tweepyがインストールできています。

$ pip list | grep tweepy

tweepy                   3.6.0
「$ pip install tweepy」と打ち込んで、tweepyがインストールできているか確認する。


tweepyがインストールできていることが確認できたら、任意の名前のPythonファイル(ここでは、「test.py」というファイル名のファイルを用意します)を作成し、以下のようなコードを書いて実行してみましょう。

import tweepy

# 以下4つ「xxxxx」を、先ほど控えた値で書き換える。
CONSUMER_KEY = 'xxxxx'
CONSUMER_SECRET = 'xxxxx'
ACCESS_TOKEN = 'xxxxx'
ACCESS_TOKEN_SECRET = 'xxxxx'
# ↓探したいユーザーの「@」以降のアカウント名を入れる
screen_name = 'virtual_techX'

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api = tweepy.API(auth)
user_info = api.get_user(screen_name=screen_name)
print(user_info)


Terminalに「$ python test.py」と打ち込んで実行します。
$ python test.py

User(_api=<tweepy.api.API object at 0x103defa58>, _json={'id': 952004195497816064, 'id_str': '952004195497816064', 'name': '仮想サーファー@webエンジニア', 'screen_name': 'virtual_techX', 'locationofile_location': None, 'description': 'Webサーバーサイドエンジニア@大きめのITベンチャー | 日常生活のあらゆることを自動化する。さぼりプログラム発信してます! https://t.co/bSqczI1eoP', 'url': 'httpsrl': 'https://t.co/AhzcoGbsGy', 'expanded_url': 'http://www.virtual-surfer.com', 'display_url': 'virtual-surfer.com', 'indices': [0, 23]}]}, 'description': {'urls': [{'url': 'https://t.co/bSqczI1eoP', 'expanded_url': 'https://note.mu/virtual_surfer', 'display_url': 'note.mu/virtual_surfer', 'indices': [64, 87]}]}}, 'protected': False, 'followers_count': 2057, 'friends_count': 220, 'listed_count': 10, 'created_at': 'Sat Jan 13 02:27:42 +0000 2018', 'favourites_count': 311, 'utc_offset': None, 'time_zone': None, 'geo_enabled': False, 'verified': False, 'statuses_count': 1265, 'lang': 'ja', 'status': {'created_at': 'Fri Oct 05 03:42:09 +0000 2018', 'id': 1048055716232101888, 'id_str': '1048055716232101888', 'text': '最近ブロガー界隈で影響力ある人がYouTubeとか動画の可能性に言及の戦場で勝ちにいくと他の戦場に入るの遅れるのかな', 'truncated': False, 'entities': {'hashtags': [], 'symbols': [], 'user_mentions': [], 'urls': []}, 'source': '<a href="http://twitter.com/downloadTwitter for iPhone</a>', 'in_reply_to_status_id': None, 'in_reply_to_status_id_str': None, 'in_reply_to_user_id': None, 'in_reply_to_user_id_str': None, 'in_reply_to_screen_name': None, 'geo': None, 'coordinates': None, 'place': None, 'contributors': None, 'is_quote_status': False, 'retweet_count': 0, 'favorite_count': 0, 'favorited': False, 'retweeted': False, 'lang': 'ja'}, 'contributors_enabled': False, 'is_translator': False, 'is_translation_enabled': False, 'profile_background_color': '000000', 'profile_background_image_url': 'http://abs.twimg.com/images/themes/theme1/bg.png', 'profile_background_image_url_https': 'https://abs.twimg.com/images/themes/theme1/bg.png', 'profile_background_tile': False, 'profile_image_url': 'http://pbs.twimg.com/profile_images/952006494731431936/oERsC_dh_normal.jpg', 'profile_image_url_https': 'https://pbs.twimg.com/profile_images/952006494731431936/oERsC_dh_normal.jpg', 'profile_banner_url': 'https://pbs.twimg.com/profile_banners/952004195497816064/1538287739', 'profile_link_color': '91D2FA', 'profile_sidebar_border_color': '000000', 'profile_sidebar_fill_color': '000000', 'profile_text_color': '000000', 'profile_use_background_image': False, 'has_extended_profile': False, 'default_profile': False, 'default_profile_image': False, 'following': False, 'follow_request_sent': False, 'notifications': False, 'translator_type': 'none', 'suspended': False, 'needs_phone_verification': False}, id=952004195497816064, id_str='952004195497816064', name='仮想サーファー@webエンジニア', screen_name='virtual_techX', locatioile_location=None, description='Webサーバーサイドエンジニア@大きめのITベンチャー | 日常生活のあらゆることを自動化する。さぼりプログラム発信してます! https://t.co/bSqczI1eoP', url='https://t.co/Ah/t.co/AhzcoGbsGy', 'expanded_url': 'http://www.virtual-surfer.com', 'display_url': 'virtual-surfer.com', 'indices': [0, 23]}]}, 'description': {'urls': [{'url': 'https://t.co/bSqczI1eoP', 'expanded_url': 'https://note.mu/virtual_surfer', 'display_url': 'note.mu/virtual_surfer', 'indices': [64, 87]}]}}, protected=False, followers_count=2057, friends_count=220, listed_count=10, created_at=datetime.datetime(2018, 1, 13, 2, 27, 42), favourites_count=311, utc_offset=None, time_zone=None, geo_enabled=False, verified=False, statuses_count=1265, lang='ja', status=Status(_api=<tweepy.api.API object at 0x103defa58>, _json={'created_at': 'Fri Oct 05 03:42:09 +0000 2018', 'id': 1048055716232101888, 'id_str': '1048055716232101888', 'text': '最近ブロガー界隈で影響力ある人がYouTubeとか動画る。\n\nブログっていう一つの戦場で勝ちにいくと他の戦場に入るの遅れるのかな', 'truncated': False, 'entities': {'hashtags': [], 'symbols': [], 'user_mentions': [], 'urls': []}, 'source': '<a href="hrel="nofollow">Twitter for iPhone</a>', 'in_reply_to_status_id': None, 'in_reply_to_status_id_str': None, 'in_reply_to_user_id': None, 'in_reply_to_user_id_str': None, 'in_reply_to_screen_name': None, 'geo': None, 'coordinates': None, 'place': None, 'contributors': None, 'is_quote_status': False, 'retweet_count': 0, 'favorite_count': 0, 'favorited': False, 'retweeted': False, 'lang': 'ja'}, created_at=datetime.datetime(2018, 10, 5, 3, 42, 9), id=1048055716232101888, id_str='1048055716232101888', text='最近ブロガー界隈で影響力ある人がYouTubeとか動画の可能性に言及してること増えてる気るのかな', truncated=False, entities={'hashtags': [], 'symbols': [], 'user_mentions': [], 'urls': []}, source='Twitter for iPhone', source_url='http://twitter.com/download/iphone', in_reply_to_staid=None, in_reply_to_status_id_str=None, in_reply_to_user_id=None, in_reply_to_user_id_str=None, in_reply_to_screen_name=None, geo=None, coordinates=None, place=None, contributors=None, is_quote_status=False, retweet_count=0, favorite_count=0, favorited=False, retweeted=False, lang='ja'), contributors_enabled=False, is_translator=False, is_translation_enabled=False, profile_background_color='000000', profile_background_image_url='http://abs.twimg.com/images/themes/theme1/bg.png', profile_background_image_url_https='https://abs.twimg.com/images/themes/theme1/bg.png', profile_background_tile=False, profile_image_url='http://pbs.twimg.com/profile_images/952006494731431936/oERsC_dh_normal.jpg', profile_image_url_https='https://pbs.twimg.com/profile_images/952006494731431936/oERsC_dh_normal.jpg', profile_banner_url='https://pbs.twimg.com/profile_banners/952004195497816064/1538287739', profile_link_color='91D2FA', profile_sidebar_border_color='000000', profile_sidebar_fill_color='000000', profile_text_color='000000', profile_use_background_image=False, has_extended_profile=False, default_profile=False, default_profile_image=False, following=False, follow_request_sent=False, notifications=False, translator_type='none', suspended=False, needs_phone_verification=False)

指定したユーザーのデータを取得することができました。様々なデータが取れていますが、見通しが悪いので欲しいデータだけを取得するように変更してみます。

test.py

import tweepy

# 以下4つ「xxxxx」を、先ほど控えた値で書き換える。
CONSUMER_KEY = 'xxxxx'
CONSUMER_SECRET = 'xxxxx'
ACCESS_TOKEN = 'xxxxx'
ACCESS_TOKEN_SECRET = 'xxxxx'
# ↓探したいユーザーの「@」以降のアカウント名を入れる
screen_name = 'virtual_techX'

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api = tweepy.API(auth)
user_info = api.get_user(screen_name=screen_name)

name = user_info.name
screen_name = user_info.screen_name
description = user_info.description
image_url = user_info.profile_image_url_https
follow_count = user_info.friends_count
follower_count = user_info.followers_count

print('【名前】{}\n【アカウント名】{}\n【自己紹介】{}\n【画像URL】{}\n【フォロー数】:{}\n【フォロワー数】:{}'
      .format(name, screen_name, description, image_url, follow_count, follower_count))

ファイルを更新したら、再度ファイルを実行してみます。

「test.py」を更新し、「$ python test.py」を実行する。
$ python test.py

【名前】仮想サーファー@webエンジニア
【アカウント名】virtual_techX
【自己紹介】Webサーバーサイドエンジニア@大きめのITベンチャー | 日常生活のあらゆることを自動化する。さぼりプログラム発信してます! https://t.co/bSqczI1eoP
【画像URL】https://pbs.twimg.com/profile_images/952006494731431936/oERsC_dh_normal.jpg
【フォロー数】:220
【フォロワー数】:2057

欲しいデータだけが並びました!

ちなみに、プログラム中の「screen_name」の箇所を任意のユーザーのものに変えれば、そのユーザーの情報も同様にして取得することができます。



Twitterで特定のワードを含むツイートを収集する

次は、Twitter上で特定のワードでつぶやかれているツイートを収集するプログラムです!

上の画像のようなデータを、プログラムで取得するために、以下のような処理をするコードを書いていきます。

・特定のワードでつぶやいているツイートのデータを収集する
・RTや全く同じツイートなど、重複データを除外する
・取得した全データから、必要なデータだけを取得する


コードを書いたファイルがこちら。「collect_tweets.py」というファイル名で作成しておきます。

この続きをみるには

この続き:32,289文字/画像35枚

【初心者向け】PythonでTwitterデータ収集&Spread Sheetに書き込みまでを自動化する

仮想サーファー@さぼりエンジニア

980円

この記事が気に入ったら、サポートをしてみませんか?気軽にクリエイターを支援できます。

リアクションいただき!ありがとうございますー!!
12

test1

1つのマガジンに含まれています

コメント7件

すいません。twitter developer登録 上手く行きません。2回目の返信も失敗しました。何か良い回答ありますでしょうか?
> すいません。twitter developer登録 上手く行きません。

ご質問ありがとうございます。
こちら詳しい原因追及のため、どこの手順でどのようなエラー文(失敗メッセージ)が出ているか教えていただいてもよろしいでしょうか?
ありがとう御座います。
https://note.mu/sosuu/n/n189e1b4d9cdb
こちらになるんですが、よろしくお願い致します。
共有いただきありがとうございます。リンク先にて回答させていただきました。
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。