150 lines
		
	
	
	
		
			4.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			150 lines
		
	
	
	
		
			4.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/bin/bash
 | |
| # Original Author: Alexander Epstein https://github.com/alexanderepstein
 | |
| 
 | |
| currentVersion="1.11.0"
 | |
| configuredClient=""
 | |
| configuredPython=""
 | |
| 
 | |
| ## This function determines which http get tool the system has installed and returns an error if there isnt one
 | |
| getConfiguredClient()
 | |
| {
 | |
|     if  command -v curl &>/dev/null ; then
 | |
|       configuredClient="curl"
 | |
|     elif command -v wget &>/dev/null ; then
 | |
|       configuredClient="wget"
 | |
|     elif command -v fetch &>/dev/null ; then
 | |
|       configuredClient="fetch"
 | |
|     else
 | |
|       echo "Error: This tool reqires either curl, wget, or fetch to be installed."
 | |
|       return 1
 | |
|     fi
 | |
| 
 | |
| }
 | |
| 
 | |
| getConfiguredPython()
 | |
| {
 | |
|   if  command -v python2 &>/dev/null ; then
 | |
|     configuredPython="python2"
 | |
|   elif command -v python &>/dev/null ; then
 | |
|     configuredPython="python"
 | |
|   else
 | |
|     echo "Error: This tool requires python 2 to be installed."
 | |
|     return 1
 | |
|   fi
 | |
| }
 | |
| 
 | |
| 
 | |
| python()
 | |
| {
 | |
|   case "$configuredPython" in
 | |
|     python2) python2 "$@";;
 | |
|     python) python "$@";;
 | |
|   esac
 | |
| }
 | |
| 
 | |
| ## Allows to call the users configured client without if statements everywhere
 | |
| httpGet()
 | |
| {
 | |
|   case "$configuredClient" in
 | |
|     curl) curl -A curl -s "$@";;
 | |
|     wget) wget -qO- "$@";;
 | |
|     fetch) fetch -o "...";;
 | |
|   esac
 | |
| }
 | |
| 
 | |
| 
 | |
| checkInternet()
 | |
| {
 | |
|   echo -e "GET http://google.com HTTP/1.0\n\n" | nc google.com 80 > /dev/null 2>&1 # query google with a get request
 | |
|   if [ $? -eq 0 ]; then #check if the output is 0, if so no errors have occured and we have connected to google successfully
 | |
|     return 0
 | |
|   else
 | |
|     echo "Error: no active internet connection" >&2 #sent to stderr
 | |
|     return 1
 | |
|   fi
 | |
| }
 | |
| 
 | |
| ## This function grabs information about a movie and using python parses the
 | |
| ## JSON response to extrapolate the information for storage
 | |
| getMovieInfo()
 | |
| {
 | |
|   apiKey=946f500a # try not to abuse this it is a key that came from the ruby-scripts repo I link to.
 | |
|   movie=$(echo "$@" | tr " " + ) ## format the inputs to use for the api
 | |
|   export PYTHONIOENCODING=utf8 #necessary for python in some cases
 | |
|   movieInfo=$(httpGet "http://www.omdbapi.com/?t=$movie&apikey=$apiKey") > /dev/null # query the server and get the JSON response
 | |
|   checkResponse=$(echo $movieInfo | python -c "import sys, json; print json.load(sys.stdin)['Response']" 2> /dev/null)
 | |
|   if [[ $checkResponse == "False" ]];then { echo "No movie found" ; return 1 ;} fi ## check to see if the movie was found
 | |
|   # The rest of the code is just extrapolating the data with python from the JSON response
 | |
|   title=$(echo $movieInfo | python -c "import sys, json; print json.load(sys.stdin)['Title']" 2> /dev/null)
 | |
|   year=$(echo $movieInfo | python -c "import sys, json; print json.load(sys.stdin)['Year']" 2> /dev/null)
 | |
|   score=$(echo $movieInfo | python -c "import sys, json; print json.load(sys.stdin)['Ratings'][1]['Value']" 2> /dev/null)
 | |
|   rated=$(echo $movieInfo | python -c "import sys, json; print json.load(sys.stdin)['Rated']" 2> /dev/null)
 | |
|   genre=$(echo $movieInfo | python -c "import sys, json; print json.load(sys.stdin)['Genre']" 2> /dev/null)
 | |
|   director=$(echo $movieInfo | python -c "import sys, json; print json.load(sys.stdin)['Director']" 2> /dev/null)
 | |
|   actors=$(echo $movieInfo | python -c "import sys, json; print json.load(sys.stdin)['Actors']" 2> /dev/null)
 | |
|   plot=$(echo $movieInfo | python -c "import sys, json; print json.load(sys.stdin)['Plot']" 2> /dev/null)
 | |
|   unset movieInfo # don't need this anymore
 | |
|   unset checkResponse # don't need this anymore
 | |
| }
 | |
| 
 | |
| # Prints the movie information out in a human readable format
 | |
| printMovieInfo()
 | |
| {
 | |
|   echo
 | |
|   echo '=================================================='
 | |
|   echo "| Title: $title"
 | |
|   echo "| Year: $year"
 | |
|   if [[ $score != "" ]];then echo "| Tomato: $score";fi
 | |
|   if [[ $rated != "N/A" && $rated != "" ]];then echo "| Rated: $rated";fi
 | |
|   echo "| Genre: $genre"
 | |
|   echo "| Director: $director"
 | |
|   echo "| Actors: $actors"
 | |
|   if [[ $plot != "N/A" && $plot != "" ]];then echo "| Plot: $plot"; fi
 | |
|   echo '=================================================='
 | |
|   echo
 | |
| }
 | |
| 
 | |
| 
 | |
| usage()
 | |
| {
 | |
|   echo "Movies tool"
 | |
|   echo "Usage: movies [flag] or movies [movieToSearch]"
 | |
|   echo "  -h Show the help"
 | |
|   echo "  -v Get the tool version"
 | |
| }
 | |
| 
 | |
| getConfiguredPython || exit 1
 | |
| getConfiguredClient || exit 1
 | |
| #checkInternet || exit 1 # check if we have a valid internet connection if this isnt true the rest of the script will not work so stop here
 | |
| 
 | |
| while getopts "uvh" opt; do
 | |
|   case $opt in
 | |
|     \?)
 | |
|       echo "Invalid option: -$OPTARG" >&2
 | |
|       exit 1
 | |
|     ;;
 | |
|     h)
 | |
|       usage
 | |
|       exit 0
 | |
|     ;;
 | |
|     v)
 | |
|       echo "Version $currentVersion"
 | |
|       exit 0
 | |
|     ;;
 | |
|     :)
 | |
|       echo "Option -$OPTARG requires an argument." >&2
 | |
|       exit 1
 | |
|     ;;
 | |
|   esac
 | |
| done
 | |
| 
 | |
| if [[ $# == 0 ]]; then
 | |
|   usage
 | |
| elif [[ $1 == "update" ]];then
 | |
|   update
 | |
| elif [[ $1 == "help" ]];then
 | |
|   usage
 | |
| else
 | |
|   getMovieInfo "$@" || exit 1 ## exit if we return 1 (chances are movie was not found)
 | |
|   printMovieInfo ## print out the data
 | |
| fi
 |