·············· }
·············· '
··exit 0
Как это работает
Следует признать, что это сценарий скорее на языке awk, чем на языке bash, но иногда для анализа данных приходится привлекать дополнительные возможности awk (GitHub API возвращает данные в формате JSON). С помощью curl сценарий запрашивает у сайта GitHub информацию о пользователе
Запуск сценария
Сценарий принимает единственный аргумент: имя пользователя GitHub. Если указанное имя пользователя не будет найдено, сценарий ничего не выведет.
Результаты
Если сценарию передается существующее имя пользователя, он должен вывести сводную информацию об этом пользователе GitHub, как показано в листинге 7.7.
Листинг 7.7. Запуск сценария githubuser
$ githubuser brandonprry
Brandon Perry is the name of the GitHub user.
They have 67 followers.
They are following 0 other users.
Their account was created on 2010-11-16T02:06:41Z.
Усовершенствование сценария
Этот сценарий имеет большой потенциал благодаря объему информации, возвращаемому GitHub API. Он выводит только четыре значения из возвращаемых JSON-данных. Создание «резюме» на основе информации, которую API возвращает подобно многим веб-службам, лишь одна из возможностей.
№ 56. Поиск по почтовому индексу
Для демонстрации еще одного приема извлечения информации из Интернета, на этот раз с помощью curl, создадим простой инструмент поиска почтовых индексов. Передайте сценарию в листинге 7.8 почтовый индекс, и вы узнаете город и штат (в США), которому он принадлежит. Достаточно просто.
Самой очевидной была бы идея использовать официальный веб-сайт почтовой службы США (US Postal Service), но мы задействуем другой сайт, http://city-data.com/, в котором для каждого почтового индекса отводится своя веб-страница, что упрощает извлечение информации.
Код
Листинг 7.8. Сценарий zipcode
#!/bin/bash
# zipcode — получая почтовый индекс, определяет город и штат в США.
#·· Использует сайт city-data.com, в котором для каждого почтового
#·· индекса отводится своя веб-страница.
baseURL="http://www.city-data.com/zips"
/bin/echo −n "ZIP code $1 is in "
curl −s — dump "$baseURL/$1.html" | \
··grep −i '
··cut −d\(-f2 | cut −d\) −f1
exit 0
Как это работает
Адреса URL страниц с информацией о почтовых индексах на сайте http://city-data.com/ имеют единообразную организацию: сам почтовый индекс является заключительной частью URL:
http://www.city-data.com/zips/80304.html
Такое единообразие позволяет легко сконструировать адрес URL, соответствующий заданному почтовому индексу. Возвращаемая страница содержит название города в заголовке, которое легко отличить по открывающей и закрывающей круглым скобкам, как показано ниже:
schools, population, income, averages, housing, demographics, location,
statistics, residents and real estate info
Строка длинная, но легко поддается анализу!
Запуск сценария
Чтобы воспользоваться сценарием, достаточно просто передать ему почтовый индекс в аргументе командной строки. Если указан действительный индекс, сценарий выведет название города и штата, как показано в листинге 7.9.
Результаты
Листинг 7.9. Запуск сценария zipcode
$ zipcode 10010
ZIP code 10010 is in New York, New York
$ zipcode 30001
ZIP code 30001 is in
$ zipcode 50111
ZIP code 50111 is in Grimes, Iowa
Так как 30001 не является действительным почтовым индексом, сценарий сгенерировал сообщение об ошибке Page not found («Страница не найдена»). Оно выглядит немного неопрятно, но мы можем улучшить его.
Усовершенствование сценария