输出循环PIWIK API调用CSV

时间:2018-01-10 10:16:56

标签: node.js matomo

我遇到了以下问题:我使用不同的日期循环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令牌和网址。

1 个答案:

答案 0 :(得分:1)

解决。摆脱了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")
}