|
|
|
"This isn't the kind of software where we can leave so many unresolved bugs that we need a tracker for them." -- Satoshi
|
|
|
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
|
|
|
girino
Legendary
Offline
Activity: 2296
Merit: 1170
Advertise Here - PM for more info!
|
|
April 30, 2015, 04:31:00 AM Last edit: April 30, 2015, 04:43:47 AM by girino |
|
no JSON retornado o campo "txs" é um array. Basta medir o tamanho dele. (em PHP seria: Precisa mesmo iterar pelo array contando inuts e outputs... taí o código... <?php
$addr = '154hDcYwf8qTaVHVZEaQqVccdXgkr9Dz78'; if (count($argv) > 1) $addr = $argv[1];
$url = 'https://blockchain.info/address/' . $addr . '?format=json'; static $ch = null; if (is_null($ch)) { $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; Blockchain.info API PHP client; '.php_uname('s').'; PHP/'.phpversion().')'); } curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
// run the query $res = curl_exec($ch); $dec = json_decode($res, true); print "transactions: " . count($dec['txs']) . "\n"; $received = 0; $sent = 0; foreach ($dec['txs'] as $tx) { foreach($tx['inputs'] as $input) { if ($input['prev_out']['addr'] == $addr) { $sent++; break; } } foreach($tx['out'] as $out) { if ($out['addr'] == $addr) { $received++; break; } } }
print "Received: $received, Sent: $sent\n";
Edit: Na verdade percebi que você quer apenas as que ele recebeu, então precisa percorrer o array e verificar se o endereço está no campo de "inputs" ou de outs... peraí que já faço isso... Edit 2: Feito...
|
Advertise Here - PM for more info!
|
|
|
G00Gs (OP)
Newbie
Offline
Activity: 5
Merit: 0
|
|
April 30, 2015, 12:07:39 PM |
|
muito obrigado girino. me tira uma duvida, porque preciso usar curl? Não posso pegar o json_decode direto?
|
|
|
|
girino
Legendary
Offline
Activity: 2296
Merit: 1170
Advertise Here - PM for more info!
|
|
April 30, 2015, 02:00:11 PM |
|
muito obrigado girino. me tira uma duvida, porque preciso usar curl? Não posso pegar o json_decode direto? Boa, dá sim. Não sabia que o "file_get_contents" aceitava url. Eu usei o exemplo da api deles, por isso usei curl.
|
Advertise Here - PM for more info!
|
|
|
person
|
|
April 30, 2015, 02:20:56 PM |
|
muito obrigado girino. me tira uma duvida, porque preciso usar curl? Não posso pegar o json_decode direto? Boa, dá sim. Não sabia que o "file_get_contents" aceitava url. Eu usei o exemplo da api deles, por isso usei curl. Sugiro usar o curl sempre que possível. Melhor performance, menor risco de segurança e permite muitas configuracoes (header, certificado, permite POST, timeout customizado, etc). Para um teste o file_get_contents serve, mas não usaria em sistemas que precisam ser mais estáveis.
|
|
|
|
girino
Legendary
Offline
Activity: 2296
Merit: 1170
Advertise Here - PM for more info!
|
|
April 30, 2015, 02:55:16 PM |
|
(...)
Sugiro usar o curl sempre que possível. Melhor performance, menor risco de segurança e permite muitas configuracoes (header, certificado, permite POST, timeout customizado, etc).
Para um teste o file_get_contents serve, mas não usaria em sistemas que precisam ser mais estáveis.
Eu seguiria o conselho do person. Ele mantem sistemas grandes em PHP e entende bem mais que eu.
|
Advertise Here - PM for more info!
|
|
|
G00Gs (OP)
Newbie
Offline
Activity: 5
Merit: 0
|
|
May 03, 2015, 03:59:53 AM Last edit: May 03, 2015, 04:16:16 AM by G00Gs |
|
voce pode me ajudar a mostrar as transação? tô desenvolvendo pra um amigo/cliente meu, mas to com dificuldade na leitura do json do blockchain quero mostrar o endereço de origem, valor e data, mas o que pensei naum deu certo: $ cont = 0; foreach ($dec['txs'] as $tx) { foreach($tx['inputs'] as $input) { if ($input['prev_out']['addr'] == $addr) { $sent++; break; } } foreach($tx['out'] as $out) { if ($out['addr'] == $addr) { echo '<a href=" https://blockchain.info/tx/' . $dec["txs"][$cont]["hash"] . '">' . $dec["txs"][$cont]["inputs"][0]["prev_out"]["addr"] . '</a><br/>'; echo round($dec["txs"][$cont]["input"][0]["value"]/1e8,4) . '<br/>'; echo date('d/m/Y', $dec["txs"][$cont]["time"]) . '<br/>'; $received++; break; } $ cont++; } }
|
|
|
|
girino
Legendary
Offline
Activity: 2296
Merit: 1170
Advertise Here - PM for more info!
|
|
May 03, 2015, 04:09:19 PM |
|
voce pode me ajudar a mostrar as transação? tô desenvolvendo pra um amigo/cliente meu, mas to com dificuldade na leitura do json do blockchain quero mostrar o endereço de origem, valor e data, mas o que pensei naum deu certo: $ cont = 0; foreach ($dec['txs'] as $tx) { foreach($tx['inputs'] as $input) { if ($input['prev_out']['addr'] == $addr) { $sent++; break; } } foreach($tx['out'] as $out) { if ($out['addr'] == $addr) { echo '<a href=" https://blockchain.info/tx/' . $dec["txs"][$cont]["hash"] . '">' . $dec["txs"][$cont]["inputs"][0]["prev_out"]["addr"] . '</a><br/>'; echo round($dec["txs"][$cont]["input"][0]["value"]/1e8,4) . '<br/>'; echo date('d/m/Y', $dec["txs"][$cont]["time"]) . '<br/>'; $received++; break; } $ cont++; } } Primeiro tem um erro de digitação, vc usa "input" ao invés de "inputs" (no plural), na segunda linha de "echo". Segundo, não entendi o que vc quer. Dentro de um loop sobre as outputs, está tentando acessar as inputs da mesma transação? E pelo que entendi, vc assume que cada output tem uma input correspondente, o que não é verdade... Seria mais fácil ajudar se eu soubesse o que é o objetivo do código.
|
Advertise Here - PM for more info!
|
|
|
girino
Legendary
Offline
Activity: 2296
Merit: 1170
Advertise Here - PM for more info!
|
|
May 03, 2015, 04:23:58 PM |
|
Como eu disse, sem saber o que vc quer, fica difícil ajudar, mas fiz esse treco aí que pode ser útil: foreach ($dec['txs'] as $tx) { echo 'Transaction: <a href="https://blockchain.info/tx/' . $tx["hash"] . '">' . $tx["hash"] . '</a><br/>'; echo 'Date: ' . date('d/m/Y', $tx["time"]) . '<br/>'; echo 'Inputs:<br />'; echo "<ul>\n"; foreach($tx['inputs'] as $input) { echo '<li>'; echo $input["prev_out"]["addr"] . ' - '; echo round($input["prev_out"]["value"]/1e8,4); echo "</li>\n"; } echo '</ul>'; echo "Outputs:<br\>"; echo "<ul>\n"; foreach($tx['out'] as $out) { if ($out['addr'] == $addr) { echo '<li>'; echo $out["addr"] . ' - '; echo round($out["value"]/1e8,4); echo "</li>\n"; break; } } echo '</ul>'; echo '<hr />'; }
|
Advertise Here - PM for more info!
|
|
|
G00Gs (OP)
Newbie
Offline
Activity: 5
Merit: 0
|
|
May 03, 2015, 06:38:45 PM Last edit: May 03, 2015, 06:49:25 PM by G00Gs |
|
desculpa naum ter explicado melhor
tenho o endereço 13CxYv3Yks3E1PLWQR8uGcfwsSZ6eAqYMV e quero mostrar na tela as transações que ele recebeu bitcoin:
ENDEREÇO ORIGEM / valor / data
se eu for no blockhain.info agora, ficaria assim:
1KVc3LVDu21egNMfzdnzRBYD5aDuQE74kE / 0.001111 / 03-05-2015 1fT1s7tpx3DXxAhEzBkg3NKf5ENDehkNb / 0.038711 / 18-03-2015
é isso q tô quereno
|
|
|
|
girino
Legendary
Offline
Activity: 2296
Merit: 1170
Advertise Here - PM for more info!
|
|
May 03, 2015, 07:06:08 PM |
|
desculpa naum ter explicado melhor
tenho o endereço 13CxYv3Yks3E1PLWQR8uGcfwsSZ6eAqYMV e quero mostrar na tela as transações que ele recebeu bitcoin:
ENDEREÇO ORIGEM / valor / data
se eu for no blockhain.info agora, ficaria assim:
1KVc3LVDu21egNMfzdnzRBYD5aDuQE74kE / 0.001111 / 03-05-2015 1fT1s7tpx3DXxAhEzBkg3NKf5ENDehkNb / 0.038711 / 18-03-2015
é isso q tô quereno
é bem mais complicado do que você imagina. Uma transação tem várias entradas e várias saidas. Você teria na mesma transação vários endereços de entrada e vários de saida. de qualquer forma, os loops da forma como estão construidos ali em cima não servem pra vc, seria necessário repensar o algoritmo.
|
Advertise Here - PM for more info!
|
|
|
G00Gs (OP)
Newbie
Offline
Activity: 5
Merit: 0
|
|
May 03, 2015, 08:48:23 PM |
|
mostrar somente o hash da transação, valor e data fica mais facil? só de recebimento
como consigo analisar de é uma transação de entrada ou de saída? eu tô começano agora a estudar esse protocolo, é um pouco complicado
|
|
|
|
person
|
|
May 04, 2015, 12:03:20 AM |
|
Você vai querer usar a API /rawaddr/ do Blockchain.info. Exemplo: https://blockchain.info/rawaddr/13CxYv3Yks3E1PLWQR8uGcfwsSZ6eAqYMVFaz um loop por todas txs[]. Para cada txs[], procura se existe algum txs[].out[].addr = seu endereço (13CxYv3Yks3E1PLWQR8uGcfwsSZ6eAqYMV) Se encontrar, pega todos os txs[].inputs[].addr e pega quanto seu endereço recebeu txs[].out[].value Assim você tem todos os endereços de entrada, que estão em uma transação que mandaram alguma coisa para seu endereço. O resultado vai ser algo como: Horario (que o blockchain recebeu a transacao) = txs[].time Endereços de entrada = txs[].inputs[].addr que voce guardou Total recebido no seu endereço nessa transação = txs[].out[].value Não use o txs[].inputs[].value porque esse não é o valor que você recebeu. Para funcionar 100%, voce precisa percorrer todos os txs[].out[] mesmo depois de encontrar seu endereço. Você pode ter uma transação com 50x o mesmo endereço de output. Não faz sentido, mas pode. Espero que ajude - para eu escrever o código, vamos precisar rachar quanto seu cliente tá pagando
|
|
|
|
|