LoginSignup
3
0

More than 3 years have passed since last update.

Ingress PrimeのAgent StatsのテキストをGoogleスプレッドシートで扱う #ingress

Posted at

ちょっと長い前書き

Ingressで遊んでいるAgentの皆さんこんにちは。
Agentの人が読んでるとはかぎらないのですがw

旧Ingressのスキャナ「Scanner[REDACTED]」が先日終わっちゃいましたね。
これからはIngress Prime、そう、新しいスキャナでやっていくことになります。
で、今まではStatsの画像を共有できるような仕組みがあったわけですが、PrimeではStatsの情報がタブ区切りのテキストで共有することが可能になりました。

こんな感じでね

Time Span   Agent Name  Agent Faction   Date (yyyy-mm-dd)   Time (hh:mm:ss) Lifetime AP Current AP  Unique Portals Visited  Portals Discovered  Seer Points XM Collected    OPR Agreements  Distance Walked Resonators Deployed Links Created   Control Fields Created  Mind Units Captured Longest Link Ever Created   Largest Control Field   XM Recharged    Portals Captured    Unique Portals Captured Mods Deployed   Resonators Destroyed    Portals Neutralized Enemy Links Destroyed   Enemy Fields Destroyed  Max Time Portal Held    Max Time Link Maintained    Max Link Length x Days  Max Time Field Held Largest Field MUs x Days    Unique Missions Completed   Hacks   Glyph Hack Points   Longest Hacking Streak  Mission Day(s) Attended NL-1331 Meetup(s) Attended  First Saturday Events   Recursions  
全期間   krohigewagma    Resistance  2019-09-29  10:33:06    64418949    12741333    4951    64  41  248859038   421 2950    82168   9824    4792    299711  51  7298    89807328    8405    1828    11067   125916  18454   25603   14107   462 190 3718    188 1376870 134 56705   109906  506 2   1   4   1   

となると、ファーストサタデーなんかで集計を担当していると、これを使って楽したくなるわけです。
このテキスト、Agentの実績によって、項目の有無が変わってきます。
例えばファーストサタデーに参加している人、していない人では、「First Saturday Events」があったりなかったりします。
これによって、実は中途半端なところで項目が抜けるので、単純にタブ区切りの文字を分割して、n番目がxxxみたいな処理はできません。
また、実績が変なところに追加されるとそれはそれで大変になります。

ということで、そういったことを踏まえて、スプレッドシートでどう扱うのか、説明していきます。

ポイントとしては以下の3点になります。
- 改行でセパレート
- タブでセパレート
- 名前で参照して値を抽出する

また、以下のスプレッドシートの構成が前提になります
- 実績登録用フォームの内容の出力されるスプレッドシート(以後、実績登録スプレッドとする)
- 集計スプレッドシート

さて、手順としては以下の通りです。

  1. 実績登録スプレッドシートから集計スプレッドシートへ転記する
  2. 転記された内容を加工
  3. 必要な情報を抽出

0.はじめに

さて、まだ作りかけですが共有しておきますね。
https://drive.google.com/open?id=1mPRAVgTmljIcOpZaDW4YOVVfGm3fLUOC
実物見ながら読んでもらうとわかりやすいと思います。

実績を登録してみたいという方は以下のフォームから登録してみてください。
(改修中なので画像とかは大目に見てくださいw)
ちなみに、これ、登録するとURL共有になっているので、だれでもみえちゃいます。
見られたくない人は、コピーするかなんかして、試してください。
https://forms.gle/nT352CrQNDz7cyFE9

1.実績登録スプレッドシートから集計スプレッドシートへ転記する

スプレッドを参照するためには、
- スプレッドのID
- シートの名前
の2つの情報が必要になります。

スプレッドのIDは対象のスプレッドシートのURLを見るとわかります。
スプレッドシートのURLは以下のような形式になっています。
で、「IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII」のところがスプレッドシートのIDになります。

なので、この部分を覚えておきましょう。
次に、取り込みになりますが、importrange関数を使います。
これは、外部のスプレッドシートの内容を範囲指定してインポートするような関数です。

=importrange(B1,"フォームの回答 1!A1:N300")

この例の場合、B1セルに書かれたIDのスプレッドシートの「フォームの回答 1」シートのA1からN300の内容をインポートする動作になります。

アンケートフォームから入力された内容をスプレッドシートに記録するようにすると、シート名は「フォームの回答 1」になります。
(ほかに名前になるケースがもしあれば誰か教えて!)

これで第一段階終了です。

この実装は「FS参加者確認と実績まとめ」スプレッドシートの「BC実績」シートで行っています。

2.転記された内容を加工

さて、ここからが結構面倒くさいです。
Statsのテキストを2行に展開します。

行の展開は、まず改行で1行目と2行目と分けて処理します。
その為に、FIND関数で、開業の位置を探します。
改行はchar(10)で指定しています。
そして、MID関数で1文字目から改行の位置までを切り出します。
その結果をSPLIT関数で水平タブで分割します。
これによって、statsのヘッダ行をセルに展開します。

この処理が↓になります。

=SPLIT(MID(J4,1,FIND(char(10),J4)),char(9))

次に、statusのデータを展開します。
やってることはヘッダの展開と同じですが。MIDで抜き出すのが、改行の位置+1の位置から最後までを抜き出すところが違うだけです。

=SPLIT(MID(J4,FIND(char(10),J4)+1,LEN(J4)),char(9))

これで、情報の展開ができます。
ここまでできれば、あとは必要な情報を参照するだけです。

この実装は「FS参加者確認と実績まとめ」スプレッドシートの「展開」シートで行っています。

3.必要な情報を抽出

「FS参加者確認と実績まとめ」スプレッドシートの「Forms」シートを参照してもらうのが早いのですが、QUERY関数で「展開」シートからSQLでDBから情報を撮ってくるかの如く、情報を取得しています。
QUERY関数ホント便利。Excelにも実装してほしい!

そして、M列以降は2行目に書かれた文字と展開シートに展開したヘッダのマッチングでStatsの情報を取ってきます。
ここ、重要なところです。
こうしておかないと、NIAがヘッダの文字替えたりしたときに改修が大変になります。

あとはここに展開した情報をほかのシートでもやっているように、ランキングに利用したり、異常値の検出に使ったり、FevGames提出用にまとめたりすればいいんです。

最後に

GAS(Google Apps Script)を使って、FSなんかで集計に使っている人もいるんじゃないかと思います。
けれど、スプレッドだけでも出来ちゃうのでやっちゃいました。

この仕組みを理解すると、Googleスプレッドシートの便利な関数が覚えられます。
Ingressだけではなく、ほかの趣味やお仕事でも利用できます。
(実際にこれで得た知識はお仕事で役に立ちましたw)

もし、こんな改造した!とか、こここうするといい!などあれば、リアキャプするか、コメント欄にお願いします!

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0