您好,我是Angular的初学者,我正在制作一个应用程序,该程序从政府API导入有关社会救助计划受益人的数据。
要获取API数据,我需要在URL中将日期(以YYYYMM格式)作为参数传递,并在IBGE网站上传递市政代码,以URL的示例为例:
http://www.transparencia.gov.br/api-de-dados/bolsa-familia-por-municipio?mesAno=201908&codigoIbge=3509502&pagina=1
此测试代码对应于巴西的坎皮纳斯市和2019年8月。
响应:
[
{
"id": 30204445,
"dataReferencia": "01/05/2018",
"municipio": {
"codigoIBGE": "3509502",
"nomeIBGE": "CAMPINAS",
"pais": "BRASIL",
"uf": {
"sigla": "SP",
"nome": "SÃO PAULO"
}
},
"tipo": {
"id": 1,
"descricao": "Bolsa Família",
"descricaoDetalhada": "Bolsa Família"
},
"valor": 5921632,
"quantidadeBeneficiados": 34741
}
]
在他返回的许多价值观中,现在对我而言重要的是受益者的价值(勇气)和人数(quantidade debeneficiários)。
但是我需要(我来向您寻求帮助)是制作一些脚本来运行此URL 12次,或者运行一些foreach,并且每次更改月份时,最终得到值和最近12个月的受益人数量。 (希望我能正确解释)。
稍后,我将采用这些值并制作图表。您能告诉我如何从选定的市政当局获得最近12个月的数据吗?
谢谢。
答案 0 :(得分:1)
您可以使用RxJs中的forkJoin,然后将month / index传递给动态生成的URL 12次,这是我创建了可以映射到请求的顺序数组。
forkJoin( [ ...Array(N).keys() ]
.map(index => this.httpClient.get(`http://www.transparencia.gov.br/api-de-dados/bolsa-familia-por-municipio?mesAno=201908&codigoIbge=3509502&pagina=${index}`))
).subscribe(responses => {
// do your thing with response[0], response[1] and so on ...
});
希望有帮助
您需要一个可以为您生成此信息的功能。
注意:它将返回13个月201908-201808。如果需要一年,请调整循环0-12
function getAllMonthlyInfo() {
const date = new Date();
const months = [];
for (let i = 0; i <=12; i++) {
date.setMonth(date.getMonth() - 1);
months.push(date.getFullYear()+ String(date.getMonth()+1).padStart(2,'0') );
}
return months.map(month => this.httpClient.get(`http://www.transparencia.gov.br/api-de-dados/bolsa-familia-por-municipio?mesAno=${month}&codigoIbge=3509502&pagina=1`));
}
然后您可以像这样调用此函数。
forkJoin( getAllMonthlyInfo() ).subscribe(responses => {
// do your thing with response[0], response[1] and so on ...
});