艦娘所有一覧をExcel VBAから作ろう(開発開始!!編) – Moonmile Solutions Blog
http://www.moonmile.net/blog/archives/5112
の続きです。
艦娘所有一覧
http://dunkel.halfmoon.jp/kancolle/index.html
艦娘所有一覧に、諜報員でCSVファイルを吐き出した後、Excel VBA で投稿をします。直接投稿すればいいのですが…まあ、Excel VBAで試したかったというところで。
■諜報員でパース
艦これ諜報員が動いている状態で「図鑑表示」から、艦船図鑑の1,2,3をクリックします。このときのレスポンス(/api_get_member/book2)を調べて、所有している艦船を収集します。たぶん、他でもできそうな気もするんですが…ひとまずこれで。
諜報員を右クリックして「オプション」を選択した後に「艦娘所有一覧」でOKを押すと、CSVをデスクトップに出力します。ファイルは面倒なので決め打ち。
こんな感じで図鑑番号が取れます。
public List<Ship> ParseBook2( string json )
{
var reader = JsonReaderWriterFactory.CreateJsonReader(
Encoding.UTF8.GetBytes(json),
XmlDictionaryReaderQuotas.Max);
var el = XElement.Load(reader);
var doc = ExDocument.Load(el);
var lst = doc * "api_id" != "-1";
var res = new List<Ship>();
foreach (var it in lst)
{
var pa = it.Parent;
var ship = new Ship() {
id = pa / "api_id",
index_no = pa / "api_index_no",
ship_id = pa / "api_table_id",
name = pa / "api_name"
};
res.Add(ship);
}
return res;
}
JSONをパースしているところの抜粋はこんな感じで。JsonReaderWriterFactory から XElement を使って ExDocument を作るという流れです。ExDoc は、なんとなくイイ感じに XML が扱える自作ライブラリです。XPath でもいいのですが、試行錯誤がやりやすいかなと。
■艦娘所有一覧に投稿する。
このCSVファイルを同梱してある「艦娘所有一覧へ投稿.xlsm」に貼り付けて投稿します。所有一覧のページは、マウスでぽちぽちクリックするのですが、これならば一発で投稿完了…つーか、ぽちぽちクリックしている方が楽しくていい感じがするのですが、まあ、このあたりはプログラマの性ということで。
Private Const url = "http://dunkel.halfmoon.jp/kancolle/index.html"
Public Sub 艦娘所有一覧を投稿()
Dim ie As New InternetExplorer
ie.navigate url
ie.Visible = True
' 完了待ち
While ie.Busy = True Or ie.readyState < READYSTATE_COMPLETE
DoEvents
Wend
' optionタグを取得
Dim doc As HTMLDocument
Set doc = ie.document
Dim coll As IHTMLElementCollection
Set coll = doc.getElementsByTagName("option")
Dim dic As New Dictionary
Dim el As IHTMLOptionElement
For Each el In coll
dic.Add 0 + el.Value, el
Next
' 図鑑のcellとマッチングさせる
Dim i
For i = 2 To 1000
Dim 図鑑番号
図鑑番号 = Sheet1.Cells(i, 2)
If 図鑑番号 = "" Then Exit For
If dic.Exists(図鑑番号) Then
Set el = dic(図鑑番号)
el.Selected = True
End If
Next
' サブミット
doc.forms(0).submit
End Sub
Excel VBA の全文はこんな感じです。さっくりと短い感じになっています。これは、yuki(siro) さん のソースがきれい≒操作しやすい、ってのもありますね。option タグが並んで、jQuery で操作しているので、そのあたりを拾い集めればOKです。艦これ諜報員じゃなくても、使えるように別ツールにしてあるので、適当に活用して頂ければと。
■サンプルコード
サンプルコードはこちら http://sdrv.ms/19xmMD0
そのうち、データベース艦これ! にも対応したい。でも、これって母数が不明(失敗は投稿しないだろうから)なので、相対的に特定の艦娘がでやすい、という見方が正しいかも。
