14 Commits

Author SHA1 Message Date
Ray Lyon
935b4d4e8b Merge pull request #1 from skoobasteeve/functions
Functions
2022-07-01 17:52:48 -04:00
Ray Lyon
a39903d110 Merge branch 'main' into functions 2022-07-01 17:52:39 -04:00
a765093f64 added starz and showtime 2022-03-28 19:48:18 -04:00
Ray Lyon
b68daead14 Merge pull request #2 from skoobasteeve/movie-check-script
Movie check script
2022-03-28 19:37:16 -04:00
6a9aed30d1 add tmdb link to result 2022-03-28 19:36:08 -04:00
543fa9734b fix for missing date printing 2022-03-28 19:30:25 -04:00
01a3302911 rename dir 2022-03-28 19:20:52 -04:00
2197eaf064 initial commit 2022-03-28 19:19:00 -04:00
f4bef215b5 variable shuffle, remove urllib 2022-03-28 19:18:31 -04:00
b732735187 functions, better formatting 2022-03-28 18:59:11 -04:00
394a92efaa merge? 2020-11-28 16:48:13 -05:00
d914434618 More error handling, input file check 2020-11-25 17:03:16 -05:00
2217c1d773 added file input option, broke into functions 2020-11-25 16:31:14 -05:00
8a8cf03861 error function and for loop fix 2020-11-25 15:04:51 -05:00
4 changed files with 151 additions and 100 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
.vscode

View File

@@ -45,10 +45,10 @@ folder_encode () {
FILENAME=$(basename "$FILE")
if [[ $RES -gt 1920 ]]; then
echo "File is 4K or higher, encoding using CRF $QUALITY_4K"
ffmpeg -i "$FILE" -c:v libx264 -preset slow -tune film -crf "$QUALITY_4K" -maxrate 25M -bufsize 25M -c:a copy "$INPUT_SOURCE"/output/"$FILENAME" || echo "ERROR Line $LINENO: File not encoded, unknown error occurred." 1>&2
ffmpeg -i "$FILE" -c:v libx264 -preset slow -tune film -crf "$QUALITY_4K" -c:a copy "$INPUT_SOURCE"/output/"$FILENAME" || echo "ERROR Line $LINENO: File not encoded, unknown error occurred." 1>&2
elif [[ $RES -le 1920 ]] && [[ -n $RES ]]; then
echo "File is HD or lower, encoding using CRF $QUALITY_HD"
ffmpeg -i "$FILE" -c:v libx264 -preset slow -tune film -crf "$QUALITY_HD" -maxrate 15M -bufsize 15M -c:a copy "$INPUT_SOURCE"/output/"$FILENAME" || echo "ERROR Line $LINENO: File not encoded, unknown error occurred." 1>&2
ffmpeg -i "$FILE" -c:v libx264 -preset slow -tune film -crf "$QUALITY_HD" -c:a copy "$INPUT_SOURCE"/output/"$FILENAME" || echo "ERROR Line $LINENO: File not encoded, unknown error occurred." 1>&2
else
echo "ERROR Line $LINENO: Source file $FILE is not a valid video file" 1>&2
echo "Skipping..."
@@ -67,10 +67,10 @@ file_encode () {
RES=$(ffprobe -v error -select_streams v:0 -show_entries stream=width -of default=noprint_wrappers=1:nokey=1 "$INPUT_SOURCE")
if [[ $RES -gt 1920 ]]; then
echo "File is 4K or higher, encoding using CRF $QUALITY_4K"
ffmpeg -i "$INPUT_SOURCE" -c:v libx264 -preset slow -tune film -crf "$QUALITY_4K" -maxrate 25M -bufsize 25M -c:a copy "$FILEDIR"/output/"$FILENAME" || echo "ERROR Line $LINENO: File not encoded, unknown error occurred." 1>&2
ffmpeg -i "$INPUT_SOURCE" -c:v libx264 -preset slow -tune film -crf "$QUALITY_4K" -c:a copy "$FILEDIR"/output/"$FILENAME" || echo "ERROR Line $LINENO: File not encoded, unknown error occurred." 1>&2
elif [[ $RES -le 1920 ]] && [[ -n $RES ]]; then
echo "File is HD or lower, encoding using CRF $QUALITY_HD"
ffmpeg -i "$INPUT_SOURCE" -c:v libx264 -preset slow -tune film -crf "$QUALITY_HD" -maxrate 15M -bufsize 15M -c:a copy "$FILEDIR"/output/"$FILENAME" || echo "ERROR Line $LINENO: File not encoded, unknown error occurred." 1>&2
ffmpeg -i "$INPUT_SOURCE" -c:v libx264 -preset slow -tune film -crf "$QUALITY_HD" -c:a copy "$FILEDIR"/output/"$FILENAME" || echo "ERROR Line $LINENO: File not encoded, unknown error occurred." 1>&2
else
echo "ERROR Line $LINENO: Source file $INPUT_SOURCE is not a valid video file" 1>&2
fi

146
movie-check/movie_check.py Normal file
View File

@@ -0,0 +1,146 @@
#!/usr/bin/python3
import requests
from datetime import datetime
import os
import argparse
tmdb_api_token = os.environ.get("TMDB_API_TOKEN")
sa_api_token = os.environ.get("SA_API_TOKEN")
tmdb_url = "https://api.themoviedb.org/3"
tmdb_headers = {
'Authorization': f'Bearer {tmdb_api_token}',
'Content-Type': 'application/json;charset=utf-8',
'Accept': 'application/json;charset=utf-8'
}
sa_url = "https://streaming-availability.p.rapidapi.com/get/basic"
sa_headers = {
'x-rapidapi-host': "streaming-availability.p.rapidapi.com",
'x-rapidapi-key': sa_api_token
}
def get_args():
parser = argparse.ArgumentParser(
description='Search movie streaming availability.')
parser.add_argument('--year', type=int, help='Specify movie release year')
return parser.parse_args()
def tmdb_lookup(tmdb_url, tmdb_headers, movie, args):
tmdb_params = {
"language": "en-US",
"query": movie,
"page": 1,
"include_adult": False
}
if args.year:
tmdb_params["primary_release_year"] = args.year
tmdb_search = requests.get(f"{tmdb_url}/search/movie", params=tmdb_params,
headers=tmdb_headers).json()
if not tmdb_search["results"]:
print("I'm having trouble finding that movie. " +
"Check your spelling and try again.")
exit()
movie_id = tmdb_search['results'][0]['id']
movie_title = tmdb_search['results'][0]['title']
movie_release_check = tmdb_search['results'][0]['release_date']
if movie_release_check:
movie_release = datetime.strptime(
tmdb_search['results'][0]['release_date'], "%Y-%m-%d")
movie_year = movie_release.year
else:
movie_year = "???"
movie_rating = tmdb_search['results'][0]['vote_average']
return movie_id, movie_title, movie_year, movie_rating
def sa_lookup(sa_url, sa_headers, movie_id):
sa_params = {
"country": "us",
"tmdb_id": f"movie/{movie_id}",
"output_language": "en"
}
sa_request = requests.request("GET", sa_url, headers=sa_headers,
params=sa_params)
if sa_request.status_code == 404:
print("I'm having trouble finding that movie on streaming. " +
"Check your spelling and try again.")
exit()
sa_response = sa_request.json()
services = sa_response["streamingInfo"]
return sa_response, services
def services_speller(service):
if service == "hbo":
service_proper = "HBO Max"
elif service == "hulu":
service_proper = "Hulu"
elif service == "prime":
service_proper = "Amazon Prime"
elif service == "netflix":
service_proper = "Netflix"
elif service == "disney":
service_proper = "Disney+"
elif service == "apple":
service_proper = "Apple TV+"
elif service == "paramount":
service_proper = "Paramount+"
elif service == "starz":
service_proper = "STARZ"
elif service == "showtime":
service_proper = "Showtime"
else:
return service
return service_proper
def main():
args = get_args()
movie = input("Enter a movie: ")
movie_id, movie_title, movie_release, movie_rating = tmdb_lookup(
tmdb_url, tmdb_headers, movie, args)
print(f"\n{movie_title} ({movie_release})")
print(f"https://themoviedb.org/movie/{movie_id}")
print(f"Rating: {movie_rating}\n")
sa_response, services = sa_lookup(sa_url, sa_headers, movie_id)
if not services:
print("Streaming not available :(")
for s in services:
leaving_epoch = sa_response["streamingInfo"][s]["us"]["leaving"]
leaving_date = datetime.fromtimestamp(
int(leaving_epoch)).strftime('%Y-%m-%d')
link = sa_response["streamingInfo"][s]["us"]["link"]
print(f"Available on {services_speller(s)}")
if leaving_epoch != 0:
print(f"Will be leaving on {leaving_date}")
print(f"Watch here: {link}\n")
if __name__ == "__main__":
main()

View File

@@ -1,96 +0,0 @@
#!/usr/bin/python3
import requests
import urllib
from datetime import datetime
import os
import argparse
def get_args():
parser = argparse.ArgumentParser(description='Search movie streaming availability.')
parser.add_argument('--year', type=int, help='Specify movie release year')
return parser.parse_args()
tmdb_api_token = os.environ.get("TMDB_API_TOKEN")
sa_api_token = os.environ.get("SA_API_TOKEN")
tmdb_url = "https://api.themoviedb.org/3"
tmdb_headers = {
'Authorization': f'Bearer {tmdb_api_token}',
'Content-Type': 'application/json;charset=utf-8',
'Accept': 'application/json;charset=utf-8'
}
sa_url = "https://streaming-availability.p.rapidapi.com/get/basic"
sa_headers = {
'x-rapidapi-host': "streaming-availability.p.rapidapi.com",
'x-rapidapi-key': sa_api_token
}
args = get_args()
movie = input("Enter a movie: ")
movie_safe = urllib.parse.quote_plus(movie)
if args.year:
tmdb_search = requests.get(f"{tmdb_url}/search/movie?language=en-US&query={movie_safe}&page=1&include_adult=false&primary_release_year={args.year}", headers=tmdb_headers).json()
else:
tmdb_search = requests.get(f"{tmdb_url}/search/movie?language=en-US&query={movie_safe}&page=1&include_adult=false", headers=tmdb_headers).json()
if not tmdb_search["results"]:
print("I'm having trouble finding that movie. Check your spelling and try again.")
exit()
movie_id = tmdb_search['results'][0]['id']
movie_tile = tmdb_search['results'][0]['title']
movie_release_check = tmdb_search['results'][0]['release_date']
if movie_release_check:
movie_release = datetime.strptime(tmdb_search['results'][0]['release_date'], "%Y-%m-%d")
else: movie_release = "???"
movie_rating = tmdb_search['results'][0]['vote_average']
sa_querystring = {"country":"us","tmdb_id":f"movie/{movie_id}","output_language":"en"}
sa_request = requests.request("GET", sa_url, headers=sa_headers, params=sa_querystring)
if sa_request.status_code == 404:
print("I'm having trouble finding that movie. Check your spelling and try again.")
exit()
sa_response = sa_request.json()
services = sa_response["streamingInfo"]
def services_speller(service):
if service == "hbo":
service_proper = "HBO Max"
elif service == "hulu":
service_proper = "Hulu"
elif service == "prime":
service_proper = "Amazon Prime"
elif service == "netflix":
service_proper = "Netflix"
elif service == "disney":
service_proper = "Disney+"
elif service == "apple":
service_proper = "Apple TV+"
elif service == "paramount":
service_proper = "Paramount+"
else:
return service
return service_proper
print(movie_tile + f" ({movie_release.year})")
print(f"Rating: {movie_rating}")
if not services:
print("Streaming not available :(")
for s in services:
leaving_epoch = sa_response["streamingInfo"][s]["us"]["leaving"]
leaving_date = datetime.fromtimestamp(int(leaving_epoch)).strftime('%Y-%m-%d')
link = sa_response["streamingInfo"][s]["us"]["link"]
print(f"Available on {services_speller(s)}")
if leaving_epoch != 0:
print(f"Will be leaving {s} on {leaving_date}")
print(f"Watch here: {link}")