php

【PHP】LINE Messaging APIで田村ゆかりさんの公式サイト更新通知BOTを作りなおした #yukarin

従来のLINE BOT APIが廃止予定ということで 新たに発表されたLINE Messaging APIに移行しました。   作ったものはこんな感じ普通です。 LINE Messaging API は管理画面から背景色とかアカウント設定できる項目はめっちゃ増えてて LINE BOT APIよりは個性的なものが作れそう(^o^) 田村ゆかりさんに興味がある人、待ってます\(^o^)/     LINE Messaging API 誰でも手軽に叩けるAPIです。 BOTも作成できるし、管理画面も用意されてて分かりやすい。 無料で作成するBOTはユーザーの発言に対しての返信はできる(REPLY_MESSAGE) が BOTから直接メッセージを送信(PUSH_MESSAGE)するのは月2万ぐらいかかる。 しかし友達登録上限50人という制限付きBOTでは REPLY_MESSAGE & PUSH_MESSAGE どちらも使える。 従来のLINE BOT APIと変わったことはそんなことなくて 移行難易度はそんなに高くないと思います。   Webhookの設定 今回実装にあたって少しだけハマったところは Webhookの設定で、CloudflareのSSL機能を使ったサーバーを指定すると Webhookが飛んでこないという仕様だった。 LINE BOT APIでは使えたんですけどね、いずれか使えるようにはなりそう。 ちなみにLet’s Encryptでは可能です。     実装 今回もPHPです。 特に理由はありません。楽だからです。   callback [crayon-5b4efdb18b93a704648843/] [crayon-5b4efdb18b946651460294/]   LINEからのアクセスかどうかは従来のLINE BOT APIと同じで [crayon-5b4efdb18b94c222511393/] こんな感じで署名の確認ができる。     Push(BOTからユーザーへメッセージ送信) [crayon-5b4efdb18b94e074087695/] [crayon-5b4efdb18b957194766455/] LINEにリクエストを投げるときはCHANNEL_ACCESS_TOKENをヘッダーに載せるだけ。 LINE DeveloperからサーバーのIPをホワイトリストに登録する必要はあります。 今回の話に関係はないですけどGoutte便利だし何より速い。   メッセージを送信する関数は [crayon-5b4efdb18b95a645995392/] 特筆することなし!     戯言 Webhookに関してはイベント内容がJSON見れば一発で分かるようになったので楽でした。 LINE BOT APIでは type 1 が友達追加時で~ type3 がユーザーからのメッセージとかで 分かりにくかった。 あとはドキュメントも日本語が用意されて、各言語のSDKも用意されているので 比較的容易に移行(作成)できました。 ソースコードはこちら rluisr/yukari-line-botA – github

no image

LINE BOT API 実は友達追加時にもCallbackされてた & 署名確認をしよう。

前回こんな記事を書きました。 田村ゆかりさん公式サイトの通知を LINE BOT API で作ってみた。 #yukarin この記事では友達追加をしてもらった際にメッセージを送ってもらって mid(ユーザーID)を保存するという処理だったのですが、友人が 「友達追加時にもCallbackされるからメッセージ送らなくてもmid保存できるよ」と教えてもらいました。   試しに中身を覗いてみた [crayon-5b4efdb18be0e012773175/] 注目するのは “opType”: 4 です。 友達追加時は 4 ブロック時は 8 が返ってきます。 LINE Developers にも記載されてました…。   友達追加時に、midを保存。 ブロック時にmidを削除といったことが可能ですね。 ということでPHPで友達追加時に相手のmidを保存するコードは以下に。 [crayon-5b4efdb18be1d037234059/] この一々保存するの面倒なので一斉送信できるAPIを公開してくだしゃい   ふとコードを書き直してる時にセキュリティやばくね?ってなって思ってた時に署名とかこないの?って思ったら署名乗ってくるみたいですね…。 Qiitaとか9割方、署名確認してないです。   LINEからのアクセスか検証する LINEからのアクセスの場合、ヘッダーに X-LINE-CHANNELSIGNATURE があり これをbase64デコードしたもの + LINEきたらjsonの内容を LINE BUSINESS CENTER で確認できる ChannelSecret をキーとしたHMAC方式SHA256アルゴリズムのハッシュ値が 合致すればOKということです。 [crayon-5b4efdb18be21552415456/]   ちなみに nginx だとPHPの getallheaders 関数が使えないので [crayon-5b4efdb18be24995834531/] よく見るこんなのを使います。

田村ゆかりさん公式サイトの通知を LINE BOT API で作ってみた。 #yukarin

LINE BOT が先着1万人に配られるということで乗ってみた。 今日も相変わらずPHP 今回は 田村ゆかりさんの公式サイトが更新される度にLINE BOT APIを通して通知するといったものを作った。   登録の仕方 左記QRコードで友達追加をして、1度メッセージを送信すると登録が完了になります。 なんで1度メッセージを送信する必要性があるのかは後で説明しまうす。     雑書 [crayon-5b4efdb18bfc3695849571/] LINE BOT APIの登録の仕方はQiitaの方が詳しく説明されてるので割愛します。 このファイルは最初の登録のときにしか使いません。 何でだか知らないけど登録者全員にメッセージを送るAPIもないし、登録者全員のID(mid)を取得するAPIも今のところないので 1度メッセージを送ってもらって、ファイルに保存するといった方法を取りました。他にいい方法あったら教えて下さい…。   [crayon-5b4efdb18bfce435128157/] 本当は1つのファイルに纏めたくて、引数有無で条件分岐してたけど不格好になっちゃうし見栄えが悪かったので別々にしました。 midがまとめられたファイルを配列に入れてforeachで回してますが、 「mid,mid,mid」みたいな感じで一斉送信できるらしいです。 で、でも改行を”,”で置換して文末の”,”を削除して~って流れよりforeachの方が楽な気がします。最初から「mid,mid,mid」みたいな感じで保存すればいいだけなんですけどね。 更新されると以下のようなメッセージが届きます。   新しくAPIが追加されることを願います。 ちなみにスクレイピングに関しては運営に承認済みです^ー^

PHPでメール送信するには結局どれが最強なのか

PHPでメール送信するときは ・mb_send_mail ・Qdmail がよく使われる気がする。 mb_send_mail は SMTPサーバーを指定することは可能だけどSMTP認証ができません! Qdmailはもうライブラリが古い! ということで PHPMailer を使ってみた。 https://github.com/Synchro/PHPMaile SMTP認証 LOGIN, PLAIN, NTLM, CRAM-MD5 and Google’s XOAUTH2 over SSL and TLS が使えます。Postfixの解説サイトってPLAIN or CRAM-MD5 が多い気がするので困ることはないと思います。 Google’s XOAUTH2 ってなんなんでしょうか。   XOAUTH2 メールの送受信にパスワードなんていらない こちらに詳しく書かれていました。 新しく取得したGmailアカウントにおいて、これまでの一般的なメーラーではもはやメールの送受信はできません。いや、完全にできないわけではなく、とある設定を変更しないと使えないようになっています。その設定名ときたらなんと、 「安全性の低いアプリのアクセス」です。 メーラーを使うためにはこの設定を「オン」にしなければなりません。 なんとも精神衛生上よろしくない行為ですよね。 通常この設定は「オフ」になっていて、ユーザー名とパスワードで認証する従来のメーラーはアクセスできず、いわゆる”安全性の高い”アプリしかアクセスできません。 では安全性の高いアプリとはなんでしょうか? その答えはXOAUTH2認証を用いたメールアプリです。 らしいです。 PHPMailerでの使い方は公式Githubにあります。 https://github.com/PHPMailer/PHPMailer/wiki/Using-Gmail-with-XOAUTH2     DKIM DKIMも使えます! SPFとはちょっと違いますがまぁスパム認定されにくくなります。   多くのオープンソースでも使われ  WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomla! and many more らしいです。 CCやBccを使うことも想定されていた作りになっており、添付ファイルもパスを記述するだけです。   軽く使ってみた [crayon-5b4efdb18c160057291524/] 今回はSMTPサーバーにGoogleを使いました。 XOAUTH2を使っていないので安全性の低いアプリへのアクセスをONにしています。 いと便利です。

PHPでwhoisをJSONで返すAPI「whoisAPI」を作った

暑い なんで作ったかというとgithubに慣れるためなんて言えない。 whois API って地味に提供してるサービスはあるのですがフリーだと500reqまでだとか使い勝手が悪かった。   使い方 サーバードキュメントルートに設置してくれればいいです。 [bash] whoisAPI ├── api.php ├── count.txt └── get.php [/bash]   受け取り側はPOSTなので投げるときもPOSTでお願いします。 [crayon-5b4efdb18c222414776919/]   こんな感じにJSONで返ってきます。 [crayon-5b4efdb18c22c608025948/] 投げたIP、descr、国名、IPの範囲が返ってきます。 リクエスト先は http://xzy.pw/whoisAPI/api.php githubにも置いておきます whoisAPI

lm_sensors の取得したデータを Twitter に投げてみる

ラックサーバーを買ったおかげでCPUの温度とメモリの温度と家が燃えないかっていう不安に駆られる毎日です。   [note] 部屋にラックサーバーを置いたら家を追い出された。「DELL PowerEdge 2950」を買ってみた。 「DELL PowerEdge 2950」のベンチマークをとってみたけどコスパは悪いかもしれない(分かってた) [/note]     lm_sensors とは 温度、電圧、ファンを監視するフリーでオープンソースなツールとドライバです。 実行してみると以下のような結果を返してきます。 [source] i5k_amb-isa-0000 Adapter: ISA adapter Ch. 0 DIMM 0: +59.5°C (low = +105.0°C, high = +124.0°C) Ch. 1 DIMM 0: +53.0°C (low = +105.0°C, high = +124.0°C) Ch. 2 DIMM 0: +59.0°C (low = +105.0°C, high = +124.0°C) Ch. 3 DIMM 0: +59.5°C (low = +105.0°C, high = +124.0°C) coretemp-isa-0000 Adapter: ISA adapter Core 0: +49.0°C (high = +84.0°C, crit = +100.0°C) Core 1: +49.0°C (high = +84.0°C, crit = +100.0°C) Core 2: +48.0°C (high = +84.0°C, crit = +100.0°C) Core 3: +51.0°C (high = +84.0°C, crit = +100.0°C) coretemp-isa-0001 Adapter: ISA adapter Core 0: +34.0°C (high = +84.0°C, crit = +100.0°C) Core 1:…

リプライしまくるプログラムを作ってみた【PHP】

PHPを前々からやってみたいと思っていてちょっと作ってみました。

Apache2のアクセス解析、PHP5.5でも使用できる「AWStats」をUbuntuに入れてみた。

こんばんわ。 120Hz FHDの「XL2410T」を購入したのですが文字がギザギザですね。27インチに比べるとやっぱり小さい。 筐体がでかい重い。