Google SpreadsheetとApps Scriptを使ってMMRを記録し公開する
毎日のSolo MMRの推移をGoogle Spreadsheetで記録してみましょう。
前提条件として、YaspでMMRが表示されている必要があります(Dotaのプロフィール上に表示していれば、Yaspに登録していなくてもMMRが表示されるはずです)。
1. 記録用シートの作成
まず、Google Spreadsheetで記録用のシートを作成します。このシートは一切編集しないでください。
2. MMRを記録するスクリプトの作成
次に、先ほど作ったシートを開いている状態で、ツール→スクリプトエディタからスクリプトエディタを開き、以下の内容を貼り付けます。その際、2箇所変更が必要な箇所があるので、注意してください。
function myFunction(){ var currentDate = new Date(); // [要変更1] MMRを記録するためのシートのURLを入力する(gidの部分まで必要) var url = "https://docs.google.com/spreadsheets/d/**********/edit#gid=0"; var spreadsheet = SpreadsheetApp.openByUrl(url); var sheet = spreadsheet.getSheets()[0]; // [要変更2] あなたのFriend IDに書き換える var soloMMR = getSoloMMR("85275184"); if (soloMMR) { sheet.appendRow([ Utilities.formatDate(currentDate, "JST", "yyyy-MM-dd"), soloMMR ]); } else { var retryInterval = 5; // minutes if (currentDate.getMinutes() < 60 - retryInterval && currentDate.getHours() < 23) { ScriptApp.newTrigger("myFunction").timeBased().after(1000 * 60 * retryInterval).create(); } else { sheet.appendRow([ Utilities.formatDate(currentDate, "JST", "yyyy-MM-dd"), "N/A" ]); } } } function getSoloMMR(playerID) { try { var html = UrlFetchApp.fetch('https://yasp.co/players/' + playerID).getContentText(); return html.match(/<small style="margin-left:.5em">(\d+)<\/small>/)[1]; } catch (e) { return null; } }
3. スクリプトの動作確認
手動で実行(再生アイコンのボタン)して動作を確認します。正常に動いている場合、スプレッドシートに最新のMMRが追加されるはずです。もし実行ボタンが押せない場合は、"関数を選択"部分がmyFunctionになっているか確かめてみてください。
アクセス権限の許可を求められた場合は、内容をよく確認した上で、同意しましょう(スプレッドシートを読み込む許可と外部のURLを開く許可を求められるはずです)。
4. 自動実行の設定をする
"現在のプロジェクトのトリガー"(時計アイコン)をクリックしてスクリプトの自動実行を設定しましょう。
毎日のMMRを記録する目的から、一日の終わりごろに実行する設定にするとよいでしょう。
5. 表示用のシートを作成する
シートを追加してデータを表示したいセル(見出しを付けない場合はA1、見出しを付ける場合はB1)に=query('シート1'!A:B, "select A, B ORDER BY A DESC LIMIT 7")
と入力すれば最新の7件を表示するようにできます。もし14日分表示したい場合は7の部分を14に変えると良いでしょう。Query文を編集して細かい条件を指定したい場合は、ドキュメントを参照してください。
9日分のデータが記録されたシート
身だし付きの表の例
6. シートを公開する
最後に、公開用シートを誰でも見られるようにするため、ファイル→ウェブに公開→埋め込むから公開したいシートを指定して公開しましょう。
完成例
サイズ・スタイルは必要に応じて調節してください(デフォルトではセルの横幅が100px、縦幅が20pxですので、widthの部分は(横幅+1)*2=202px、heightの部分は(縦幅+1)*表示行数=168pxにする*1とうまく収まるはずです)。
<iframe src="https://docs.google.com/spreadsheets/d/*******/pubhtml?chrome=false" style="width: 202px; height: 168px;"></iframe>
補足
自分のフレンドIDがわからない場合、プロフィールを開いての赤線の部分にある数字を確認してください。- 公開用URLの最後に
&chrome=false
とつけるとヘッダー/フッターが消えてすっきりします。 - Yaspにつながらない場合は自動的にリトライし、日付が変わるタイミングまで取得できない場合はN/Aという値が保存されます。
- 公開用のurlのpubhtmlの部分をexport?format=csv[任意のフォーマット]とするとCSV[任意のフォーマット]でエクスポートすることができます。
- 正規表現でMMRを取得しているのでYASPのHTMLのフォーマットが変わった途端に動かなくなることが予測されます…。
おまけ
Hello I'm Snith, voting my 51620th vote on Chen.
*1:+1という数字はCSSのbox-sizingの仕様とSpreadsheetの罫線の位置に由来するもの