输出循环 PIWIK API 调用 CSV

Output looped PIWIK API call to CSV

我遇到了以下问题:我正在使用不同的日期循环调用 API 以将输出附加到 CSV 文件。但是,CSV 文件中的输出数据仅包含第一个日期的数据。

当我将结果记录到命令提示符时,我确实得到了多个日期,这意味着将输出写入 CSV 时会出现问题。

Moment.js 用于设置循环的开始和结束日期,fast-csv 将 API 调用的输出写入 CSV 文件。

    // load and configure
const piwik = require ('piwik').setup ('placeholderurl', 'XXXXX');

// filesystem requirement
var fs = require('fs');

// fast-csv requirement
var csv = require("fast-csv");

// moment.js requirement
var moment = require('moment');

// variabelen voor het loopen door datums
var a = moment().format('2016-05-12');
var b = moment().format('2016-05-15');

var stream = fs.createWriteStream ('my.csv', {flags: 'a'})


// samenstellen API url

for (var m = moment(a); m.isBefore(b); m.add(1, 'days')) {
    piwik.api (
      {
        method: 'Live.getLastVisitsDetails',
        idSite: 3,
        period: 'day',
        format: 'csv',
        date: moment(m).format('YYYY-MM-DD')
      },
        function (err, data) {
            if (err) {
                console.log (err);
                return;
            }
        console.log(data)       
        csv
            .writeToStream(fs.createWriteStream("my.csv"), data, {flags: 'a', headers: true});
        }
    );
}

API 令牌和 url 出于隐私原因删除。

已解决。摆脱了 PIWIK API 包并决定使用 HTTP GET 手动检索 url。

代码:

// http requirement
var http = require('http');

var request = require('request');

// filesystem requirement
var fs = require('fs');

// moment.js requirement
var moment = require('moment');

// variabelen voor het loopen door datums
var a = moment().format('2016-05-12');
var b = moment().format('2016-05-15');

var m = moment(a);

//var stream = fs.createWriteStream ('my.csv', {flags: 'a'})

// samenstellen API url
for (var m = moment(a); m.isBefore(b); m.add(1, 'days')) {
    request
  .get("http://placeholder.com/?module=API&method=Live.getLastVisitsDetails&idSite=3&period=day&date=" + moment(m).format('YYYY-MM-DD') + "&format=csv&token_auth=placeholdertoken&filter_limit=-1")
  .on('error', function(err) {
    console.log(err)
    })
  .pipe(fs.createWriteStream('data-' + moment(m).format('YYYY-MM-DD') + '.csv'))
  console.log(moment(m).format('YYYY-MM-DD') + " " + "saved")
}