jazzspot-fukuoka が配信している「ライブ情報」。これはどこかにまとまっているものを単純に出しているわけではなく、管理人が自力で 収集したデータをもとに配信しています。
今回はどうやってこれを実現しているかを書いてみます。本当はすべてシステム化して ドヤァ したかったのですけど、基本的に多少強引気味な気合運用してます。なにかしらの参考になれば幸いです。
ライブ情報の種類と取得難易度
現在対応している店舗は 9店舗。実は店舗ごとに配信方法がさまざまなんです。これにすべて対応しなくてはなりません。最初はさてどうしたものか・・と頭を抱えました。みんな同じだったら楽なのですが、そうもいかない。
難易度順 に羅列するとこんな感じです。
- 難易度 低
- Google Calendar (願わくば、全店舗こうなってくれるとうれしい)
- REST API 対応済なサイト
- 難易度 中
- スクレイピング可能なサイト
- 難易度 高
- スクレイピング不可なサイト
- 口頭 (泣きそう)
更新タイミングは 月初・月末・毎週末 の3回を基本的に行っています。まだ店舗数が少ないので何とか対応できてます。
それでは、実際どのように取得しているかを 難易度 ごとに書いてみます。
難易度 低
Google Calendar
Google Calendar API でそのまま取得してます。うれしい!神!!リアルタイム更新もできるし、更新も楽。すべての店舗が Google Calendar で情報配信してくれると本当にうれしいです。。
REST API
対象のサイトはもともと REST API 対応されていませんでした。サイト管理者が同業者だったので(笑)、お願いしていい感じで取れるようにしてもらいました。感謝。API たたいて JSON 処理するだけなのでこれも楽でした。
難易度 中
スクレイピング その1 (Jsoup)
対象のサイトは table タグで構成されている手作り系サイトでしたが、正規表現頑張るだけでいけました。サイトの構成が大幅に変わるとキケンだけど、大幅リニューアルはしばらくないだろう。。と考えて決行。
スクレイピング その2 (spreadsheet)
なんとなく IMPORTXML 関数が面白かったので勉強がてらやってみました。おかげで簡単な HTML なら spreadsheet のみでスクレイピング楽勝。いい知見。
実際の spreadsheet (管理画面もどき) では、こんな処理を実装してます。
- IMPORTXML 関数 でスクレイピング
- 短縮 URL 化 (Google URL Shortner)
- Google Apps Script でサーバへデータ送信
難易度 高
人力入力
気合です。フリーフォーマットなテキスト情報は、マスターの文字入力の癖によってスクレイピング失敗する可能性が高い。というわけで、念のため目視確認しながら人力でやってます。まだ対象のお店が少ない (4店舗) からいいのですけど、
- 対応店舗数が増える
- 情報更新頻度が高くなる
- 情報量が多くなる
となってくると、ひとりで更新するのはもう無理かな・・と限界感じてます。
収集方法の今後
自動取得が不可なサイトについては「各店舗のマスターに 直談判&レクチャー してすべて Google Calendar 化する」が実現できたらいちばん嬉しいです。すべてのサイトがこれであればもっと嬉しいですね。
が、ジャズ関係の店舗のマスター様は年配の方が多いこともあるし、個人的には「IT を押し付けたくない」という思いもあります。Google Calendar の UI はわかりにくい部分もあるし。。もっとわかりやすい便利な管理画面を作成して使っていただくことも検討しています。さてどうしたものか・・
同じようなことをされてる方、運用アイデアをいただければ嬉しいです。