@@ -42,7 +42,7 @@ o nome do *endpoint*.
4242
4343.. ipython :: python
4444
45- pix.describe(' PixLiquidadosAtual' )
45+ pix.describe(" PixLiquidadosAtual" )
4646
4747 Vemos que o *endpoint * ``PixLiquidadosAtual `` retorna 4 propriedades:
4848
@@ -51,15 +51,19 @@ Vemos que o *endpoint* ``PixLiquidadosAtual`` retorna 4 propriedades:
5151- ``Total<float> ``: financeiro das operações realizdas na data
5252- ``Media<float> ``: média das operações realizadas na data
5353
54- As propriedades são formatadas como colunas em um DataFrame.
54+ As propriedades são atributos de objetos da classe :py:class: `bcb.odata.api.Endpoint `, retornados pelo método
55+ ``get_endpoint ``.
5556
56- Para acessar os dados deste *endpoint * é necessário obter um objeto com o *endpoint * e executar uma ``query `` nesse
57- objeto.
58- O método ``get_endpoint `` retorna um objeto da classe :py:class: `bcb.odata.api.Endpoint `.
57+ .. ipython :: python
58+
59+ ep = pix.get_endpoint(" PixLiquidadosAtual" )
60+ ep.Data
61+ ep.Media
62+
63+ Para acessar os dados deste *endpoint * é necessário executar uma ``query `` nesse objeto.
5964
6065.. ipython :: python
6166
62- ep = pix.get_endpoint(' PixLiquidadosAtual' )
6367 ep.query().limit(10 ).collect()
6468
6569 Ao realizar a ``query `` no *endpoint * limitamos a consulta a retornar 10 elementos, apenas para visualizar os dados
@@ -106,7 +110,7 @@ Sigamos com um exemplo:
106110
107111 select Data, Media
108112 from PIX
109- where Data >= ' 2023-01-01'
113+ where Data >= " 2023-01-01"
110114 order by Media desc
111115 limit 10
112116
@@ -130,6 +134,80 @@ Na última linha executo o método ``collect`` que executa a consulta e retorna
130134 .limit(10 )
131135 .collect())
132136
137+ Visualizando a Consulta
138+ ^^^^^^^^^^^^^^^^^^^^^^^
139+
140+ Algumas consultas podem ficar bastante complicadas, dependendo da quantidade de elementos que compõem a consulta.
141+ Para ajudar na construção e na depuração da *query *, criamos o método ``show `` imprime a query na tela,
142+ mas não a executa.
143+
144+ .. ipython :: python
145+
146+ (ep.query()
147+ .select(ep.Data, ep.Media)
148+ .filter(ep.Data >= datetime(2023 , 1 , 1 ))
149+ .orderby(ep.Media.desc())
150+ .limit(10 )
151+ .show())
152+
153+ Tipos de *endpoints *
154+ ^^^^^^^^^^^^^^^^^^^^
155+
156+ Como foi visto anteriormente, a API do PIX (``SPI ``) possui 4 ``EntitySets `` e estes são os *endpoints * dessa API.
157+ Entretanto, há APIs que têm um outro tipo de *endpoint *, os ``FunctionImports ``.
158+ A API do PTAX, por exemplo
159+
160+ .. ipython :: python
161+
162+ from bcb import PTAX
163+
164+ ptax = PTAX()
165+ ptax.describe()
166+
167+ Esta API tem 1 ``EntitySet `` e 6 ``FunctionImports `` e também utilizamos o método ``describe `` para visualizar a
168+ estrutura destes *endpoints *.
169+ Vamos ver o *endpoint * ``CotacaoMoedaPeriodo ``
170+
171+ .. ipython :: python
172+
173+ ptax.describe(" CotacaoMoedaPeriodo" )
174+
175+ A principal diferença entre os ``FunctionImports `` e ``EntitySets `` é que estes possuem parâmetros.
176+ Neste exemplo o *endpoint * tem 3 parâmetros:
177+
178+ - codigoMoeda <str>
179+ - dataInicial <str>
180+ - dataFinalCotacao <str>
181+
182+ Para conhecer como os parâmetros devem ser definidos é necessário ler a documentação da API.
183+ Eventualmente a definição dos parâmetros não é óbvia.
184+ Por exemplo, neste *endpoint *, os parâmetros ``dataInicialCotacao `` e ``dataFinalCotacao `` são formatados com
185+ mês-dia-ano (formato americano), ao invés de ano-mês-dia (formato ISO), e como o tipo dos parâmetros é ``str ``,
186+ uma formatação incorreta não retorna um erro, apenas retorna um DataFrame vazio.
187+
188+ Vamos realizar uma consulta para obter as cotações de dólar americano entre 2022-01-01 e 2022-01-05.
189+
190+ .. ipython :: python
191+
192+ ep = ptax.get_endpoint(" CotacaoMoedaPeriodo" )
193+ (ep.query()
194+ .parameters(moeda = " USD" ,
195+ dataInicial = " 1/1/2022" ,
196+ dataFinalCotacao = " 1/5/2022" )
197+ .collect())
198+
199+ Note que a primeira data é 2022-01-03, pois os primeiros dias do ano não são úteis.
200+ Podemos aplicar filtros nessa consulta utilizando o método ``filter ``, da mesma forma que realizamos na consulta ao
201+ ``EntitySet ``.
202+
203+ .. ipython :: python
204+
205+ (ep.query()
206+ .parameters(moeda = " USD" ,
207+ dataInicial = " 1/1/2022" ,
208+ dataFinalCotacao = " 1/5/2022" )
209+ .filter(ep.tipoBoletim == " Fechamento" )
210+ .collect())
133211
134212 Aplicações
135213----------
@@ -170,7 +248,7 @@ Inspecionando o *endpoint* ``ExpectativaMercadoMensais``
170248
171249.. ipython :: python
172250
173- em.describe(' ExpectativaMercadoMensais' )
251+ em.describe(" ExpectativaMercadoMensais" )
174252
175253
176254 O *endpoint * ``ExpectativaMercadoMensais `` retorna um conjunto de dados
@@ -203,7 +281,7 @@ Vamos utilizar o *endpoint* ``ExpectativaMercadoMensais`` como exemplo.
203281
204282.. ipython :: python
205283
206- ep = em.get_endpoint(' ExpectativasMercadoTop5Anuais' )
284+ ep = em.get_endpoint(" ExpectativasMercadoTop5Anuais" )
207285
208286 Tendo o objeto com o *endpoint * basta executar a consulta com ``query `` e
209287chamando ``collect `` ao fim para obter os dados.
@@ -232,7 +310,7 @@ Uma consulta mais elaborada com ``filter``.
232310
233311.. ipython :: python
234312
235- ep.query().filter(ep.Indicador == ' IPCA' ).limit(10 ).collect()
313+ ep.query().filter(ep.Indicador == " IPCA" ).limit(10 ).collect()
236314
237315 Note que o *endpoint * tem como atributo ``Indicador `` que é uma
238316das colunas retornadas.
@@ -245,9 +323,9 @@ um conjunto de colunas.
245323.. ipython :: python
246324
247325 (ep.query()
248- .filter(ep.Indicador == ' IPCA' , ep.DataReferencia >= 2023 )
249- .filter(ep.Data >= ' 2022-01-01' )
250- .filter(ep.tipoCalculo == ' C ' )
326+ .filter(ep.Indicador == " IPCA" , ep.DataReferencia >= 2023 )
327+ .filter(ep.Data >= " 2022-01-01" )
328+ .filter(ep.tipoCalculo == " C " )
251329 .select(ep.Data, ep.DataReferencia, ep.Media, ep.Mediana)
252330 .orderby(ep.Data.desc(), ep.DataReferencia.asc())
253331 .limit(10 )
@@ -277,7 +355,7 @@ Executando ``describe`` na função ``CotacaoMoedaPeriodo`` temos:
277355
278356.. ipython :: python
279357
280- ptax.describe(' CotacaoMoedaPeriodo' )
358+ ptax.describe(" CotacaoMoedaPeriodo" )
281359
282360 Vemos que a função recebe três parâmetros: ``moeda ``, ``dataInicial ``,
283361``dataFinalCotacao ``.
@@ -286,10 +364,10 @@ Estes parâmetros são passados para a consulta utilizando o método
286364
287365.. ipython :: python
288366
289- ep = ptax.get_endpoint(' CotacaoMoedaPeriodo' )
367+ ep = ptax.get_endpoint(" CotacaoMoedaPeriodo" )
290368 (ep.query()
291369 .limit(10 )
292- .parameters(moeda = ' USD' , dataInicial = ' 01/01/2022' , dataFinalCotacao = ' 01/10/2022' )
370+ .parameters(moeda = " USD" , dataInicial = " 01/01/2022" , dataFinalCotacao = " 01/10/2022" )
293371 .collect())
294372
295373
@@ -300,8 +378,8 @@ Podemos filtrar apenas pelos dados de abertura.
300378
301379 (ep.query()
302380 .limit(10 )
303- .filter(ep.tipoBoletim == ' Abertura' )
304- .parameters(moeda = ' USD' , dataInicial = ' 01/01/2022' , dataFinalCotacao = ' 01/10/2022' )
381+ .filter(ep.tipoBoletim == " Abertura" )
382+ .parameters(moeda = " USD" , dataInicial = " 01/01/2022" , dataFinalCotacao = " 01/10/2022" )
305383 .collect())
306384
307385
0 commit comments