本blogはGoogle AdSenseおよび各種アフィリエイト広告を含みます

(習作)BorderBreak.netから戦績情報を書き出すJScript

BB-DataとかBBScoreに流し込めるよう整形する前に飽きた。

コマンドプロンプト

cscript //Nologo bbnet.js > bbnet.txt

などすると

BorderBreak.NET にアクセス
カード にアクセス
カード にアクセス
プレイヤー情報
 全国スコアランキング(今月)
  10001
プレイ情報
 通算プレイ時間
  71:21
 通算バトル時間
  60:42
兵装別プレイ情報
 お気に入り兵装
通算戦績
 バトル数
  412
 勝利回数
  179
 撃破数
  1675
クラス認定ミッション
カード にアクセス
強襲兵装
 バトル時間
  32:47
 出撃数
  1964
 獲得スコア
  19062
 使用率
  61.68
(以下省略)

こんなかんじのが出てくる。

// bb.js

var oIE = WScript.CreateObject("InternetExplorer.application");
oIE.visible = false;
var waittime = 100;

// ユーザID、パスワード、登録したカード名
var userId = "xxxx@xxxx.isao.net";
var password = "";
var cardName = "";

function wait()
{
	while(oIE.Busy) {
		WScript.sleep(waittime);
	}
	while(oIE.document.readyState != "complete") {
		WScript.sleep(waittime);
	}
}

function open(url)
{
	oIE.navigate(url);
	wait();
	WScript.echo(oIE.document.title + " にアクセス");
}

function login()
{
	open("http://pc.borderbreak.net/login_off.html");

	oIE.document.forms[0]["uid"].value = userId;
	oIE.document.forms[0]["password"].value = password;
	oIE.document.forms[0].submit();
	wait();
}

function getElementsByInnerText(htmlc, str)
{
	var arr = new Array();
	for(i = 0; i < htmlc.length; i++) {
		if(htmlc[i].innerText == str) {
			arr.push(htmlc[i]);
		}
	}
	return arr;
}
function getElementsByClassName(htmlc, str)
{
	var arr = new Array();
	for(i = 0; i < htmlc.length; i++) {
		if(htmlc[i].className == str) {
			arr.push(htmlc[i]);
		}
	}
	return arr;
}

function getBattleResult(info)
{
	var divs = oIE.document.getElementsByTagName("div");
	var catName = "";
	var dataName = "";
	for(var i = 0; i < divs.length; i++) {
		if(divs[i].className == "category_name") {
			catName = divs[i].innerText.replace(/▼/i, "");
			info[catName] = new Object();
			WScript.echo(catName);
		} else if((divs[i].className == "data_name") && (catName != "")) {
			dataName = divs[i].innerText;
			WScript.echo(" " + dataName);
			var value = "";
			value = divs[i].nextSibling.data;
			if(!value) continue;
			value = value.replace(/時間/i, ":");
			value = value.replace(/[^0123456789:\.]/gi, "");
			WScript.echo("  " + value);
			info[catName][dataName] = value;
		}
	}
	return info;
}

login();

// カードを開く
open(getElementsByInnerText(oIE.document.getElementsByTagName("A"), cardName)[0].href);
// カードトップのリンクを保存
var topLinks = oIE.document.getElementsByTagName("A");

// 戦績データ
var info = new Object();

// カード->プレイヤー情報を開く
open(getElementsByInnerText(topLinks, "プレイヤー情報")[0].href);
getBattleResult(info);

// カード->プレイヤー情報からのリンク保存
var playerInfoLinks = oIE.document.getElementsByTagName("A");
var armsUrl = getElementsByInnerText(playerInfoLinks, "兵装別プレイ情報詳細")[0].href;
var detailUrl = getElementsByInnerText(playerInfoLinks, "戦績詳細")[0].href;

// カード->プレイヤー情報->兵装別詳細を開く
open(armsUrl);
getBattleResult(info);
// カード->プレイヤー情報->戦績詳細を開く
open(detailUrl);
getBattleResult(info);