Typeform で csv を得る

仕事でWebアンケートサービスの Typeform を扱うことがあって、PHP でアンケート結果を csv で出力するプログラムを書いた。

<?php
//
//  Typeform to csv
//

define("APIKEY","xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
define("FORMID","xxxxxx");
define("APIURL","https://api.typeform.com/v1/form/".FORMID."?key=".APIKEY);
define("CSVFILE","typeform.csv");

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, APIURL);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$tmp = curl_exec($curl);
curl_close($curl);

$json = json_decode($tmp, true);

// questions パートの解析
$header = array("token","date","browser","platform");
$fields = array();
if (isset($json["questions"])) {
    foreach ($json["questions"] as $k=>$v) {
        $header[$k + 4] = $v["question"];
        $fields[$v["id"]] = $k + 4;
    }
}
$csv = implode(",", $header)."\n";

// responses パートの解析
$cnt = 0;
foreach($json["responses"] as $res) {
    if ($res["completed"] == "1") {
        $cnt++;
        $cell = array();
        for ($i = 0; $i <= count($header) - 1; $i++) {
            $cell[$i] = "";
        }
        $cell[0] = $res["token"];
        $cell[1] = date("Y-m-d H:i:s",strtotime("+9 hour", strtotime($res["metadata"]["date_submit"])));
        $cell[2] = $res["metadata"]["browser"];
        $cell[3] = $res["metadata"]["platform"];
        foreach ($res["answers"] as $k=>$v) {
            $n = $fields[$k];
            $cell[$n] = $v;
        }
        $csv .= implode(",", $cell)."\n";
    }
}

echo "count = $cnt\n";

file_put_contents(CSVFILE, mb_convert_encoding($csv, "SJIS-win", "UTF-8"));
?>

Webアンケートサービスを本格的に使おうとするとかなり料金が高い。Typeform も有償サービスもあるのだが、学校やNGOではProライセンスが無償で利用できる。海外ではこうした教育機関や非営利団体に対する感謝の気持ちを表す習慣があるが、日本ではそうしたサービスを目にすることは少ない。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

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