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.

Web技術勉強会 第37回

1,100 views

Published on

Web技術勉強会 第37回

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Web技術勉強会 第37回

  1. 1. Web技術勉強会 第37回 2chから世相を占う 「rankforce」
  2. 2. とにかく速報がほしい Twitterもあるけどやっぱり、 速報=2ch
  3. 3. 会社にいても速報がほしい 仕事中に堂々とメールは見辛い。 携帯でネットはさすがに…。いや見るけど。 でも速報が欲しい。 それを実現したい!
  4. 4. 例えば… 「有名人が逮捕された」 ↓ キタ━━━━━━(゚∀゚)━━━━━━ !!!!! ↓ 社会人、祭りに参加出来ず ↓ ニート大勝利
  5. 5. 正直悔しい。 せめて祭りを外から眺めたい!
  6. 6. 駄目なパターン ・常時2ch監視→できるわけねえだろ。 ・定期的に2ch監視→そんな時間あるわけねえだろ ・休み時間に2chを監視→まさに後の祭り ・仕事中に小窓で2ch→バレたらさすがにやべえ ・というか会社から2ch見れないぜ!
  7. 7. 共通して言えること 人間が能動的に情報を取りに行く時点でだめ。なぜならいつ事件が 起きるかわからない。プログラムで定期監視をしないといけない。そ れを人間に通知しなければ要件は達成できない。 つまり、定期的かつ受動的に速 報を取得することがゴール!
  8. 8. こうすれば簡単 定期的→cron 受動的→kayac通知API (要iPhone)
  9. 9. 言語選定 Rubyに決定 条件として「スクレイピング」が簡単、 「過去のロジックの使い回し」が可能 はじめにJavaと迷うも、Javaはスクレイピングが糞。例によってコー ド量が多くなる。却下。次にPerl。ロジックの使いまわしが効かない (新規につくらないといけないところが多かった)ので却下。あとORM が糞なので却下。その点Rubyはすべて満たした。PHPは…残念な がら今回は用なしだった。
  10. 10. 速報まとめサイトを利用 http://ranking.sitepedia.jp/
  11. 11. スクレイピングは超簡単 Hpricotでらくらく。 html = timeout(TIMEOUT) do Hpricot(open(URL).read) end res = (html.search("//table[@class='forces']/tr")). each_with_object [] do |e, r| ikioi = e.search("[@class='ikioi']").inner_text.toutf8 end
  12. 12. DBにつっこむ これもSequelでらくらく @db = Sequel.connect(...) @db[:table] << data
  13. 13. IMを送る 普通にNet::HTTPとかでPOSTするだけ(すでに作っ たものをコピペで終わり) HOST = 'im.kayac.com' PATH = '/api/post/' data, header = {}, {} Net::HTTP.version_1_2 Net::HTTP.start(HOST, 80) do |http| response = http.post(PATH, data, header) end
  14. 14. 実行 rankforce.rb -b newsplus -r 10000 -i 20000 -d
  15. 15. Cronに登録 実は苦労した…。cdが必要とは。 */5 * * * * cd /usr/local/apache2/htdocs/rankforce/; /usr/local/bin/ruby rankforce.rb -r 10000 -i 20000 -d
  16. 16. あとはiPhoneで通知をまつべし 通知してくれる!
  17. 17. まとめ 製作時間:たぶん10時間くらい Perlでも同等のものを同等の コード量で作れるはず。 今後はちょこちょこ改造予定。

×