Praggerがどうやら最初のリリースに向けて具体的に動き出したっぽい。
ちょうどいいので今まで作ったプラグインについてまとめておく。どれもPraggerと同じライセンスでOKです。
load_lirs.rb
LIRS を取得するプラグイン。これでいいのか実は不安。
publish:hatena_graph.rb
はてなグラフにデータをポストするプラグイン。今日のデータしかポストできない。
get_hatena_graph.rb
はてなグラフからデータをダウンロードするプラグイン。目的のグラフのデータだけを抜き出す。これは公開してなかった。
## Get Hatena Graph data ## ## - module: get_hatena_graph ## config: ## user_id: your-hatena-user-id ## password: your-password ## graph_name: the-name-of-graph begin require 'rubygems' rescue LoadError end require 'mechanize' require 'uri' require 'kconv' require 'csv' class HatenaGraph def initialize(id,password) @id = id @password = password @agent = WWW::Mechanize.new if proxy = ENV['http_proxy'] proxy = URI.parse(proxy) @agent.set_proxy(proxy.host, proxy.port) end @graph = @agent.get("http://graph.hatena.ne.jp/#{id}/") end def login login_link = @graph.links.text("ログイン".toutf8) login_page = @agent.get(login_link.href) login_form = login_page.forms.first login_form['key'] = @id login_form['password'] = @password redirect_page = @agent.submit(login_form) @graph_link = redirect_page.links.text("こちら".toutf8) @graph_page = @agent.get(@graph_link.href) end def fetch_csv @data_link = @graph_page.links.text("データ".toutf8) @data_page = @agent.get(@data_link.href) csv_link = @data_page.links.text("ダウンロード".toutf8) csv_file = @agent.get(csv_link.href) # => WWW::Mechanize::File tmpfile = Tempfile.open("hatenagraph") path = tmpfile.path csv_file.save_as(path) tmpfile.close path end end def get_hatena_graph(config, data) graph = HatenaGraph.new(config['user_id'], config['password']) graph.login csvpath = graph.fetch_csv csv = CSV.open(csvpath, "r").map{|r| r } graph_names = csv.shift i = graph_names.index(config['graph_name'].tosjis) csv.map{|r| r[i].to_f } end
設定ファイルはこんな感じ。
- module: get_hatena_graph config: user_id: takatoh password: xxxxxxxx graph_name: "読んだページ数"
argv.rb
小物その1,コマンドラインからデータを取得。
def argv(config,data) return ARGV.clone end
average.rb
小物その2,平均。
def average(config, data) sum = data.inject(0.0){|a,b| a + b.to_f } return [ sum / data.size ] end