プログラマ気分

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

スポンサーサイト

2014.08.06 Wednesday

一定期間更新がないため広告を表示しています

-|-|-|by スポンサードリンク

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

2012.03.21 Wednesday

2014年8月6日追記
コードに関しては著作権侵害とみなされて削除された様です。

---- 追記ここまで ----

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

先日、アップデートされて 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(4)trackbacks(0)by ニノミヤ カズノリ

フラグメント ID として CSS セレクタでの指定を可能にする jQuery.cssFrag.js

2011.07.28 Thursday

海外で CSSFrag という拡張機能が少し話題となっていたので、(使う人が居るかとか別にして)jQuery 用のプラグインとして作ってみました。

CSSFrag Safari Extension // ShaunInman.com

CSSFrag とは?

ページ内リンクを行う際に URL にハッシュを付けて要素の ID(又は name 属性の値)を指定すると、その位置まで移動します。この指定を CSS セレクタでも可能にするのが CSSFrag です。

【通常】

http://example.com/index.html#hoge

【CSSFrag を使った場合】

http://example.com/index.html#css(div:nth-child(2))

jQuery.cssFrag.js

同様の機能を jQuery で実現しようとしたのが jQuery.cssFrag.js です。使用できるセレクタは CSSFrag とは異なり、jQuery のセレクタが使用できます。

※使用するには、クロスブラウザでの hashchange イベントを可能にする jquery.ba-hashchange.js の読み込みが必要となります。

サンプルページ

ダウンロード:こちらから最新バージョンをダウンロードしてください。
検証ブラウザ:IE6/7/8/9, Safari 5.1, Google Chrome 12.0.742.122, Firefox 3.6.19, Opera 11.50

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

ソートの安定性に付いて

2011.06.30 Thursday

Chrome でソートを行っていた時に気付いたが、Chrome で使われている V8 エンジンは内部でクイックソートを使っているらしく安定していないです。

【参考】
javascript - Sorting an array of objects in Chrome - Stack Overflow

クイックソートは安定ソートではない為、例えば下記のコードを実行すると他とは異なった結果が返ってきます。安定させる為には return 0 を返さないように工夫が必要です。

V8 エンジンが使われている事もあり、node.js も安定していません。AS2 と AS3 の違いは面白いですね。

JavaScript17:16comments(0)trackbacks(0)by ニノミヤ カズノリ

DD_belatedPNG / jQuery.belatedPNG についてメモ的な

2011.06.05 Sunday

ここではあまり書いていなかったのですが、だいぶ前に jsdo.it の方で 0.0.5 候補版を公開しています。

jquery.belatedPNG 0.0.4a test - jsdo.it - Share JavaScript, HTML5 and CSS
(jQuery 1.6+ のバグを対処するために公開した 0.0.4 よりも前に載せていたので、バージョンがおかしくなっていますが、位置づけ的には 0.0.5a となります。)
まだ見ていない・試していない方はお試しください。

変更内容

0.0.5a の正式公開は未定です。また、実は既に 0.0.5b もあるのですが、公開自体が未定になっています。

DD_belatedPNG / jQuery.belatedPNG を使う上で(若干メモ的な)

zoom が効かなくなる

これは対象の要素や、その要素の offsetParent などに対して zoom = 1 が指定される為です。例えば IE6 でページ全体を印刷したい場合などで body に zoom が指定されている場合に問題が出る可能性があります。zoom が指定されていれば、そのままにする処理が必要となりますが、残念ながら現行のバージョンではその処理が入っていません。

jQuery.belatedPNG に DD_belatedPNG.fix を付けない理由

IE8 で CSS expressions がサポート外になった為です。詳しく説明すると、DD_belatedPNG.fix は、動的に style 要素を追加し、指定されたセレクタの behaivor プロパティに対して expression を使って fixPng が実行されるようにしています。要素を読み込む前に指定出来る点や、一括で指定出来る点を考えると、速度的にもこちらを実装したいところですが、IE6/7/8 を対象としている jQuery.belatedPNG では仕方なく外しています。

親要素の透過度問題

DD_belatedPNG / jQuery.belatedPNG で pngFix された要素は親要素の透過度に影響されません。そもそも VML が影響を受けないのかよく分かりませんが、pngFix されている要素に対しては、親要素と同時に透過させるのが吉かもしれません。

【追記:11/07/06】どうやら親要素と同時に透過させてもうまくいかないようです。やはり pngFix されている要素に透過処理を施す必要がありそうです。

背景リピート問題

実は一番頭を悩ませている問題です。もし解決策があれば教えて頂きたいです。fixPng による pngFix は、VML の fill ノードを動的に作成して PNG を貼り付けます。fill ノードは type が tile となっており、これがリピートを実現させている(※くわしくはこちら)理由ですが、XP と IE6/7/8 では表示に対して問題があるらしく、zoom であったり、ブラウザの機能で拡大縮小されるとリピートしている画像に 1px 程度の空きが出来ます。なお、Win7 で確認したところではこの問題は発生しませんでした。

印刷問題

通常、印刷時には意図的に非表示となるのですが、調整することで IE6/7 に関してはある程度それらしく表示出来ます。問題は IE8 で、VML 自体が無くなったように表示されてしまいます。現状対処方法は見つかっていません。

本家開発終了について

悲しい限りです

JavaScript17:56comments(1)trackbacks(0)by ニノミヤ カズノリ

jQuery 1.6(+) のバグ?jQuery.support.style に注意

2011.05.14 Saturday

以下、jQuery 1.6.1(11/05/14現在)時点でのお話です。

IE8 + jQuery 1.6(+) において、jQuery.support.style の評価が変わっているので注意してください。

jQuery.support.style とは、getAttribute("style") で要素に記述された style 属性値を取得できるか評価する為に使用します。

IE8 は getAttribute("style") で style 属性値が取得できるので true にならなければなりませんが、何故か 1.6 からは false と評価される様になっています。

1.5.2 と 1.6 とで評価している部分を見比べてみます。

jQuery 1.5.2 の場合

jQuery 1.6 の場合

これらは div 要素内に HTML を直接書き込み、そこから getAttribute("style") で取得出来ているか判断している訳ですが、見て分かるとおり、若干処理が変更されています。

1.5.2 は color プロパティの値(red)を評価するのに対し、1.6 以上は top プロパティ名を評価しています。

ここで問題なのは、IE8 以下だと CSS のプロパティ名を大文字に変換してしまう点です。

IE8 で a.getAttribute("style") を使って取得できる値は "FLOAT: left; TOP: 1px; opacity: .55" であり、小文字のみを見ている 1.6 の評価方法では false となってしまいます。

もしもこの問題を修正するなら、i フラグを付けて大文字小文字どちらでも評価する必要があります。

今回の問題で、もしも IE のバージョン分岐などを jQuery.support.style を使って実装している方は要注意してください。

下記のコードは 1.6 では正常に動作しません。

JavaScript14:40comments(0)trackbacks(0)by ニノミヤ カズノリ

calendar
      1
2345678
9101112131415
16171819202122
23242526272829
30      
<< April 2017 >>
sponsored links
selected entries
categories
archives
recent comment
recent trackback
links
profile
search this site.

others
mobile
qrcode