2013年6月20日木曜日

4chan の 投稿機能は何故難しいのか

(04 Sep 2013 追記:当時書いたこの予想ほとんど間違っていたようです…素直にreCaptchaのストリングを付けてsys.4chan.orgにhttpsでPostすればいいっぽいです。お恥ずかしい。)

やりたいけど多分無理な気がするなぁ・・・という機能の一つに、4chanへの投稿機能があります。

4chanでは、投稿の認証にGoogleのreCAPTCHA APIを使っています。ぐねぐね捻じ曲がった英数字を頑張って読み、正しく入力すると人間だと認めてもらえるというアレです。


futa8はレスを投稿する際、HTMLを読み、データを詰めてHTTPで送信します。サーバから見たアウトプットはWebブラウザと変わりません。違うのは、WebブラウザがOn the flyでHTMLとJavaScriptを解釈するのに対し、futa8は、ある程度人力(私です)でJavaScriptを読んで、C#で同じ結果が出るようにHard codeし、アウトプットが同じになるようにしているという感じになっています。

ふたばの使っているJavaScript は、私でも人力で読んでC#に落とし込むことが出来るのですが、reCAPTCHAのScriptは量も複雑さも全く違うので、とても人力は無理です。

では、他の4chan ブラウザ(iOS、Android、Windows Phone用の物があります)ではどうしているのか?というと、
ソース見たわけではないのですが、大体の予想は出来て、

・DOM弄り系
一般的なブラウザコントロール…アプリ上にWebブラウザを載せ、HTMLを読ませるコンポーネントですね、には、読ませたHTMLのDOMにアクセスできるFunctionが付いてることが多いです。ここからDOMを弄って、「reCAPTCHA+投稿フォーム」以外の要素を全部隠したページ、を練成してしまいます。それを自分のアプリ上にのせると、あたかもアプリ上から投稿しているように見えると。でも実際は、見た目が違うだけで、普段と同様にWebブラウザで投稿していると。動いているのはWebブラウザなので、reCAPTCHA APIも問題なく動作します。
多分これしか無いんじゃないかなと思うんですが・・・・如何でしょうか。

弄ったDOM(イメージ)
(別にGreaseMonkey系もあると思うのですが、こちらはIEControl系アプリでは多分無理ですね。他OSは謎)

で、DOM弄りですが… .NETやWin32のIEControlだと行けるんですが・・・StoreApp、WinRTのWebViewでは出来ないです。DOM弄り系のAPIがWinRTのWebViewには生えていないんですね。

憶測ですが、WinRTのWebViewと、.NET/Win32のIEControlは作り方が全然違う気がします。.NET/Win32はInterfaceは違えど、一枚一枚剥がしていくと最終的にはIEのOLEInterfaceまで直でたどり着くのですが…WinRTはどーーーーも様子が違う。NavigateのMethodだけ生えて、画面出力を貰うだけ。コードとしては切れている感じがするんですよね。C++/CXなら行ける、という話でも無い気が。ふわふわした話で申し訳ないですが。

長々書いてしまいましたが、まとめると「やり方がわかりません」。

・・・・
・・・
あ、StoreApp版FirefoxがStableになって、拡張機能をサポートして、それがWinRT Componentになっていれば…いける?うーん…



0 件のコメント:

コメントを投稿