使用“连续/顺序GET”导入数据

时间:2019-09-16 23:28:23

标签: angular rest

您好,我是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个月的数据吗?

谢谢。

1 个答案:

答案 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 ...
});