ごみ収集日の検索をLineからできるようにした
前回のLINE Notifyを使ってごみ収集日を自分にお知らせしてみた。に続き、ごみシリーズです。
会社で携わっているサービスをゴリゴリAPI化していく予定(やっていき)なので、その練習も兼ねて作成しました。
今回は、Messaging API(LineBot)を使って、メッセージから横浜市のゴミ収集日を検索できるようにしました。
現在は、ざっくりイメージとして実装してみた感じなので、機能強化・リファクタリングは今後行っていく予定です。
こんな感じです。
収集場所名を前方検索し、もし、町名がドンピシャで一致していたら、収集曜日を出力。複数ある場合は「もしかして?」と収集場所名・コードを一覧出力します。
収集場所コードでも検索ができるので、収集場所名がわからない場合は、ざっくり町名などを入れて調べ→コードで検索といった流れで調べます。
環境は、
で実装しました。今回作成したAPIは以下3つ
です。Restfulな感じで作りました。
今回は、データについては横浜市のページを見て手動で作っていますが、 今後は、横浜市のHPからスクレイピングしてデータを取り込み、それを返すようにしていきたいと思います。
実は、今回APIを実装するのが初めてだったのですが、API設計や命名規則な部分で悩みました。
実はまだまだ納得がいっておりませんので、今後、バージョンアップする際には、特にこの辺を意識して取り組んでいきたいと思います。
では、また。
LINE Notifyを使ってごみ収集日を自分にお知らせしてみた
Rubyの練習も兼ねて、LINE Notifyを使ってごみ収集日を自分にお知らせしてみました。
やったこと
- LINE Notifyのマイページへログイン(スマホ版のLINEで登録したものです。)し、トークンを発行
- メッセージの送信テスト
- Rubyからメッセージを送信
- ごみ収集日のお知らせテキストを作成し、メッセージを飛ばす処理を追加
- 上記をcrontabへ登録
参考
LINE Notifyのマイページへログイン(スマホ版のLINEで登録したものです。)し、トークンを発行
特に問題なく発行出来たので割愛
メッセージの送信テスト
参考ページ コマンドラインから LINE にメッセージを送れる LINE Notifyにもある通り、curlから簡単に試すことができた
curl -X POST -H 'Authorization: Bearer [access_token]' -F 'message=foobar' https:// notify-api.line.me/api/notify
※ [access_token]の部分を発行されたトークンに置き換えます。([]は必要なし)
Rubyからリクエストを送信
以下のように実装してみた。
line_notify.rb
# coding: utf-8 require 'net/http' require 'uri' require 'openssl' class LineNotify def self.send_msg(msg, token) if token.nil? || token.empty? puts 'Tokenをセットしてください。' return end uri = URI('https://notify-api.line.me/api/notify') req = Net::HTTP::Post.new(uri.path) req.set_form_data('message' => msg) req['Authorization'] = 'Bearer ' + token http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true if uri.scheme == 'https' http.verify_mode = OpenSSL::SSL::VERIFY_NONE res = http.start do |h| h.request(req) end end end
irbでテスト
irb(main):001:0> require './line_notify' => true irb(main):002:0> LineNotify::send_msg("テストです。", "ここはトークン") => #<Net::HTTPOK 200 OK readbody=true>
送れたみたい。
ごみ収集日のお知らせテキストを作成し、メッセージを飛ばす処理を追加
schedule.rb
# coding: utf-8 require "date" require 'json' require 'yaml' require './line_notify' config = YAML.load_file("config.yml") youbi = [:日,:月,:火,:水,:木,:金,:土] wday = youbi[Date.today.wday] gomi_schedule = { 月: '燃やすごみ,燃えないごみ、スプレー缶、乾電池', 火: '缶・びん・ペットボトル', 水: 'プラスチック製容器包装', 木: '燃えないごみ', } if !gomi_schedule[wday].nil? msg = "\n今日は"+ wday.to_s + "曜日【" + gomi_schedule[wday] + "】の収集日です。" LineNotify::send_msg(msg, config['token']) end
config.yml
token: [ここにトークンを追加]
上記をcrontabへ登録
crontab -e
7時に通知が来るよう設定
0 7 * * * cd ~/ && ruby schedule.rb
きたぞっ!
明日からゴミの出し忘れは無くなるに違いない。
ThinkPad X200に Ubuntu 16.04 LTSをインストールした(OSインストール編)
自宅のThinkPad X200にUbuntu 16.04 LTSをインストールしたので、手順を残しておく
手順の範囲
Ubuntuのイメージが入っているメディアが手元にある状態。PCにメディアをセットしインストール開始〜Ubuntuにログインするところまで
OSのインストール
Ubuntuのイメージが入っているメディアをセットし、PCを起動します。
以下の画面が表示されます。画面が切り替わるまでしばらく待ちます。
言語は日本語
を選択し、Ubuntuをインストール
を選択します。
続ける
を選択します。
(アップデートはインストール後に行います。)
ディスクを削除してUbuntuをインストール
をチェックし、インストール
を選択します。
続ける
を選択します。
住んでいる場所がTokyo
になっていることを確認し、
続ける
を選択します。
キーボードレイアウトを日本語
になっていることを確認し、
続ける
を選択します。
あなたの名前
、コンピュータの名称、ユーザ名、パスワードを入力し続ける
を選択します。
しばらく待ちます。
今すぐ再起動する
を選択します。
※PCが再起動します。
再起動後、先ほど設定したユーザ名、パスワードでログインします。
ログインできたことを確認します。
ターミナルを開き、以下のコマンドでOSをアップデートします。
sudo apt-get update sudo apt-get upgrade