首页 > 解决方案 > Javascript:查询 API 循环

问题描述

鉴于以下公共 API url 请求(https://publicapi.schroders.com/schroders/external-production/public/api/v1/Contents/articles/search?Tag=economicviews&PublishedFromDate=2020-07-01T00%3A00%3A00。 000Z&TagType=All&Language=en&AudienceId=110019 ) 我需要从多个中提取内容,AudienceId当前的限制是每个请求只接受 x1 个受众 ID,因此我考虑创建一个 AudienceId 值数组以进行迭代,但我有点与如何将代码拼接在一起的斗争。

  var today = new Date()
  var lastMonth = new Date(today)
      lastMonth.setDate(today.getDate() - 45)
  var formatLastMonth = formatDate (lastMonth, "%4Y-%2M-%2D");
  var formatThisMonth = formatDate (today, "%Bl %4Y");
  var date = formatDate (today, "%4Y%2M");
  var time = "T00%3A00%3A00.000Z";
  var publishedFromDate = formatLastMonth + time;

  var base = 'https://publicapi.schroders.com/schroders/external-production/public/api/v1/Contents/articles/search'

  var params = {
    'PublishedFromDate': publishedFromDate.toString(),
    'TagType': 'All',
    'Language': 'en',
    'AudienceId': 110019
  };
  
  // then convert them to a URL format var1=1&var2=2
  var query = Object.keys(params)
      .map(function(k){ return k + '=' + params[k] })
      .join('&');
  
  var url = base+'?'+query // https://publicapi.schroders.com/schroders/external-production/public/api/v1/Contents/articles/search?Tag=economicviews&PublishedFromDate=2020-07-01T00%3A00%3A00.000Z&TagType=All&Language=en&AudienceId=110019
  logInfo(url)
  var req = new HttpClientRequest(url);
  req.execute();
  var resp = req.response;
  var posts = JSON.parse(resp.body)  
  
  var articlesList_json=[];
  var i;
  //5 articles to pull
    for (i = 0; i < 5; i++) {
      articlesList_json.push({
            "title":posts[i].title, 
            "pubDate":posts[i].publishedDate, 
            "link":posts[i].url, 
            "imageURL":posts[i].imageUrl, 
            "description": posts[i].description,
            "category": posts[i].category.name,
        });
    } 

这是我的观众群

var audience = {
                'C'   : 198147,
                'DFM' : 199083,
                'PC'  : 110019,
                'PA'  : 110019,
                'CI'  : 231752
               };

如何修改脚本以遍历受众数组并每次将 5 篇文章附加到 vararticlesList_json=[]

我还注意到我的应用程序对请求使用了稍微不同的函数,所以我替换了一些函数并在我的 jsfiddle https://jsfiddle.net/mh32rLg5/上尝试了它们,它正在遍历数组

小提琴循环

    var audience = {
                    'C'   : 198147,
                    'DFM' : 199083,
                    'PC'  : 110019,
                    'PA'  : 110019,
                    'CI'  : 231752
                   }; 
              
      
for (var i in audience) {
var aId = audience[i];
var url = 'https://publicapi.schroders.com/schroders/external-production/public/api/v1/Contents/articles/search?PublishedFromDate=2021-07-01&Language=en&AudienceId='+aId


  
    var xmlHttp;
    xmlHttp = new XMLHttpRequest(); 
    xmlHttp.onreadystatechange = function() {

            console.log(xmlHttp.responseText); // "" (empty string)
            var respData = JSON.parse(xmlHttp.responseText) || {};
            RemoteEvents = JSON.parse(respData.Description) || null;
        
    };
    xmlHttp.open( "GET", url, true );
    xmlHttp.send( null );


}

标签: javascriptapi

解决方案


用JS回答

var audience = {
    'C':  198147,
    'DFM':199083,
    'PC': 110019,
    'PA': 110019,
    'CI': 231752
};

        var articlesList_json = [];
        var i;

for (var i in audience) {
    
    var aId = audience[i];
    var url = 'https://publicapi.schroders.com/schroders/external-production/public/api/v1/Contents/articles/search?PublishedFromDate=2021-07-01T00%3A00%3A00.000Z&TagType=ALL&Language=en&AudienceId=' + aId
    
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.onreadystatechange = function() {

//console.log(xmlHttp.readyState);// this always returns = 1
//console.log(xmlHttp.responseText) ; //this is always empty.
        
        if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
            
        var respData = JSON.parse(xmlHttp.responseText)
        
            for (i = 0; i < 10; i++) {
                articlesList_json.push({
                    "title": respData[i].title,
                    "pubDate": respData[i].publishedDate,
                    "link": respData[i].url,
                    "imageURL": respData[i].imageUrl,
                    "description": respData[i].description,
                    "category": respData[i].category.name,
                });
            }
   
        }

    }

    xmlHttp.open("GET", url, true);
    xmlHttp.setRequestHeader("Content-type", "application/json");
    xmlHttp.send(null);
    
}
   console.log(articlesList_json)

推荐阅读