Листинг 7.14. Сценарий moviedata
··#!/bin/bash
··# moviedata — получая название фильма или сериала, возвращает список
··#·· совпадений. Если пользователь укажет числовой код IMDb, вернет
··#·· краткое описание фильма. Использует базу данных Internet Movie Database.
··titleurl="http://www.imdb.com/title/tt"
··imdburl="http://www.imdb.com/find?s=tt&exact=true&ref_=fn_tt_ex&q="
··tempout="/tmp/moviedata.$$"
··{
····# Форматирует описания фильма.
····grep "
····grep −color=never −A2 '
Plot:' $tempout | tail -1 | \
······cut −d\< −f1 | fmt | sed 's/^/ /'
····exit 0
··}
··trap "rm −f $tempout" 0 1 15
··if [$# −eq 0]; then
····echo "Usage: $0 {movie title | movie ID}" >&2
····exit 1
··fi
··#########
··# Выяснить тип запроса: по названию или по коду IMDb
··nodigits="$(echo $1 | sed 's/[[: digit: ]]*//g')"
··if [$# −eq 1 −a — z "$nodigits"]; then
····lynx −source "$titleurl$1/combined" > $tempout
····summarize_film
····exit 0
··fi
··##########
··# Это не код IMDb, поэтому нужно выполнить поиск…
··fixedname="$(echo $@ | tr ' ' '+')" # для формирования URL
··url="$imdburl$fixedname"
··# Нет результатов?
No ' $tempout)"
··# Если найдено несколько похожих названий…
··if [! -z "$fail"]; then
····echo "Failed: no results found for $1"
····exit 1
··elif [! -z "$(grep '
Displaying' $tempout)"]; then
····grep −color=never '/title/tt' $tempout | \
····sed 's/
····grep −vE '(.png|.jpg|>[]*$)' | \
····grep −A 1 "a href=" | \
····grep −v '^-$' | \
····sed 's/····awk '(NR % 2 == 1) { title=$0 } (NR % 2 == 0) { print title " " $0 }' | \
····sed 's/\/.*>/: /' | \
····sort
··fi
··exit 0
Как это работает
Этот сценарий конструирует разные адреса URL, в зависимости от содержимого аргумента. Если пользователь указал числовой код, сценарий конструирует соответствующий URL, загружает с помощью lynx сведения о фильме, сохраняет их в файле $tempout
Но если пользователь указал название, тогда сценарий конструирует URL с запросом поиска к базе данных IMDb и сохраняет полученную страницу во временном файле. Если базе данных IMDb не удалось найти совпадений, она возвращает в HTML-странице тег
Однако если $fail