javascript - 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 );
}
解决方案
用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)
推荐阅读
- ajax - Spring,Thymeleaf &fragmens: 加入篮子
- python - 在数组中存储复数
- java - 哈希图还是成熟的缓存?
- dbt - 如何设置 dbt 配置文件以连接到 Qubole/Hive 我已经尝试过 http 方法,可以这样做吗?
- c# - 如何识别 iTextSharp 找到的 PDF 上的注释/链接位置
- c++ - 测试模板到内存位置以替换嵌入式系统中的定义
- java - 如何以编程方式确定 jdk.http.ntlm.transparentAuth 的设置
- javascript - 从两个不同的状态添加/删除类
- vba - VBA 仅导出部分记录集
- javascript - 反应firebase auth无法识别用户何时登录