LoginSignup
2
4

More than 3 years have passed since last update.

【Ruby】HTTPClientとLINE Notifyを使ってターミナルから文字列を送るプログラム

Last updated at Posted at 2019-11-13

はじめに

「プログラムとLINEを連携して通知したい」って思ったことはないでしょうか。

ググると、すぐにLINE Notifyがヒットし、そのまま登録、APIドキュメントを読むと、curlコマンドでターミナルから通知が出来そうだということまではわかります。

でも、Webアプリに組み込むならプログラムを書いて実装したいのに良く分からない…:sob:

そんな思いを持つあなたに向けて記事を書きました。

今回はターミナルで任意の文字列を入力して、自分のLINEに通知するところまでをゴールとしていますが、これを応用すればあとは変数を変えるだけで、Rubyを使用したアプリケーションに組み込むための第一ステップがクリアでき、目的の「プログラムとLINEを連携して通知」が出来るきっかけになるのではと思います。

この記事が役に立つ方

  • LINE Notifyを使ってみたい
  • HTTPクライアントはHTTPClientを使いたい
  • Ruby初心者

この記事のメリット

  • LINE Notifyを使ったプログラムの書き方が分かる
  • HTTPClientの使い方が分かる

環境

  • macOS Catalina version 10.15.1
  • シェル:zsh
  • Ruby 2.6.3
  • HTTPクライアント:HTTPClient

【事前準備】トークンの取得からHTTPリクエストに必要な情報のメモまで

1. LINE Notifyにログイン・マイページに移動

右上から普段使っているLINE IDでログイン可能です。
ログイン後、「マイページ」に移動して下さい。

スクリーンショット 2019-11-13 19.55.12.png

2. トークンを発行する

マイページ下部の「トークンを発行する」をクリックして下さい。
スクリーンショット 2019-11-13 20.02.58.png

「トークン名」を任意で入力し、通知するトークンルームを選択します。

今回は試すだけなので、

  • トークン名を「test」
  • 通知するトークンルームを「1:1でLINE Notifyから通知を受け取る」

として自分だけが受け取るようにします。

スクリーンショット 2019-11-13 20.07.28.png

3. トークンをメモする

トークンは発行時にしか確認が出来ないので、必ずコピペでどこかにメモしておきましょう。

※メモし忘れたらやり直しです。

スクリーンショット 2019-11-13 20.24.30.png

以下のように、マイページで「連携中サービス」に「From:test」が出ていれば準備はOKです。

スクリーンショット 2019-11-13 20.03.51.png

今回使用する機能

LINE Notify API Documentの真ん中あたりにある「通知系」
POST https://notify-api.line.me/api/notify
が今回使用する機能です。
スクリーンショット 2019-11-13 20.45.33.png

では、次はこのAPIドキュメントに記載のcurlコマンドを確認します。

curlコマンドで送る場合

もしプログラムを書く必要がなくて、ターミナルから送れるだけで満足!という方はここでおしまいです!

POST https://notify-api.line.me/api/notifyの最下部に以下curlコマンドがサンプルとして記載されています。

メモしたトークンが合致するかの確認も含め、無事に通知が来るかどうか、一度試してみるといいと思います。

curl -X POST -H "Authorization: Bearer 取得したトークン" -F "message=送りたい文章" https://notify-api.line.me/api/notify

このcurlコマンドをHTTPClientを使って実装したものが本題のRubyプログラムです。

自分はHTTPメッセージの構造について理解が不十分だったので、ここから苦労しました。:sweat_smile:

以下、自分が理解するために活用したサイトです。

HTTP メッセージ - HTTP | MDN

また、英語ですがこちらの動画も1分半でコンパクトにまとまっていて、わかりやすかったです。
Parts of an HTTP Request - YouTube

ちなみに、Ruby標準搭載のHTTPクライアントnet/httpを使用して実装する場合は、以下サイトにコピペすると一瞬でRubyプログラムが仕上がります。便利!

curl-to-ruby: Convert curl commands to ruby’s net/http

LINE Notify API Documentからメモしておく情報

HTTPリクエストを作成・送信するため、
リクエストメソッド・ヘッダ・パラメータが必要です。

LINE Notify API Documentで必要な部分を以下にキャプチャしておきました。

スクリーンショット 2019-11-13 20.46.36.png

スクリーンショット 2019-11-13 20.47.13.png

まとめると、今回のLINE通知に必要な情報は以下の通りです。
これらをプログラム上で反映させる必要があります。

項目 要素
リクエストメソッド - POST
リクエストヘッダ Content-type multipart/form-data
リクエストヘッダ Authorization Bearer 取得したトークン
リクエストパラメータ  message gets(標準入力)

HTTPClientの使用方法についての理解には以下サイトを使用しました。(英語です)
Ruby HTTPClient tutorial

プログラム

では、実際のプログラムに移ります。
各行の意味はコメントをご参照下さい。

require 'httpclient'
# 定数を定義し、freezeで変更不可とする
URL = "https://notify-api.line.me/api/notify".freeze
TOKEN = "自分で取得したトークン".freeze

# httpclientを使ってリクエストの雛形を作成する
client = HTTPClient.new

# URIを指定
uri = URI.parse(URL)

# LINE Notify指定のリクエストヘッダを指定
header = {
  "Content-type" => "multipart/form-data",
  "Authorization" => "Bearer #{TOKEN}"
}

# 標準入力(ターミナル上でキーボードからの入力)を促す
puts "LINEで送信したい文章を入力してEnterを押して下さい"

# 表示するメッセージをクエリとして代入。その他画像等もここで入れることが出来る。
query = {
  "message" => gets # `gets`で標準入力を受け取る
}

# POSTリクエストを作成し、レスポンスを`res`に代入
res = client.post(uri, query, header) 
# リクエストだからといって、`res = client.request`とするとダメ。シンプルにpost。
# 引数を(uri, header, query)と順番を間違えてもエラーになる。


# レスポンスステータスコードを確認する
puts res.body

実行結果

無事動作するか確認してみましょう。
”status”:200が出て、自分のLINEに通知が来れば大成功!

$ ruby line-notify.rb
LINEで送信したい文章を入力してEnterを押して下さい
お疲れ様でした! # 任意の文字列を入力
{"status":200,"message":"ok"}

おわりに

自分用に学習時間を記録するWebアプリを作成中で、一日の終わりにLINEで学習時間を通知する機能を実装したかったので、LINE Notifyを使ってみることにしたんですが...

HTTPの理解が全然出来ていなかったことでずっと400401エラーと格闘してました。:sweat_smile:

書いたおかげで思考整理が出来てスッキリ!理解も深まりました!

ちなみに、HTTPClientって人気ないんでしょうか?
ネット上ではnet/httpを使用した記事が多く、基本的に英語のドキュメントばかりだったので、ひと苦労でした。:tired_face:

参考にさせて頂いたサイト(いつもありがとうございます)

LINE Notify
Ruby HTTPClient tutorial
curl-to-ruby: Convert curl commands to ruby’s net/http
HTTP メッセージ - HTTP | MDN
Parts of an HTTP Request - YouTube
module function Kernel.#gets (Ruby 2.6.0)
超簡単LINE notify を使ってみる - Qiita

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4