カテゴリー別アーカイブ: Ruby

JavaScriptが必要なページのスクレイピング

JavaScriptが必要なページをスクレイピングするにはどうしたらいいか調べた。

Selenium

ブラウザを操作してウェブアプリのテストをするツール。
FireFox, Chrome, IEなど様々なブラウザに対応している。
実際にブラウザを立ちあげて色々行うのでやや遅い。

Rubyで書くとこうなる。

require "rubygems"
require "selenium-webdriver"
 
d = Selenium::WebDriver.for :firefox
d.navigate.to 'http://example.com'
puts d.page_source

メソッド名がJavaScriptライク。

GUIのない環境で動かすときはXvfbをインストールし、headlessを使う。

require "rubygems"
require "selenium-webdriver"
require "headless"
 
Headless.ly do
  d = Selenium::WebDriver.for :firefox
  d.navigate.to 'http://example.com'
  puts d.page_source
end

似たところでWatirがある。

capybara-webkit

Webkitエンジンを使用してウェブアプリのテストをするツール。
ブラウザの立ちあげが必要ないぶん早い。
Qtに依存しているためインストールがやや面倒。

Rubyで書くとこうなる。

require 'rubygems'
require 'capybara'
require 'capybara/dsl'
require 'capybara-webkit'
 
class Driver
  Capybara.default_driver = :webkit
  include Capybara::DSL
end
d = Driver.new
d.visit "http://example.com"
puts d.html

ちなみにCapybaraはSeleniumを標準でサポートしている。

Capybara.default_driver = :selenium # これで切り替え

GUIのない環境で動かすときはXvfb + headlessを使う。

ameblogazo

アメブロの画像を簡単にぶっこ抜くツール
以前の記事でつくったツールが動かなくなっていたので、ちょっと直した。
capybara-webkitを使ってる。

jpstock-0.6.0

0.6.0から信用情報がとれるようになりました。
取得元は、日証金大証金

こんな感じのデータが返ってきます。

> JpStock.credit(:code=>2138)
 => #<JpStock::CreditData:0xa7e6120 @code="2138", @loan_new=181, @loan_return=13, @loan_balance=4, @stock_new=27, @stock_return=35, @stock_balance=1, @balance=3, @balance_prev=176, @security="osf">
変数名 説明
loan_new 融資新規
loan_return 融資返済
loan_balance 融資残高
stock_new 貸株新規
stock_return 貸株返済
stock_balance 貸株残高
balance 差引残高
balance_prev 差引前日比

その他オプションはこちらを参照で。

あと返り値のインターフェースを大きく変えました。
いままでHashで返ってきたところが、配列で返ってくるようになります。
Hashで返ってくると使うときに冗長なコードを書くことを強いられ、なにかとめんどうだなーと以前から薄々思っていたので、ちょっと一新しました。

EDINET関連はちょい後回し。

jpstock-0.5.0

株価取得ライブラリであるJpStockですが、細々と更新を続けてます。

バージョン0.5.xからEDINET系のコマンドを充実させたいと思いつつ。

とりあえず様子見で0.5.0をアップ。
まだ証券コードからEDINETコードを調べることしか出来ません。

使い方はこんな感じ。

$ irb
> require 'jpstock'
> JpStock.sec2edi(:code=>4689)
 => {"4689"=>"E05000"}

証券コードとEDINETコードの対応表が公式になかったので自分でつくりました。
間違ってたり足りない箇所があったら教えて下さい。
公式のものがあれば良かったんですけどね。
対応表だけ欲しい方は、CSVにまとめてあるので使ってください。
使って何か問題が発生しても責任はとれませんけど。

次バージョンではXBRLをちょこちょこと解析する機能を追加したい予定です。
まずその前にXBRLの勉強をしてかないといけないですけど。
なかなかめんどくさい感じです。

Railsメモ

忘れた頃にみる用。3.2.3。

プロジェクト

$ rails new hoge -d mysql

コントローラー

$ rails g controller hoge

モデル

$ rails g model hoge field:type [...]
型一覧
integer decimal float
string text binary
date datetime timestamp
time boolean


カラム名の変更

$ rails g migration rename_aaa_to_bbb
      invoke  active_record
      create    db/migrate/20120922045512_rename_aaa_to_bbb.rb
# vi db/migrate/20120922045512_rename_aaa_to_bbb.rb
class RenameAaaToBbb < ActiveRecord::Migration
  def up
    rename_column :table, :aaa, :bbb # 追記
  end
end

データベース更新

$ rake db:migrate

rails runner

バッチ処理するとき便利なやつ。

$ rails r script/hoge.rb

config/routes.rb にルート定義。
config/database.yml にデータベース定義。
Gemfile にgem定義。
script/ の下にバッチ処理おく。
public/index.html いらない。

`autodetect’: Could not find a JavaScript runtime

Gemfileに以下を追加。

gem 'execjs'
gem 'therubyracer'

なんか設定が反映されない

unicornも再起動。

アメブロの画像を簡単にぶっこ抜くツール

ももクロさんも使ってるアメーバブログの画像のダウンロードを簡単にしてくれるツールを書いてみた。
なんとなく作ってみたいなと思いつつ手を付けてなかったけど昨日株で負けてむしゃくしゃしてやった。後悔はしてない。
コマンドラインツールなので、そのあたりが分かるひと向け。

どんなことが出来るかというと、アメブロのIDを指定して実行するとそのブログにうpされてる画像を順次引っこ抜いたり、引っこ抜いたものを日付で分類したり記事タイトルで分類したり、引っこ抜く枚数を指定できたり、ダウンロード済のものが見つかるまで順次引っこ抜くだとか、そんな感じのことができます。

じっさいに使うとこんな感じに。

$ ameblogazo -i momota-sd -d /tmp/momota-sd -c title -n 10
検索中...
ディレクトリを作成します /tmp/momota-sd/やっほい(*´∀`)
o0396053211964069416.jpg をダウンロードしました
o0404053611964069423.jpg をダウンロードしました
o0404053611964069404.jpg をダウンロードしました
ディレクトリを作成します /tmp/momota-sd/私服~☆
o0464059611952103102.jpg をダウンロードしました
ディレクトリを作成します /tmp/momota-sd/人文字~♪♪
o0400053611949353482.jpg をダウンロードしました
o0384051211949353481.jpg をダウンロードしました
o0384051211949353480.jpg をダウンロードしました
o0384051211949353483.jpg をダウンロードしました
o0405058411949353484.jpg をダウンロードしました
ディレクトリを作成します /tmp/momota-sd/家紋シールデビュー!!
o0400053611943721237.jpg をダウンロードしました

インストールはrubygemsから。

$ gem install ameblogazo

簡単な説明とソースはgithubに。