SlideShare une entreprise Scribd logo
1  sur  35
Télécharger pour lire hors ligne
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日木曜日

Contenu connexe

Plus de Yuto Ogi

Introducing aws ruby sdk
Introducing aws ruby sdkIntroducing aws ruby sdk
Introducing aws ruby sdk
Yuto Ogi
 
20130310 jaws tokai2013
20130310 jaws tokai201320130310 jaws tokai2013
20130310 jaws tokai2013
Yuto Ogi
 

Plus de Yuto Ogi (12)

Rails application template
Rails application templateRails application template
Rails application template
 
Ruby with AWS DynamoDB
Ruby with AWS DynamoDBRuby with AWS DynamoDB
Ruby with AWS DynamoDB
 
s3_website
s3_websites3_website
s3_website
 
OSC浜名湖2016 Hamamatsu.rbの歩みとITコミュニティとの上手な関わり方
OSC浜名湖2016 Hamamatsu.rbの歩みとITコミュニティとの上手な関わり方OSC浜名湖2016 Hamamatsu.rbの歩みとITコミュニティとの上手な関わり方
OSC浜名湖2016 Hamamatsu.rbの歩みとITコミュニティとの上手な関わり方
 
itamaeで一撃サーバーProvisioning
itamaeで一撃サーバーProvisioningitamaeで一撃サーバーProvisioning
itamaeで一撃サーバーProvisioning
 
浜松Ruby会議01
浜松Ruby会議01浜松Ruby会議01
浜松Ruby会議01
 
DMLを実行するrubyスクリプトをmigrationファイルのように管理するRailsプラグインを作った
DMLを実行するrubyスクリプトをmigrationファイルのように管理するRailsプラグインを作ったDMLを実行するrubyスクリプトをmigrationファイルのように管理するRailsプラグインを作った
DMLを実行するrubyスクリプトをmigrationファイルのように管理するRailsプラグインを作った
 
Web制作者のためのサーバー勉強会@沼津
Web制作者のためのサーバー勉強会@沼津Web制作者のためのサーバー勉強会@沼津
Web制作者のためのサーバー勉強会@沼津
 
Introducing aws ruby sdk
Introducing aws ruby sdkIntroducing aws ruby sdk
Introducing aws ruby sdk
 
20130310 jaws tokai2013
20130310 jaws tokai201320130310 jaws tokai2013
20130310 jaws tokai2013
 
20130112_出張JAWSUG浜松_Androidの会浜松支部
20130112_出張JAWSUG浜松_Androidの会浜松支部20130112_出張JAWSUG浜松_Androidの会浜松支部
20130112_出張JAWSUG浜松_Androidの会浜松支部
 
リーダブルコード 第二章
リーダブルコード 第二章リーダブルコード 第二章
リーダブルコード 第二章
 

Hamamatsurb#30