Листинг 7.18.Сценарий getbtcaddr
#!/bin/bash
# getbtcaddr — получая адрес Биткоин, возвращает полезную информацию.
if [$# −ne 1]; then
··echo "Usage: $0
"
··exit 1
fi
base_url="https://blockchain.info/q/"
balance=$(curl −s $base_url" addressbalance/"$1)
recv=$(curl −s $base_url" getreceivedbyaddress/"$1)
sent=$(curl −s $base_url" getsentbyaddress/"$1)
first_made=$(curl −s $base_url" addressfirstseen/"$1)
echo "Details for address $1"
echo −e "\tFirst seen: "$(date −d @$first_made)
echo −e "\tCurrent balance: "$balance
echo −e "\tSatoshis sent: "$sent
echo −e "\tSatoshis recv: "$recv
Сценарий несколько раз вызывает команду curl, чтобы извлечь ценные сведения из заданного адреса Биткоин. Соответствующая служба, доступная по адресу: http://blockchain.info/, дает простую возможность получить полную информацию об адресе Биткоин и цепочке блоков. Фактически, нам даже не потребовалось анализировать информацию, получаемую от службы, потому что она возвращает простые одиночные значения. Получив баланс для заданного адреса, сведения о количестве полученных и потраченных монет и о том, когда осуществлялись платежи, сценарий выводит эту информацию на экран.
Сценарий принимает единственный аргумент — адрес Биткоин, информацию о котором требуется получить. Следует отметить, что, если передать сценарию строку, не являющуюся действительным адресом Биткоин, он выведет нули в строках, сообщающих о балансе и полученных и потраченных суммах, а в качестве даты создания будет указан 1969 год. Любые ненулевые суммы указываются в сатоши ( satoshi ) [6] Биткоин = 100 000 000 сатоши. — Примеч. пер.
— минимальных единицах обозначения сумм в Биткоин (как, например, пенни, но с намного большим количеством знаков после запятой).
Пользоваться сценарием getbtcaddr очень просто, как показано в листинге 7.19, так как он принимает единственный аргумент, адрес Биткоин, информацию о котором требуется получить.
Листинг 7.19.Запуск сценария getbtcaddr
$ getbtcaddr 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
Details for address 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
····First seen: Sat Jan 3 12:15:05 CST 2009
····Current balance: 6554034549
····Satoshis sent: 0
····Satoshis recv: 6554034549
$ getbtcaddr 1EzwoHtiXB4iFwedPr49iywjZn2nnekhoj
Details for address 1EzwoHtiXB4iFwedPr49iywjZn2nnekhoj
····First seen: Sun Mar 11 11:11:41 CDT 2012
····Current balance: 2000000
····Satoshis sent: 716369585974
····Satoshis recv: 716371585974
Усовершенствование сценария
Сценарий по умолчанию выводит очень большие числа, которые трудно прочитать. Чтобы отобразить данные в единицах, более простых для восприятия (например, в целых Биткоинах), можно использовать сценарий scriptbc (сценарий № 9 в главе 1). Поддержка аргумента точности позволила бы выводить данные в удобочитаемом формате.
№ 62. Определение изменений в веб-страницах
Иногда, просматривая существующие решения, мы с воодушевлением говорим себе: «Оказывается, это совсем несложно». Слежение за изменениями на веб-сайтах — удивительно простой способ собирать такие воодушевляющие образцы. Сценарий в листинге 7.20, changetrack, автоматизирует эту задачу. Данный сценарий имеет одну интересную особенность: обнаружив изменения на сайте, он не просто выводит уведомление в командной строке, а посылает пользователю новую веб-страницу по электронной почте.
Листинг 7.20.Сценарий changetrack
#!/bin/bash
# changetrack — проверяет страницу по указанному URL и, если она
#·· изменилась с момента последнего посещения, посылает новую страницу
#····по указанному адресу электронной почты.
sendmail=$(which sendmail)
sitearchive="/tmp/changetrack"
tmpchanges="$sitearchive/changes.$$" # Временный файл
fromaddr="webscraper@intuitive.com"
dirperm=755······ # чтение+запись+выполнение для владельца каталога
fileperm=644······# чтение+запись для владельца, только чтение для других
trap "$(which rm) −f $tmpchanges" 0 1 15 # Удалить временный файл при выходе.
if [$# −ne 2]; then
··echo "Usage: $(basename $0) url email" >&2
··echo " tip: to have changes displayed on screen, use email addr '-'" >&2
··exit 1
fi
if [! -d $sitearchive]; then
··if! mkdir $sitearchive; then
····echo "$(basename $0) failed: couldn't create $sitearchive." >&2
····exit 1
··fi
··chmod $dirperm $sitearchive
fi
if ["$(echo $1 | cut −c1-5)"!= "http: "]; then
··echo "Please use fully qualified URLs (e.g. start with 'http://')" >&2
Читать дальше