0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

HTML上でJavaScriptを使ってAPIコールし、レスポンスをCSVダウンロード(っぽく)取得する

Posted at

目的

HTML上でJavaScriptを使ってAPIコールし、レスポンスをCSVダウンロード(っぽく)取得する。

方法

  1. APIからのレスポンス値をCSV形式へ変換する。
  2. 変換したCSVでdataURLを使ってリンク(aタグ)を生成する。

実装

<!DOCTYPE html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<script>
    //実際にはAPIコールを行う
    // ※配列の配列(CSVの1行に該当)で返す
    const getApiResFromAPI = async () => {
        return [
            ['row 1 / cell 1', 'row 1 / cell 2', 'row 1 / cell 3'],
            ['row 2 / cell 1', 'row 2 / cell 2'],
            ['row 3 / cell 1', 'row 3 / cell 2', 'row 3 / cell 3', 'row 3 / cell 4']
        ];
    }

    // CSVダウンロードボタンを押下した際のclickイベント
    const csvdownload = async () => {

        // APIからCSVの中身を取得
        var apiResData = await getApiResFromAPI();

        // 取得した結果をCSV形式でつなげていく
        var csv = [];
        apiResData.forEach((row, index) => {
            csv.push(row.join(','));
        });

        // APIからダウンロードしたCSVファイルのデータURIを持ったaタグを生成
        var element = document.createElement('a');
        element.text = "テスト"
        element.href = 'data:text/csv;charset=utf-8,%EF%BB%BF' + encodeURIComponent(csv.join('\n'));
        element.setAttribute('download', 'basic.csv');

        // aタグを裏で追加して、クリック(csvファイルダウンロード用のダイアログが表示される)、裏で削除する
        document.body.appendChild(element);
        element.click();
        document.body.removeChild(element);
    }

</script>

<body>
    <input type="button" onClick="csvdownload(); return false;" value="CSVダウンロード">
</body>

</html>
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?