ごみ収集日の検索をLineからできるようにした

前回のLINE Notifyを使ってごみ収集日を自分にお知らせしてみた。に続き、ごみシリーズです。

会社で携わっているサービスをゴリゴリAPI化していく予定(やっていき)なので、その練習も兼ねて作成しました。

今回は、Messaging API(LineBot)を使って、メッセージから横浜市のゴミ収集日を検索できるようにしました。

現在は、ざっくりイメージとして実装してみた感じなので、機能強化・リファクタリングは今後行っていく予定です。

こんな感じです。

収集場所名を前方検索し、もし、町名がドンピシャで一致していたら、収集曜日を出力。複数ある場合は「もしかして?」と収集場所名・コードを一覧出力します。

収集場所コードでも検索ができるので、収集場所名がわからない場合は、ざっくり町名などを入れて調べ→コードで検索といった流れで調べます。

環境は、

で実装しました。今回作成したAPIは以下3つ

  • 収集場所コードから収集場所のスケジュールを返すAPI
  • 収集場所名を前方一致で検索し、一覧で返すAPI
  • 上記2つのAPIを使い、Lineでメッセージを受け取り、スケジュールや収集場所一覧を返すAPI

です。Restfulな感じで作りました。

今回は、データについては横浜市のページを見て手動で作っていますが、 今後は、横浜市のHPからスクレイピングしてデータを取り込み、それを返すようにしていきたいと思います。

実は、今回APIを実装するのが初めてだったのですが、API設計や命名規則な部分で悩みました。

  • Rest APIのURLの付け方
  • APIでどんなリクエストを受けるか、どんなレスポンス・JSONを返すか
  • Lineメッセージのルール作り

実はまだまだ納得がいっておりませんので、今後、バージョンアップする際には、特にこの辺を意識して取り組んでいきたいと思います。

では、また。

LINE Notifyを使ってごみ収集日を自分にお知らせしてみた

Rubyの練習も兼ねて、LINE Notifyを使ってごみ収集日を自分にお知らせしてみました。

やったこと

  • LINE Notifyのマイページへログイン(スマホ版のLINEで登録したものです。)し、トークンを発行
  • メッセージの送信テスト
  • Rubyからメッセージを送信
  • ごみ収集日のお知らせテキストを作成し、メッセージを飛ばす処理を追加
  • 上記をcrontabへ登録

参考

developers.linecorp.com

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>

送れたみたい。

f:id:takapi86:20170102223433p:plain

ごみ収集日のお知らせテキストを作成し、メッセージを飛ばす処理を追加

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

きたぞっ!

f:id:takapi86:20170102224548p:plain

明日からゴミの出し忘れは無くなるに違いない。

ThinkPad X200に Ubuntu 16.04 LTSをインストールした(OSインストール編)

自宅のThinkPad X200Ubuntu 16.04 LTSをインストールしたので、手順を残しておく

手順の範囲

Ubuntuのイメージが入っているメディアが手元にある状態。PCにメディアをセットしインストール開始〜Ubuntuにログインするところまで

OSのインストー

Ubuntuのイメージが入っているメディアをセットし、PCを起動します。

以下の画面が表示されます。画面が切り替わるまでしばらく待ちます。

f:id:takapi86:20161217162615p:plain

f:id:takapi86:20161217162619p:plain

言語は日本語を選択し、Ubuntuをインストールを選択します。 f:id:takapi86:20161217162624p:plain

続けるを選択します。 (アップデートはインストール後に行います。) f:id:takapi86:20161217162732p:plain

ディスクを削除してUbuntuをインストールをチェックし、インストールを選択します。 f:id:takapi86:20161217162742p:plain

続けるを選択します。 f:id:takapi86:20161217162746p:plain

住んでいる場所がTokyoになっていることを確認し、 続けるを選択します。 f:id:takapi86:20161217162751p:plain

キーボードレイアウトを日本語になっていることを確認し、 続けるを選択します。 f:id:takapi86:20161217162757p:plain

あなたの名前、コンピュータの名称、ユーザ名、パスワードを入力し続けるを選択します。 f:id:takapi86:20161217162807p:plain

しばらく待ちます。 f:id:takapi86:20161217162813p:plain

今すぐ再起動するを選択します。 ※PCが再起動します。 f:id:takapi86:20161217165836p:plain

再起動後、先ほど設定したユーザ名、パスワードでログインします。 f:id:takapi86:20161217181405p:plain

ログインできたことを確認します。 f:id:takapi86:20161217181411p:plain

ターミナルを開き、以下のコマンドでOSをアップデートします。

sudo apt-get update
sudo apt-get upgrade

以上で、Ubuntuのインストールは完了です。