読者です 読者をやめる 読者になる 読者になる

Google Analytics API を使って前日の PV をツイートするコードを Ruby で書いてみた

Google アナリティクスの情報を、 Google Developer Consoles を介して取得します。
ざっくりと書いたので例によってメソッド化とかエラー処理とかないです。
debian 7.8 上の Ruby 2.2 系で書き、 cron で動作させます。
毎日0時6分くらいに前日の PV をツイートするはずです。

RubyGoogle Developer Consoles を扱うに当たって Rubygems をインストールします。
Google Developer Consoles のために google-api-clinet を、 結果をツイートするために twitter を、JSON で保存した設定を取り出すために json を入れておきます。

$ gem install google-api-client
$ gem install twitter
$ gem install json

サンプルが google-api-ruby-client-samples/service_account にあるのでそこから必要そうな部分をもらってきます。
前日の日付と PV を visitCount にセットしてから twitter に CS/CK と AT/ATS を突っ込んでツイートさせました。

#!/usr/bin/env ruby
# coding: utf-8

require 'rubygems'
require 'json'
require 'google/api_client'
require 'date'
require 'twitter'

config = open('~/.google/config.json') do |io|
   JSON.load(io)
end

service_account_email = config['service_account_email']
key_file = config['key_file']
key_secret = config['key_secret']
profile_id = config['profile_id']

client = Google::APIClient.new(:application_name => 'Get-AccessCount')

key = Google::APIClient::KeyUtils.load_from_pkcs12(key_file, key_secret)
client.authorization = Signet::OAuth2::Client.new(
  :token_credential_uri => 'https://accounts.google.com/o/oauth2/token',
  :audience => 'https://accounts.google.com/o/oauth2/token',
  :scope => 'https://www.googleapis.com/auth/analytics.readonly',
  :issuer => service_account_email,
  :signing_key => key
)

client.authorization.fetch_access_token!

analytics = client.discovered_api('analytics','v3')

startDate = (DateTime.now - 1).strftime("%Y-%m-%d")
endDate = startDate

visitCount = client.execute(:api_method => analytics.data.ga.get, :parameters => { 
   'ids' => "ga:" + profile_id, 
   'start-date' => startDate,
   'end-date' => endDate,
   'dimensions' => "ga:day,ga:month",
   'metrics' => "ga:visits",
   'sort' => "ga:month,ga:day" 
})

tweet_string = "昨日の えぢた2.2 の PV は #{visitCount.data.rows[0][2]} でした\nhttp://k-side.hatenablog.jp/ "

twitter_client = Twitter::REST::Client.new do |twconfig|
   twconfig.consumer_key        = config['consumer_key']
   twconfig.consumer_secret     = config['consumer_secret']
   twconfig.access_token        = config['access_token']
   twconfig.access_token_secret = config['access_token_secret']
end

twitter_client.update(tweet_string)

exit 0

設定ファイルはキーファイルやパスワード、 Twitter の トークンなどを含んでいるので 、ホームディレクトリに .google ディレクトリを作り、そこに下記のような config.json を保存。パーミッションを変更しておきました。

{
   "service_account_email" : "******@developer.gserviceaccount.com",
   "key_file" : "******.p12",
   "key_secret" : "******",
   "profile_id" : "******",
   "consumer_key" : "******",
   "consumer_secret" :"*****",
   "access_token" : "******",
   "access_token_secret" : "******"
}

このスクリプトが動いたら、メソッド化の練習に書き換えてみようかなーと考えています。