プログラミング

SHOWROOMのガチイベをGoogleスプレッドシートでグラフにしよう

投稿日:

まえがき

SHOWROOMのガチイベ、と言えば配信者が獲得ポイント数でランキングされ、最終的にファンの札束で殴り合って勝者を競う札束タワーバトルなわけです。
数日~数週間にわたって配信者同士でランキング順位を競うので、自陣営の勝利のためには周囲とのポイント差を常時確認し続けるのは必要不可欠です。
しかしSHOWROOMのオフィシャルな機能では情報が少なく、あまり戦略的な行動が取りづらい。
そこで、イベントのポイント推移を時間軸でグラフ化するのが大事になってきます。

つまり、こう。

既にある程度の大型イベントを自動収集するサイトを運営されている方がいて、このサイトが捕捉しているイベントであればこのサイトを使わせて頂ければ良いんですが、ここに無いイベントは自力で取得するしかない。

ということでGoogleスプレッドシートとGoogle Apps Scriptsを使ってポイントを自動収集・グラフ化してしまおう、という記事です。

みほん

とにかく見本を公開します。これを基に好きにいじれる人は、自分のところにコピーして好きにいじってください。

だいじな注意事項

Google Apps Scriptの制限

ポイントを自動収集するためのスクリプトの実行時間に制限があります。
そのため、全てのルームを数分間隔で収集することはできません
上位数ルームのみを絞って実行するようにしましょう。

具体的に言うと、Google Apps Scriptで実行するスクリプトは実行時間が1日あたり合計1時間以内でないといけません。
そのため、1分間隔(1日1440回実行)で情報を収集する場合は1回あたり2.5秒で実行完了しないと、じきに時間オーバーになります。
5分間隔の場合は1回あたり12.5秒、30分間隔の場合は1回あたり75秒です。
実行時間は毎回確認できますが、ある程度余力を持った間隔で収集するようにしましょう。

SHOWROOMの仕様

基本的にガチイベのポイントは5分おきの更新です。
なので、収集間隔を5分より短くしてもあまり意味はありません。
また、このスクリプトは内部でSHOWROOMの非公開APIを利用していますが、なにぶん非公開APIなので仕様が変わる可能性や、SHOWROOMに怒られる可能性があります。怒られたら一緒にごめんなさいしましょうね。

てじゅん

見本が手元にあることを前提にして、見本を改造して好きなイベントに対応させましょう。

1.

自分のGoogleドライブにコピーして、名前を変えましょう

2.

「生データ」シートにいま入っている数値データを消しましょう

このあたりのデータは見本なので、消してしまいましょうね。

3.

「生データ」シートの1行目のルーム名を手入力しましょう。ルーム数に応じて横の列は好きに伸ばしたり削ったりしましょう。

あなたが見やすい名前ならなんだって良いです。(本当はここもAPIから自動取得できます。興味のあるひとは調べてみて下さい)

4.

おなじ名前を「最大値用」のシートにコピペしましょう。

5.

「最大値用」シートの2行目には関数計算が入れてあります。ルーム数に合わせて2行目の関数計算をコピーしましょう。

6.

ツールバーの「ツール」から「スクリプトエディタ」を開きましょう。

7.

スクリプトの名前を好きに変えましょう。

8.

スクリプトの5行目あたりにあるルームIDを、いまから収集対象のルームIDに変えていきます。このルームIDの順序と数は、さっきのスプレッドシートのB列にあるルームから順番にきっちり合わせて下さい

9.

ルームIDは、たとえばイベントページの「プロフィール」のボタンでアクセスしたページの、

URLの末尾にある6桁ぐらいの数字です。たまに5桁とか、4桁の人もいます。

10.

ルームIDを変え終わりました。

11.

試し打ちしてみましょう。
関数から「myFunction」を選択して、再生ボタンを押します。

12.

権限の許可を求められるので許可します。
途中でちょっと危なげなページが出ますが、腹をくくって許可してください。

いま動かそうとしているスクリプトが自作だから怒られています。
騙されているんじゃないの?って思う人は、自分で判断できないならここで諦めておくのもあなたのためです。

ちなみにこの許可を出すと、自分のアカウントあてにgoogleからメールが飛んできます。

13.

うまくうごけば、「生データ」シートの2行目に現時点のポイントが収集されます。ちなみに、イベント期間中以外は「-1」が記録されます。

うまく動かなかった人は、スクリプトが何かエラーを出していないか、「生データ」シートにゴミが残っていないか確かめてみてください。

14.

「折れ線グラフ」を調整しましょう。見本のデータ範囲にあわせられているので、データ範囲を調整します。
いちど元の範囲を消してしまって…

「生データ」シートのデータがある列を列全体で選択します。

15.

出ていないルームに関しては、「系列を追加」でたくさん増やしましょう。

16.

「横棒グラフ」も同じ要領でデータ範囲を合わせましょう。横棒グラフのデータは「最大値用」シートから取っています。
これでスプレッドシートの見た目は整いました。

17.

自動収集の設定をしましょう。
Google Apps Scriptに戻って、時計のマークをクリックします。

18.

「トリガーを追加」を選んで、「時間主導型」を選択し、好きな間隔を設定しましょう。

19.

実行の状況を見たいときは、左の「実行数」から確認できます。今回は11.299秒で実行できているのがわかります。
そのため、5分間隔で実行すると1日1時間上限がギリギリですね。

20.

かんせい!
あとは寝ておけば勝手に情報が収集されます。
ポイント推移を調べていないライバルとコーナーで差をつけよう!

スクリプト解説

ざっくり全文乗せてしまいます。

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getSheetByName('生データ');
  sheet.appendRow([new Date(),
                   getPoint('123456'),
                   getPoint('234567'),
                  ]);
  var lastrow = sheet.getLastRow();
  var timerng = sheet.getRange(lastrow, 1);
  timerng.setNumberFormat('MM/dd H:mm');
  var pointrng = sheet.getRange(lastrow, 2, 1, 8);
  pointrng.setNumberFormat('#,##0');
}

function getPoint(room_id) {
  var url = 'https://www.showroom-live.com/api/room/event_and_support?room_id=' + room_id;
  var res = UrlFetchApp.fetch(url);
  var json = JSON.parse(res.getContentText());
  if (json['event'] == null) {
    return -1;
  } else {
    return json['event']['ranking']['point'];
  }
}

軽くjavascriptが読めれば特に面白いことはないと思います。
getPoint関数がSHOWROOMのAPIからイベントポイントを取得してくるので、これをGoogle Apps Scriptのスプレッドシートを操作する関数で最終行に流し込んでいるだけです。
あとはグラフにしたときに書式が乱れないように書式設定しています。

SHOWROOMのAPIは非公開ですが、Qiitaで公開されていてもはや公然の秘密と化しているので非常に助かります。

-プログラミング

執筆者:


comment

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

【Unity】GPUを使ってパンツを隠すスクリプトができた

かわいいスカートを履きたい!でもパンチラしたくない! それは誰もが抱く夢です。もちろん、3Dモデルだってパンチラしたくないと思っているハズです。 というわけで偉大なる先人がいます。 Unityでパンツ …

no image

プログラミングとアルゴリズムのはなし

みんなー!小学校でプログラミングの授業がはじまるよー!! プログラミングってなんだろう? プログラミングって、コンピューターに「○○をしなさい」って命令して、なにかの問題を解いたり、ゲームをつくったり …

国土地理院の地図データをUnityで読みたい(願望)

なんかgoogleのAdSense通ったんで有益な情報載せないとなって。 国土地理院のオープンデータ 国土地理院が公開している(正確には国土地理院のデータを利用して国土交通省国土政策局国土情報課が公開 …

GeoJSONで市町村境界をマージして都道府県境界にしたい(実践編)

前々回と前回で問題を整理して、ようやく実践編です。 まず実物のリンク貼りましょう。GitHubに上げました。 今回はGo言語で書いてますが、ポイントがいくつかあります。 ちなみに言語としてGoを選択し …

YouTube Data APIをGoogle Apps Script(GAS)から使おう

YouTubeってAPIから色々な情報を取ることができるんですよ。 APIの情報はリファレンスにまとまってるんですが、APIキーだのOAuth2.0だの、使い始めるまでがまぁまぁ面倒なんですね。 で、 …