Сценарий принимает единственный аргумент: имя пользователя 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 («Страница не найдена»). Оно выглядит немного неопрятно, но мы можем улучшить его.
Усовершенствование сценария
Наиболее очевидным усовершенствованием могло бы стать выполнение каких-то действий в ответ на ошибки вместо вывода невнятной последовательности . Еще более интересный вариант — добавить флаг −a, который сообщал бы сценарию о необходимости вывода дополнительной информации о регионе, тем более что http://city-data.com/предлагает довольно много информации, помимо названий городов, включая площадь, сведения о населении и цены на недвижимость.
№ 57. Поиск по телефонному коду города
Сценарий поиска по телефонному коду города является разновидностью предыдущего. Как оказывается, реализовать такой сценарий действительно очень просто, благодаря существованию простых для анализа веб-страниц с кодами городов. Например, страница по адресу http://www.bennetyee.org/ucsd-pages/area.htmlлегко поддается анализу, не только потому, что она хранит информацию в табличной форме, но и потому, что автор использовал атрибуты HTML для идентификации элементов. Например, строка с информацией о коде 207 выглядит так:
207 |
ME |
align=center>-5
|
Maine |
Мы использовали этот сайт в сценарии (листинг 7.10) поиска по телефонному коду города.
Листинг 7.10.Сценарий areacode
Читать дальше