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.
perlで挑む 
ごみ収集カレンダー 
YAPC::Asia 2014 前夜祭
自己紹介 
•@syachi 
•札幌から来ました 
•サーバサイドよりなWeb系の人 
•perlは昔つかっていました 
•号泣県議コンバーター作りました
号泣県議コンバーター 
を支える技術
Mojolicious::Lite 
と 
Text::MeCab
以上
旬は短い
本題
ごみ収集日カレンダー 
iCal版 
作りました
http://gomical.net
gomical.net とは 
•元はHokkaido.pm casual のお題 
「札幌市のごみカレンダーのPDFから 
データを抽出する」が始まり 
•やっていくうちに 
札幌市のゴミ収集日をiCalで提供 
するところまで来た。
元となるデータ 
•札幌市で公開しているデータは... 
•日本語版カレンダー(PDF) 
•音声読み上げ用カレンダー(HTML) 
•これらを元になんとかparseして 
扱いやすいデータにする
これが全部で 
\46パターン/
既に挑んでいる人がいた 
•他のイベントでチャレンジをしていた 
•PDFを元に人力でデータにしたらし 
い。
ちなみに 
pdftotextで変換すると…
たしかに手作業の方が早いかも
ちょっとまって
PDFがダメなら 
音声読上げ用データ 
があるじゃない
平成26年8月の収集日です。燃や 
せるごみは、毎週火曜日と金曜日 
です。びん・缶・ペットボトルは 
毎週月曜日、容器包装プラスチッ 
クは毎週木曜日です。雑がみは6 
日、20日の水曜日です。燃やせな 
いごみは13日の水曜日です。枝・ 
...
とりあえず「。」で分ける 
平成26年8月の収集日です。 
燃やせるごみは、毎週火曜日と金曜日です。 
びん・缶・ペットボトルは毎週月曜日、容器 
包装プラスチックは毎週木曜日です。 
雑がみは6日、20日の水曜日です。 
燃やせないごみは13...
日付がわかるものは抽出する 
平成26年8月の収集日です 
燃やせるごみは、毎週火曜日と金曜日です 
びん・缶・ペットボトルは毎週月曜日、容器 
包装プラスチックは毎週木曜日です 
雑がみは6日、20日の水曜日です 
燃やせないごみは13日の水...
残りは曜日だけ 
平成26年8月の収集日です 
燃やせるごみは、毎週火曜日と金曜日です 
びん・缶・ペットボトルは毎週月曜日、容器 
包装プラスチックは毎週木曜日です 
雑がみは6日、20日の水曜日です 
燃やせないごみは13日の水曜日です 
...
曜日から日付を取得する 
# 2014年8月の火曜日を取得する 
use Date::Manip; 
my @d = ParseRecur("every Tuesday in August 2014"); 
# $VAR1 = [ 
# '20...
記述の揺れ 
枝・葉・草はA日のX曜日です 
枝・葉・草はA日、B日のX曜日です 
枝・葉・草はA日の収集です 
「収集です」?? 
こういうゆれが結構ある
もしかして 
元データは 
手作業で作ってる?
全部のパターンを 
正規表現で作る!
すべてのデータの吸い上げ 
•WWW::Mechanize を使って 
すべてのデータをクロール 
•アタックにならないように注意
データをお好みの形式で出力 
•csv 
•json 
•iCal 
•SQL 
•その他
あとはデータを公開するだけ 
•最初はgithubにiCalで出力したものを 
置いてみた 
•googleカレンダーで取り込んだら何 
故か文字化け...
解決 
•どうやらContent-Typeを 
text/calendar; charset=utf-8 
にしないとダメっぽい 
•そうだherokuにしよう 
•ついでにドメインとるか 
•http://gomical.net
デモ
札幌以外の地域のカレンダーの 
プルリクお待ちしてます:-)
次回のデータ更新は9月
スクリプトがうまく動くか 
お楽しみに!
おわり
perlで挑むごみ集取カレンダー
perlで挑むごみ集取カレンダー
perlで挑むごみ集取カレンダー
perlで挑むごみ集取カレンダー
perlで挑むごみ集取カレンダー
perlで挑むごみ集取カレンダー
Upcoming SlideShare
Loading in …5
×

perlで挑むごみ集取カレンダー

1,501 views

Published on

YAPC::Asia 2014 の前夜祭で発表した資料です。

Published in: Technology
  • Be the first to comment

perlで挑むごみ集取カレンダー

  1. 1. perlで挑む ごみ収集カレンダー YAPC::Asia 2014 前夜祭
  2. 2. 自己紹介 •@syachi •札幌から来ました •サーバサイドよりなWeb系の人 •perlは昔つかっていました •号泣県議コンバーター作りました
  3. 3. 号泣県議コンバーター を支える技術
  4. 4. Mojolicious::Lite と Text::MeCab
  5. 5. 以上
  6. 6. 旬は短い
  7. 7. 本題
  8. 8. ごみ収集日カレンダー iCal版 作りました
  9. 9. http://gomical.net
  10. 10. gomical.net とは •元はHokkaido.pm casual のお題 「札幌市のごみカレンダーのPDFから データを抽出する」が始まり •やっていくうちに 札幌市のゴミ収集日をiCalで提供 するところまで来た。
  11. 11. 元となるデータ •札幌市で公開しているデータは... •日本語版カレンダー(PDF) •音声読み上げ用カレンダー(HTML) •これらを元になんとかparseして 扱いやすいデータにする
  12. 12. これが全部で \46パターン/
  13. 13. 既に挑んでいる人がいた •他のイベントでチャレンジをしていた •PDFを元に人力でデータにしたらし い。
  14. 14. ちなみに pdftotextで変換すると…
  15. 15. たしかに手作業の方が早いかも
  16. 16. ちょっとまって
  17. 17. PDFがダメなら 音声読上げ用データ があるじゃない
  18. 18. 平成26年8月の収集日です。燃や せるごみは、毎週火曜日と金曜日 です。びん・缶・ペットボトルは 毎週月曜日、容器包装プラスチッ クは毎週木曜日です。雑がみは6 日、20日の水曜日です。燃やせな いごみは13日の水曜日です。枝・ 葉・草は27日の水曜日です。
  19. 19. とりあえず「。」で分ける 平成26年8月の収集日です。 燃やせるごみは、毎週火曜日と金曜日です。 びん・缶・ペットボトルは毎週月曜日、容器 包装プラスチックは毎週木曜日です。 雑がみは6日、20日の水曜日です。 燃やせないごみは13日の水曜日です。 枝・葉・草は27日の水曜日です。
  20. 20. 日付がわかるものは抽出する 平成26年8月の収集日です 燃やせるごみは、毎週火曜日と金曜日です びん・缶・ペットボトルは毎週月曜日、容器 包装プラスチックは毎週木曜日です 雑がみは6日、20日の水曜日です 燃やせないごみは13日の水曜日です 枝・葉・草は27日の水曜日です
  21. 21. 残りは曜日だけ 平成26年8月の収集日です 燃やせるごみは、毎週火曜日と金曜日です びん・缶・ペットボトルは毎週月曜日、容器 包装プラスチックは毎週木曜日です 雑がみは6日、20日の水曜日です 燃やせないごみは13日の水曜日です 枝・葉・草は27日の水曜日です
  22. 22. 曜日から日付を取得する # 2014年8月の火曜日を取得する use Date::Manip; my @d = ParseRecur("every Tuesday in August 2014"); # $VAR1 = [ # '2014080500:00:00', # '2014081200:00:00', # '2014081900:00:00', # '2014082600:00:00' # ];
  23. 23. 記述の揺れ 枝・葉・草はA日のX曜日です 枝・葉・草はA日、B日のX曜日です 枝・葉・草はA日の収集です 「収集です」?? こういうゆれが結構ある
  24. 24. もしかして 元データは 手作業で作ってる?
  25. 25. 全部のパターンを 正規表現で作る!
  26. 26. すべてのデータの吸い上げ •WWW::Mechanize を使って すべてのデータをクロール •アタックにならないように注意
  27. 27. データをお好みの形式で出力 •csv •json •iCal •SQL •その他
  28. 28. あとはデータを公開するだけ •最初はgithubにiCalで出力したものを 置いてみた •googleカレンダーで取り込んだら何 故か文字化け...
  29. 29. 解決 •どうやらContent-Typeを text/calendar; charset=utf-8 にしないとダメっぽい •そうだherokuにしよう •ついでにドメインとるか •http://gomical.net
  30. 30. デモ
  31. 31. 札幌以外の地域のカレンダーの プルリクお待ちしてます:-)
  32. 32. 次回のデータ更新は9月
  33. 33. スクリプトがうまく動くか お楽しみに!
  34. 34. おわり

×