Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Hamamatsurb#30

1,041 views

Published on

  • Be the first to comment

Hamamatsurb#30

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

×