よしだの自習室

GeoGuessrの結果画面から情報を取得するブックマークレット

これはなに?

GeoGuessr の結果ページ (例: https://www.geoguessr.com/results/siZRNvLAb3YboNtu ) でクリックすることで、各ラウンドの結果を以下のような形式でクリップボードにコピーするブックマークレットです。集計などにお役立てください。

2024-08-09 14:54:25	ナイジェリア	4226	250.7 km	https://www.google.com/maps/@?api=1&map_action=pano&viewpoint=6.272190093994141,8.01449203491211
2024-08-09 14:57:44	グアテマラ	4998	682.3 m	https://www.google.com/maps/@?api=1&map_action=pano&viewpoint=14.609286308288574,-90.65435791015625
2024-08-09 15:00:50	ラトビア	4998	579.8 m	https://www.google.com/maps/@?api=1&map_action=pano&viewpoint=55.868247985839844,26.508747100830078
2024-08-09 15:03:53	ウクライナ	3706	446.7 km	https://www.google.com/maps/@?api=1&map_action=pano&viewpoint=49.94998550415039,36.34684371948242
2024-08-09 15:07:01	フィンランド	4194	262.3 km	https://www.google.com/maps/@?api=1&map_action=pano&viewpoint=68.14797973632812,27.095720291137695

準備

Chrome の場合、ブックマークバーを右クリック→「ページを追加…」から、任意の名前を設定し、URL 欄にブックマークレットをまるっと貼り付けてください。

Bookmarklet

ブックマークレット

javascript:(function() {
  try {
    var element = document.querySelector('script#__NEXT_DATA__').innerHTML;
    var parsedData;

    try {
      parsedData = JSON.parse(element);
    } catch (e) {
      console.error('JSONの解析に失敗しました: ', e);
      alert('JSONの解析に失敗しました: ' + e.message);
      return;
    }

    var data = parsedData["props"]["pageProps"]["gamePlayedByCurrentUser"];
    var player = data["player"];
    var rounds = data["rounds"];

    var countryCodes = {
      "ad": "アンドラ", "ae": "アラブ首長国連邦", "af": "アフガニスタン",
      "ag": "アンティグア・バーブーダ", "ai": "アンギラ", "al": "アルバニア",
      "am": "アルメニア", "ao": "アンゴラ", "aq": "南極", "ar": "アルゼンチン",
      "as": "アメリカ領サモア", "at": "オーストリア", "au": "オーストラリア",
      "aw": "アルバ", "ax": "オーランド諸島", "az": "アゼルバイジャン",
      "ba": "ボスニア・ヘルツェゴビナ", "bb": "バルバドス", "bd": "バングラデシュ",
      "be": "ベルギー", "bf": "ブルキナファソ", "bg": "ブルガリア",
      "bh": "バーレーン", "bi": "ブルンジ", "bj": "ベナン", "bl": "サン・バルテルミー",
      "bm": "バミューダ諸島", "bn": "ブルネイ・ダルサラーム", "bo": "ボリビア",
      "bq": "ボネール、シント・ユースタティウスおよびサバ", "br": "ブラジル",
      "bs": "バハマ", "bt": "ブータン", "bv": "ブーベ島", "bw": "ボツワナ",
      "by": "ベラルーシ", "bz": "ベリーズ", "ca": "カナダ", "cc": "ココス(キーリング)諸島",
      "cd": "コンゴ民主共和国", "cf": "中央アフリカ共和国", "cg": "コンゴ共和国",
      "ch": "スイス", "ci": "コートジボワール", "ck": "クック諸島", "cl": "チリ",
      "cm": "カメルーン", "cn": "中国", "co": "コロンビア", "cr": "コスタリカ",
      "cu": "キューバ", "cv": "カーボベルデ", "cw": "キュラソー",
      "cx": "オーストラリア クリスマス島", "cy": "キプロス", "cz": "チェコ",
      "de": "ドイツ", "dj": "ジブチ", "dk": "デンマーク", "dm": "ドミニカ国",
      "do": "ドミニカ共和国", "dz": "アルジェリア", "ec": "エクアドル",
      "ee": "エストニア", "eg": "エジプト", "eh": "西サハラ", "er": "エリトリア",
      "es": "スペイン", "et": "エチオピア", "fi": "フィンランド", "fj": "フィジー",
      "fk": "フォークランド諸島", "fm": "ミクロネシア", "fo": "フェロー諸島",
      "fr": "フランス", "ga": "ガボン", "gb": "イギリス", "gd": "グレナダ",
      "ge": "ジョージア", "gf": "フランス領ギアナ", "gg": "ガーンジー",
      "gh": "ガーナ", "gi": "ジブラルタル", "gl": "グリーンランド", "gm": "ガンビア",
      "gn": "ギニア", "gp": "グアドループ", "gq": "赤道ギニア", "gr": "ギリシャ",
      "gt": "グアテマラ", "gu": "グアム", "gw": "ギニアビサウ", "gy": "ガイアナ",
      "hk": "香港", "hm": "ハード島とマクドナルド諸島", "hn": "ホンジュラス",
      "hr": "クロアチア", "ht": "ハイチ", "hu": "ハンガリー", "id": "インドネシア",
      "ie": "アイルランド", "il": "イスラエル", "im": "マン島", "in": "インド",
      "io": "英領インド洋地域", "iq": "イラク", "ir": "イラン", "is": "アイスランド",
      "it": "イタリア", "je": "ジャージー", "jm": "ジャマイカ", "jo": "ヨルダン",
      "jp": "日本", "ke": "ケニア", "kg": "キルギス", "kh": "カンボジア",
      "ki": "キリバス", "km": "コモロ", "kn": "セントクリストファー・ネイビス",
      "kp": "北朝鮮", "kr": "韓国", "kw": "クウェート", "ky": "ケイマン諸島",
      "kz": "カザフスタン", "la": "ラオス", "lb": "レバノン", "lc": "セントルシア",
      "li": "リヒテンシュタイン", "lk": "スリランカ", "lr": "リベリア",
      "ls": "レソト", "lt": "リトアニア", "lu": "ルクセンブルク", "lv": "ラトビア",
      "ly": "リビア", "ma": "モロッコ", "mc": "モナコ", "md": "モルドバ",
      "me": "モンテネグロ", "mf": "サン・マルタン(フランス領)",
      "mg": "マダガスカル", "mh": "マーシャル諸島", "mk": "北マケドニア",
      "ml": "マリ", "mm": "ミャンマー", "mn": "モンゴル", "mo": "マカオ",
      "mp": "北マリアナ諸島", "mq": "マルティニーク", "mr": "モーリタニア",
      "ms": "モントセラト", "mt": "マルタ", "mu": "モーリシャス",
      "mv": "モルディブ", "mw": "マラウイ", "mx": "メキシコ", "my": "マレーシア",
      "mz": "モザンビーク", "na": "ナミビア", "nc": "ニューカレドニア",
      "ne": "ニジェール", "nf": "ノーフォーク島", "ng": "ナイジェリア",
      "ni": "ニカラグア", "nl": "オランダ", "no": "ノルウェー", "np": "ネパール",
      "nr": "ナウル", "nu": "ニウエ", "nz": "ニュージーランド", "om": "オマーン",
      "pa": "パナマ", "pe": "ペルー", "pf": "フランス領ポリネシア",
      "pg": "パプアニューギニア", "ph": "フィリピン", "pk": "パキスタン",
      "pl": "ポーランド", "pm": "サンピエール島・ミクロン島", "pn": "ピトケアン諸島",
      "pr": "プエルトリコ", "ps": "パレスチナ", "pt": "ポルトガル",
      "pw": "パラオ", "py": "パラグアイ", "qa": "カタール", "re": "レユニオン",
      "ro": "ルーマニア", "rs": "セルビア", "ru": "ロシア", "rw": "ルワンダ",
      "sa": "サウジアラビア", "sb": "ソロモン諸島", "sc": "セーシェル",
      "sd": "スーダン", "se": "スウェーデン", "sg": "シンガポール",
      "sh": "セントヘレナ", "si": "スロベニア", "sj": "スバールバル諸島およびヤンマイエン島",
      "sk": "スロバキア", "sl": "シエラレオネ", "sm": "サンマリノ",
      "sn": "セネガル", "so": "ソマリア", "sr": "スリナム", "ss": "南スーダン",
      "st": "サントメ・プリンシペ", "sv": "エルサルバドル", "sx": "シント・マールテン",
      "sy": "シリア", "sz": "エスワティニ", "tc": "タークス・カイコス諸島",
      "td": "チャド", "tf": "フランス領南方・南極地域", "tg": "トーゴ",
      "th": "タイ", "tj": "タジキスタン", "tk": "トケラウ", "tl": "東ティモール",
      "tm": "トルクメニスタン", "tn": "チュニジア", "to": "トンガ",
      "tr": "トルコ", "tt": "トリニダード・トバゴ", "tv": "ツバル", "tw": "台湾",
      "tz": "タンザニア", "ua": "ウクライナ", "ug": "ウガンダ",
      "um": "合衆国領有小離島", "us": "アメリカ合衆国", "uy": "ウルグアイ",
      "uz": "ウズベキスタン", "va": "バチカン市国",
      "vc": "セントビンセントおよびグレナディーン諸島", "ve": "ベネズエラ",
      "vg": "イギリス領ヴァージン諸島", "vi": "アメリカ領ヴァージン諸島",
      "vn": "ベトナム", "vu": "バヌアツ", "wf": "ウォリス・フツナ", "ws": "サモア",
      "ye": "イエメン", "yt": "マヨット", "za": "南アフリカ", "zm": "ザンビア",
      "zw": "ジンバブエ"
    };

    var formatUnixTimestamp = function(timestamp) {
      var date = new Date(timestamp);
      var formattedDate = date.toISOString().split('T')[0];
      var formattedTime = date.toTimeString().split(' ')[0];
      return formattedDate + ' ' + formattedTime;
    };

    var output = rounds.map(function(round, index) {
      var latitude  = round["lat"];
      var longitude = round["lng"];
      var area      = countryCodes[round["streakLocationCode"]];
      var guess     = player["guesses"][index];
      var distance  = guess["distance"]["meters"]["amount"] + " " + guess["distance"]["meters"]["unit"];
      var startTime = formatUnixTimestamp(round["startTime"]);
      var point     = guess["roundScoreInPoints"];
      var correctPoint = "https://www.google.com/maps/@?api=1&map_action=pano&viewpoint=" + latitude + "," + longitude;
      return startTime + "\t" + area + "\t" + point + "\t" + distance + "\t" + correctPoint;
    }).join("\n");

    navigator.clipboard.writeText(output).then(function() {
      alert('データをクリップボードにコピーしました。');
    }, function(err) {
      alert('クリップボードへのコピーに失敗しました。エラー: ' + err);
    });
  } catch (e) {
    alert('エラーが発生しました: ' + e.message);
  }
})();

注意事項

  • GeoGuessr の仕様が変わると使えなくなる場合があります。
  • 失敗するとき、リロードしてから再度試すとうまくいく場合があります。
[BACK TO TOP]

コメント

コメントはまだありません。

コメントには GitHub のアカウントが必要です。

コメントを書く
[BACK TO TOP]