日記「芦」
「君は恐縮しながら図々しいことをやる男だね。」(阿佐田哲也著「麻雀放浪記(四)」より) Twitterでいろいろ遊ぶメモ - JScript 2011/3/11(Fri.)TwitterはAPIを公開しているのでそれを使うべきなんですが、ネットで資料漁って 勉強してみたんですが、どうもわからないです。今度本でも立ち読みして勉強した方が いいのかな。 で、苦し紛れにこんな手法を。 JScriptでIEを操作。 IEでhttp://mobile.twitter.com/にアクセスしてブラウジング。 データの取得はHTMLの解析。 呆れるほど単純ですね。はい IEエンジンを挟むのできっとAPIを使うスマートなやり方に比べて動作は重いんでしょうね。 もちろんウィンドウを表示させたりはしませんが、それでも。 あ、APIを利用しないということは当然API制限に引っかかりません。やったー IEハンドラie=new ActiveXObject("InternetExplorer.Application");
IEハンドラっていう呼称は今考えた。オブジェクトだよね。これを使って IEが操作できます。ウィンドウハンドラみたいなもんやろ。 ちなみにie.visible=true;とすると実際にIEのウィンドウが表示され、何をやっている かがリアルタイムに見られます。もちろんその分処理がかかります。 これ以降のコードではこの変数var ieを用います。グローバル変数にしたらいい と思う。 ログインie.Navigate("https://mobile.twitter.com/session/new"); while(ie.Busy||ie.ReadyState!=4)WScript.Sleep(100); ie.document.getElementById("username").value=username;//ユーザーネーム ie.document.getElementById("password").value=password;//パスワード。 ie.document.forms[0].submit(); while(ie.Busy||ie.ReadyState!=4)WScript.Sleep(100);
ログインした、という何か(クッキー?)はIEの方に残るみたいですが、何も考えず プログラムの初めに毎回行わせています。 ポストie.Navigate("http://mobile.twitter.com/"); while(ie.Busy||ie.ReadyState != 4)WScript.Sleep(100); ie.document.getElementById("tweet_text").value=tweets;//投稿の内容。 ie.document.forms[0].submit(); while(ie.Busy||ie.ReadyState != 4)WScript.Sleep(100);
@リプライ ポストする際に投稿の内容の頭に"@username "を付け、submit()の直前にie.document.getElementById("tweet_in_reply_to_status_id").value=id;
の一行を挿入します。 このvar idとは相手の呟きのstatus idです。頑張って取得して下さい。 自分への@リプライ取得var index=0;//後述 ie.Navigate("http://mobile.twitter.com/replies"); while(ie.Busy||ie.ReadyState!=4)WScript.Sleep(100); X=ie.document.getElementById("tweets-list").getElementsByTagName("div")[index*4]; Y=X.getElementsByTagName("span")[0]; id=eval(String(X.id).replace("tweet_","")); user=Y.getElementsByTagName("strong")[0].getElementsByTagName("a")[0].innerHTML; twt=Y.getElementsByTagName("span")[0].innerHTML.replace(/@.+<\/A>/g,""); twt_index=twt.indexOf("</a>"); twt_index=twt_index==-1?0:twt_index+4; twt=twt.slice(twt_index,twt.length); return {"user":user,"twt":twt,"id":id};
自分への@リプライの内、最も最近のがindex=0です。 index=1,2,3..としてくことで次々に古いのが取得できます。 関数でもないのに最後にreturnしてますが、返しているオブジェクトを取得内容とします。 実はもっと解析すればほとんどの情報が取得できます。IDとは別の名前(screen_nameだっけ?) とかタイムゾーンだとか。 あ、で、idというのがその呟きのstatus idです。先に書いたリプを返す時に使用できます。 以上。 投稿は「via Mobile web」ということになります。botを作るだけならこれで十分です。// おまけ。 音楽を鳴らす。ie.Navigate("file:///C:/Users/owner/Desktop/iraiza/downtown.mp3");
なかなか卑怯ですね。 IEで音楽ファイル(フルパスであること)にアクセスします。 初回だと「保存しますか、開きますか」みたいなダイアログが出るので、「開く」にチェックし、 かつ「次回からも同じようにする」にもチェックすれば二回目以降は音楽ファイルに アクセスしたら即、適当な音楽プレイヤが起動して音楽を鳴らします。
コメ(0) | トラ(0)
(c)Kero's World