eveapiの活用(エラー

おまけ

importxmlを使い続けてるとそのうちエラーがちらほら現れると思います。
ここではエラーの種類と対策について。

  1. 『インポートの内部エラーです』
    これはどうしようもありません。次の更新まで待機するしか対策はありません。eve-centralのapiがよくこのエラーで死ぬ
  2. 『urlがうんたら』
    第一引数が間違ってる
  3. 『xpathがうんたら』
    第二引数が間違ってる
  4. その他(ないかも)
    どこか違うのかもしれない

原因がわからない場合は、直接xmlを見てみるといいです。
『インポート』エラーは、関数の中をちょっと変えるだけで再取得が行われるので、急ぎの場合は関数の引数をゴニョゴニョしてみるといいかもです。
例:
https://zkillboard.com/api/kills/shipID/644,638/orderDirection/asc/

https://zkillboard.com/api/kills/orderDirection/asc/shipID/644,638/
この2つは同義ですが、importxmlは別の関数として処理するので、すぐに正しいデータが届きます。
ちなみに、一度エラーが出た関数を消して、もう一度入力しなおしても、結果がブックにキャッシュされているため、再びエラーが表示されます。
違うブックに入力すると新規に取得されます。

eveapiの活用(

apiを使ったテンプレを載せます。
各自でご活用ください。

sov費用集計シート
このシートでは、集計がめんどくさいihubの維持費費用も計算できます。
B1セルにアライアンス名を、sovシートに各種アップグレードがあるシステムをプルダウンメニューからポチポチ選択していきます。
そうすると、毎月のsov費用がE9セルに表示されます。

値段取得シート
このシートでは、よくありがちな値段取得シートに見えてちょっとした工夫を凝らしてあります。
このシートではapi取得を4つのセルでしか行っていません(赤色のセル)。
もちろん、一つ一つにimportxml関数を使ってもいいのですが、そうすると、apiを提供しているサーバーに負荷をかけてしまいます。
また大量のimprortxml関数を連発するとシートがエラーを起こしやすくなります(体感)。
なので、concatenate関数を使って、文字列を結合してからapiで値段を引いています。
注意すべき点は、あまりに大きなxmlを読み込んでもシートがエラーを吐いてしまいます。ですので、20~30個程度の連結に留めるべきだと思います。

POS管理シート
個人的にはシートの最高傑作。エラー頻発するけど(´・ω・`)。
50個100個と増え続けるPOSの管理、大変ですよね?どこに何のPOSが残り燃料どのくらい入ってるの?ストロン入れたっけ?みたいな。
さすがにうちの会社のPOSの位置ばらしたら怒られるのでシートは空白になっていますが、apiシートのところにkeyidとvcodeを打ち込むとPOSの一覧が表示されます。
機能一覧

  1. POSの位置をmoonの位置まで特定します
  2. POSの種類を特定します
  3. 残燃料(ストロン含め)を表示します・・・残量0の場合、エラーを返します
  4. 残りの稼働時間を表示します・・・sovがある場合、apiシートのA4セルを参照してsovの燃料ボーナスも計算します
  5. 毎月の燃料総消費を計算します
  6. 月末、翌月末までPOSを稼働させる場合、どの程度燃料を継ぎ足せばいいのか計算します
  7. siloの中身は見れません(仕様)

M列にて使用しているfuzzwork.co.ukのitemidを引いてこれるapiはとても便利です(itemidはtypeidと違ってとんでもない量があるため)。
逆にtypeid程度ならシートに直接インポートしても特に問題ありません。

loss集計シート
zkillのapiからちょっとしたキルボを作れます。ただし、Total Lossの部分はシートの関数では取得できないので、何らかの代替手段を使う必要があります。
うちのアライアンスではSRPシステムをこの改良版でやっていました。
ここでちょっとzkillのapiの仕組みをご紹介。本家解説も見てね!

  1. アドレスは”https://zkillboard.com/api/”から始まる
  2. “/loss”,”/kill”,”/w-space”,”/solo”で大まかな区切りができる
  3. “/characterID/#”,”/corporationID/#”,”allianceID/#”,”shiptypeID/#”等で詳細な区切りができる
  4. 1ページあたり200件をデータを返す。つまり201件以上はアドレスを変える必要あり
  5. ページは”/page/#” (#はページ数)で指定
  6. 余計なデータを省くため”/no-items”と”/no-attackers”の指定は必須。かなり軽くなる
  7. “/xml”これも必須。これを省くとjson形式になるのでphpとかでプログラムを組む際は省くべき
  8. 年月日(“/year”,”/month”,”/week”等)で指定も可。指定する際はYmdHi形式(例”201408281651″ 4桁の西暦+2桁の月+2桁の日+24時間単位での時+2桁の分)
  9. “/orderDirection/asc”,”/orderDirection/desc” ascだと一番上が一番古いデータになる。
  10. あとは本家解説見ればわかる

これを活用してactivityも計測できます。activityシートにはとあるアライアンスが沈めたスーパーキャリアーとタイタンの統計を時間帯で表示しています。
つまり自分の持っているデカブツをいつ動かすべきかが自然とわかってきます。
つっても沈むときは沈むんでしょうけど(´・ω・`)
これ以外にもRFの時間を設定するのに役立てたりとactivityの分析はとても有用だと思います。

 

この他に作って欲しいシートあったら相談に乗ります。
というわけで連載を終了します。後半gdgdになってすいません(;・∀・)
少しでも皆様のお役に立てたなら光栄です。
それでは失礼します。

文責:miki iguana

eveapiの活用(6)

①eve-cebtral
マーケットの値段を提供してくれます。
リージョンやシステムを絞って表示することもできます。
ただし、マーケットのデータはevemon等から送られてくるデータに依存しているので、過疎システムだとうまく動かないかもしれません。

②fuzzwork
CSMにも選ばれてる有名人がやってるサイトです。
上にあるOther Tools→api toolsからリファレンスが見れます。
昔はBPOのME/PEから原材料計算までをapiで全部やってくれる神サイトだったのですが・・・Curiusアップデートで消えました。
SDEからダンプファイルを整形したファイルを手に入れることができます。

③zkillboard
キルボです。右上のiからAPIにリファレンスが載ってます。
正直使いものにならないCCPのkill log apiに代わって戦闘データを表示してくれます。
またフィルタ機能が高機能で、非常に使い勝手の良いものになっています。

④EveWho
キャラ名/corp名/ally名を表示してくれます。
FAQの下側にリファレンスが載ってます。
あまり使う機会はないかも・・・

⑤dotlan
直接APIの形式で提供されているわけでは無いですが、spreadsheetはfeedを読み込むことができるので、使えたりします。
右上のフィードマークからいろいろ設定できるので試してみてください。

eveapiの活用(5)

5章 EVE_DEVの翻訳+使用例
さーapiの導入方法も分かったし基礎データの取得方法も分かったし完璧だー!
そんな貴方にお送りする第五章。あめりか語でかかれたEVE DEVの翻訳をし、使用例を示します。
まずはここhttp://wiki.eve-id.net/APIv2_Page_Indexを開いてください。
あめりか語が並んでますねぇ・・・”This API call will be available on TQ with Tyrannis 1.2.”と書いてあります。ええ、すごく情報が古いです。Tyrannisって一体いつの時代なのでしょうか。
でもまぁ殆どが利用できます。やったね。

さてccpのapiを取得する際、キャラクターやcorpの内部の情報等はapiを表示させるキーが必要です。
とりあえずキャラクターとcorp(CEO・ディレクター人が取れます)のapiキーをフル権限で取得しておいてください。
うrlはここ

まずはapiうrlの構造について。
じゃあhttps://api.eveonline.com/api/CallList.xml.aspxでも見てみてください。
apiの種類を教えてくれるapiです。しかし8/3現在ここにもcriusで追加されたapiが見当たりません。CCP<3。
本題に戻しましょう。最初の”https://api.eveonline.com/”これはapiを送信している鯖です。ここは共通です。
“/api”これはapiフォルダ?に入ってるって意味です。意味わからなくてもいいです。
“/CallList.xml.aspx”これがapi本体です。
んでここからが重要です。
このCallListは基本情報なのでapikeyは要りません。しかし個人や会社のデータにアクセスするには追加の情報を入力する必要があります。
んじゃ次にhttps://api.eveonline.com//account/APIKeyInfo.xml.aspxを開いてください。
きっと400エラーが帰ってくると思います。apiキーを入力していないからです。
ではこのapiを解説したeve devを見てみましょう。
http://wiki.eve-id.net/APIv2_Account_APIKeyInfo_XML
ここのCustomizable API Key(only)のところにkeyIDとvCodeが記載された表があると思います。
この情報に従って入力していきます。
keyIDとvCode(Verification Code)はAPI Key Managementに記載されているものです。
https://api.eveonline.com/account/APIKeyInfo.xml.aspx?&keyID=数字7桁&vCode=64文字
keyIDとvCodeを入力したものを見てみましょう。きっとエラーが出ずにxmlファイルが表示されたと思います。
さて、お気づきの方もいるかもしれませんが、この形は2章でお話したeve-centralのapiの形と同じなのです。
規定のurlを入力したら?を入力して&で条件指定・・・
APIの基本形です。
では各apiの詳細を説明します。ってやろうとしたんですけど量が膨大だし締切は迫るしでカットしましたはい。
その代わりサンプルを充実させようと思います。

 

追記
https://neweden-dev.com/Main_Page
evedevが荒らされているので、代わりにここを見るといいかもです。

eveapiの活用(4)

4章 eveapiを使用する前の下準備 ~sqlデータのインポート
ここではCCP Gamesが公開しているsqlのダンプファイルをインポートしてcsvファイルに変換して簡単に扱えるようにします。
まずは下準備・・・
①SQL SERVER2014をインストールします。(参考
余談ですがVisual Studio2014を入れている人はインストールする順番を気にしたほうがいいとかって記事を日経ソフトウエアに書いてあったような気がせんでもないです。
あー、で、大切なことなんですけど、“Express with Tools “かそれ以上のものをインストールしてください。
ここからCrius_1.6_100370_db.zip (名前は変わる)をDLして適当なところに全てのファイルを解凍。
③インストールできたらSQL Server 2014 Management Studioを開く。なんか接続先とか出てくるかもしれないけど適当にポチって解決する。
④データベース右クリックしてファイル及びファイルグループの復元クリック。 →こんな感じ
⑤復元先データベースに”eveonline”とでも入力する。
⑤復元元デバイスの”…”から先ほど解凍したフォルダを指定し表示されたDATADUMP(中略).bakファイルを選択。
⑥復元するバックアップ セットの選択から復元のチェックボックスにチェックする。 →こんな感じ (画像のダンプファイルがkronosなのはミスw)
⑦okを押す。
⑧インポートが完了したらF5キー押して更新する。
⑨そうするとデータベースフォルダの中に”eveonline”っていうデータベースができています。おめでとう。
⑩終わり

ここからは本題です。sqlがわからない人(自分もわからん)向けに丁寧に解説していきます。
eveonline->テーブルの中を見るとdbo.うんたらかんたらっていうものがいっぱい羅列してあると思います。
この中にapiを扱う上で必須のデータがゴロゴロ入っていますのでそれを取り出してみましょう。例としてここではtypeIDとtypeNameを船のデータに絞って取り出してみます。
さて欲しいデータはdbo.invTypesに入っています。まずはここを見てみましょう。dbo.invTypesを右クリックしてテーブルをスクリプト化→検索→新しいクエリーエディターウィンドウをクリック。
sql文が出てきます。左上の実行というボタンがあるのでそれをクリック。そうすると下の方にずら~っとデータがでてきます。
しかし見てみるとtypeIDやtypeNameだけでなく他のよくわからんデータ(dust314?のやつとかも)までいっぱい入っています。こんなに大量のデータをspreadsheetに上げるとgoogle先生が悲鳴を上げてしまうので減量していきます。
まず着目したいのがgroupIDです。groupIDの情報が格納されているdbo.invGroupsのsqlを読み込んで実行します。
そうするとcategoryIDが6の奴が船であることがわかります(疑い深い人はdbo.inv.Categoriesの中でも見てください)。
しかしdbo.invTipesにはcategoryIDが格納されていないので2つのDBを結合する必要があります。
てことでctrl+Nを押して空クエリを表示させたらこのSQL文を入力して実行します。

そうすると船だけが記載されたtypeIDとtypeNameの一覧が取得出来たと思います。

その後結果のところを右クリックし”結果に名前をつけて保存”をクリックしcsv形式で保存します。
これにて完了です。

さて、これで目的を達成できました。このようにして必要なデータはダンプファイルからSQL文を打って取得していきます。
sqlは現実世界でかなーり使われているので、きっと同じcorpの中にぷろふぇっしょなるな方がいると思いますので、探してみてください。

あーそうそう、この作業がめんどいって人はfuzzworkってサイトにxls形式でうpされてるからそこからとるといいかもです。
そこら辺は後で解説します。

ではでは~fly safe!

fullscreen