作为一个侧面项目,我目前正在实施一个LiveChat Report Web应用程序。基本上,它会将我们所有的LiveChat数据下载到.csv文件中进行分析等。API请求循环Node.js和LiveChat API
我的整个工作都很顺利;然而,我很难包装如何循环,虽然请求基于返回的结果页面。例如,我想要从每个聊天中获得某些信息。 LiveChat API只在每个页面上返回25个聊天记录。不幸的是,我无法每次调用每个页面,并且取决于日期范围参数,页面数量每次都有所不同。如果可能的话,我想在1 csv上获得所有这些页面。
我的要求是这样的:
function chatListReport() {
document.getElementById('chat_list_submit').addEventListener('click', function(event) {
var req = new XMLHttpRequest();
var params = {date_from:null,date_to:null, page:null};
params.date_from = document.getElementById('date_from').value;
params.date_to = document.getElementById('date_to').value;
params.page = document.getElementById('page').value;
req.onreadystatechange = function() { //when response received
if (req.readyState == 4 && req.status == 200) {
var response = (req.responseText);
var final = "data:text/csv;charset=utf-8," + encodeURI(response);
var link = document.createElement('a');
link.setAttribute('href', final);
link.setAttribute('download', 'ChatListSurveyReport.csv');
link.click();
}}
req.open('POST', '/chat_list_report', true); //submit update via POST to server
req.setRequestHeader('Content-Type', 'application/json'); //set request header
req.send(JSON.stringify(params));
event.preventDefault();
});
我的服务器端看起来像这样(使用NPM liveChatAPI):
app.post('/chat_list_report', function(req, res){
var params = req.body;
api.chats.list(params, function(data){
var headers = 'Chat Date,Agent,PostChat Survey Rating,Comments';
var result = (data.chats || [])
.filter(function(chat) {return chat.type === "chat"})
.map(function(chat) {
var postSurvey = chat.postchat_survey || [];
return [
chat.ended.replace(",", ""),
chat.agents[0].display_name,
(postSurvey[0] || {}).value || "",
(postSurvey[1] || {}).value || "",
].join(',');
});
result.unshift(headers);
res.send(result.join('\n'));
});
});
我能够返回的页面数。这包含在返回的JSON中。简而言之,是否有办法将该页码响应返回给请求,并通过请求X次循环,然后创建带有所有信息的1个csv?目前,我仅限于每个请求只有25个聊天。
谢谢!任何帮助是极大的赞赏。