From bd396707b3eb7f906f8a728ac2616e15bd160fcf Mon Sep 17 00:00:00 2001 From: 7x11x13 Date: Tue, 14 Nov 2023 21:46:08 -0500 Subject: [PATCH] Update README --- README.md | 128 ++++++++++++++++++++++++++++++++++++++++++++++++- pyproject.toml | 5 +- 2 files changed, 131 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e4ecdd6..2e97402 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,129 @@ # youtube-up -## WIP \ No newline at end of file +Upload videos to YouTube using the internal YouTube API. + +# Installation + +From [PyPI:](https://pypi.org/project/youtube-up/) +`pip install youtube-up` + +# Documentation + +https://7x11x13.xyz/youtube-up/youtube_up + +# Examples + +## Upload a video +```python +from youtube_up import AllowCommentsEnum, Metadata, PrivacyEnum, YTUploaderSession + +uploader = YTUploaderSession.from_cookies_txt("cookies/cookies.txt") +metadata = Metadata( + title="Video title", + description="Video description", + privacy=PrivacyEnum.PUBLIC, + made_for_kids=False, + allow_comments_mode=AllowCommentsEnum.HOLD_ALL, +) +uploader.upload("video.webm", metadata) +``` +Note that for Enum-type parameters we can either pass the Enum itself (as shown above), +or the Enum value, or the Enum key, as a string. For example, instead of writing + +`allow_comments_mode=AllowCommentsEnum.HOLD_ALL` + +we could instead write `allow_comments_mode="HOLD_ALL"` +or `allow_comments_mode="APPROVED_COMMENTS"` + +## Upload multiple videos +```python +from youtube_up import Metadata, YTUploaderSession + +uploader = YTUploaderSession.from_cookies_txt("cookies/cookies.txt") +metadata_1 = Metadata( + title="Video 1", +) +metadata_2 = Metadata( + title="Video 2", +) +uploader.upload("video1.webm", metadata_1) +uploader.upload("video2.webm", metadata_2) +``` + +## Upload to a new or existing playlist +```python +from youtube_up import Metadata, YTUploaderSession, Playlist + +uploader = YTUploaderSession.from_cookies_txt("cookies/cookies.txt") +metadata = Metadata( + title="Video 1", + playlists=[ + Playlist( + "Songs by me", + description="Playlist that will only be created if " + "no playlist exists with the title 'Songs by me'", + create_if_title_doesnt_exist=True, + create_if_title_exists=False, + ), + Playlist( + "test playlist", + description="Playlist that video will be added to " + "only if it exists already. This description does " + "nothing.", + create_if_title_doesnt_exist=False, + create_if_title_exists=False, + ), + Playlist( + "Album", + description="Playlist will be created even if there" + " is already a playlist with the name 'Album'" + create_if_title_doesnt_exist=True, + create_if_title_exists=True, + ), + ], +) +uploader.upload("video.webm", metadata) +``` + +## CLI +youtube-up comes with a CLI app for uploading videos. For example, if we wanted to +create a public video with the title "Video title", we would execute the following command: +`youtube-up video video.webm --title="Video title" --cookies_file="cookies/cookies.txt" --privacy="PUBLIC"` + +The app can also take a JSON file as input. For example, the following JSON file would upload +one video to a new or existing playlist called "Music" and one video which is set to premiere +on December 25th, 2023 at 5 PM (local time). + +```json +[ + { + "file": "song.webm", + "metadata": { + "title": "New song", + "privacy": "PUBLIC", + "playlists": [ + { + "title": "Music" + } + ] + } + }, + { + "file": "premiere.webm", + "metadata": { + "title": "Special Announcement", + "scheduled_upload": "2023-12-25T17:00:00", + "premiere_countdown_duration": "ONE_MIN", + "premiere_theme": "BRIGHT" + } + } +] +``` + +If we wanted the video to premiere at 5 PM GMT, would could have written "2023-12-25T17:00:00" +instead. We then run + +`youtube-up json metadata.json --cookies_file="cookies/cookies.txt"` + +to upload these videos. +""" \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index cbe405b..aa1b615 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,9 +1,12 @@ [tool.poetry] name = "youtube-up" -version = "0.1.0" +version = "0.1.1" description = "Upload videos to YouTube using the internal YouTube API" authors = ["7x11x13 "] readme = "README.md" +repository = "https://github.com/7x11x13/youtube-up" +documentation = "https://7x11x13.xyz/youtube-up/youtube_up" +keywords = ["YouTube", "upload"] [tool.poetry.dependencies] python = "^3.9"