··# weather — использует Wunderground API для получения информации
··#·· о погоде по почтовому индексу (США).
··if [$# −ne 1]; then
····echo "Usage: $0
····exit 1
··fi
··apikey="b03fdsaf3b2e7cd23" # Это недействительный API-ключ — вы
···························· #·· должны получить свой.
······"https://api.wunderground.com/api/$apikey/conditions/q/$1.xml"`
······//response/current_observation/display_location/full/text\(\) \
······<(echo $weather)`
··zip=`xmllint −xpath \
······//response/current_observation/display_location/zip/text\(\) \
······<(echo $weather)`
··current=`xmllint −xpath \
······//response/current_observation/temp_f/text\(\) \
······<(echo $weather)`
··condition=`xmllint −xpath \
······//response/current_observation/weather/text\(\) \
······<(echo $weather)`
··echo $state" ("$zip"): Current temp "$current" F and "$condition" outside."
··exit 0
Как это работает
Сценарий вызывает команду curl, чтобы отправить запрос к Wunderground API и сохранить HTTP-ответ в переменной weather
Запуск сценария
Запуская сценарий, достаточно передать ему почтовый индекс, как показано в листинге 7.13. Очень просто!
Результаты
Листинг 7.13. Тестирование сценария weather
$ weather 78727
Austin, TX (78727): Current temp 59.0F and Clear outside.
$ weather 80304
Boulder, CO (80304): Current temp 59.2F and Clear outside.
$ weather 10010
New York, NY (10010): Current temp 68.7F and Clear outside.
Усовершенствование сценария
Откроем небольшой секрет. В действительности этот сценарий принимает не только почтовые индексы. Службе Wunderground API можно также передать название региона, например CA/San_Francisco (попробуйте передать эту строку сценарию weather!). Однако такой формат не очень удобен: он требует использовать символы подчеркивания вместо пробелов и символ слеша (/) в середине. В качестве одного из усовершенствований можно было бы добавить в сценарий запрос на ввод аббревиатуры штата и названия города и автоматически заменять пробелы символами подчеркивания, если сценарий запущен без аргумента. Как обычно, можно также добавить дополнительную проверку ошибок. Например, что получится, если передать сценарию четырехзначный или недействительный почтовый индекс?
№ 59. Поиск информации о кинофильме в базе IMDb
Сценарий в листинге 7.14 демонстрирует более сложный пример доступа к Интернету с помощью lynx для поиска в базе данных Internet Movie Database (http://www.imdb.com/) сведений о кинофильмах по указанному шаблону. База данных IMDb назначает уникальный числовой код каждому фильму, каждому телевизионному сериалу и даже каждой отдельной серии; если пользователь укажет такой код, данный сценарий вернет краткое описание фильма. В противном случае он вернет список фильмов, частично или полностью соответствующих указанному названию.
В зависимости от типа запроса (числовой код или название) сценарий обращается по разным адресам URL и сохраняет результаты в кэше, чтобы многократно обойти содержимое страницы для извлечения разных фрагментов информации. Для этого используется много — очень много! — вызовов команд sed и grep, в чем вы можете убедиться лично.
Код