LINE 上で福岡のジャズライブを検索できるサービス(LINE BOT) を 10ヶ月 運用して思うこと (ライブ情報の収集)
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 はわかりにくい部分もあるし。。もっとわかりやすい便利な管理画面を作成して使っていただくことも検討しています。さてどうしたものか・・
同じようなことをされてる方、運用アイデアをいただければ嬉しいです。
LINE 上で福岡のジャズライブを検索できるサービス(LINE BOT) を 10ヶ月 運用して思うこと
趣味でこんな LINE BOT を作って運用してます。
なんとなくひと区切りしたので、いろいろと思うことをまとめてみました。
どんな BOT ?
「福岡のジャズスポットのスケジュールを横断検索できる」検索型 BOT です。
- ジャズミュージシャン
- ジャズライブに行くリスナーの方
- 対象エリアは 福岡 のみ
がターゲット層です。非常にニッチです。
どんなシチュエーションで使えるか、を簡単に紹介してみます。
場面「今日は何のライブがあってる??」
日付でライブ情報を 全店舗まとめて 表示する機能です。
- メニューで "今日" を選択
- メニューで "明日" を選択
- 日付を直接入力
することで検索が可能です。
場面「フリーワードで検索したい」
ライブ情報を入力された フリーワードで検索 する機能です。
ジャズ関係だと、ミュージシャン名 や "セッション" といったワードを使うことが多い気がします。福岡には「川上さん」という自分が大好きな素晴らしいベーシストな方がいらっしゃるのですが、この例は、
- 川上さんの演奏はいつ演奏あるかな
- "川上" と入力
- スケジュールが表示される
という検索例です。
場面「お店ごとの情報が見たい」
本 BOT が対応している お店のライブ情報 を表示する機能です。
- スケジュール
- 公式サイト
- 地図
をカルーセル型を使ってわかりやすく見れるようにしてみました。
場面「演者からお客様にメッセージを届けたい」
演者からの メッセージ、想い を伝える機能です。(LINE Beacon を使った機能)
SNS 等で繋がってなかったら、「ライブ後に演者とお客様でコミュニケーションとる」のはなかなか難しいと思うのですよね。演者としてもせっかくライブに来てくれたお客様と連絡とりたいだろうし。
- ライブ終了後にお店から出る
- 演者からメッセージが届く
- 「本日はありがとうございました!」とか
- 今日のライブのセットリスト一覧とか
- 今日のライブのアンケートとか
- 次回のライブ案内(フライヤー画像)とか
「ライブ終了後の気持ちがアツい状態」に演者から直接メッセージが届くとすごくうれしいと思うのです。個人的にはこのタイミングは特に絶妙だと思います。この状態だと「アンケートにも答えてみようかな」なんてなると思うし。こんな状況を想定しています。
なぜ作ろうと思ったのか
自分はここ数年ジャズがすごく好きで、ジャズのお店に頻繁に行くようになりまして。で、ライブに行きたい時は
- お店のサイト
- ブログ
- SNS
毎回このあたりを見てまわるのですね。10店舗近く。しかし、これがとにかく面倒で不便。ポータルサイトもない。なので、1つ1つ見てまわる → 面倒くさくなる → 行くのやめる、みたいなことが多くて。自分が面倒くさがりなので、これを IT 力でなんとか楽にならないかと思い、勝手に作ったのがこの BOT になります。
運用状況
BOT 自体は Trial 時代より実運用しています。
- Trial 版(2016/5~)
- Messenger API 版(2016/11~)
また、
- 登録人数は Trial 時代は 50 人(上限値)
- 現在は 200 人超(2018/3/2 現在)
- アクセス数は 80 アクセス/日
と、ユーザ数は決して多くはありませんが、BOT の用途やターゲット層を考慮すると、なかなか使っていただいている気がします!うれしい!
開発環境
PaaS には GAE/J(standard) を使用してます。
が・・無料枠での運用は spinup/spindown がきびしいです。BOT は応答が命。flexible にして札束運用で解決するか、別構成にするか。今後の課題です。
AndroidStudio+GAE/J+JAX-RS(Jersey)
Java でサーバサイド書きたいけど Eclipse に戻りたくない、という理由で、まずは GAE/J+JAX-RS(Jersey) の環境構築手順を調べてみた。
手順
module 作成
build.gradle
- dependency に Jersey を追加
Servlet 作成
- Jersey 実装した Servlet を作成
web.xml
- 作成した Servlet を設定
コード
動作確認
- [Run > Run モジュール名] で作成した module を実行
- アクセスして JSON 返却されることを確認
curl localhost:8080/jersey/events | jq .
参考
Google Apps Script で spreadsheet から Googleカレンダーへイベント一括登録(2016/3/23 時点)
Googleカレンダーにイベントを一括登録したい事案が発生したので調べてみた。Calendar 系は使ったことなかったけど、予想以上にお手軽だった。
このデータ達がー
こうなる。
手順
データ登録(spreadsheet)
- date: イベントの日程
- title: イベントのタイトル
- description: イベントの詳細
calendar
- 出力先のカレンダーの カレンダーID をメモる
gas
- spreadsheet のスクリプトエディタに以下の script を貼り付け
- 定義部分(spreadsheet の URL とか)を修正
spreadsheet
- 「メニュー>管理者用>カレンダーへ登録」を実行
コード(gas)
課題
参考
Google Apps Script で spreadsheet のデータを JSON として読み込む
Android アプリに限らず、JSON データを表示するようなアプリって作ること多いですよね。で、自分はその時いつもサーバサイド作るのがめんどくさくなっちゃう。なので、spreadsheet のデータをそのまま JSON として返すようなサーバーサイドアプリを GAS(Google Apps Script) で書いてみました。いまさら何言ってんだ、いつのネタだよという感じだけど、がしがし開発するときにこういうのあるとやっぱり便利だった。
やること
確認
cURL で確認。
# curl -L 'GASの公開URL' [{"name":"あああ","memo":"ジェッタシー"},{"name":"いいい","memo":"早寝早起き"},{"name":"ううう","memo":"ロングブレス"},{"name":"えええ","memo":"Aチーム"}]
ちなみに「curl 'GASの公開URL'」だとエラーになるので注意。
所感
GAS 便利。超便利。