Repository navigation
Expand file tree
/
Copy pathindex.php
More file actions
142 lines (113 loc) · 4.38 KB
/
Copy pathindex.php
File metadata and controls
142 lines (113 loc) · 4.38 KB
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
<?php
header('Access-Control-Allow-Origin: *'); // Permitindo acesso de qualquer domínio
// Obtendo cotação atual do dolar em reais
$cotacao = floatval(json_decode(file_get_contents('https://economia.awesomeapi.com.br/USD'), true)[0]['high']);
if(array_key_exists('search', $_GET)) { // Rquisição de nome das moedas
search();
} else { // Requisição de uma moeda específica
if(!array_key_exists('moeda', $_GET)) // A moeda não foi informada
retornarJSON(['erro' => 'Informe a moeda'], 400); // Bad Request
moeda($_GET['moeda'], $_GET['historico'] == 'true');
}
/*
Retorna via Rest uma lista das moedas disponíveis
*/
function search() {
$dados = getLista();
for($i = 0; $i < count($dados); $i++) { // Removendo info desnecessária
unset($dados[$i]['tokens']);
}
retornarJSON($dados);
}
// Obtém lista completa da API do coinmarketcap
function getLista() {
$bruto = file_get_contents('https://s2.coinmarketcap.com/generated/search/quick_search.json');
return json_decode($bruto, true); // Parseando JSON
}
function getMetaDados($slug) {
$lista = getLista();
foreach ($lista as $key => $valor) {
if($valor["slug"] === $slug)
return $valor;
}
return null;
}
/*
Retorna via Rest infos a respeito da moeda solicitada
*/
function moeda(String $moeda, Bool $historico) {
$ch = curl_init('https://graphs2.coinmarketcap.com/currencies/'.$moeda); // iniciando curl
$metaDados = getMetaDados($moeda);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Siga os redirecionamentos que o servidor solicitar
curl_setopt($ch, CURLOPT_RETURNTRANSFER , true); // Retorne os dados ao executar
$dados = curl_exec($ch); // Executando e obtendo dados retornados
$resCode = curl_getinfo($ch, CURLINFO_HTTP_CODE ); // Obtendo código http de retorno
if($resCode !== 200 || $dados === false) { // Se o código http não for 200(ok) ou não foram retornados dados
curl_close($ch);
retornarJSON(['erro' => 'Moeda não encontrada ('.$resCode.')'], $resCode); // Retorne erro
}
curl_close($ch);
if(!$historico)
$dados = processarMoedaMinificar(json_decode($dados, true)); // Processando e removendo dados históricos obtidos
else
$dados = processarMoeda(json_decode($dados, true)); // Processando dados obtidos
// Adicionando meta dados
$dados["nome"] = $metaDados["name"];
$dados["id"] = $metaDados["id"];
retornarJSON($dados);
}
/*
Esta função consolida o retorno da API
*/
function retornarJSON($dados, $cod = 200) {
header('Content-Type: application/json'); // Retorno do tipo Json
http_response_code($cod); // Setando Código HTTP de retorno
echo json_encode($dados); // Codificando dados e retornando
exit; // Nada mais deve ser executado após isso
}
/*
Processa os dados obtidos a respeito de uma moeda
retorna a cotação da moeda convertida e BRL
*/
function processarMoeda($dados) {
global $cotacao; // Obtendo cotação do escopo global
$price = [];
foreach ($dados['price_usd'] as $chave => $valor) { // Percorrendo valor em USD
array_push($price, [
$valor[0],
$cotacao * $valor[1] // Convertendo USD -> BRL
]);
}
$dados['price'] = $price;
$volume = [];
foreach ($dados['volume_usd'] as $chave => $valor) { // Percorrendo volume em USD captalizado
array_push($volume, [
$valor[0],
$cotacao * $valor[1] // Convertendo USD -> BRL
]);
}
$dados['volume'] = $volume;
// Removendo infos desnecessárias
unset($dados['price_usd']);
unset($dados['volume_usd']);
unset($dados['market_cap_by_available_supply']);
return $dados;
}
/*
Processa os dados obtidos a respeito de uma moeda
retorna a cotação da moeda convertida e BRL
*/
function processarMoedaMinificar($dados) {
global $cotacao; // Obtendo cotação do escopo global
$dados['price'] = end($dados['price_usd']); // Obtendo apenas a cotação mais recente
$dados['price'][1] = $dados['price'][1] * $cotacao; // Convertendo USD -> BRL
$dados['volume'] = end($dados['volume_usd']); // Obtendo apenas o volume mais recente
$dados['volume'][1] = $dados['volume'][1] * $cotacao; // Convertendo USD -> BRL
$dados['price_btc'] = end($dados['price_btc']); // Obtendo apenas o equivalente mais recente em BTC
// Removendo infos desnecessárias
unset($dados['price_usd']);
unset($dados['volume_usd']);
unset($dados['market_cap_by_available_supply']);
return $dados;
}
?>