👻

LookerStudioからぽちぽちCSVダウンロードはしんどすぎる(自動化しましょう)

2023/12/11に公開

え、Looker StudioってAPIでデータ抜けないの?

あれこれサクッと見るのに便利なGoogle Looker Studioですが、
そのデータを定期的に抜きたいなーって時ありませんか?
1つ、2つであればポチーで済みますが、
それが何十個もあったら発狂もんです。

そこでふと思うのはAPIから取ってくりゃいいじゃんと思いますが、LookerStudioのAPIは基本データ抜くのが苦手なのでその方法も取れません。

じゃ、じゃあ元のデータを参照したらいいじゃん!!

元のデータを参照する権限はあなたになくしかも与えてもらえません。。

あなたにはBookmarkletがある

ぽちぽちするしかない?

いえ、あなたにはまだコンソールでのJS実行が残されています

開発者ツール開いて、あらかじめ取っておいたJS貼り付けてー・・

ちょっとめんどくさくありません?

そこでBookmarkletの出番です

(まぁBookmarklet自体は使い古されたネタとは思いますが、LookerStudio使いには残された最後の希望なのです)

ここでBookmarkletってなんやねん?って方のためにおさらいです

Bookmarkletの基礎

Bookmarkletとは?

Bookmarkletとは、ウェブブラウザで使用する小さなJavaScriptプログラムを指します。これは、通常のブックマークと同じようにブラウザのブックマークバーに保存できますが、ウェブページのURLを保存するのではなく、JavaScriptコードを含んでいます。

Bookmarkletの特徴:
即座に実行可能: ブックマークバーに保存しておくことで、任意のウェブページ上でクリック一つでスクリプトを実行できます。

カスタム機能の追加: 特定のウェブページで繰り返し行う動作や、ブラウザに標準装備されていない機能を簡単に追加できます。

使用の簡単さ: 専門的なプログラミングスキルがなくても、他人が作成したBookmarkletを利用することができます。

ポータビリティ: ほとんどの主要なウェブブラウザで動作します。

こんな感じにブックマークにいます

でこれをポチーと実行すると設定しておいたJSが動くわけですね

登録のしかたは普通のBookmarkと同じですが、URLにJSを書くだけです

LookerstudioからCSVエクスポートするヤーツ

で今回のお題であるLookerのCSVエクスポートはこんなスクリプト組んでいます

javascript:(function () {
    (async function() { 
    var elements = document.getElementsByClassName('centerHeaderRow'); 
    for (var i = 0; i < elements.length; i++) {
        var colName = elements[i].getElementsByClassName('colName')[0].innerText;
        var event = new MouseEvent("contextmenu", { bubbles: true, cancelable: true }); 
        elements[i].dispatchEvent(event); 
        var expElements = document.getElementsByClassName('mat-mdc-menu-item-text'); 
        await new Promise(resolve => setTimeout(resolve, 100)); 
        if(expElements){ 
            for (var j = 0; j < expElements.length; j++) { 
                if(expElements[j].innerText == "エクスポート"){ 
                    expElements[j].click(); 
                    await new Promise(resolve => setTimeout(resolve, 100)); 
                    var expDialog = document.getElementsByClassName('data-export-dialog'); 
                    if(expDialog){ 
                        var expInput = expDialog[0].getElementsByTagName('input');
                        await new Promise(resolve => setTimeout(resolve, 100)); 
                        expInput[0].value += "_" +colName;
                        expInput[0].dispatchEvent(new Event('input', { bubbles: true }));
                        await new Promise(resolve => setTimeout(resolve, 100)); 
                        var expButton = expDialog[0].getElementsByTagName('button'); 
                        expButton[1].click(); 
                    } 
                    break; 
                } 
            } 
        } 
    } 
})();
})();

これをBookmarkletとしてブックマークしてLookerStudioのページで実行すると?

あら不思議ダウンロードディレクトリにcsvファイルが出力されているではありませんか。

おめでとうございます。

あなたは晴れてCSVぽちぽち地獄から解放されたはずです。

???「じゃあ、空いた時間でこれやっておいてー」

「。。。」

株式会社ガラパゴス(有志)

Discussion