20
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MechanizeでTwitterアナリティクスのデータエクスポートを自動化する

Posted at

本記事の目的

RubyのMechanizeを使ってTwitterアナリティクス上で閲覧できるツイートアクティビティデータのエクスポートを自動化するスクリプトを作成する。

Twitterアナリティクス

Twitterアナリティクス

twiana.png

  • Twitter公式が提供している分析ツールで、日々のツイートインプレッションのグラフやツイート毎のインプレッション数、リンクのクリック数、お気に入り数などを見ることが出来る
  • アナリティクス自体には簡単な分析機能しか無く、複雑な分析をしたい場合はデータをエクスポートして自前で頑張る必要がある

今回は、Twitterアナリティクスへのログインから指定期間のツイートアクティビティデータのエクスポートまでをスクリプトで自動化する。

Mechanize

Webページの遷移やログインを補助してくれるRubyのgem。
以下を参考にさせて頂いた。
Rails スクレイピング手法 Mechanizeの使い方
[Ruby]Mechanizeでログイン機能があるサイトにログインする

実装

1. MechanizeでのTwitterアナリティクスへのログイン

TwitterアナリティクスにMechanizeを使ってログイン出来ることを確認する。
【ID】【パスワード】は自分のTwitterアカウントのもの。
rubyのバージョンは 2.0.0p598

login.rb
require 'mechanize'

agent = Mechanize.new
agent.user_agent_alias = 'Windows Mozilla'
url = "https://analytics.twitter.com/user/【ID】/tweets"

page = agent.get(url)
form = page.form_with(action: 'https://twitter.com/sessions')
form.fields[0].value = '【ID】'
form.fields[1].value = '【パスワード】'
p form.submit.title

ログインに成功していれば上記のコードで以下の出力結果が得られる。
"【ID】に関するツイートアクティビティアナリティクス"

2. データのエクスポート

MechanizeではJavascriptが動作しないため、Javascriptを前提として作られているエクスポートボタンから直接ファイルのダウンロードを行うことが出来ない。
この場合、Mechanizeのエージェントが取得しているセッション情報を再利用して、エクスポート操作時のHTTPリクエストをエミュレートすることでファイルのダウンロードを実行できる。
今回エミュレートすべきHTTPリクエストの内容は、ChromeのDeveloper Tool等で調査した。

3. 1,2を合わせて

最終的なスクリプトのコードは以下のようになった。

getTwitterActivity.rb
require 'mechanize'
require 'time'

ITERATE = (Time.parse(ARGV[1]).to_i - Time.parse(ARGV[0]).to_i ) / (60 * 60 * 24) + 1
START_DATE = (Time.parse(ARGV[0]).to_i).to_s + "000"
END_DATE = (Time.parse(ARGV[1]).to_i + (60 * 60 * 24 - 1)).to_s + "999"

agent = Mechanize.new
agent.user_agent_alias = 'Windows Mozilla'
url = "https://analytics.twitter.com/user/【ID】/tweets"
export_url = "https://analytics.twitter.com/user/【ID】/tweets/export.json?start_time=" + START_DATE + "&end_time=" + END_DATE + "&lang=ja"
bundle_url = "https://analytics.twitter.com/user/【ID】/tweets/bundle?start_time=" + START_DATE + "&end_time=" + END_DATE + "&lang=ja"

page = agent.get(url)
form = page.form_with(action: 'https://twitter.com/sessions')
form.fields[0].value = '【ID】'
form.fields[1].value = '【パスワード】'
form.submit

for i in 1..ITERATE do
     agent.post(export_url ,"")
     sleep(10)
end

file = agent.get(bundle_url)
file.save

ruby getTwitterActivity.rb 2016-08-01 2016-08-02
取得したい期間の開始日と終了日を引数として与えて実行すると、実行ファイルのディレクトリにcsvファイルが保存される。
あとはcronで定期的に実行し、csvをデータベースに保存するなりすればよい。
csvは時刻のタイムゾーンがUTCなので分析の際は注意

その他

長期間データの一括取得とかをやりすぎるとアカウントが凍結されるかもしれないので注意したい

20
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?