From 57491f20a6728c5adfd2457a8fb61276ae109bc0 Mon Sep 17 00:00:00 2001 From: Ray Lyon Date: Tue, 29 Mar 2022 18:23:46 -0400 Subject: [PATCH] initial working base-bot --- movie-bot/movie_check.py | 146 +++++++++++++++++++++++++++++++++++++++ movie-bot/moviebot.py | 24 +++++++ 2 files changed, 170 insertions(+) create mode 100644 movie-bot/movie_check.py create mode 100644 movie-bot/moviebot.py diff --git a/movie-bot/movie_check.py b/movie-bot/movie_check.py new file mode 100644 index 0000000..0156327 --- /dev/null +++ b/movie-bot/movie_check.py @@ -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() diff --git a/movie-bot/moviebot.py b/movie-bot/moviebot.py new file mode 100644 index 0000000..19c5aef --- /dev/null +++ b/movie-bot/moviebot.py @@ -0,0 +1,24 @@ +#!/usr/bin/python3 + +from telegram.ext import Updater, CommandHandler, CallbackContext +import logging +from telegram import Update +import os + +token = os.environ.get("TG_BOT_TOKEN") + +updater = Updater(token=token, use_context=True) +dispatcher = updater.dispatcher + +logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', + level=logging.INFO) + +def start(update: Update, context: CallbackContext): + context.bot.send_message(chat_id=update.effective_chat.id, text="I'm a bot, please talk to me!") + +start_handler = CommandHandler('start', start) +dispatcher.add_handler(start_handler) + + +updater.start_polling() +