-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathdolar.py
executable file
·66 lines (49 loc) · 1.94 KB
/
dolar.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/usr/bin/env python3
from http.client import HTTPConnection
from datetime import datetime
import json
AWESOMEAPI_HOST = "economia.awesomeapi.com.br"
AWESOMEAPI_PATH = "/json/all/USD-BRL"
def symbol_request(host, request_string):
def decorator(func):
def request_dispatcher():
try:
connection = HTTPConnection(host)
connection.request("GET", request_string)
response = connection.getresponse()
except Exception as e:
print("Ocorreu um erro ao conectar ao servidor:", e)
raise e
if response.status != 200:
print("O servidor retornou uma resposta inesperada:", response.status, response.reason)
raise Exception("Invalid response")
try:
json_data = response.read()
data = json.loads(json_data)
except Exception as e:
print("Ocorreu um erro ao decodificar a resposta do servidor:", e)
raise e
return func(data)
return request_dispatcher
return decorator
@symbol_request(AWESOMEAPI_HOST, AWESOMEAPI_PATH)
def get_awesomeapi_value(data=None):
if not data['USD']:
print("O servidor não conseguiu processar a requisição:", data['retorno'])
raise Exception("Invalid response")
cotacao = float(data['USD']['ask'])
atualizacao = int(data['USD']['timestamp'])
return (cotacao, atualizacao)
def format_date(utc_timestamp):
d = datetime.utcfromtimestamp(utc_timestamp)
offset = datetime.now() - datetime.utcnow()
date = d + offset
return date.strftime("%d/%m às %H:%M")
if __name__ == "__main__":
try:
cotacao, atualizacao = get_awesomeapi_value()
except:
print("Por favor tente novamente mais tarde.")
else:
print("Cotação USD: R$ {:.2f}".format(cotacao))
print("Última atualização:", format_date(atualizacao))