Pollofeedみたいなサイトの作り方
今朝、こちらの記事を読みました。
【相談】「POLLO FEED」の水槽版を作ってみたいのだが…
前からライトニングアプリの雛形みたいなのを作りたいと思っていたので、この機会に作ってみました。
Pollofeedみたいなサイトとは
「動画が再生されていて、投げ銭ができる」サイトのことです。(Pollofeed参照)
本当はいろんなライトニングアプリがノーコードで作れるツールとかができれば最高ですが、そこまでできないので本当にサクッとしたものを作りました。デモサイトです。(残念ながら、ハードウェアは特に作っていないので私に投げ銭が入る以外は何も起こりません)
なんなら今回作ったツールは、自分のライトニングノードですらなく、手軽さ重視でOpenNodeというサービスを使います。
構成
前提として、Pollofeedタイプのライトニングアプリは3つの部分からなります。
①動画を中継したり、餌を投下するハードウェア
②ライトニングノードもしくはOpenNodeアカウント
③ユーザーが見るサイトと、アクセスを捌くサーバー
①今回はYouTube Liveなどを利用して中継し、カメラやハードウェアのセットアップはできるという設定で話を進めます。ハードウェアの設定方法が知りたい方はググって下さい。(基本的にはRaspberry Piなどを使い、ネットワーク経由でリクエストが来たら作動するようにします)
②OpenNodeはライトニング決済ソリューションで、累計1万ドル分までならライトニング決済は手数料無料で受け付けられます(以降は1%)。便利なのは、難しい設定なしにコールバックなるものが利用できることです。とりあえずOpenNodeアカウントを作りましょう。
コールバックとは、支払いが完了したときに、OpenNodeからこちらが指定したURLに通知してくる機能です。
③最後に、ユーザーが見るサイトと、ユーザーのリクエストを捌くサーバー(インボイスを見せる)を用意する必要がありますね。ここが今回作ったものです。②もOpenNodeで用意されるので、自力で実装しなければならないのはハードウェアと、コールバック時の処理だけですね。
導入する
まずはこちらのGitHubリポジトリまでどうぞ。ご自身のアカウントにフォークして下さい。
サーバーにはHerokuを使います。こちらも無料枠で十分なので、とりあえず登録しましょう。
GitHubリポジトリ内の「Deploy to Heroku」ボタンをクリックして、Herokuに展開します。この時点でアプリ名を決めて下さい。
デプロイ後は、Herokuの設定からアプリの設定に入り、Settingsタブ内の"Reveal Config Vars"ボタンを押して環境変数を設定します。sats建てで受け取りたい場合は、以下の環境変数を設定します:
HEROKU_URL: アプリを閲覧するURL(最後にスラッシュをつけないように) 例) https://test-lapp.herokuapp.com
LAPP_NAME - ページ内やインボイスに表示されるアプリ名 例) Koi Feed
MIN_PAYMENT - サトシ建て(既定)、または特定通貨建ての支払金額 例) 100
OPENNODE_API_KEY - OpenNodeのAPIキー
VIDEO_EMBED - ビデオの埋め込みコード
次に、任意で設定できる環境変数を設定します。必要なもの以外は設定しないでください:
CURRENCY - 法定通貨で金額を指定したい場合、https://api.opennode.com/v1/currencies のリストから選ぶことができます。 例) JPY
CALLBACK_URL - ユーザーが支払うと、OpenNodeからこのURLにbodyに支払情報を含むPOSTリクエストが送られてきます。違うサーバーや自宅ネットワークに通知させて、機械を作動させるような場合に指定しましょう。 例) http://(自宅のIPアドレス):(特定のポート)/callback
SUCCESS_URL - これを設定すると、支払後に支払画面にこのリンク宛の「ページに戻る」ボタンが表示されます。
PORT - 何らかの理由で3000番以外を指定したいときに指定してください
ここまで設定したら、アプリのページをもう一度読み込んでみてください。おそらく動作しているはずです!
見た目は悪いので、必要に応じてviews/index.ejsを改造して下さい。改造した後は、Herokuの設定ページから再度Deployを忘れずに!(GitHubと連携させて、リポジトリを更新するたびに再度Deployされるようにも設定できます)
コールバックの実装
CALLBACK_URL宛にOpenNodeからPOSTが来たらなにかするようにして下さい。自宅ならルーターでポート転送の設定も必要かもしれません。
野良リクエストのセキュリティが気になる方は、Nodejsのopennode公式パッケージを使えばOpenNodeからかどうか検証できます。もしくは、今回作ったツールのroutes/opennode.js内にあるconsole.log文のあたりは検証済みなので、そこから任意のリクエストを自宅宛に飛ばして下さい。誤ってGitHub上に上げてしまわない形でやりましょう!(新たな環境変数を使用するなど)
一日何回までに制限するとか、回数が増えると値段が上がるような設定がしたい場合は、そのロジックは自力で頑張って組んで下さい。
おわりに
数時間で組んだすごい雑なものですが、気軽に編集できるベースラインなんじゃないかなと思います。問題があればコメントかイシューをお願いします。もし面白い機能を実装したら、どしどしプルリク下さい。
わからないところがあるのですが、初心者すぎて解決法の検索方法も検討がつかないので質問させてもらいます。
環境変数HEROKU_URLですが
閲覧ページがHEROKU_URLで指定したURLにならずに、
デプロイしたときに決めたアプリ名.herokuapp.comになってしまいます。またインボイスを支払うとOpenNode画面にBack to siteボタンが表示されますが、押すと今度はHEROKU_URLで指定したURLに飛びます。ただThere's nothing here, yet.表示のなにもないページが出ます。
URLを変えるにはデプロイし直すしかないんでしょうか?
もうどこをどういじればいいのかも全然わかりません笑