From 5a8328c91c3d5782f98971d99814a8fb5ec12043 Mon Sep 17 00:00:00 2001 From: daviddoji Date: Sat, 9 Dec 2023 18:35:19 +0100 Subject: [PATCH] Initial commit --- .gitignore | 1 + README.md | 0 youtube_api.py | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 83 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 youtube_api.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0a80c17 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +client_secrets.json diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/youtube_api.py b/youtube_api.py new file mode 100644 index 0000000..af7717f --- /dev/null +++ b/youtube_api.py @@ -0,0 +1,82 @@ +# -*- coding: utf-8 -*- + +# Sample Python code for youtube.playlists.update +# See instructions for running these code samples locally: +# https://developers.google.com/explorer-help/code-samples#python + +import argparse +import os + +from googleapiclient.discovery import build +from google_auth_oauthlib.flow import InstalledAppFlow +import googleapiclient.errors + +scopes = ["https://www.googleapis.com/auth/youtube.force-ssl"] + +channels = { + "breakbeat":"PLZFfy80_qguYVqbpQlX-aHdiYHTwc6-wW", + "wods": "PLZFfy80_qguYCbTDQD0GSK4zUzEjbQMQT", + "rap_espaƱol": "PLZFfy80_qgub44wWWDcAykdQCJNCXo4jp", +} + +def get_playlist_length(youtube, playlist_id): + items = youtube.playlists().list( + part="snippet,contentDetails", + id=playlist_id + ) + playlist_info = items.execute() + + return playlist_info['items'][0]['contentDetails']['itemCount'] + +def main(): + parser = argparse.ArgumentParser(description="Add a song to a YouTube playlist.") + parser.add_argument("channel_name", help="Name of the YouTube channel") + parser.add_argument("song", help="Name of the song to be added") + + args = parser.parse_args() + + channel_name = args.channel_name + song = args.song + + if channel_name not in channels: + print(f"Error: Channel '{channel_name}' not found.") + return + + channel_id = channels[channel_name] + + # Disable OAuthlib's HTTPS verification when running locally. + # *DO NOT* leave this option enabled in production. + os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1" + + api_service_name = "youtube" + api_version = "v3" + client_secret = "/home/david/client_secrets.json" + + flow = InstalledAppFlow.from_client_secrets_file( + client_secret, scopes) + credentials = flow.run_local_server(port=0) + + youtube = build( + api_service_name, api_version, + credentials=credentials) + + pos = get_playlist_length(youtube, channel_id) + + request = youtube.playlistItems().insert( + part="snippet", + body={ + "snippet": { + "playlistId": channel_id, + "position": pos, + "resourceId": { + "kind": "youtube#video", + "videoId": song + } + } + } + ) + response = request.execute() + print("Song added successfully!") + +if __name__ == "__main__": + main() \ No newline at end of file