プログラマ気分

メモや自分が思ったことを書く

LINE と仲良くなってみる(失敗)

2012.03.21 Wednesday

意味不明なタイトルです。

先日、アップデートされて PC でも利用可能になった LINE ですが、タブレット版は Web アプリケーションと言う事もあって、非公式ながら API が存在しています。

タブレット版:https://t.line.naver.jp/

Skype や、MSN メッセンジャーと違って退席中や取り込み中の様なステータスがないので、メッセージが来て、ある一定時間未読状態だったら自動で「退席中です。」と返信する様にハックしてみます。

環境

タブレット版の認証の仕組みから、自分は node.js を選択しました。
※選択理由は後ほど記述します。

node.js v0.4.10
使用モジュール:require v2.9.153

認証の流れ

1. セッションキーと RSA キーの取得

まずは下にアクセスして、セッションキーと RSA キーを取得します。
https://t.line.naver.jp/authct/v1/keys/line

▼取得した内容

session_key は、アカウントのメールアドレスとパスワードを組み合わせて使用します。rsa_key は、その組み合わせた物を暗号化する際に使用します。

2. 送信内容の作成

サーバ側に送信する内容は、先程取得したセッションキー(session_key)と、認証の為のメールアドレス、パスワードを組み合わせた文字列です。下の様に組み合わせます。

文字列の長さをアスキーコードにしてるのは、各文字列の長さを示す為かと思われます。

3. 送信内容の暗号化

LINE は、暗号化を JS のみで行なっていますが、独自の物ではなく、ライブラリとしてネット上で公開されている物を使用しています。
※自分が node.js を選択した理由は、このライブラリを利用する為です。

暗号化ライブラリ:RSA and ECC in JavaScript

node.js の場合、jsbn.js、rsa.js、rng.js、prng4.js を組み合わせて、モジュールとして使用します。
https://gist.github.com/2144164#file_rsakey.js
※コードが長いので、リンクのみ載せます。

var RSAKey = require('./rsakey.js'); などとして読み込んでください。

ライブラリを読み込んだ後は、RSAKey を使って暗号化します。先程取得した rsa_key をカンマ区切りで分割し、左から keyname, evalue, nvalue と言う変数に代入した後、下の処理を行なってください。

これで暗号化処理は終わりです。

4. 暗号化した内容を送信する

送信先は https://t.line.naver.jp/rest/v1/login とし、POST で送信してください。

送信内容は以下のとおり

【注意点】
送信の際は、ユーザーエージェントに注意してください。
一部のユーザーエージェントは、サポート対象外とみなされて別ページへ飛ばされてしまいます。
リクエストヘッダに User-Agent: Chrome などを指定して送信してください。

うまくいけば、これでログインが成功します。

ログインまでの例(node.js)

一つのアカウントしか認証出来ないと思うので、変な実装ですけど

自動返信

node.js と cron が使えるので、dotCloud を活用しました。
なお、dotCloud での cron の設定等は省きます。

自動返信用スクリプト

結果

よし、うまくいった!と思ったのですが、繰り返しリクエストを投げていた所為か、LINE からブロックをされたみたいです。仕方ないですね。南無

リクエストの投げ過ぎには注意しましょう。

2012年4月7日追記
アカウント停止されたっぽいです。

JavaScript13:00comments(0)trackbacks(0)by ニノミヤ カズノリ

【FuelPHP】バリデーションルール match_field について

2012.03.08 Thursday

FuelPHP のバリデーションには、他のフィールドと値が同じかどうかをチェック出来る match_field と言うルールが用意されています。

使い所としては、メールアドレスの入力確認、パスワードの入力確認などで使えます。

大変便利ですが、一点問題があります。
それは、入力時の値にしかマッチしない点です。

つまり、add_rule をフィルタとして扱った場合はマッチしないと言う事です。
実際の例を下に挙げてみます。

▼結果
string(72) "メールアドレス(確認)は、email1と異なっています。"
bool(true)

正しくマッチする様に、新たなルールを考えてみました。(以下の方法は、add_callable を使ってではなく、¥Fuel¥Core¥Validation を継承して実現させている点に注意してください。)

▼結果
bool(true)

match_validated_field は、バリデート後の値を元に比較を行いますので、結果は true となっています。

Validation クラスを継承してのルール追加が良い方法なのかは分かっていません。使用の際は自己責任でお願いします。

PHP22:32comments(0)trackbacks(0)by ニノミヤ カズノリ

【FuelPHP】カスタムメッセージを、フィールド毎に validation.php の如く設定してみる

2012.03.07 Wednesday

validation.php によるカスタムメッセージの設定は、決まった文言を出力する分には簡単でとても良いのですが、特定のフィールドで文言を替えたい場合には向きません。(変更したい Fieldset を取得して set_message する必要があるかと思います。)

例えば下の例では、お名前と性別を required に設定しています。

▼結果
string(39) "お名前を入力してください。"
string(36) "性別を入力してください。"

性別が入力式であれば良いのですが、多くは男性/女性の選択式です。すると、エラー文言としては「性別を選択してください。」が相応しいと感じます。

しかし、validation.php には既に required の文言が設定されている為、性別用の文言を追加する事ができません。大変不便です。

そこで自分が考えたのが次の方法

validation.php はそのまま。新たに言語ファイルを一つ用意します。

▼結果
string(39) "お名前を入力してください。"
string(36) "性別を選択してください。"

更に、別のルールにも他とは違う文言を設定したい場合は、下の様にします。

フィールドを追加したい場合は、下の様にします。

他に楽な設定方法があれば教えてください。

PHP23:24comments(0)trackbacks(0)by ニノミヤ カズノリ

dotCloud & PHP で、PATH_INFO を考慮した nginx.conf

2012.02.27 Monday

以下は PHP サービスを使用した場合の話です。

dotCloud のデフォルト設定では、PATH_INFO が取得出来ません。

■理由については下記を参照
DotCloud で PHP アプリを設置してみたときの色々 - 肉とご飯と甘いもの @ sotarok

index.php に PATH_INFO を動的に入れる方法も良いのですが、ここでは approot に仕込んだ nginx.conf で設定する方法を紹介します。

参考ページ:
https://bitbucket.org/lopter/symfony-on-dotcloud/src/6c7d0d7f3a7a/web/nginx.conf

これとは別に、dotCloud に WordPress を入れて、プログラム一式を wordpress ディレクトリに入れた場合の設定も調べたので、次いでにサンプルを載せておきます。正規表現の部分は改良の余地ありそう。

参考ページ:
WordPress › Support » Nginx Rewrite Rule for WordPress 3 (Multisite)

-|00:15comments(0)trackbacks(0)by ニノミヤ カズノリ

【PHP】Gumroad API Client 作ってみた

2012.02.22 Wednesday

Gumroad API が公開されていたので、PHP で API クライアントを作ってみました。だいぶ適当、且つコメント無し

https://github.com/wakuworks/php-gumroad
PHP5.3 以上、MIT ライセンス
好きに改変してください。

使い方はこんな感じ

※SplClassLoader などでクラスをロードしてください。

PHP11:45comments(0)trackbacks(0)by ニノミヤ カズノリ

calendar
1234567
891011121314
15161718192021
22232425262728
2930     
<< April 2012 >>
sponsored links
selected entries
categories
archives
recent comment
recent trackback
links
profile
Twitter Updates
    follow me on Twitter
    search this site.

    others
    mobile
    qrcode