Ubuntu 12.04 LTS に最新の Nginx をインストールする
環境
$ cat /etc/issue.net Ubuntu 12.04 LTS $ uname -m i686
aptパッケージのバージョンを確認
$ apt-cache show nginx ... Version: 1.1.19-1ubuntu0.2 ...
古いので公式サイトで公開しているUbuntu用パッケージをインストールする
http://wiki.nginx.org
どのバージョンかはこちらを参考
http://nginx.org/en/linux_packages.html
Ubuntu: Version Codename 10.04 lucid 11.10 oneiric 12.04 precise 12.10 quantal 13.04 raring
Nginxの公式リポジトリを使うようにするため、
/etc/apt/sources.list にリポジトリ追加する。
Nginx用のものを別ファイルで用意
sudo vi /etc/apt/sources.list.d/nginx.list
以下追加
deb http://nginx.org/packages/ubuntu/ precise nginx deb-src http://nginx.org/packages/ubuntu/ precise nginx
PGP公開鍵を追加
curl http://nginx.org/keys/nginx_signing.key | sudo apt-key add -
apt-get update
sudo apt-get update
再度、パッケージ情報を確認
$ apt-cache show nginx ... Version: 1.4.2-1~precise ...
Nginxのインストール
sudo apt-get install nginx
バージョン確認
$ nginx -v nginx version: nginx/1.4.2
ブラウザで80ポート確認
http://localhost/
Welcome to nginx!
のページが表示される。
MySoftBankのWeb明細をダウンロードする
前回に引き続き、今回はMySoftBankのサイトからiPhone使用料のWeb明細を自動ダウンロードする。
この電話料金内訳明細書PDFの保持期間は過去6ヶ月分まで。
PDFのファイル名にはダウンロード時のタイムスタンプがついているだけで何月のものかわからないのでプレフィックスに年月を追加した。
mysoftbank.rb
require 'mechanize' require 'kconv' class MySoftbankClient def initialize @agent = Mechanize.new end def top @agent.get('https://my.softbank.jp/msb/d/top') end def login top() @agent.page.forms[0].click_button f = @agent.page.forms[0] f.msn = '電話番号' f.password = 'パスワード' f.click_button end def bill_total top() @agent.page.link_with(:href=>/WCO010001/).click @agent.page.forms[0].click_button end def uchiwake(num) yyyyMM = @agent.page.forms[num].fields[0].value @agent.page.forms[num].click_button @agent.page.forms[0].click_button @agent.page.response["content-disposition"] =~ /"(.+?)"/ @agent.page.filename = yyyyMM + "_" + $~[1].toutf8 @agent.page.save puts @agent.page.filename + " saved." end def one_month_ago bill_total() uchiwake(1) end def two_month_ago bill_total() uchiwake(2) end def three_month_ago bill_total() uchiwake(3) end def four_month_ago bill_total() uchiwake(4) end def five_month_ago bill_total() uchiwake(5) end def six_month_ago bill_total() uchiwake(6) end def logout top() @agent.page.link_with(:href=>/doLogout/).click puts "logout." end end client = MySoftbankClient.new client.login() client.one_month_ago() client.two_month_ago() client.three_month_ago() client.four_month_ago() client.five_month_ago() client.six_month_ago() client.logout()
実行結果
$ ruby mysoftbank.rb 201302_電話料金内訳明細書20130318100543.PDF saved. 201301_電話料金内訳明細書20130318100545.PDF saved. 201212_電話料金内訳明細書20130318100547.PDF saved. 201211_電話料金内訳明細書20130318100549.PDF saved. 201210_電話料金内訳明細書20130318100551.PDF saved. 201209_電話料金内訳明細書20130318100553.PDF saved. logout.
※追記(2013/12/01)
MySoftBankのサイト構成が変更になり、エラーになっていのでソースコードを修正した。
セゾンカードのWeb明細をダウンロードする
セゾンカードNetアンサーのWeb明細は過去3ヶ月分しかダウンロード出来ないので定期的にダウンロードしておかないと過去の明細が見れなくなってしまう。
毎回手動でログインしてダウンロードするのが面倒くさかったので、rubyのMechanizeを使って、過去3ヶ月分のCSVとPDFをダウンロードするスクリプトを書いた。
require 'mechanize' class SaisonClient def initialize @agent = Mechanize.new end def login @agent.get('https://netanswerplus.saisoncard.co.jp/WebPc/welcomeSCR.do') f = @agent.page.forms[0] f.inputId = 'NetアンサーID' f.inputPassword = 'パスワード' f.submit end def top @agent.get('https://netanswerplus.saisoncard.co.jp/WebPc/NATOP.do') end def move(link) @agent.page.link_with(:href=>link).click end def meisai move(/USC0101BLC01/) end def this_month top() meisai() download() end def one_month_ago top() meisai() move(/fixTargetMonth=1/) download() end def two_month_ago top() meisai() move(/fixTargetMonth=2/) download() end def download csv_link = @agent.page.link_with(:href=>/USC0105BLP01/) pdf_link = @agent.page.link_with(:href=>/USC0104BLP01/) save(csv_link) save(pdf_link) end def save(link) link.click @agent.page.save puts @agent.page.filename + " saved." end def logout top() move(/USL0100BLC01/) puts "logout." end end client = SaisonClient.new # ログイン client.login() # 今月分ダウンロード client.this_month() # 先月分ダウンロード client.one_month_ago() # 先々月分ダウンロード client.two_month_ago() # ログアウト client.logout()
文字列内の数値部分を正規表現を使ってインクリメントする
perlを使って行う例。
置換対象のテキストデータ
target.txt
columnIndex1 = "aaa"; columnIndex2 = "bbb"; columnIndex3 = "ccc";
replace.pl
my $data = `cat target.txt`; $data =~ s/columnIndex([\d]+)/columnIndex@{[$1+1]}/g; print $data;
実行結果
columnIndex2 = "aaa"; columnIndex3 = "bbb"; columnIndex4 = "ccc";
ファイルに出力
my $data = `cat target.txt`; $data =~ s/columnIndex([\d]+)/columnIndex@{[$1+1]}/g; open(OUT, ">", "target2.txt"); print OUT $data; close(OUT);
以上。
なんだけど @{[$1+1]} の部分が何をやってるのかよくわからないので調べた。
$1+1
文字列+数値だが「+」演算子使っているので数値と判断される。
[$1+1]
[ ] で囲むことで無名配列を作成し、そのリファレンスが返る。
@{[$1+1]}
@{ } で囲むことで配列のリファレンスから配列を取り出すデリファレンスを行う。
ってことかな。。
参考:
Perlの配列とハッシュを自由に扱う - サンプルコードによるPerl入門
http://d.hatena.ne.jp/perlcodesample/20100930/1278596435
ヒアドキュメントの中でPerlの式を書く
http://perl-users.jp/articles/advent-calendar/2008/14.html
Eclipse の static インポートの問題
import static xxx.yyy.zzz.FooConstants.*;
というような static インポートをした後に
「Ctrl+Shift+O」を使うと
.* がすべて展開されてしまう。
Window -> Preferences -> Java -> Organize Imports Number of static imports needs for .*
がデフォルトで 99 になっているのでこれを 1 に変更することで展開されなくなった。