Hamamatsu.rb #30
@jacoyutorius
13年8月8日木曜日
Hamamatsu.rb
ついに30回ですね
13年8月8日木曜日
ということで、
今回はキリがいいので
13年8月8日木曜日
お前らのハマルビへの
出席率を調べてみた
13年8月8日木曜日
13年8月8日木曜日
全32回中、28回出席しました
13年8月8日木曜日
使ったもの
Chart.js
Rails4.0
rails runner
Gem
Nokogiri
Hashie::Mash
ATND API
13年8月8日木曜日
Chart.js
ちょっと前に
はてぶ等で
話題に
13年8月8日木曜日
サンプルを触ってみた
使うの簡単
シンプル(オプションも少なめ)
けど、シンプルすぎて使い道なくない?
13年8月8日木曜日
が!!
13年8月8日木曜日
http://startapp.jp/2013/07/21/
how-to-create-flat-chart.html
13年8月8日木曜日
なにこれ、
カッコいい・・・///
13年8月8日木曜日
Rails4
特に意味はない
4らしい機能も使ってないですね
rails runnerで定期的にデータ収集
crontabはまだ未設定
13年8月8日木曜日
rails runner
ちょっとコツが要るみたい
13年8月8日木曜日
class Cron::EventFeed
def self.get_event
end
end
lib/cron/event_feed.rb
$rails runner Cron::EventFeed.get_event
13年8月8日木曜日
どういうことなの(´・ω・)?
event_feed.rb => ●
eventfeed.rb => ×
13年8月8日木曜日
ATND API
“Hamamatsu.rb”をキーワードに検索
ただ、参加者のリストは各イベントペー
ジをスクレイピングする必要が
=> Nokogiri
13年8月8日木曜日
Nokogiri::HTML.parse
parseでHTMLを取得
取得したHTMLはcssセレクタかXPathでタ
グを検索
13年8月8日木曜日
Nokogiri::HTML.parse
html = Nokogiri::HTML.parse(open(event_url))
path = '//*[@id="members-join"]/ol/li/span/img'
html.xpath(path).each do |member|
//参加者のアイコンのURLをとる
end
13年8月8日木曜日
XPath
XPathはSelectorGadjetっていうブック
マークレットか、
Chromeデベロッパーツールを使うと色々
捗る
というか書き方のルールちゃんと知らな
い
13年8月8日木曜日
Webページのスクレイピング
は楽しい!
13年8月8日木曜日
あとは取得した参加者を
カウントするだけ
ActiveRecordでの集計はまだ慣れない
SQL一発で済ませたい気持ちでいっぱいに
13年8月8日木曜日
@summary = Participant.group("name").order("name").count
@images = {}
Participant.select("name, image").uniq("name").each do |row|
@images[row.name] = row.image
end
controllers/SummaryController
13年8月8日木曜日
=> {“yuto”=>”28”, ...}
=> {"yuto"=>"http://a0.twimg.com/
profile_images/1557771225/facebook
.jpg", ...}
controllers/SummaryController
同じKeyを持った2つのHashを作る
{名前 => 参加回数} , {名前 => アイコン}
13年8月8日木曜日
controllers/SummaryController
@summary.each_pair do |name,count|
name => “yuto”
count => 28
@images[name] => “http:// ...”
end
片方のハッシュのキーでもう片方にアクセス
13年8月8日木曜日
あんまイケてない気もする
ActiveRecordで一発でとれるんだろうか・・
controllers/SummaryController
13年8月8日木曜日
Hashを合成できる
ブロックでValueの判定方法を渡す
h1 => {:a => “hoge”}
h2 => {:a => “foo”}
h1.merge(h2){|k,v1,v2| v1 + v2}
=> {:a => “hogefoo”}
Hash#merge
13年8月8日木曜日
@summary = Participant.group("name").order("name").count
images = {}
Participant.select("name, image").uniq("name").each do |row|
images[row.name] = row.image
end
@summary.merge!(images){|key, v1, v2| {:count => v1, :image
=> v2} }
Hash#merge
13年8月8日木曜日
@summary.each_pair do |name,data|
name => “yuto”
data[:attend_count] => 28
data[:image] => “http://...”
end
片方のハッシュのキーでもう片方にアクセス
Hash#merge
13年8月8日木曜日
=> {“yuto”=>”28”, ...}
=> {"yuto"=>"http://a0.twimg.com/
profile_images/1557771225l.jpg", ...}
controllers/SummaryController
=> {“yuto”=> {:count => ”28”, :image => "http://
a0.twimg.com/profile_images/
1557771225l.jpg"} , ...}
13年8月8日木曜日
ハッシュの要素に対しメソッドへアクセ
スするがごとく、アクセスできる
Hashie::Mash
require “hashie”
h = Hashie::Mash.new({:key =>“value”})
h.key = “value”
13年8月8日木曜日
読み方わからん。
Hashie::Mash
13年8月8日木曜日
Hashie::Mash
@summary.each_pair do |name,data|
name => “yuto”
data[:attend_count] => 28
data[:image] => “http://...”
end
13年8月8日木曜日
Hashie::Mash
@summary.each_pair do |name,data|
name => “yuto”
data.attend_count => 28
data.image => “http://...”
end
13年8月8日木曜日
感想
わざわざCronで実行する必要なさげ
今回はどこにもデプロイしてません
が、バックエンドからフロントまで
一通りできるようになりたい
13年8月8日木曜日

Hamamatsurb#30