javascript - API 请求循环 Node.js 和 LiveChat API

标签 javascript node.js csv

作为工作中的一个业余项目,我目前正在致力于实现 LiveChat Report Web 应用程序。基本上,它会将我们所有的 LiveChat 数据下载到 .csv 文件中以进行分析等。

我的整个工作进展顺利;但是,我很难理解如何根据返回的结果页面循环请求。例如,我想从每次聊天中获取某些信息。 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 次聊天。

谢谢!非常感谢任何帮助。

最佳答案

我们看到两种可能的解决方案:

1: A. 前端向后端发送请求,后端返回作业的ID,前端必须将作业的ID存储在前端,例如localStorage中。

B.此时,后端会自行处理作业,并尝试将其作为一个完整的任务来完成。

C.前端每隔几秒向后端发送一次有关该任务的请求,并给出其 ID。当任务未完成时,后端回复“进行中”, 前端继续查询任务,直到任务完成。

D.如果前端查询任务,此时收到通知 任务已完成,然后后端返回类似“finished”的消息 进一步完成信息。

E. GUI 应通知: o 等待响应 o 响应成功,链接下载文件。

---------或----------

2: A.前端向后端发送请求,后端注册任务后 完成任务会发送一封包含已完成数据的电子邮件。

B.前端通知该任务已添加到“队列”中,并且仅当它被添加时 完成后,将发送一封包含任务结果的电子邮件。

C.需要在前端添加额外的输入:电子邮件并处理某种电子邮件 API,例如:https://postmarkapp.com/

让我知道它是如何工作的,

干杯, 亚当

关于javascript - API 请求循环 Node.js 和 LiveChat API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35281090/

相关文章:

javascript - Angular Controller 中的 $scope 变量未在 HTML 中显示

JavaScript 在类中使用 async/await

node.js - 在 Express 路由器中使用 mongoDB

python - 将列名称分配给 csv 数据集

javascript - 重叠不同颜色的 TEXTAREA 以获得语法高亮...流畅的复制/粘贴——可能吗?

javascript - 引用错误 : Unknown plugin "react-html-attrs" specified

javascript - 将 Angular Web 应用程序连接到 Firebase

javascript - Nodejs Paypal api

mysql - 在MySQL中获取多分隔字符串并转换为多条记录

python - 使用 Python 从网上下载 csv 文件