Download - Hamamatsurb#30
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.jsRails4.0rails runnerGemNokogiriHashie::MashATND 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 endend
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日木曜日
XPathXPathは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.imageend
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.imageend
@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://...”
end13年8月8日木曜日
Hashie::Mash
@summary.each_pair do |name,data|
name => “yuto”
data.attend_count => 28
data.image => “http://...”
end13年8月8日木曜日
感想
わざわざCronで実行する必要なさげ
今回はどこにもデプロイしてませんが、バックエンドからフロントまで一通りできるようになりたい
13年8月8日木曜日