Hamamatsurb#30

Preview:

Citation preview

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日木曜日

なにこれ、カッコいい・・・///

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日木曜日

ハッシュの要素に対しメソッドへアクセスするがごとく、アクセスできる

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日木曜日

Recommended