2008年1月16日水曜日

rubyでexcelのデータをブロックでもらう

windowsで結構使えます。
rubyの配列感覚でexcelのデータが扱える。

早速google-code-prettifyでソースコードを表示します。
require 'win32ole'

module Excel
def Excel.each(file)
excel = WIN32OLE.new('Excel.Application')
excel.displayAlerts = false
book = excel.Workbooks.Open(File.expand_path(file))
begin
book.Worksheets.each do |sheet|
sheet.UsedRange.Rows.each do |row|
record = []
row.Columns.each do |cell|
record << cell.Value
rescue e
p e.backtrace
STDERR.puts e.message
ensure
book.Close
excel.Quit
end
end
end

if $0 == __File__
Excel.each(ARGV[0]){ |row|
p row
}
end

google-code-prettify

google-code-prettifyを使いblogger上でソースコードを綺麗に
表示する方法があることがわかったのでメモ。

マイコミ ジャーナルのを参考にgoogle-code-prettifyを設定した

ソースコードに長い行があると途中で文字が隠れてしまう。
自動でテキストエリアにするには以下のコードをHTMLに追加する必要がある

<style TYPE="text/css">
<!--
.prettyprint .tag { margin: 0; padding: 0; }
pre {
overflow: auto;
background-color: #FFFFFF;
display: block;
padding: 5px 10px;
border-style: dotted;
border-width: 2px;
-->
</style>

投資信託の基準価格をスクレイピング

スクレイピングとはHttp/XMLが整っていないWeb環境で必要なデータを取得するための
技術を指す。要するに強引に必要なデータだけをHTMLから取得すること。最近知った言葉。

新生銀行で取り扱っている投資信託の基準価格をスクレイピングにより取得する
rubyにより実装してみる。対象のHTMLは下記のURI

http://qweb6.qhit.net/i_users/shinseibank/qsearch.exe?F=users/shinseibank/fundlist

1. httpクラスのgetメソッドにてHTMLを取得する
2. HTMLをパーシングするのは面倒なので、正規表現で基準価格とのデータのみゲット。
3. 標準出力へ投信信託名、販売会社、基準価格を出力する

新生銀行のWebページがSJISなのでソースコードもSJISとした。
ubuntu(UTF-8)の端末を使用しているので、エンコードも付け加えた。

WindowsもしくはSJIS環境であれば require 'kconv'、.toutf8は必要ない

ソース Shinsei.rb

#!/usr/local/bin/ruby -Ks
require 'net/http'

module InvestmentTrust
class HttpError < StandardError; end
def InvestmentTrust.page_get(host, path)
require 'net/http'
Net::HTTP.version_1_2
res = nil
req = Net::HTTP::Get.new(path)
Net::HTTP.start(host) {|http|
res = http.request(req)
if res.code.to_i != 200
raise HttpError, "HTTP Status Error [#{res.code}]"
end
}
res.body
end
end

class Shinsei
SHINSEI_URL = 'qweb6.qhit.net'
SHINSEI_PATH = '/i_users/shinseibank/qsearch.exe?F=users/shinseibank/fundlist'
REGEX = %r{
(\w+)</A></TD>
¥s+<TD¥sclass="s1">(\w+)</TD>
¥s+<TD¥sclass="s2"¥salign="center">(¥d+/¥d+)</TD>
¥s+<TD¥sclass="s2"¥salign="right"¥snowrap>(¥d+)¥s円<BR><span¥sclass="f[p|m]">([¥+¥-]¥d+)</span>¥s円</TD>
¥s+<TD¥sclass="s2"¥salign="right"¥snowrap>([¥d¥.]+)<br>億円</TD>
}xs

def get()
require 'kconv'
data = InvestmentTrust.page_get(SHINSEI_URL, SHINSEI_PATH)
data.scan(REGEX).each do |m|
puts "#{m.shift} 運用会社 #{m.shift}".toutf8
puts " 日付 #{m.shift} 基準価格 #{m.shift}円 #{m.shift}円 総資産#{m.shift}億円".toutf8
end
end
end

if __FILE__ == $0
s = Shinsei.new
s.get
end


出力

$ ruby -Ks shinsei.rb
インデックスファンド225 運用会社 日興アセット
日付 01/15 基準価格 3689円 -36円 総資産1954.07億円
フィデリティ・日本成長株・ファンド 運用会社 フィデリティ
日付 01/15 基準価格 14777円 -404円 総資産3581.43億円
フィデリティ・日本配当成長株・ファンド(分配重視型) 運用会社 フィデリティ
日付 01/15 基準価格 8364円 -139円 総資産1526.11億円
ダイワ・バリュー株・オープン(愛称:底力) 運用会社 大和投信
日付 01/15 基準価格 10130円 -281円 総資産598.90億円
クレディ・スイス・ジャパン・グロース・ファンド 運用会社 クレディスイス
日付 01/15 基準価格 8616円 -178円 総資産26.10億円
インベスコ店頭・成長株オープン 運用会社 インベスコ
日付 01/15 基準価格 20969円 -1161円 総資産111.61億円
225インデックスファンド 運用会社 T&D
日付 01/15 基準価格 3087円 -31円 総資産55.55億円
MSCIインデックス・セレクト・ファンド コクサイ・ポートフォリオ 運用会社 モルガンスタンレー
日付 01/15 基準価格 13596円 -235円 総資産52.34億円
グローバル・ハイインカム・ストック・ファンド 運用会社 野村アセット
日付 01/15 基準価格 10303円 -189円 総資産2618.37億円
アメリカン・ドリーム・ファンド 運用会社 新生インベストメント
日付 01/15 基準価格 8026円 -201円 総資産31.15億円
JPM・BRICS5・ファンド(愛称:ブリックス・ファイブ) 運用会社 JPモルガン
日付 01/15 基準価格 20697円 -465円 総資産1498.35億円
新生・フラトンVPICファンド 運用会社 新生インベストメント
日付 01/15 基準価格 9143円 -165円 総資産169.01億円
JFアジア株・アクティブ・オープン 運用会社 JPモルガン
日付 01/15 基準価格 25457円 -1289円 総資産348.56億円
HSBCチャイナオープン 運用会社 HSBC
日付 01/15 基準価格 45303円 -2160円 総資産668.27億円
HSBCインドオープン 運用会社 HSBC
日付 01/15 基準価格 34359円 -717円 総資産1834.77億円
HSBCブラジルオープン 運用会社 HSBC
日付 01/15 基準価格 15469円 -446円 総資産1298.66億円
SG ロシア東欧株ファンド 運用会社 ソシエテジェネラル
日付 01/15 基準価格 15875円 -394円 総資産148.11億円
新生・UTIインドファンド 運用会社 新生インベストメント
日付 01/15 基準価格 13570円 -212円 総資産575.41億円
MHAM物価連動国債ファンド 運用会社 みずほ
日付 01/15 基準価格 10357円 +1円 総資産95.70億円
グローバル・ソブリン・オープン(毎月決算型) 運用会社 国際投信
日付 01/15 基準価格 7799円 -69円 総資産55051.91億円
世界のサイフ 運用会社 日興アセット
日付 01/15 基準価格 9936円 -120円 総資産1262.69億円
LM・オーストラリア毎月分配型ファンド 運用会社 レッグ・メイソン
日付 01/15 基準価格 11057円 -98円 総資産1082.67億円
ガリレオ 運用会社 ゴールドマン
日付 01/15 基準価格 9554円 +2円 総資産219.53億円
エマージング・カレンシー・債券ファンド(毎月分配型) 運用会社 新生インベストメント
日付 01/15 基準価格 9950円 -52円 総資産1271.50億円
ニッセイ/パトナム・インカムオープン 運用会社 ニッセイ
日付 01/15 基準価格 6877円 -170円 総資産4394.38億円
エマージング・ソブリン・オープン(毎月決算型) 運用会社 国際投信
日付 01/15 基準価格 10223円 -158円 総資産752.94億円
高利回り社債オープン(毎月分配型) 運用会社 野村アセット
日付 01/15 基準価格 8988円 -129円 総資産423.11億円
高利回り社債オープン・為替ヘッジ(毎月分配型) 運用会社 野村アセット
日付 01/15 基準価格 9051円 +8円 総資産1.25億円
ドイチェ・ヨーロッパインカムオープン 運用会社 ドイチェ
日付 01/15 基準価格 13263円 -124円 総資産179.51億円
新生・世界分散ファンド(複利効果重視型) 運用会社 新生インベストメント
日付 01/15 基準価格 9492円 -98円 総資産12.04億円
新生・世界分散ファンド(分配重視型) 運用会社 新生インベストメント
日付 01/15 基準価格 9537円 -99円 総資産5.45億円
新生・4分散ファンド 運用会社 中央三井AM
日付 01/15 基準価格 9206円 -108円 総資産12.38億円
世界の財産3分法ファンド(不動産・債券・株式)毎月分配型 運用会社 日興アセット
日付 01/15 基準価格 9686円 -225円 総資産1524.72億円
フィデリティ・バランス・ファンド 運用会社 フィデリティ
日付 01/15 基準価格 13287円 -196円 総資産231.83億円
ドイチェ・ライフ・プラン30 運用会社 ドイチェ
日付 01/15 基準価格 10910円 -79円 総資産123.02億円
ドイチェ・ライフ・プラン50 運用会社 ドイチェ
日付 01/15 基準価格 10650円 -130円 総資産94.28億円
ドイチェ・ライフ・プラン70 運用会社 ドイチェ
日付 01/15 基準価格 10360円 -154円 総資産19.03億円
JPMワールド・CB・オープン 運用会社 JPモルガン
日付 01/15 基準価格 9900円 -31円 総資産251.59億円
ラサール・グローバルREITファンド(毎月分配型) 運用会社 日興アセット
日付 01/15 基準価格 11783円 -138円 総資産253.04億円
フィデリティ・USリート・ファンドA(為替ヘッジあり) 運用会社 フィデリティ
日付 01/15 基準価格 10246円 -76円 総資産5.06億円
フィデリティ・USリート・ファンドB(為替ヘッジなし) 運用会社 フィデリティ
日付 01/15 基準価格 11526円 -316円 総資産24.72億円
REITオープン 運用会社 大和投信
日付 01/15 基準価格 13184円 -462円 総資産126.29億円
日本トレンド・セレクト ハイパー・ウェイブ 運用会社 日興アセット
日付 01/15 基準価格 2541円 -70円 総資産149.76億円
日本トレンド・セレクト リバース・トレンド・オープン 運用会社 日興アセット
日付 01/15 基準価格 11172円 +153円 総資産8.30億円
日本トレンド・セレクト 日本トレンド・マネーポートフォリオ 運用会社 日興アセット
日付 01/15 基準価格 10042円 +1円 総資産15.35億円
日本債券ベア 運用会社 T&D
日付 01/15 基準価格 801円 +2円 総資産29.27億円
ゴールドマン・サックス日本株式マーケット・ニュートラル・ファンド(愛称:GSジャパン・ニュートラル) 運用会社 ゴールドマン
日付 01/15 基準価格 10744円 +7円 総資産131.34億円
ゴールドマン・サックス米国株式マーケット・ニュートラル・ファンド(愛称:GS US・ニュートラル) 運用会社 ゴールドマン
日付 01/15 基準価格 8427円 -67円 総資産16.65億円


ちゃんとすべてのデータが取得できたかは?です

2008年1月12日土曜日

ruby mechanizeライブラリをインストール

ブラウザ感覚でwebへアクセスできるもの。関連するライブラリも一緒にいれる必要がある
ubuntu7.04のときはbuild-essentialはインストールしなかった。今回はubuntu7.10なので
必要みたい
$ sudo apt-get install build-essential
途中インストールCDを挿入する必要がある。ubuntu7.10だから!?

$ sudo gem install hpricot
$ sudo gem install hpricot
Select which gem to install for your platform (i486-linux)
1. hpricot 0.6 (mswin32)
2. hpricot 0.6 (jruby)
3. hpricot 0.6 (ruby)
4. hpricot 0.6 (jruby)
5. hpricot 0.6 (mswin32)
6. hpricot 0.6 (ruby)
7. Skip this gem
8. Cancel installation
> 3
Building native extensions. This could take a while...
Successfully installed hpricot-0.6
Installing ri documentation for hpricot-0.6...
Installing RDoc documentation for hpricot-0.6...


$ sudo gem install mechanize
Need to update 12 gems from http://gems.rubyforge.org
............
complete
Install required dependency hoe? [Yn] y
Install required dependency rubyforge? [Yn] y
Install required dependency rake? [Yn] y
Successfully installed mechanize-0.6.11
Successfully installed hoe-1.4.0
Successfully installed rubyforge-0.4.4
Successfully installed rake-0.8.1
Installing ri documentation for mechanize-0.6.11...
Installing ri documentation for hoe-1.4.0...
Installing ri documentation for rubyforge-0.4.4...
Installing ri documentation for rake-0.8.1...
Installing RDoc documentation for mechanize-0.6.11...
Installing RDoc documentation for hoe-1.4.0...
Installing RDoc documentation for rubyforge-0.4.4...
Installing RDoc documentation for rake-0.8.1...

※ 他に確かruby-devが入っている必要がある

クリック証券Local APL ServerをUbuntuへインストール

pythonで書かれているのでpython2.5が入っているか確認。
$ python
Python 2.5.1 (r251:54863, Oct 5 2007, 13:36:32)

クリック証券からアプリをダウンロードし解凍する
解凍したモジュールをインストール。

CLICK-SEC_LocalAPIServer_2.4.0/CherryPy-2.2.1ディレクトリへ移動
$ sudo python setup.py install

CLICK-SEC_LocalAPIServer_2.4.0/CherryTemplate-1.0.0ディレクトリへ移動
$ sudo python setup.py install

※ 解凍したディレクトリにあるinstall.shではうまくいかなかった。

サーバ起動
$ python LocalAPIServer.py
/usr/lib/python2.5/site-packages/cherrypy/lib/profiler.py:54: UserWarning: Your installation of Python doesn't have a profile module. If you're on Debian, you can apt-get python2.4-profiler from non-free in a separate step. See http://www.cherrypy.org/wiki/ProfilingOnDebian for details.
warnings.warn(msg)
/usr/lib/python2.5/site-packages/cherrypy/lib/profiler.py:54: UserWarning: Your installation of Python doesn't have a profile module. If you're on Debian, you can apt-get python2.4-profiler from non-free in a separate step. See http://www.cherrypy.org/wiki/ProfilingOnDebian for details.
warnings.warn(msg)
12/Jan/2008:14:47:35 CONFIG INFO Server parameters:
12/Jan/2008:14:47:35 CONFIG INFO server.environment: development
12/Jan/2008:14:47:35 CONFIG INFO server.log_to_screen: True
12/Jan/2008:14:47:35 CONFIG INFO server.log_file: demoserver.log
12/Jan/2008:14:47:35 CONFIG INFO server.log_tracebacks: True
12/Jan/2008:14:47:35 CONFIG INFO server.log_request_headers: True
12/Jan/2008:14:47:35 CONFIG INFO server.protocol_version: HTTP/1.0
12/Jan/2008:14:47:35 CONFIG INFO server.socket_host: localhost
12/Jan/2008:14:47:35 CONFIG INFO server.socket_port: 8000
12/Jan/2008:14:47:35 CONFIG INFO server.socket_file:
12/Jan/2008:14:47:35 CONFIG INFO server.reverse_dns: False
12/Jan/2008:14:47:35 CONFIG INFO server.socket_queue_size: 5
12/Jan/2008:14:47:35 CONFIG INFO server.thread_pool: 5
12/Jan/2008:14:47:36 HTTP INFO Serving HTTP on http://localhost:8000/

エラーがでるのでpython-profilerを入れる
sudo aptitude install python-profiler

$ python LocalAPIServer.py
12/Jan/2008:18:48:55 CONFIG INFO Server parameters:
12/Jan/2008:18:48:55 CONFIG INFO server.environment: development
12/Jan/2008:18:48:55 CONFIG INFO server.log_to_screen: True
12/Jan/2008:18:48:55 CONFIG INFO server.log_file: demoserver.log
12/Jan/2008:18:48:55 CONFIG INFO server.log_tracebacks: True
12/Jan/2008:18:48:55 CONFIG INFO server.log_request_headers: True
12/Jan/2008:18:48:55 CONFIG INFO server.protocol_version: HTTP/1.0
12/Jan/2008:18:48:55 CONFIG INFO server.socket_host: localhost
12/Jan/2008:18:48:55 CONFIG INFO server.socket_port: 8000
12/Jan/2008:18:48:55 CONFIG INFO server.socket_file:
12/Jan/2008:18:48:55 CONFIG INFO server.reverse_dns: False
12/Jan/2008:18:48:55 CONFIG INFO server.socket_queue_size: 5
12/Jan/2008:18:48:55 CONFIG INFO server.thread_pool: 5
12/Jan/2008:18:48:55 HTTP INFO Serving HTTP on http://localhost:8000/

起動成功

簡単なクライアントでアクセスしXMLのレスポンスを取得した
<?xml version="1.0" encoding="UTF-8" ?>
<messageListResponse>
<responseStatus>OK</responseStatus>
<messageList>
<messageListItem>
<riyo>0</riyo>
<taishosha>1</taishosha>
<title>2007年05月18日(金)お知らせ内容のタイトル</title>
<text>お知らせ内容の本文です。</text>
</messageListItem>
</messageList>
<message>お知らせ一覧の取得が完了しました。</message>
</messageListResponse>

干し芋のリスト