上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

役に立ったらぽちっとよろしく。 人気ブログランキングへ

一部の記述に間違いあり!次の記事を参照!!

パソコンを起動した時とか、日付の変わった直後にどっかのサイトにアクセスしてデータをどーのこーの…というテーマは結構ある。…例えば、どっかの株価欄をチェックして警告を出したり、ちょっとダサいけど自分のブログランキングのボタンを自分でぽちっとしたい時、(IPアドレスでカウントされるので一票だけならこうした自作自演も出来ちゃう…)。
で…まぁ、Firefox等の高機能なブラウザとちょっとした自動化スクリプトがあれば朝飯前だけど、そもそもブラウザ立ち上げるのも面倒…という怠け者に何かいい方法はないのか…という話。

最初に考えたのはバッチとtelnetの組み合わせ。だけど、Vistaではtelnetが初期状態で有効になってない。しかも、telnetは入力から応答までのタイムラグやら何やらに気を配る必要があるから、単純にパイプでサーバへの接続からGETメソッドの発行を入力しても、sleep等しないとうまくいかない。そこで、WSHを使ってみたらす~んなり簡単プログラムである事が判明。そっかWebプログラミングと同じでXHRを使えば良かったんだ…って何故こんな事に気づかなかったんだろう…。
(PowerShellでなく古いWSHを使う理由は外出先で常に.Netが使えるとも限らないから)

以下のコードは当ブログの人気ランキングボタンのクリックをエミュレートしたサンプルコード…。
ちなみに、相手サーバとのやり取りの過程で、途中 Refresh HTTPヘッダによる折り返しがあるんだけど…これがランキングに影響するかは…謎。

<?xml version="1.0" encoidng="utf-8"?>
<job>
    <script language="JScript">
<![CDATA[
/* ブログランキング、クリック用自動化スクリプト */
// 各種プロパティ
var SERVER_URL = "http://blog.with2.net"
var URL = SERVER_URL + "/link.php?608044";
var REFERER = "http://nossie.blog71.fc2.com/";
var REFRESH_CONTENT_REG = /<META\s+HTTP-EQUIV="Refresh"\s+CONTENT="([^"]*)"/i;
var REFRESH_DETAIL_REG = /\d+;URL=(.*)/
// 自動化部分
try {
    // クリックによるリクエストの再現
    var xhr = WScript.createObject("Msxml2.XMLHTTP");
    xhr.open("GET",URL,false);
    xhr.setRequestHeader("Referer",REFERER);
    xhr.send();
    if(xhr.status != 200)
        throw new Error;
    // 結果の取得
    var result;
    var rText = xhr.responseText;
    result = REFRESH_CONTENT_REG.exec(rText);
    if(result == null)
        throw new Error;
    var refreshContent = result[1];
    result = REFRESH_DETAIL_REG.exec(refreshContent);
    if(result == null)
        throw new Error;
    var refreshLocale = result[1];
    // リフレッシュ要求先へ転送
    var refreshUrl = SERVER_URL + refreshLocale;
    xhr.open("GET",refreshUrl,false);
    xhr.setRequestHeader("Referer",REFERER);
    xhr.send();
    if(xhr.status != 200)
        throw new Error;
    WScript.Quit();
} catch(e) {
    // エラーがある場合はエラーコードを出力し終了
    WScript.Echo("blog click fail!!:" + e.description);
    WScript.Quit(1);
}
]]>
    </script>
</job>
スポンサーサイト

役に立ったらぽちっとよろしく。 人気ブログランキングへ

コメント
この記事へのコメント
コメントを投稿する

トラックバック
この記事のトラックバックURL
この記事へのトラックバック
Copyright © ふらふら技術者の日記 All Rights Reserved.
Powered by FC2 Blog
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。