これは面白いぞ!RubyでWebプッシュ通知サービスPush7のAPIを使ってプッシュ通知を送ってみる
価値ある情報をユーザー視点で発信するブログ
ブログやWebサイトの更新をプッシュ通知で知らせるためのWebサービス、Push7が最近人気を集めていますね。
Push7は最近のWebブラウザが持っているプッシュ通知の機構や、スマートフォンのプッシュ通知の機構(Android / iOS両対応)に対応していて、家でも外でもプッシュ通知を受信してもらえる環境を提供してくれます。
これまでも任意のプッシュ通知を送るためのAPIを提供するサービスはありましたが、1対1の通知しか送れず、自分自身のために送るプッシュ通知という利用形態に限られました。
しかも、スマートフォン用のクライアントの多くは有料でした。
Push7は購読してくれた人全員にプッシュ通知を送ることができる1対多のサービスであるところが画期的です。それでいて無料で使えるのですから素晴らしいものです。
ブログを運営していれば、興味を惹かれるサービスであるのは間違いありません。
弊ブログも遅ればせながらPush7対応をしてみました。ぜひ購読をお願い致します。
WordPress用のプラグインがあるので、WordPressなら導入は簡単です。ちなみに、こちらの環境(sixcore)ではSSLの「SSLの検証を無効化する」で「する(必要のない場合には選択しないでください。)」を選択しないとプッシュ通知が送られませんでした。
ただ、公式のWordPress用プラグインを導入すると、最初の公開時はもちろんのこと、更新毎にプッシュ通知が送られるので、修正が多い人だとちょっと恥ずかしいかもしれませんし、月5,000回に定められた送信回数を使い切ってしまいそうです。
Push7は何もブログやWebサイトの更新のためだけにしか使えないわけではありません。
Push7は「Webサイト運営者のための」と前置きがありますが、その実、不特定多数の人に知らせたいことを送信するために汎用的に使えるメッセージングサービスです。
「更新通知」にとらわれない利用を考えたいところです。
Push7を利用開始するには、アカウントを取得してアプリケーションを登録するところから始めます。
一つのアプリケーションにつき、月5,000回のプッシュ送信に限られるという制約があります。
アプリケーションは複数登録することができ、4つまでの登録を確認しました。これ以上も登録が可能のようです。
プッシュ送信月5,000回の制約はアプリケーションごとに別勘定なので、4つ登録すれば合計20,000回プッシュ送信できることになります。
複数のアプリケーションを購読してもらうことのハードルは高そうですが、制約は簡単に突破できますね。
登録したアプリケーションをだれにも公開せずにおけば、在来のプッシュ通知アプリのように、自分のためにだけに使うこともできます。
Push7にはAPIがあり、これを通して利用することができます。
現状、APIは二つあります。利用状況を確認するHead APIと、プッシュ通知を送信するためのSend API。
Head APIの利用は、URLを組み立ててアクセスするだけ。
https://api.push7.jp/api/v1/[APPNO]/head
URLの途中に[APPNO]がありますが、これはPush7に登録したアプリケーションのアプリケーション設定から取得が可能です。
ひとりぶろぐのAPPNOは b12ed56a2b1642febc36c4c6cd1a0313 なので、アクセスすべきURLは以下のようになります。
https://api.push7.jp/api/v1/b12ed56a2b1642febc36c4c6cd1a0313/head
APPNOは購読ボタンなどで公開されているので、Head APIはだれでも参照が可能です。
Send APIの方はPOSTメソッドでアクセスすることになるので、Rubyで試してみました。
Send APIのエンドポイントは以下。
https://api.push7.jp/api/v1/[APPNO]/send
[APPNO]の部分は、Push7のダッシュボード「登録アプリケーション > アプリケーション設定 > 自動プッシュ設定 > WordPress」で取得したAPPNOに置き換えます。
ひとりぶろぐの場合は、以下のようになります。
https://api.push7.jp/api/v1/b12ed56a2b1642febc36c4c6cd1a0313/send
ここへbodyに指定のJSONを置いてPOSTメソッドでリクエストを投げます。
[APPNO]と[APIKEY]はPush7のダッシュボード「登録アプリケーション > アプリケーション設定 > 自動プッシュ設定 > WordPress」から取得したもので置き換えます。
#!/usr/local/bin/ruby
# coding: utf-8
require 'net/http'
require 'uri'
require 'json'
APP_NO = "[APPNO]"
API_KEY = "[APIKEY]"
END_POINT = "https://api.push7.jp/api/v1/#{APP_NO}/send"
uri = URI.parse(END_POINT)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
req = Net::HTTP::Post.new(uri.request_uri)
req["Content-Type"] = "application/json"
payload = {
"title" => "テストタイトル",
"body" => "テスト本文",
"icon" => "https://dashboard.push7.jp/uploads/5f670282635746e38ce6b060ad495d2a.png",
"url" => "http://hitoriblog.com/",
"apikey": API_KEY
}.to_json
req.body = payload
res = http.request(req)
p res
p res.body
ポイントは、SSLを有効にしないと400エラーが返ってくるということです。
#<Net::HTTPBadRequest 400 Bad Request readbody=true>
購読者が0人の状態で投げると、ダッシュボードに記録は残るものの当然プッシュ通知は配信されず、405エラーが返ってきますので慌てずに。
#<Net::HTTPMethodNotAllowed 405 METHOD NOT ALLOWED readbody=true>
非常に簡単に利用できるので、何かのbot的なものからの利用を考えてみようと思っています。
ブログの方も、購読者が増えたらリアルタイム性を前提とした取り組みもやりやすくなるでしょうし、ちょっとわくわくしますよ。