• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Web技術勉強会 第37回
 

Web技術勉強会 第37回

on

  • 1,076 views

Web技術勉強会 第37回

Web技術勉強会 第37回

Statistics

Views

Total Views
1,076
Views on SlideShare
1,076
Embed Views
0

Actions

Likes
0
Downloads
5
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Web技術勉強会 第37回 Web技術勉強会 第37回 Presentation Transcript

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