艦娘所有一覧を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をデスクトップに出力します。ファイルは面倒なので決め打ち。
こんな感じで図鑑番号が取れます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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」に貼り付けて投稿します。所有一覧のページは、マウスでぽちぽちクリックするのですが、これならば一発で投稿完了…つーか、ぽちぽちクリックしている方が楽しくていい感じがするのですが、まあ、このあたりはプログラマの性ということで。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 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
そのうち、データベース艦これ! にも対応したい。でも、これって母数が不明(失敗は投稿しないだろうから)なので、相対的に特定の艦娘がでやすい、という見方が正しいかも。