#javascript #api
Вопрос:
Учитывая следующий общедоступный запрос URL API (https://publicapi.schroders.com/schroders/external-production/public/api/v1/Contents/articles/search?Tag=economicviewsamp;PublishedFromDate=2020-07-01T00:00:00.000Zamp;TagType=Allamp;Language=enamp;AudienceId=110019) Мне нужно извлекать контент из нескольких AudienceId
, и текущее ограничение заключается в том, что он принимает только идентификатор аудитории x1 на запрос, поэтому я подумал о создании массива значений идентификатора аудитории для итерации, но я немного затрудняюсь с тем, как объединить код.
var today = new Date()
var lastMonth = new Date(today)
lastMonth.setDate(today.getDate() - 45)
var formatLastMonth = formatDate (lastMonth, "%4Y-%2M--");
var formatThisMonth = formatDate (today, "%Bl %4Y");
var date = formatDate (today, "%4Y%2M");
var time = "T00:00:00.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=1amp;var2=2
var query = Object.keys(params)
.map(function(k){ return k '=' params[k] })
.join('amp;');
var url = base '?' query // https://publicapi.schroders.com/schroders/external-production/public/api/v1/Contents/articles/search?Tag=economicviewsamp;PublishedFromDate=2020-07-01T00:00:00.000Zamp;TagType=Allamp;Language=enamp;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 статей в var articlesList_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-01amp;Language=enamp;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 );
}
Ответ №1:
Ответ в 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:00:00.000Zamp;TagType=ALLamp;Language=enamp;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 amp;amp; 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)