ドコモのデータ通信量をメールで送信

WebDriverを使ってドコモのDメニューにログインし、当月の通信量を毎日メールで送信するアプリを作成した。
処理の流れは以下の通り。

  1. ログイン画面を表示する。
  2. IDとパスワードを入力しログイン
  3. 画面に表示された通信量を取得
  4. Gmailでメールで送信

実行環境
CentOS7
Ruby2.0

まずCentOSでWebDriverが動作する環境を作成する。

# Rubyのインストール
sudo yum install ruby ruby-devel libxml2-devel libxslt-devel

#使用するGemのインストール
sudo gem update --system
gem install selenium-webdriver
gem install ruby-gmail
gem install json_pure

#XvfbとFirefoxのインストール
sudo yum -y install firefox ipa-{,p}gothic-fonts ipa-{,p}mincho-fonts
sudo yum -y install xorg-x11-server-Xvfb

Rubyで書いたプログラムは次の通り

require "selenium-webdriver"
require "gmail"

url   = "https://payment2.smt.docomo.ne.jp/smph/charges/gkyap003.srv?Xitraffic=1"
id    = "電話番号"
pass  = "パスワード"
gid   = "GmailのID"
gpass = "Gmailのパスワード"

driver = Selenium::WebDriver.for :firefox
driver.navigate.to url

#Dメニューログイン
driver.find_element(:name, "authid").send_key id
driver.find_element(:name, "authpass").send_key pass
driver.find_element(:name, "subForm").submit

#念のため3秒待つ
sleep 3

#通信量テキスト取得
tag = driver.find_elements(:tag_name, "p")
mes = tag[2].text + " " + tag[3].text

driver.quit

#メール送信
gmail = Gmail.new(gid, gpass)
message =
  gmail.generate_message do
    to "送信先アドレス"
    subject "Docomo通信量" + Date.today.strftime("%Y/%m/%d")
    text_part do
      body mes
    end
  end

gmail.deliver(message)
gmail.logout

ターミナルで実際の動作確認。
CUIで確認するためにXvfbを起動する。

Xvfb :99 -screen 0 1024x768x24 -extension RANDR &
export DISPLAY=:99

Rubyの実行、うまくいけばメールが送信される。

ruby traffic.rb

さくらインターネットにGitをインストール

最新バージョンを確認する
http://git-scm.com/downloads
2012/8/4時点では1.7.11.4が最新だった。

ターミナルでログインし、ソースからダウンロードしてインストール。

mkdir -p local/gitinstall
cd $_
wget http://git-core.googlecode.com/files/git-1.7.11.4.tar.gz
tar xvzf git-1.7.11.4.tar.gz
cd git-1.7.11.4
./configure -prefix=$HOME/local
gmake && gmake install

$HOME/localにパスを通す。
パスが通っているかを確認する。

git --version

リポジトリを作成

mkdir -p $HOME/git/hoge.git
cd $_
git --bare init --share

PHP Unitのテストクラス作成

インストール方法は昨日の日記を参照
http://d.hatena.ne.jp/nkimra/20120715/1342312360

まずテスト用にHogeクラスを作成した
Hoge.php

<?php
class Hoge
{
	public function getMoge()
	{
		return 1;
	}
}
?>

ケルトンクラスを作成するためにPHPUnit_SkeletonGeneratorをインストールする

cd /Applications/MAMP/bin/php/php5.3.6/binsudo ./pear install phpunit/PHPUnit_SkeletonGenerator

ケルトンクラスを作成する
Hoge.phpと同じディレクトリで下記コマンドを実行するとHogeTest.phpができる

/Applications/MAMP/bin/php/php5.3.6/bin/phpunit --skeleton-test Hoge

HogeTest.phpのtestGetMogeメソッドを次のように書き換える

public function testGetMoge()
    {
    	$this->assertEquals(1, $this->object->getMoge());
    }

ターミナルでHogeTest.phpと同じディレクトリで下記コマンドを実行。

/Applications/MAMP/bin/php/php5.3.6/bin/phpunit HogeTest

テストにパスした場合は次のように表示される

PHPUnit 3.6.11 by Sebastian Bergmann.

.

Time: 1 second, Memory: 5.00Mb

OK (1 test, 1 assertion)

MAMPにPHPUnitをインストールする

MAMPのバージョン2.0.3

cd /Applications/MAMP/bin/php/php5.3.6/bin
sudo ./pear upgrade pear
./pear channel-discover pear.phpunit.de
./pear channel-discover components.ez.no
./pear channel-discover pear.symfony-project.com
sudo ./pear install phpunit/PHPUnit

下記エラーが出る場合は/Applications/MAMP/bin/php/php5.3.6/conf/pear.confを削除する

Notice: unserialize(): Error at offset 276 of 1133 bytes in Config.php on line 1050
ERROR: The default config file is not a valid config file or is corrupted.

正常にインストールができれば/Applications/MAMP/bin/php/php5.3.6/binにphpunitができる

動作確認

/Applications/MAMP/bin/php/php5.3.6/bin/phpunit --version

岩手陸前高田

GWに岩手に行き海岸線を見てきた。
写真はすべて陸前高田
瓦礫はまだ一部撤去されていなかった。
一面何もないのは衝撃的だった。
残っている建物も3階まで壊れていて津波がいかに凄かったかがわかる。