2014年10月21日火曜日

自作Twitterクライアント作成の記録(29)アプリだけで連携解除がしたい

先日Twitterを何気なく見ていたら、PCを持っていない友人へ向けた連携解除の手順を示した画像が流れてきました。
そういえばアプリだけで連携解除が行えるようなものが無いなと思い、無いなら作ってしまうか

というわけでまずは完成品の画像をいくつか




先にTwitterに張り付けていたものの流用ですがこんな感じに連携アプリの一覧取得&連携解除を行えるようにしました。
ただの機能紹介はこんなものですので、今回は内部処理を作る際に使ったツールやライブラリを紹介して、どんな処理をさせているのか簡単?に書いてみたいと思います。

使用ツール
Fiddler2
こちらはいわゆる通信解析ツールとなっております。
現状APIには連携一覧取得および解除ができるものはありませんので、Webブラウザでの操作でどんな情報をどこのサーバーへ送信または受信しているのかを調べるために使っていました。
無料ツールなんですがかなり高機能で英語が読めなくても日本語の解説が充実しているので使い方に困ることは無いと思われます。

使用ライブラリ
android-async-http
こちらはAndroidの仕様上非同期でしなければならないhttp通信を簡単に実装できるライブラリです、GETもPOSTもちょっと書き換えるだけの簡単切替で便利

jsoup
http通信等で入手したhtmlをパース(解析)するライブラリです。
正直使ったことのある解析ツールで一番使いやすいと思います(個人的感想)
CSSセレクタにも対応しているのでかなり直感的に解析しやすいのではないかな?

こんなところですね、正直ライブラリ、ツール様様ですよほんと。

次は処理の簡単な説明とでも行きますか。

処理の大まかな説明としては、ブラウザでボタンを押した際のサーバーへ行く情報を解析して、同じように送ってあげるというただただ言葉だけだと単純なものです。

では、どのように送っているのかという一例を上げますと
http://hoge/login
というようなドメインに対してログインリクエストを送るとしましょう。
私たちはサーバーから与えられた入力フォームにメールアドレスやパスワードを打ち込んでログインなどと書かれたボタンを押すでしょう、この時
http://hoge/login&mail=hoge@hoge.com&password=hogehoge
なんて感じに実は元のアドレスに情報を乗っけてサーバに向けてPOSTしてます。
なので頑張ればURL入力欄にログイン情報を乗っけてログイン・・・・・なんてことも可能なはずです。(httpsも暗号化されているものGET/POSTの仕方自体は一緒)
つまりは、そのサイトでのログインの際、どのURLにどんな情報が送られているのかさえわかれば、そのあとはライブラリや自前のhttp通信クラスでもなんでも使って同じようにリクエストすれば大丈夫ってことです。
ただし、注意点としてはユーザエージェントをしっかり設定してあげないと目的のデータが取得できない場合がありますのでsetUserAgent()等でちゃんと設定してあげましょう。
リクエストすると必ず何らかのレスポンスがString型で返ってきますので、それをjsoup等のhtml等の解析(パース)ライブラリに任せたり、自分で文字抜出したしして整理して上げればOK

応用の仕方によってはAPIが用意されてないサイトの専用閲覧アプリなんてのも・・・・・

最後に注意点として少し上げるとするなら、サイトによってはセキュリティ的に微妙かも?ってのとサイト側で大きな仕様変更があると最悪一から解析し直しという面倒なことになりかねません。
それでも作ってみたいのであればチャレンジしてみるのもいいかもしれませんね。

0 件のコメント:

コメントを投稿