Skip to content

Commit 12c781c

Browse files
committed
deploy: 566f87a
1 parent 0a180c8 commit 12c781c

5 files changed

Lines changed: 179 additions & 44 deletions

File tree

_sources/odata.rst.txt

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,11 @@ que possui os seguintes métodos.
4747
- :py:meth:`bcb.odata.ODataQuery.collect`
4848
- :py:meth:`bcb.odata.ODataQuery.show`
4949

50-
Aplicação - Expectativas
51-
------------------------
50+
Aplicações
51+
----------
52+
53+
Expectativas
54+
^^^^^^^^^^^^
5255

5356
Vamos ver como isso tudo funciona utilizando a API de expectativas.
5457

@@ -59,7 +62,7 @@ Vamos ver como isso tudo funciona utilizando a API de expectativas.
5962
em.describe()
6063
6164
``EntitySets``
62-
^^^^^^^^^^^^^^
65+
""""""""""""""
6366

6467
Vemos que na API de expectativas tem uma listagem de ``EntitySets``.
6568
``EntitySets`` são *endpoints* que retornam um conjunto de dados toda vez que
@@ -73,7 +76,7 @@ Inspecionando o *endpoint* ``ExpectativaMercadoMensais``
7376
7477
7578
``EntityType``
76-
^^^^^^^^^^^^^^
79+
""""""""""""""
7780

7881
Os dados retornados por um ``EntitySet`` tem um tipo que é o seu ``EntityType``.
7982
Para o *endpoint* ``ExpectativaMercadoMensais`` o tipo retornado é
@@ -149,8 +152,8 @@ um conjunto de colunas.
149152
.limit(10)
150153
.collect())
151154
152-
Aplicação - Moedas
153-
------------------
155+
Moedas
156+
^^^^^^
154157

155158
Uma outra aplicação é com a API de Moedas que implementa a especificação OData.
156159
Utilizando a classe :py:class:`bcb.PTAX` temos:
@@ -163,7 +166,7 @@ Utilizando a classe :py:class:`bcb.PTAX` temos:
163166
164167
165168
``FunctionImports``
166-
^^^^^^^^^^^^^^^^^^^
169+
"""""""""""""""""""
167170

168171
Note que essa API tem um ``EntitySet`` e seis ``FunctionImports``.
169172
A diferença entre eles é que os ``FunctionImports`` são funções
@@ -201,6 +204,34 @@ Podemos filtrar apenas pelos dados de abertura.
201204
.collect())
202205
203206
207+
Classe ODataAPI
208+
^^^^^^^^^^^^^^^
209+
210+
.. currentmodule:: bcb
211+
212+
.. autoclass:: ODataAPI
213+
:inherited-members:
214+
215+
O portal de Dados Abertos to Banco Central apresenta diversas APIs OData, são
216+
dezenas de APIs disponíveis.
217+
A URL com metadados de cada API pode ser obtida no portal.
218+
A classe ``ODataAPI`` permite acessar qualquer API Odata de posse da sua URL.
219+
220+
Por exemplo, a API de estatísticas de operações registradas no Selic tem a seguinte URL::
221+
222+
https://olinda.bcb.gov.br/olinda/servico/selic_operacoes/versao/v1/odata/
223+
224+
que pode ser obtida no portal de dados abertos no `link <https://dadosabertos.bcb.gov.br/dataset/estatisticas-selic-operacoes>`_.
225+
226+
Essa API pode ser diretamente acessada através da classe ``ODataAPI``.
227+
228+
.. ipython:: python
229+
230+
from bcb import ODataAPI
231+
url = "https://olinda.bcb.gov.br/olinda/servico/selic_operacoes/versao/v1/odata/"
232+
service = ODataAPI(url)
233+
service.describe()
234+
204235
Conclusão
205236
---------
206237

genindex.html

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,7 @@ <h1 id="index">Índice</h1>
348348
| <a href="#E"><strong>E</strong></a>
349349
| <a href="#G"><strong>G</strong></a>
350350
| <a href="#M"><strong>M</strong></a>
351+
| <a href="#O"><strong>O</strong></a>
351352
| <a href="#P"><strong>P</strong></a>
352353
| <a href="#T"><strong>T</strong></a>
353354

@@ -371,6 +372,8 @@ <h2 id="D">D</h2>
371372
<li><a href="expectativas.html#bcb.Expectativas.describe">describe() (método bcb.Expectativas)</a>
372373

373374
<ul>
375+
<li><a href="odata.html#bcb.ODataAPI.describe">(método bcb.ODataAPI)</a>
376+
</li>
374377
<li><a href="taxajuros.html#bcb.TaxaJuros.describe">(método bcb.TaxaJuros)</a>
375378
</li>
376379
</ul></li>
@@ -394,13 +397,15 @@ <h2 id="G">G</h2>
394397
<li><a href="sgs.html#bcb.sgs.get">(no módulo bcb.sgs)</a>
395398
</li>
396399
</ul></li>
397-
</ul></td>
398-
<td style="width: 33%; vertical-align: top;"><ul>
399400
<li><a href="currency.html#bcb.currency.get_currency_list">get_currency_list() (no módulo bcb.currency)</a>
400401
</li>
402+
</ul></td>
403+
<td style="width: 33%; vertical-align: top;"><ul>
401404
<li><a href="expectativas.html#bcb.Expectativas.get_endpoint">get_endpoint() (método bcb.Expectativas)</a>
402405

403406
<ul>
407+
<li><a href="odata.html#bcb.ODataAPI.get_endpoint">(método bcb.ODataAPI)</a>
408+
</li>
404409
<li><a href="taxajuros.html#bcb.TaxaJuros.get_endpoint">(método bcb.TaxaJuros)</a>
405410
</li>
406411
</ul></li>
@@ -420,6 +425,14 @@ <h2 id="M">M</h2>
420425
</ul></td>
421426
</tr></table>
422427

428+
<h2 id="O">O</h2>
429+
<table style="width: 100%" class="indextable genindextable"><tr>
430+
<td style="width: 33%; vertical-align: top;"><ul>
431+
<li><a href="odata.html#bcb.ODataAPI">ODataAPI (classe em bcb)</a>
432+
</li>
433+
</ul></td>
434+
</tr></table>
435+
423436
<h2 id="P">P</h2>
424437
<table style="width: 100%" class="indextable genindextable"><tr>
425438
<td style="width: 33%; vertical-align: top;"><ul>

objects.inv

20 Bytes
Binary file not shown.

odata.html

Lines changed: 125 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -387,8 +387,10 @@ <h2><code class="xref py py-class docutils literal notranslate"><span class="pre
387387
<li><p><code class="xref py py-meth docutils literal notranslate"><span class="pre">bcb.odata.ODataQuery.show()</span></code></p></li>
388388
</ul>
389389
</section>
390-
<section id="aplicacao-expectativas">
391-
<h2>Aplicação - Expectativas<a class="headerlink" href="#aplicacao-expectativas" title="Link permanente para este cabeçalho">#</a></h2>
390+
<section id="aplicacoes">
391+
<h2>Aplicações<a class="headerlink" href="#aplicacoes" title="Link permanente para este cabeçalho">#</a></h2>
392+
<section id="expectativas">
393+
<h3>Expectativas<a class="headerlink" href="#expectativas" title="Link permanente para este cabeçalho">#</a></h3>
392394
<p>Vamos ver como isso tudo funciona utilizando a API de expectativas.</p>
393395
<div class="highlight-ipython notranslate"><div class="highlight"><pre><span></span><span class="gp">In [1]: </span><span class="kn">from</span> <span class="nn">bcb</span> <span class="kn">import</span> <span class="n">Expectativas</span>
394396

@@ -408,7 +410,7 @@ <h2>Aplicação - Expectativas<a class="headerlink" href="#aplicacao-expectativa
408410
</pre></div>
409411
</div>
410412
<section id="entitysets">
411-
<h3><code class="docutils literal notranslate"><span class="pre">EntitySets</span></code><a class="headerlink" href="#entitysets" title="Link permanente para este cabeçalho">#</a></h3>
413+
<h4><code class="docutils literal notranslate"><span class="pre">EntitySets</span></code><a class="headerlink" href="#entitysets" title="Link permanente para este cabeçalho">#</a></h4>
412414
<p>Vemos que na API de expectativas tem uma listagem de <code class="docutils literal notranslate"><span class="pre">EntitySets</span></code>.
413415
<code class="docutils literal notranslate"><span class="pre">EntitySets</span></code> são <em>endpoints</em> que retornam um conjunto de dados toda vez que
414416
são chamados.</p>
@@ -422,7 +424,7 @@ <h3><code class="docutils literal notranslate"><span class="pre">EntitySets</spa
422424
</div>
423425
</section>
424426
<section id="entitytype">
425-
<h3><code class="docutils literal notranslate"><span class="pre">EntityType</span></code><a class="headerlink" href="#entitytype" title="Link permanente para este cabeçalho">#</a></h3>
427+
<h4><code class="docutils literal notranslate"><span class="pre">EntityType</span></code><a class="headerlink" href="#entitytype" title="Link permanente para este cabeçalho">#</a></h4>
426428
<p>Os dados retornados por um <code class="docutils literal notranslate"><span class="pre">EntitySet</span></code> tem um tipo que é o seu <code class="docutils literal notranslate"><span class="pre">EntityType</span></code>.
427429
Para o <em>endpoint</em> <code class="docutils literal notranslate"><span class="pre">ExpectativaMercadoMensais</span></code> o tipo retornado é
428430
<code class="docutils literal notranslate"><span class="pre">br.gov.bcb.olinda.servico.Expectativas.ExpectativaMercadoMensal</span></code> que retorna as
@@ -532,8 +534,8 @@ <h3><code class="docutils literal notranslate"><span class="pre">EntityType</spa
532534
</div>
533535
</section>
534536
</section>
535-
<section id="aplicacao-moedas">
536-
<h2>Aplicação - Moedas<a class="headerlink" href="#aplicacao-moedas" title="Link permanente para este cabeçalho">#</a></h2>
537+
<section id="moedas">
538+
<h3>Moedas<a class="headerlink" href="#moedas" title="Link permanente para este cabeçalho">#</a></h3>
537539
<p>Uma outra aplicação é com a API de Moedas que implementa a especificação OData.
538540
Utilizando a classe <a class="reference internal" href="currency.html#bcb.PTAX" title="bcb.PTAX"><code class="xref py py-class docutils literal notranslate"><span class="pre">bcb.PTAX</span></code></a> temos:</p>
539541
<div class="highlight-ipython notranslate"><div class="highlight"><pre><span></span><span class="gp">In [10]: </span><span class="kn">from</span> <span class="nn">bcb</span> <span class="kn">import</span> <span class="n">PTAX</span>
@@ -553,7 +555,7 @@ <h2>Aplicação - Moedas<a class="headerlink" href="#aplicacao-moedas" title="Li
553555
</pre></div>
554556
</div>
555557
<section id="functionimports">
556-
<h3><code class="docutils literal notranslate"><span class="pre">FunctionImports</span></code><a class="headerlink" href="#functionimports" title="Link permanente para este cabeçalho">#</a></h3>
558+
<h4><code class="docutils literal notranslate"><span class="pre">FunctionImports</span></code><a class="headerlink" href="#functionimports" title="Link permanente para este cabeçalho">#</a></h4>
557559
<p>Note que essa API tem um <code class="docutils literal notranslate"><span class="pre">EntitySet</span></code> e seis <code class="docutils literal notranslate"><span class="pre">FunctionImports</span></code>.
558560
A diferença entre eles é que os <code class="docutils literal notranslate"><span class="pre">FunctionImports</span></code> são funções
559561
e como funções recebem parâmetros que na maioria das vezes não são opicionais.</p>
@@ -616,6 +618,83 @@ <h3><code class="docutils literal notranslate"><span class="pre">FunctionImports
616618
</div>
617619
</section>
618620
</section>
621+
<section id="classe-odataapi">
622+
<h3>Classe ODataAPI<a class="headerlink" href="#classe-odataapi" title="Link permanente para este cabeçalho">#</a></h3>
623+
<dl class="py class">
624+
<dt class="sig sig-object py" id="bcb.ODataAPI">
625+
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">bcb.</span></span><span class="sig-name descname"><span class="pre">ODataAPI</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">url</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bcb.ODataAPI" title="Link permanente para esta definição">#</a></dt>
626+
<dd><p>Classe que abstrai qualquer API OData</p>
627+
<p>Essa classe pode ser acessada diretamente passando
628+
uma URL válida para uma API OData.</p>
629+
<p>Uma boa alternativa para acessar APIs que ainda
630+
não possuem implementação específica.</p>
631+
<dl class="py method">
632+
<dt class="sig sig-object py" id="bcb.ODataAPI.describe">
633+
<span class="sig-name descname"><span class="pre">describe</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">endpoint</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bcb.ODataAPI.describe" title="Link permanente para esta definição">#</a></dt>
634+
<dd><p>Mostra a descrição de uma API ou de um <em>endpoint</em>
635+
específico.</p>
636+
<dl class="field-list simple">
637+
<dt class="field-odd">Parâmetros<span class="colon">:</span></dt>
638+
<dd class="field-odd"><p><strong>endpoint</strong> (<em>None</em><em> (</em><em>padrão</em><em>) </em><em>ou str</em>) – nome do <em>endpoint</em></p>
639+
</dd>
640+
<dt class="field-even">Retorna<span class="colon">:</span></dt>
641+
<dd class="field-even"><p><ul class="simple">
642+
<li><p><em>Não retorna variável e imprime na tela uma descrição da API</em></p></li>
643+
<li><p><em>ou do *endpoint</em>.*</p></li>
644+
</ul>
645+
</p>
646+
</dd>
647+
</dl>
648+
</dd></dl>
649+
650+
<dl class="py method">
651+
<dt class="sig sig-object py" id="bcb.ODataAPI.get_endpoint">
652+
<span class="sig-name descname"><span class="pre">get_endpoint</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">endpoint</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#bcb.ODataAPI.get_endpoint" title="Link permanente para esta definição">#</a></dt>
653+
<dd><p>Obtem o <em>endpoint</em></p>
654+
<dl class="field-list simple">
655+
<dt class="field-odd">Parâmetros<span class="colon">:</span></dt>
656+
<dd class="field-odd"><p><strong>endpoint</strong> (<em>str</em>) – nome do endpoint</p>
657+
</dd>
658+
<dt class="field-even">Retorna<span class="colon">:</span></dt>
659+
<dd class="field-even"><p>Retorna o <em>endpoint</em> referente ao nome fornecido</p>
660+
</dd>
661+
<dt class="field-odd">Tipo de retorno<span class="colon">:</span></dt>
662+
<dd class="field-odd"><p>bcb.Endpoint</p>
663+
</dd>
664+
<dt class="field-even">Levanta<span class="colon">:</span></dt>
665+
<dd class="field-even"><p><strong>ValueError</strong> – Se o <em>endpoint</em> fornecido é errado.</p>
666+
</dd>
667+
</dl>
668+
</dd></dl>
669+
670+
</dd></dl>
671+
672+
<p>O portal de Dados Abertos to Banco Central apresenta diversas APIs OData, são
673+
dezenas de APIs disponíveis.
674+
A URL com metadados de cada API pode ser obtida no portal.
675+
A classe <code class="docutils literal notranslate"><span class="pre">ODataAPI</span></code> permite acessar qualquer API Odata de posse da sua URL.</p>
676+
<p>Por exemplo, a API de estatísticas de operações registradas no Selic tem a seguinte URL:</p>
677+
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">https</span><span class="p">:</span><span class="o">//</span><span class="n">olinda</span><span class="o">.</span><span class="n">bcb</span><span class="o">.</span><span class="n">gov</span><span class="o">.</span><span class="n">br</span><span class="o">/</span><span class="n">olinda</span><span class="o">/</span><span class="n">servico</span><span class="o">/</span><span class="n">selic_operacoes</span><span class="o">/</span><span class="n">versao</span><span class="o">/</span><span class="n">v1</span><span class="o">/</span><span class="n">odata</span><span class="o">/</span>
678+
</pre></div>
679+
</div>
680+
<p>que pode ser obtida no portal de dados abertos no <a class="reference external" href="https://dadosabertos.bcb.gov.br/dataset/estatisticas-selic-operacoes">link</a>.</p>
681+
<p>Essa API pode ser diretamente acessada através da classe <code class="docutils literal notranslate"><span class="pre">ODataAPI</span></code>.</p>
682+
<div class="highlight-ipython notranslate"><div class="highlight"><pre><span></span><span class="gp">In [17]: </span><span class="kn">from</span> <span class="nn">bcb</span> <span class="kn">import</span> <span class="n">ODataAPI</span>
683+
684+
<span class="gp">In [18]: </span><span class="n">url</span> <span class="o">=</span> <span class="s2">&quot;https://olinda.bcb.gov.br/olinda/servico/selic_operacoes/versao/v1/odata/&quot;</span>
685+
686+
<span class="gp">In [19]: </span><span class="n">service</span> <span class="o">=</span> <span class="n">ODataAPI</span><span class="p">(</span><span class="n">url</span><span class="p">)</span>
687+
688+
<span class="gp">In [20]: </span><span class="n">service</span><span class="o">.</span><span class="n">describe</span><span class="p">()</span>
689+
<span class="go">EntitySets:</span>
690+
<span class="go"> DatasOperacoesSelic</span>
691+
<span class="go">FunctionImports:</span>
692+
<span class="go"> OperacoesEmUmAno</span>
693+
<span class="go"> OperacoesEmUmaData</span>
694+
</pre></div>
695+
</div>
696+
</section>
697+
</section>
619698
<section id="conclusao">
620699
<h2>Conclusão<a class="headerlink" href="#conclusao" title="Link permanente para este cabeçalho">#</a></h2>
621700
<p>Esta estrutura se aplica a todas as classes que fazem interface com APIs
@@ -698,42 +777,54 @@ <h2>Conclusão<a class="headerlink" href="#conclusao" title="Link permanente par
698777
</a>
699778
</li>
700779
<li class="toc-h2 nav-item toc-entry">
701-
<a class="reference internal nav-link" href="#aplicacao-expectativas">
702-
Aplicação - Expectativas
780+
<a class="reference internal nav-link" href="#aplicacoes">
781+
Aplicações
703782
</a>
704783
<ul class="nav section-nav flex-column">
705784
<li class="toc-h3 nav-item toc-entry">
706-
<a class="reference internal nav-link" href="#entitysets">
707-
<code class="docutils literal notranslate">
708-
<span class="pre">
709-
EntitySets
710-
</span>
711-
</code>
785+
<a class="reference internal nav-link" href="#expectativas">
786+
Expectativas
712787
</a>
788+
<ul class="nav section-nav flex-column">
789+
<li class="toc-h4 nav-item toc-entry">
790+
<a class="reference internal nav-link" href="#entitysets">
791+
<code class="docutils literal notranslate">
792+
<span class="pre">
793+
EntitySets
794+
</span>
795+
</code>
796+
</a>
797+
</li>
798+
<li class="toc-h4 nav-item toc-entry">
799+
<a class="reference internal nav-link" href="#entitytype">
800+
<code class="docutils literal notranslate">
801+
<span class="pre">
802+
EntityType
803+
</span>
804+
</code>
805+
</a>
806+
</li>
807+
</ul>
713808
</li>
714809
<li class="toc-h3 nav-item toc-entry">
715-
<a class="reference internal nav-link" href="#entitytype">
716-
<code class="docutils literal notranslate">
717-
<span class="pre">
718-
EntityType
719-
</span>
720-
</code>
810+
<a class="reference internal nav-link" href="#moedas">
811+
Moedas
721812
</a>
813+
<ul class="nav section-nav flex-column">
814+
<li class="toc-h4 nav-item toc-entry">
815+
<a class="reference internal nav-link" href="#functionimports">
816+
<code class="docutils literal notranslate">
817+
<span class="pre">
818+
FunctionImports
819+
</span>
820+
</code>
821+
</a>
822+
</li>
823+
</ul>
722824
</li>
723-
</ul>
724-
</li>
725-
<li class="toc-h2 nav-item toc-entry">
726-
<a class="reference internal nav-link" href="#aplicacao-moedas">
727-
Aplicação - Moedas
728-
</a>
729-
<ul class="nav section-nav flex-column">
730825
<li class="toc-h3 nav-item toc-entry">
731-
<a class="reference internal nav-link" href="#functionimports">
732-
<code class="docutils literal notranslate">
733-
<span class="pre">
734-
FunctionImports
735-
</span>
736-
</code>
826+
<a class="reference internal nav-link" href="#classe-odataapi">
827+
Classe ODataAPI
737828
</a>
738829
</li>
739830
</ul>

0 commit comments

Comments
 (0)