brasilapi 0.7.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +4 -5
- data/.yardopts +5 -0
- data/CHANGELOG.md +97 -0
- data/Gemfile +5 -2
- data/Gemfile.lock +67 -56
- data/README.md +357 -121
- data/Rakefile +18 -1
- data/lib/brasil_api/address.rb +38 -0
- data/lib/brasil_api/b3.rb +49 -0
- data/lib/brasil_api/bank.rb +31 -0
- data/lib/brasil_api/base.rb +214 -20
- data/lib/brasil_api/business_days.rb +44 -0
- data/lib/brasil_api/cambio.rb +47 -0
- data/lib/brasil_api/cid10.rb +46 -0
- data/lib/brasil_api/company.rb +20 -0
- data/lib/brasil_api/configuration.rb +52 -0
- data/lib/brasil_api/cpf.rb +36 -0
- data/lib/brasil_api/cptec.rb +84 -0
- data/lib/brasil_api/cvm.rb +76 -2
- data/lib/brasil_api/ddd.rb +67 -0
- data/lib/brasil_api/error.rb +51 -0
- data/lib/brasil_api/fipe.rb +111 -6
- data/lib/brasil_api/geolocation.rb +35 -0
- data/lib/brasil_api/holiday.rb +25 -2
- data/lib/brasil_api/hospital.rb +157 -0
- data/lib/brasil_api/ibge.rb +164 -0
- data/lib/brasil_api/ibpt.rb +106 -0
- data/lib/brasil_api/igpm.rb +66 -0
- data/lib/brasil_api/isbn.rb +25 -0
- data/lib/brasil_api/ncm.rb +43 -0
- data/lib/brasil_api/pix.rb +19 -0
- data/lib/brasil_api/registrobr.rb +20 -0
- data/lib/brasil_api/solar.rb +33 -0
- data/lib/brasil_api/status.rb +30 -0
- data/lib/brasil_api/taxas.rb +31 -0
- data/lib/brasil_api/tuss.rb +121 -0
- data/lib/brasil_api/version.rb +7 -1
- data/lib/brasil_api.rb +25 -5
- metadata +24 -7
- data/brasilapi.gemspec +0 -42
data/README.md
CHANGED
|
@@ -3,157 +3,393 @@
|
|
|
3
3
|
|
|
4
4
|
</div>
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
##
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
6
|
+
Gem em Ruby, sem dependências de runtime, para consultar a [BrasilAPI](https://brasilapi.com.br).
|
|
7
|
+
|
|
8
|
+
## Funcionalidades
|
|
9
|
+
|
|
10
|
+
- [x] **Bancos**
|
|
11
|
+
- [x] **CEP** (v1 e v2)
|
|
12
|
+
- [x] **CNPJ**
|
|
13
|
+
- [x] **CPF**
|
|
14
|
+
- [x] **Corretoras da CVM** e **fundos**
|
|
15
|
+
- [x] **CPTEC** (cidades, clima e ondas)
|
|
16
|
+
- [x] **DDD** (lista, v1, v2 e por UF)
|
|
17
|
+
- [x] **Feriados** nacionais e estaduais
|
|
18
|
+
- [x] **FIPE**
|
|
19
|
+
- [x] **IBGE** (UFs, municípios, regiões e CNAE)
|
|
20
|
+
- [x] **ISBN**
|
|
21
|
+
- [x] **NCM**
|
|
22
|
+
- [x] **PIX**
|
|
23
|
+
- [x] **Registro.br**
|
|
24
|
+
- [x] **Taxas**
|
|
25
|
+
- [x] **Câmbio**
|
|
26
|
+
- [x] **Dias úteis**
|
|
27
|
+
- [x] **Geolocalização**
|
|
28
|
+
- [x] **Hospitais**
|
|
29
|
+
- [x] **IBPT**
|
|
30
|
+
- [x] **IGP-M**
|
|
31
|
+
- [x] **CID-10**
|
|
32
|
+
- [x] **Incidência solar**
|
|
33
|
+
- [x] **Status**
|
|
34
|
+
- [x] **Tickers da B3**
|
|
35
|
+
- [x] **TUSS**
|
|
36
|
+
|
|
37
|
+
CEP v3, previsão semanal do CPTEC por coordenadas, eleições e universidades ficam de fora enquanto a BrasilAPI não responder com sucesso nessas rotas.
|
|
38
|
+
|
|
39
|
+
## Instalação
|
|
40
|
+
|
|
41
|
+
Adicione a gem ao Gemfile da aplicação:
|
|
27
42
|
|
|
28
43
|
$ bundle add brasilapi
|
|
29
44
|
|
|
30
|
-
|
|
45
|
+
Sem Bundler:
|
|
31
46
|
|
|
32
47
|
$ gem install brasilapi
|
|
33
48
|
|
|
34
|
-
##
|
|
49
|
+
## Documentação
|
|
50
|
+
|
|
51
|
+
A referência da gem, gerada com YARD, fica em [rubydoc.info/gems/brasilapi](https://rubydoc.info/gems/brasilapi) depois da publicação.
|
|
52
|
+
|
|
53
|
+
Para navegar nela na máquina local:
|
|
54
|
+
|
|
55
|
+
$ bundle exec yard server
|
|
56
|
+
|
|
57
|
+
O servidor sobe em [http://localhost:8808](http://localhost:8808). O Ruby 3.3 não inclui mais o Webrick, então ele entra como dependência de desenvolvimento. `bundle exec rake yard` só gera os arquivos em `doc/`.
|
|
58
|
+
|
|
59
|
+
## Configuração
|
|
60
|
+
|
|
61
|
+
O tempo limite padrão é de 10 segundos (`open_timeout` e `read_timeout`):
|
|
35
62
|
|
|
36
63
|
```ruby
|
|
37
|
-
|
|
64
|
+
BrasilAPI.configure do |config|
|
|
65
|
+
config.timeout = 30
|
|
66
|
+
end
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
`Net::OpenTimeout` e `Net::ReadTimeout` sobem como `BrasilAPI::Timeout`. Falhas HTTP são `BrasilAPI::Error` (ou uma subclasse: `NotFound`, `BadRequest` e `ServerError`) e expõem `status`, `message`, `type` e `body`.
|
|
38
70
|
|
|
39
|
-
|
|
71
|
+
```ruby
|
|
72
|
+
begin
|
|
73
|
+
BrasilAPI::Bank.find_by_code(0)
|
|
74
|
+
rescue BrasilAPI::NotFound => e
|
|
75
|
+
e.status # 404
|
|
76
|
+
e.message
|
|
77
|
+
e.type
|
|
78
|
+
rescue BrasilAPI::Error => e
|
|
79
|
+
e.status
|
|
80
|
+
end
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Uso
|
|
84
|
+
|
|
85
|
+
```ruby
|
|
86
|
+
require "brasilapi"
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Bancos
|
|
90
|
+
|
|
91
|
+
```ruby
|
|
92
|
+
# lista os bancos
|
|
40
93
|
BrasilAPI::Bank.all
|
|
41
|
-
=>
|
|
42
|
-
[{"ispb"=>"00000000", "name"=>"BCO DO BRASIL S.A.", "code"=>1, "fullName"=>"Banco do Brasil S.A."},
|
|
43
|
-
{"ispb"=>"00000208", "name"=>"BRB - BCO DE BRASILIA S.A.", "code"=>70, "fullName"=>"BRB - BANCO DE BRASILIA S.A."},
|
|
44
|
-
...]
|
|
45
94
|
|
|
46
|
-
#
|
|
95
|
+
# busca um banco pelo código
|
|
47
96
|
BrasilAPI::Bank.find_by_code(77)
|
|
48
|
-
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### CNPJ
|
|
49
100
|
|
|
50
|
-
|
|
101
|
+
```ruby
|
|
102
|
+
# busca uma empresa pelo CNPJ
|
|
51
103
|
BrasilAPI::Company.find_by_cnpj("60316817000103")
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
#
|
|
72
|
-
BrasilAPI::Address.
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### CPF
|
|
107
|
+
|
|
108
|
+
A rota devolve só validade e região fiscal, sem nome. O CPF pode ir com ou sem pontuação.
|
|
109
|
+
|
|
110
|
+
```ruby
|
|
111
|
+
BrasilAPI::CPF.find("000.000.000-00")
|
|
112
|
+
# => {"isValid"=>false}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### CEP
|
|
116
|
+
|
|
117
|
+
`location: true` continua sendo o atalho da v2.
|
|
118
|
+
|
|
119
|
+
```ruby
|
|
120
|
+
# CEP na v1
|
|
121
|
+
BrasilAPI::Address.find_by_zip_code("64001100")
|
|
122
|
+
|
|
123
|
+
# CEP na v2, com coordenadas
|
|
124
|
+
BrasilAPI::Address.find_by_zip_code("80060000", location: true)
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### DDD
|
|
128
|
+
|
|
129
|
+
`Address.state_and_cities_by_area_code` permanece como atalho da v1.
|
|
130
|
+
|
|
131
|
+
```ruby
|
|
132
|
+
# cada estado e seus DDDs
|
|
133
|
+
BrasilAPI::DDD.all
|
|
134
|
+
|
|
135
|
+
# v2: lista de estados e cidades (DDDs que cobrem mais de um estado)
|
|
136
|
+
BrasilAPI::DDD.find("11")
|
|
137
|
+
|
|
138
|
+
# v1: um estado e as cidades
|
|
139
|
+
BrasilAPI::DDD.find("86", version: 1)
|
|
140
|
+
BrasilAPI::Address.state_and_cities_by_area_code("86")
|
|
141
|
+
|
|
142
|
+
# DDDs de uma UF
|
|
143
|
+
BrasilAPI::DDD.by_state("SP")
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### CVM
|
|
147
|
+
|
|
148
|
+
```ruby
|
|
149
|
+
# corretoras; uf só é enviado quando state é informado
|
|
82
150
|
BrasilAPI::CVM.all
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
#
|
|
89
|
-
BrasilAPI::CVM.
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
151
|
+
BrasilAPI::CVM.all(state: "SP")
|
|
152
|
+
|
|
153
|
+
# busca a corretora da CVM pelo CNPJ
|
|
154
|
+
BrasilAPI::CVM.find_by_cnpj("74014747000135")
|
|
155
|
+
|
|
156
|
+
# fundos de investimento
|
|
157
|
+
BrasilAPI::CVM::Fund.all(page: 1, size: 1)
|
|
158
|
+
BrasilAPI::CVM::Fund.find_by_cnpj("00.000.684/0001-21")
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### Feriados
|
|
162
|
+
|
|
163
|
+
```ruby
|
|
164
|
+
# feriados nacionais; uf não é enviado
|
|
96
165
|
BrasilAPI::Holiday.by_year(2024)
|
|
97
|
-
=>
|
|
98
|
-
[{"date"=>"2024-01-01", "name"=>"Confraternização mundial", "type"=>"national"},
|
|
99
|
-
...
|
|
100
|
-
{"date"=>"2024-12-25", "name"=>"Natal", "type"=>"national"}]
|
|
101
166
|
|
|
102
|
-
#
|
|
167
|
+
# inclui os feriados estaduais
|
|
168
|
+
BrasilAPI::Holiday.by_year(2024, state: "SP")
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### IBGE
|
|
172
|
+
|
|
173
|
+
Providers aceitos em `cities_by_state`: os mesmos da BrasilAPI, por exemplo `dados-abertos-br`, `gov` e `wikipedia`.
|
|
174
|
+
|
|
175
|
+
```ruby
|
|
103
176
|
BrasilAPI::IBGE.states
|
|
104
|
-
|
|
105
|
-
[{"id"=>11,
|
|
106
|
-
"sigla"=>"RO"
|
|
107
|
-
"nome"=>"Rondônia",
|
|
108
|
-
"regiao"=>{"id"=>1, "sigla"=>"N", "nome"=>"Norte"}},
|
|
109
|
-
...
|
|
110
|
-
{"id"=>53,
|
|
111
|
-
"sigla"=>"DF",
|
|
112
|
-
"nome"=>"Distrito Federal",
|
|
113
|
-
"regiao"=>{"id"=>5, "sigla"=>"CO", "nome"=>"Centro-Oeste"}}]
|
|
114
|
-
|
|
115
|
-
# find state by abbreviation from ibge
|
|
116
|
-
BrasilAPI::IBGE.find_state_by_code('PI')
|
|
117
|
-
=>
|
|
118
|
-
{"id"=>22,
|
|
119
|
-
"sigla"=>"PI",
|
|
120
|
-
"nome"=>"Piauí",
|
|
121
|
-
"regiao"=>{"id"=>2, "sigla"=>"NE", "nome"=>"Nordeste"}}
|
|
122
|
-
|
|
123
|
-
# find state by code from ibge
|
|
177
|
+
BrasilAPI::IBGE.find_state_by_code("PI")
|
|
124
178
|
BrasilAPI::IBGE.find_state_by_code(53)
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
179
|
+
BrasilAPI::IBGE.cities_by_state("CE")
|
|
180
|
+
BrasilAPI::IBGE.cities_by_state("PI", providers: ["gov"])
|
|
181
|
+
|
|
182
|
+
BrasilAPI::IBGE.regions
|
|
183
|
+
BrasilAPI::IBGE.find_region_by_code(1)
|
|
184
|
+
BrasilAPI::IBGE.states_by_region(1)
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### CNAE
|
|
188
|
+
|
|
189
|
+
```ruby
|
|
190
|
+
BrasilAPI::IBGE::CNAE.classes
|
|
191
|
+
BrasilAPI::IBGE::CNAE.find_class("01113")
|
|
192
|
+
BrasilAPI::IBGE::CNAE.find_division("01")
|
|
193
|
+
BrasilAPI::IBGE::CNAE.find_group("011")
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### CPTEC
|
|
197
|
+
|
|
198
|
+
`city_weather` e `ocean_forecast` aceitam até 6 dias com precisão garantida pela BrasilAPI.
|
|
199
|
+
|
|
200
|
+
```ruby
|
|
201
|
+
BrasilAPI::CPTEC.all
|
|
202
|
+
BrasilAPI::CPTEC.search_location("São Francisco")
|
|
203
|
+
BrasilAPI::CPTEC.capital_weather
|
|
204
|
+
BrasilAPI::CPTEC.airport_weather("SBGR")
|
|
205
|
+
BrasilAPI::CPTEC.city_weather(4801)
|
|
206
|
+
BrasilAPI::CPTEC.city_weather(4801, 6)
|
|
207
|
+
BrasilAPI::CPTEC.ocean_forecast(4701)
|
|
208
|
+
BrasilAPI::CPTEC.ocean_forecast(4701, 6)
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### FIPE
|
|
212
|
+
|
|
213
|
+
`reference_table` é opcional. Quando fica `nil`, a gem não envia `tabela_referencia`. Sem `vehicle_type`, `vehicle_brands` lista as marcas de todos os tipos.
|
|
214
|
+
|
|
215
|
+
```ruby
|
|
216
|
+
BrasilAPI::FIPE.vehicle_brands
|
|
217
|
+
BrasilAPI::FIPE.vehicle_brands("carros")
|
|
218
|
+
BrasilAPI::FIPE.vehicle_brands("carros", 290)
|
|
219
|
+
BrasilAPI::FIPE.list_vehicles("carros", 59)
|
|
220
|
+
BrasilAPI::FIPE.vehicle_years("carros", 59, 5585)
|
|
221
|
+
BrasilAPI::FIPE.vehicle_details("carros", 59, 5585, "2013-3")
|
|
222
|
+
BrasilAPI::FIPE.vehicle_price("005329-5")
|
|
223
|
+
BrasilAPI::FIPE.fipe_tables
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### ISBN
|
|
227
|
+
|
|
228
|
+
Providers aceitos: `cbl`, `mercado-editorial`, `open-library` e `google-books`.
|
|
229
|
+
|
|
230
|
+
```ruby
|
|
231
|
+
BrasilAPI::ISBN.search("9788545702870")
|
|
232
|
+
BrasilAPI::ISBN.search("9788545702870", providers: ["open-library"])
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### NCM
|
|
236
|
+
|
|
237
|
+
```ruby
|
|
238
|
+
BrasilAPI::NCM.all
|
|
239
|
+
BrasilAPI::NCM.search("cafe")
|
|
240
|
+
BrasilAPI::NCM.find_by_code("01012100")
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### PIX
|
|
130
244
|
|
|
131
|
-
|
|
132
|
-
BrasilAPI::
|
|
133
|
-
=>
|
|
134
|
-
[{"nome"=>"ABAIARA", "codigo_ibge"=>"2300101"},
|
|
135
|
-
...
|
|
136
|
-
{"nome"=>"VÁRZEA ALEGRE", "codigo_ibge"=>"2314003"},
|
|
137
|
-
{"nome"=>"VIÇOSA DO CEARÁ", "codigo_ibge"=>"2314102"}]
|
|
245
|
+
```ruby
|
|
246
|
+
BrasilAPI::PIX.all
|
|
138
247
|
```
|
|
139
248
|
|
|
249
|
+
### Registro.br
|
|
250
|
+
|
|
251
|
+
```ruby
|
|
252
|
+
BrasilAPI::RegistroBR.whois("google.com.br")
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### Taxas
|
|
256
|
+
|
|
257
|
+
```ruby
|
|
258
|
+
BrasilAPI::Taxas.all
|
|
259
|
+
BrasilAPI::Taxas.find_by_name("selic")
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
### Câmbio
|
|
263
|
+
|
|
264
|
+
`quote` aceita `Date` ou `String` no formato `YYYY-MM-DD`.
|
|
265
|
+
|
|
266
|
+
```ruby
|
|
267
|
+
BrasilAPI::Cambio.currencies
|
|
268
|
+
BrasilAPI::Cambio.quote("USD", Date.new(2024, 1, 15))
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
### Dias úteis
|
|
272
|
+
|
|
273
|
+
`between` aceita `Date` ou `String`. `include_national_holidays: false` faz o dia útil incluir feriados nacionais. Sem o argumento, a BrasilAPI exclui esses feriados.
|
|
274
|
+
|
|
275
|
+
```ruby
|
|
276
|
+
BrasilAPI::BusinessDays.between("2024-01-01", "2024-01-10")
|
|
277
|
+
BrasilAPI::BusinessDays.between(Date.new(2024, 1, 1), Date.new(2024, 1, 10), include_national_holidays: false)
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### Geolocalização
|
|
281
|
+
|
|
282
|
+
```ruby
|
|
283
|
+
BrasilAPI::Geolocation.reverse(-23.55, -46.63)
|
|
284
|
+
BrasilAPI::Geolocation.reverse(-23.55, -46.63, language: "en")
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
### Hospitais
|
|
288
|
+
|
|
289
|
+
Filtros de `all`: `vertical`, `state`, `city`, `service`, `query`, `limit`, `offset`.
|
|
290
|
+
|
|
291
|
+
`nearby` aceita `zip_code`, ou `latitude` e `longitude`, ou `city` e `state`, além de `radius`, `vertical`, `service`, `limit` e `offset`.
|
|
292
|
+
|
|
293
|
+
```ruby
|
|
294
|
+
BrasilAPI::Hospital.all(state: "PI", limit: 1)
|
|
295
|
+
BrasilAPI::Hospital.nearby(zip_code: "64001100", limit: 1)
|
|
296
|
+
BrasilAPI::Hospital.nearby(latitude: -5.09, longitude: -42.8, radius: 10, limit: 1)
|
|
297
|
+
BrasilAPI::Hospital.options
|
|
298
|
+
BrasilAPI::Hospital.ciatox(state: "SP")
|
|
299
|
+
BrasilAPI::Hospital.find_by_cnes("2726998")
|
|
300
|
+
BrasilAPI::Hospital.states
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### IBPT
|
|
304
|
+
|
|
305
|
+
`exception` corresponde ao query param `ex`. Sem `code`, a chamada devolve a tabela inteira da UF.
|
|
306
|
+
|
|
307
|
+
```ruby
|
|
308
|
+
BrasilAPI::IBPT.version
|
|
309
|
+
BrasilAPI::IBPT.ncm("SP")
|
|
310
|
+
BrasilAPI::IBPT.ncm("SP", "01012100")
|
|
311
|
+
BrasilAPI::IBPT.ncm("PI", "02109100", exception: "01")
|
|
312
|
+
BrasilAPI::IBPT.nbs("SP", "101011000")
|
|
313
|
+
BrasilAPI::IBPT.lc116("SP", "0101")
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
### IGP-M
|
|
317
|
+
|
|
318
|
+
`between` aceita `Date` ou `String`.
|
|
319
|
+
|
|
320
|
+
```ruby
|
|
321
|
+
BrasilAPI::IGPM.all
|
|
322
|
+
BrasilAPI::IGPM.last(2)
|
|
323
|
+
BrasilAPI::IGPM.between("2024-01-01", "2024-02-01")
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
### CID-10
|
|
327
|
+
|
|
328
|
+
```ruby
|
|
329
|
+
BrasilAPI::CID10.all
|
|
330
|
+
BrasilAPI::CID10.find_by_code("A00")
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
### Incidência solar
|
|
334
|
+
|
|
335
|
+
A rota usada é `GET /solar/v1?location=...`.
|
|
336
|
+
|
|
337
|
+
```ruby
|
|
338
|
+
BrasilAPI::Solar.incidence("Teresina")
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
### Status
|
|
342
|
+
|
|
343
|
+
```ruby
|
|
344
|
+
BrasilAPI::Status.check
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
### B3
|
|
348
|
+
|
|
349
|
+
Tipos de fundo aceitos: `FII`, `SETORIAL`, `FIAGRO-FII`, `FIAGRO-FIDC`, `FIAGRO-FIP`, `FIP` e `FIA`.
|
|
350
|
+
|
|
351
|
+
```ruby
|
|
352
|
+
BrasilAPI::B3.stocks
|
|
353
|
+
BrasilAPI::B3.funds("SETORIAL")
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
### TUSS
|
|
357
|
+
|
|
358
|
+
`all` aceita `name`, `code`, `limit` e `offset`. `search` também aceita `query`, `match`, `sort`, `order` e `fields`. `autocomplete` aceita `query`, `name`, `code` e `limit`.
|
|
359
|
+
|
|
360
|
+
```ruby
|
|
361
|
+
BrasilAPI::TUSS.all(limit: 1)
|
|
362
|
+
BrasilAPI::TUSS.find_by_code("10101012")
|
|
363
|
+
BrasilAPI::TUSS.search(query: "consulta", limit: 1)
|
|
364
|
+
BrasilAPI::TUSS.autocomplete(query: "cons", limit: 2)
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
## Publicação
|
|
368
|
+
|
|
369
|
+
A publicação no RubyGems acontece quando um pull request que altera a versão entra na `main`:
|
|
370
|
+
|
|
371
|
+
1. Atualize `BrasilAPI::VERSION` em `lib/brasil_api/version.rb`.
|
|
372
|
+
2. Mova a seção `[Unreleased]` do `CHANGELOG.md` para essa versão, com a data.
|
|
373
|
+
3. Abra um pull request e faça o merge na `main`.
|
|
374
|
+
|
|
375
|
+
`.github/workflows/release.yml` roda a suíte (testes com cobertura e RuboCop), cria a tag `vX.Y.Z`, publica um GitHub Release com as notas daquela versão e envia a gem com Trusted Publishing do RubyGems (OIDC). Se a versão já tiver a tag `vX.Y.Z`, o workflow não faz nada.
|
|
376
|
+
|
|
377
|
+
Antes da primeira publicação automática, registre um trusted publisher no rubygems.org para `dayvidemerson/brasilapi-rb` e o arquivo `release.yml`, sem environment do GitHub. O gemspec mantém `rubygems_mfa_required`.
|
|
140
378
|
|
|
141
|
-
|
|
142
|
-
[MIT](./LICENSE)
|
|
379
|
+
## Contribuindo
|
|
143
380
|
|
|
144
|
-
|
|
381
|
+
Relatos de bugs e pull requests são bem-vindos em https://github.com/dayvidemerson/brasilapi-rb. Este projeto deve ser um espaço seguro e acolhedor, e quem contribui deve seguir o [código de conduta](https://github.com/dayvidemerson/brasilapi-rb/blob/main/CODE_OF_CONDUCT.md).
|
|
145
382
|
|
|
146
|
-
|
|
383
|
+
## Licença
|
|
147
384
|
|
|
148
|
-
|
|
385
|
+
A gem é software livre sob a [licença MIT](https://opensource.org/licenses/MIT).
|
|
149
386
|
|
|
150
|
-
|
|
387
|
+
## Código de conduta
|
|
151
388
|
|
|
152
|
-
|
|
389
|
+
Quem interage nos repositórios, issues, salas e listas deste projeto deve seguir o [código de conduta](https://github.com/dayvidemerson/brasilapi-rb/blob/main/CODE_OF_CONDUCT.md).
|
|
153
390
|
|
|
154
|
-
|
|
391
|
+
## Autor
|
|
155
392
|
|
|
156
|
-
# Autor
|
|
157
393
|
<div align="center">
|
|
158
394
|
|
|
159
395
|
| [<img src="https://github.com/dayvidemerson.png?size=115" width=115><br><sub>@dayvidemerson</sub>](https://github.com/dayvidemerson) |
|
data/Rakefile
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require "bundler/gem_tasks"
|
|
4
|
+
require "open3"
|
|
4
5
|
require "rspec/core/rake_task"
|
|
5
6
|
|
|
6
7
|
RSpec::Core::RakeTask.new(:spec)
|
|
@@ -9,4 +10,20 @@ require "rubocop/rake_task"
|
|
|
9
10
|
|
|
10
11
|
RuboCop::RakeTask.new
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
desc "Gera a documentação YARD em doc/"
|
|
14
|
+
task :yard do
|
|
15
|
+
sh "yard", "doc"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
desc "Falha se a documentação YARD não estiver em 100%"
|
|
19
|
+
task :yard_stats do
|
|
20
|
+
output, status = Open3.capture2e("yard", "stats", "--list-undoc")
|
|
21
|
+
puts output
|
|
22
|
+
abort("yard stats --list-undoc falhou") unless status.success?
|
|
23
|
+
|
|
24
|
+
undocumented = output.scan(/\(\s*(\d+) undocumented\)/).flatten.map(&:to_i)
|
|
25
|
+
fully_documented = undocumented.any? && undocumented.all?(&:zero?) && output.match?(/100(?:\.0+)?% documented/)
|
|
26
|
+
abort("A documentação YARD não está em 100%.") unless fully_documented
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
task default: %i[spec yard_stats rubocop]
|
data/lib/brasil_api/address.rb
CHANGED
|
@@ -1,14 +1,52 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
# Cliente Ruby da {https://brasilapi.com.br BrasilAPI}.
|
|
4
|
+
#
|
|
5
|
+
# @example Bancos participantes do STR
|
|
6
|
+
# BrasilAPI::Bank.all
|
|
7
|
+
# @see https://brasilapi.com.br/docs
|
|
3
8
|
module BrasilAPI
|
|
9
|
+
# Consulta CEP e o DDD de um código de área.
|
|
10
|
+
#
|
|
11
|
+
# @see https://brasilapi.com.br/docs#tag/CEP
|
|
12
|
+
# @see https://brasilapi.com.br/docs#tag/DDD
|
|
4
13
|
class Address < Base
|
|
5
14
|
class << self
|
|
15
|
+
# Busca o endereço de um CEP.
|
|
16
|
+
#
|
|
17
|
+
# Com +location: true+ a rota é a v2 e a resposta inclui coordenadas.
|
|
18
|
+
#
|
|
19
|
+
# @param zip_code [String] CEP, com ou sem hífen
|
|
20
|
+
# @param location [Boolean] usa +/cep/v2+ quando +true+
|
|
21
|
+
# @return [Hash] logradouro, bairro, cidade e UF
|
|
22
|
+
# @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
|
|
23
|
+
# @raise [BrasilAPI::NotFound] quando o CEP não existe
|
|
24
|
+
# @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
|
|
25
|
+
# @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
|
|
26
|
+
# @raise [BrasilAPI::Error] em outras respostas de erro
|
|
27
|
+
# @example Avenida Frei Serafim, em Teresina
|
|
28
|
+
# BrasilAPI::Address.find_by_zip_code("64001100")
|
|
29
|
+
# @example CEP com latitude e longitude
|
|
30
|
+
# BrasilAPI::Address.find_by_zip_code("80060000", location: true)
|
|
31
|
+
# @see https://brasilapi.com.br/docs#tag/CEP
|
|
6
32
|
def find_by_zip_code(zip_code, location: false)
|
|
7
33
|
return get("/cep/v2/#{zip_code}") if location
|
|
8
34
|
|
|
9
35
|
get("/cep/v1/#{zip_code}")
|
|
10
36
|
end
|
|
11
37
|
|
|
38
|
+
# Lista o estado e as cidades de um DDD.
|
|
39
|
+
#
|
|
40
|
+
# @param area_code [String, Integer] código DDD, por exemplo +"11"+
|
|
41
|
+
# @return [Hash] estado e cidades atendidas
|
|
42
|
+
# @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
|
|
43
|
+
# @raise [BrasilAPI::NotFound] quando o DDD não existe
|
|
44
|
+
# @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
|
|
45
|
+
# @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
|
|
46
|
+
# @raise [BrasilAPI::Error] em outras respostas de erro
|
|
47
|
+
# @example DDD de São Paulo
|
|
48
|
+
# BrasilAPI::Address.state_and_cities_by_area_code(11)
|
|
49
|
+
# @see https://brasilapi.com.br/docs#tag/DDD
|
|
12
50
|
def state_and_cities_by_area_code(area_code)
|
|
13
51
|
get("/ddd/v1/#{area_code}")
|
|
14
52
|
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Cliente Ruby da {https://brasilapi.com.br BrasilAPI}.
|
|
4
|
+
#
|
|
5
|
+
# @example Bancos participantes do STR
|
|
6
|
+
# BrasilAPI::Bank.all
|
|
7
|
+
# @see https://brasilapi.com.br/docs
|
|
8
|
+
module BrasilAPI
|
|
9
|
+
# Ações e fundos listados na B3.
|
|
10
|
+
#
|
|
11
|
+
# @see https://brasilapi.com.br/docs#tag/TICKERS
|
|
12
|
+
class B3 < Base
|
|
13
|
+
class << self
|
|
14
|
+
# Lista as ações negociadas na B3.
|
|
15
|
+
#
|
|
16
|
+
# @return [Array<Hash>] ticker, empresa e segmento de cada ação
|
|
17
|
+
# @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
|
|
18
|
+
# @raise [BrasilAPI::NotFound] quando a BrasilAPI responde 404
|
|
19
|
+
# @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
|
|
20
|
+
# @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
|
|
21
|
+
# @raise [BrasilAPI::Error] em outras respostas de erro
|
|
22
|
+
# @example
|
|
23
|
+
# BrasilAPI::B3.stocks
|
|
24
|
+
# @see https://brasilapi.com.br/docs#tag/TICKERS
|
|
25
|
+
def stocks
|
|
26
|
+
get("/tickers/b3/acoes/v1")
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Lista os fundos de um tipo da B3.
|
|
30
|
+
#
|
|
31
|
+
# Tipos aceitos: +"FII"+, +"SETORIAL"+, +"FIAGRO-FII"+, +"FIAGRO-FIDC"+,
|
|
32
|
+
# +"FIAGRO-FIP"+, +"FIP"+ e +"FIA"+.
|
|
33
|
+
#
|
|
34
|
+
# @param type [String] tipo do fundo
|
|
35
|
+
# @return [Array<Hash>] sigla e nome de cada fundo
|
|
36
|
+
# @raise [BrasilAPI::BadRequest] quando o tipo é inválido
|
|
37
|
+
# @raise [BrasilAPI::NotFound] quando a BrasilAPI responde 404
|
|
38
|
+
# @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
|
|
39
|
+
# @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
|
|
40
|
+
# @raise [BrasilAPI::Error] em outras respostas de erro
|
|
41
|
+
# @example Fundos setoriais
|
|
42
|
+
# BrasilAPI::B3.funds("SETORIAL")
|
|
43
|
+
# @see https://brasilapi.com.br/docs#tag/TICKERS
|
|
44
|
+
def funds(type)
|
|
45
|
+
get("/tickers/b3/fundos/v1/#{type}")
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
data/lib/brasil_api/bank.rb
CHANGED
|
@@ -1,12 +1,43 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
# Cliente Ruby da {https://brasilapi.com.br BrasilAPI}.
|
|
4
|
+
#
|
|
5
|
+
# @example Bancos participantes do STR
|
|
6
|
+
# BrasilAPI::Bank.all
|
|
7
|
+
# @see https://brasilapi.com.br/docs
|
|
3
8
|
module BrasilAPI
|
|
9
|
+
# Bancos participantes do Sistema de Transferência de Reservas.
|
|
10
|
+
#
|
|
11
|
+
# @see https://brasilapi.com.br/docs#tag/BANKS
|
|
4
12
|
class Bank < Base
|
|
5
13
|
class << self
|
|
14
|
+
# Lista os bancos participantes do STR.
|
|
15
|
+
#
|
|
16
|
+
# @return [Array<Hash>] código, nome e ISPB de cada banco
|
|
17
|
+
# @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
|
|
18
|
+
# @raise [BrasilAPI::NotFound] quando a BrasilAPI responde 404
|
|
19
|
+
# @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
|
|
20
|
+
# @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
|
|
21
|
+
# @raise [BrasilAPI::Error] em outras respostas de erro
|
|
22
|
+
# @example
|
|
23
|
+
# BrasilAPI::Bank.all
|
|
24
|
+
# @see https://brasilapi.com.br/docs#tag/BANKS
|
|
6
25
|
def all
|
|
7
26
|
get("/banks/v1")
|
|
8
27
|
end
|
|
9
28
|
|
|
29
|
+
# Busca um banco pelo código de compensação.
|
|
30
|
+
#
|
|
31
|
+
# @param code [String, Integer] código COMPE, por exemplo +77+
|
|
32
|
+
# @return [Hash] dados do banco
|
|
33
|
+
# @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
|
|
34
|
+
# @raise [BrasilAPI::NotFound] quando o código não existe
|
|
35
|
+
# @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
|
|
36
|
+
# @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
|
|
37
|
+
# @raise [BrasilAPI::Error] em outras respostas de erro
|
|
38
|
+
# @example Banco Inter
|
|
39
|
+
# BrasilAPI::Bank.find_by_code(77)
|
|
40
|
+
# @see https://brasilapi.com.br/docs#tag/BANKS
|
|
10
41
|
def find_by_code(code)
|
|
11
42
|
get("/banks/v1/#{code}")
|
|
12
43
|
end
|