IMDB Lookup Script
IMDB is one of the most complete movie and television databases on the Internet. It offers an advanced Web search UI, but Unix CLI support has been discontinued years ago and the old scripts no longer work. There are a few nice third-party scripts out there for searching IMDB. Unfortunately, most of them are not maintained and won’t work right without some tweaking.
Here’s my simplistic version that should be a breeze to maintain and it will provide you with the basics: movie description and rating. You need to feed it the movie title and release year like so: “The Godfather (1972)”.
You can also leave the year out and just enter “The Godfather”. This will use Google search instead for the imdb.com domain. Depending on the uniqueness of the title, the accuracy may drop. Additionally, running too many Google queries in a short period of time may cause Google to temporarily bad your IP or start prompting for captcha.
Originally I wrote this to go through a list of movie titles and help me figure what’s worth watching. No special dependencies apart from lynx, but that’s easy enough to install. Save the following as /usr/bin/imdb and run like so:
imdb "Movie Title (2016)"
And here’s the script itself (imdb):
#!/bin/bash if [ $# -eq 0 ] then echo 'Usage: imdb "Movie Title (Year)"' exit 1 else y=$(echo "${@}" | sed -E 's/[()]//g' | awk '{print $NF}' | grep -oE "[0-9]{4}") t=$(echo "${@}" | sed -E 's/[()]//g' | sed -E 's/ [0-9]{4}$//g' | sed -r 's/ */\+/g;s/\&/%26/g;s/\++$//g' | sed 's/ /\%20/g') fi configure() { tmpfile="/tmp/imdb-mf_${RANDOM}.tmp" } cleanup() { if [ -f "${tmpfile}" ] then /bin/rm -f "${tmpfile}" fi } get_imdb() { if [ ! -z "${y}" ] then l=$(lynx -connect_timeout=10 --source "http://www.imdb.com/search/title?release_date=${y},${y}&title=${t}&title_type=feature" | grep -m1 -oP "(?<=id=\")[a-z]{2}[0-9]{4,}(?=\|imdb)") if [ -z "${l}" ] then l=$(lynx -connect_timeout=10 --source "http://www.imdb.com/search/title?release_date=${y},${y}&title=${t}&title_type=tv" | grep -m1 -oP "(?<=id=\")[a-z]{2}[0-9]{4,}(?=\|imdb)") fi lynx -connect_timeout=10 --source "http://www.imdb.com/title/${l}/" > ${tmpfile} 2> /dev/null else lynx -connect_timeout=10 --source "http://www.google.com/search?q=site:imdb.com+%22${t}%22&btnI" > ${tmpfile} 2> /dev/null fi } parse_imdb() { year=$(grep -m 1 "\/year\/" "${tmpfile}" | grep -Eo "[0-9]{4}") title=$(grep -m 1 "og:title" "${tmpfile}" | grep -Eo '\".*\"' | sed -e 's/"//g') temp=$(grep "og:description" "${tmpfile}" | sed -e 's/content="/@/g' -e 's/" \/>/@/g' -e 's/\"/\"/g' | awk -F'@' '{print $(NF-1)}') director=$(echo ${temp} | grep -oP "(?<=Directed by ).*?(?=\. With)") cast=$(echo ${temp} | grep -oP "(?<=\. With ).* ?(?=\. [A-Z0-9])" | sed -r 's/([A-Z]{1})\./\1@/g' | awk -F'.' '{print $1}' | sed -r 's/@/\./g') plot=$(echo ${temp} | sed -r "s/${cast}\. /@/g" | awk -F'@' '{print $NF}') rating=$(grep -m 1 -oP "[0-9]\.?[0-9]?\<span class=\"ofTen\"\>/10" "${tmpfile}" | sed -r 's/<.*>//g') } get_imdb2() { if [ -z "${year}" ] then m=$(echo "${l}" | sed 's/ [Aa]nd / \& /g') lynx -connect_timeout=10 --source "http://www.imdb.com/title/${m}/" > ${tmpfile} 2> /dev/null parse_imdb fi } get_imdb3() { if [ -z "${year}" ] then lynx -connect_timeout=10 --source "http://www.google.com/search?q=site:imdb.com+%22${t}%22&btnI" > ${tmpfile} 2> /dev/null parse_imdb fi } print_imdb() { if [ -z "${year}" ] then echo "Scraped the bottom of the pickle barrel but came up dry. Check the title and provide release year." else echo -e "Title:\t${title}" echo -e "Year:\t${year}" echo -e "Rating:\t${rating}" echo -e "Dir:\t${director}" echo -e "Cast:\t${cast}" echo -e "Plot:\t${plot}" fi } # RUNTIME configure cleanup get_imdb parse_imdb get_imdb2 get_imdb3 print_imdb cleanup
Nice script! Looks like you forgot a $ on line 55. No biggie.
was: echo -e “Rating:t{rating}”
now: echo -e “Rating:t${rating}”
Thanks again for the script
Thanks. This is a bug in the syntax highlighter plugin. Sometimes it loses the ‘$’.