QTube


NameQTube JSON
Version 2.0.0 PyPI version JSON
download
home_pagehttps://github.com/Killian42/QTube
SummaryAutomatically add Youtube videos to a playlist.
upload_time2024-04-09 21:16:40
maintainerNone
docs_urlNone
authorKillian Lebreton
requires_python>=3.8
licenseMIT License Copyright (c) [2024] [Killian Lebreton] Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
keywords youtube videos playlist python python3
VCS
bugtrack_url
requirements google_api_python_client google_auth_oauthlib isodate numpy protobuf pytube Requests setuptools
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <h1 align="center">
   <br>
   <a href="https://github.com/Killian42/QTube/releases/latest"><img src="logo.png" alt="QTube" width="500"></a>
   <br>
</h1>

<h3 align="center">Automatically add Youtube videos to a playlist.</h3>

<p align="center">
   <a href="https://www.repostatus.org/#active"><img src="https://www.repostatus.org/badges/latest/active.svg" alt="Project Status: Active – The project has reached a stable, usable state and is being actively developed." /></a>
   <a href="https://github.com/Killian42/QTube/releases/latest"><img src="https://img.shields.io/github/v/release/Killian42/QTube" alt="Latest Version"></a>
   <a href="https://github.com/Killian42/QTube/issues"><img src="https://img.shields.io/github/issues/Killian42/QTube" alt="Open Issues"></a>
   <a href="https://github.com/Killian42/QTube/issues?q=is%3Aissue+is%3Aclosed"><img src="https://img.shields.io/github/issues-closed/Killian42/QTube?color=sucess" alt="Closed Issues"></a>
   <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/license-MIT-green" alt="License"></a>
   <a href="https://github.com/psf/black"><img src="https://img.shields.io/badge/code%20style-black-000000.svg" alt="Code style: black"></a>
   <a href="https://github.com/Killian42/QTube"><img src="https://img.shields.io/github/languages/code-size/Killian42/QTube" alt="Code Size"></a>
</p>

<p align="center">
   <a href="#about">About</a> •
   <a href="#features">Features</a> •
   <a href="#how-to-use">How To Use</a> •
   <a href="#examples">Examples</a> •
   <a href="#faq">FAQ</a> •
   <a href="#contact">Contact</a> •
   <a href="#acknowledgments">Acknowledgments</a> •
   <a href="#license">License</a>
</p>

## About
The reason for the existence of this software is Youtube's seemingly random behavior when it comes to notifying people that a new video has been published (late or missing notifications, useless notification bell, videos not appearing in the subscription tab, ...).

With this software, you can set a number of rules that determine which videos are added to a dedicated playlist, so you won't miss any new uploads!

## Features
Each of these rules is based on putting some kind of constraint on video properties. Currently, the following features are available:
* Channel name filtering
* Title filtering
* Description filtering
* Tags filtering
* Language filtering
* Caption filtering
* Duration filtering
* Quality filtering
* Upload date filtering
* Shorts filtering
* Duplicate checking

## How to use
Before using this software, you first need to get a Youtube API key and create a web app to get a client secrets file (that should look like [this](docs/client_secrets_template.json)). This [Corey Schafer video](https://www.youtube.com/watch?v=vQQEaSnQ_bs) goes through the process step by step.

Once that's done, either clone this repository or download the ZIP archive. Then, copy and rename the [user parameters template](docs/user_params_template.json) file to *user_params.json*. Modify it so that it fits your needs (more information on how in the [following table](#user-defined-parameters) and in the [examples section](#examples)).

Verify that you have all of the dependencies installed (see the [requirements](requirements.txt) file).

Finally, execute the [run.py](QTube/run.py) file to start the software.

I would recommend creating a task to execute the program regularly (like once a day).

For more versatile uses, you can also use command line arguments with the [run.py](QTube/run.py) file. Enable this option by setting the parameter `override_json` to *True* in your JSON user parameters file. Provided command line arguments will then override what is in your JSON user parameters file.

### User-defined parameters
|Parameter|Optional|Description|Possible values|
|--|:--:|:--:|:--:|
|`required_in_channel_name`|Yes|Words that must be in channel names, typically channel names themselves. Videos from channels not containing any of the words of this list in their name will not be added.|Any string|
|`banned_in_channel_name`|Yes|Words that must not be in channel names, typically channel names themselves. Videos from channels containing any of the words of this list in their name will not be added.|Any string|
|`include_extra_channels`|No|Determines whether to include channels the user is not subscribed to.|boolean|
|`extra_channel_handles`|Yes|Handles of additional channels to be checked. Handles are found at the end of a channel's URL: `https://www.youtube.com/@*handle*`|Any channel handle|
|`required_in_title`|Yes|Words that must be in video titles. Videos with titles not containing any of the words of this list will not be added.|Any string|
|`banned_in_title`|Yes|Words that must not be in video titles. Videos with titles containing any of the words of this list will not be added.|Any string|
|`ignore_title_emojis`|No|Determines whether emojis are ignored in video titles.|boolean|
|`ignore_title_punctuation`|No|Determines whether punctuation is ignored in video titles.|boolean|
|`ignore_title_case`|No|Determines whether case is ignored in video titles.|boolean|
|`required_in_description`|Yes|Words that must be in video descriptions. Videos with descriptions not containing any of the words of this list will not be added.|Any string|
|`banned_in_description`|Yes|Words that must not be in video descriptions. Videos with descriptions containing any of the words of this list will not be added.|Any string|
|`required_tags`|Yes|Tags that must be associated with the videos.|Any string|
|`banned_tags`|Yes|Tags that must not be associated with the videos.|Any string|
|`preferred_languages`|Yes|Languages the videos need to be in. Videos with an unspecified language will be added as a precaution.|Any [ISO 639-1 code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)|
|`require_captions`|No|Determines whether to add videos with no captions.|boolean|
|`caption_options`|Yes|Caption properties such as language, track kind, audio type and accessibility parameters.|See [Youtube captions docs](https://developers.google.com/youtube/v3/docs/captions)|
|`allowed_durations`|Yes|Minimum and maximum video durations (in minutes).|Two positive integers|
|`lowest_definition`|Yes|Minimum definition. Videos with definitions stricly lower than this value will not be added.|*SD* or *HD*|
|`lowest_resolution`|Yes|Minimum resolution. Videos with resolutions stricly lower than this value will not be added.|Any of [Youtube standard resolutions](https://support.google.com/youtube/answer/6375112)|
|`lowest_framerate`|Yes|Minimum framerate. Videos with framerates stricly lower than this value will not be added.|Positive integer|
|`preferred_dimensions`|Yes|Dimension the videos need to be in.|*2D*, *3D* or both|
|`preferred_projections`|Yes|Projection the videos need to be in.|*rectangular*, *360* or both|
|`run_frequency`|No|Defines the duration, in days, of the timeframe considered by the software. Can be interpreted as the frequency the program should be run.|*daily*, *weekly*, *monthly* or any positive integer|
|`keep_shorts`|No|Determines whether to add shorts.|boolean|
|`keep_duplicates`|No|Determines whether to add videos that are already in the playlist.|boolean|
|`upload_playlist_ID`|No|ID of the playlist the videos will be added to. Playlist IDs are found at the end of their URL: `https://www.youtube.com/playlist?list=*playlist_ID*`|Playlist ID|
|`override_json`|No|Allow command line arguments to override user_params.json parameters.|boolean|
|`verbosity`|No|Controls how much information is shown in the terminal. Options can be combined, so that selecting each option gives the same result as selecting *all*. <br>1: Everything is shown.<br>2: Nothing is shown.<br>3: Only information regarding function execution is shown.<br>4: Only information regarding credentials is shown (loading, retrieving and saving).<br>5: Only information regarding added videos is shown (number, channel names and video titles).|<br>*all*<sup> 1 </sup>, <br>*none*<sup> 2 </sup> , <br>*func*<sup> 3 </sup>, <br>*credentials*<sup> 4 </sup> ,<br>*videos*<sup> 5 </sup>.|

All parameters are case-sensitive by default and if you do not want to use an optional parameter, replace its value with *null* or delete the entry.

For further information about each parameter, check the note associated with the [release](https://github.com/Killian42/QTube/releases) they were introduced in.
### Requirements
See the [requirements](requirements.txt) file.

## Examples
This section presents examples of user parameters json files for concrete use-cases.
* <a href="#example-1---every-videos-from-subscribed-channels">Every videos from subscribed channels</a>
* <a href="#example-2---higher-quality-videos">Higher quality videos</a>
* <a href="#example-3---specific-video-series-from-a-creator">Video series from a creator</a> 

### Example 1 - Every videos from subscribed channels
The following *user_params.json* file would add every new videos from channels you are subcribed to.
```
{
"required_in_channel_name": null,
"banned_in_channel_name": null,
"include_extra_channels": false,
"extra_channel_handles": null,
"required_in_title": null,
"banned_in_title": null,
"ignore_title_emojis": false,
"ignore_title_punctuation": false,
"ignore_title_case": false,
"required_in_description": null,
"banned_in_description": null,
"required_tags": null,
"banned_tags": null,
"preferred_languages": null,
"require_captions":false,
"caption_options": null,
"allowed_durations": null,
"lowest_definition": null,
"lowest_resolution": null,
"lowest_framerate": null,
"preferred_dimensions": null,
"preferred_projections": null,
"run_frequency":"daily",
"keep_shorts": true,
"keep_duplicates": false,
"upload_playlist_ID": "your_playlist_ID",
"override_json":false,
"verbosity": ["credentials","videos"]
}
```
### Example 2 - Higher quality videos
The following *user_params.json* file would only add videos with good quality.
```
{
"required_in_channel_name": null,
"banned_in_channel_name": null,
"include_extra_channels": false,
"extra_channel_handles": null,
"required_in_title": null,
"banned_in_title": null,
"ignore_title_emojis": false,
"ignore_title_punctuation": false,
"ignore_title_case": false,
"required_in_description": null,
"banned_in_description": null,
"required_tags": null,
"banned_tags": null,
"preferred_languages": null,
"require_captions":false,
"caption_options": null,
"allowed_durations": null,
"lowest_definition": "HD",
"lowest_resolution": "1080p",
"lowest_framerate": 60,
"preferred_dimensions": ["2D"],
"preferred_projections": ["rectangular"],
"run_frequency":"daily",
"keep_shorts": true,
"keep_duplicates": false,
"upload_playlist_ID": "your_playlist_ID",
"override_json":false,
"verbosity": ["credentials","videos"]
}
```
### Example 3 - Specific video series from a creator
The following *user_params.json* file would only add the *$1 vs.* MrBeast videos.
```
{
"required_in_channel_name": ["MrBeast"],
"banned_in_channel_name": null,
"include_extra_channels": false,
"extra_channel_handles": null,
"required_in_title": ["$1 vs."],
"banned_in_title": null,
"ignore_title_emojis": true,
"ignore_title_punctuation": false,
"ignore_title_case": true,
"required_in_description": null,
"banned_in_description": null,
"required_tags": null,
"banned_tags": null,
"preferred_languages": ["en"],
"require_captions": false,
"caption_options": null,
"allowed_durations": null,
"lowest_definition": "HD",
"lowest_resolution": null,
"lowest_framerate": null,
"preferred_dimensions": ["2D"],
"preferred_projections": ["rectangular"],
"run_frequency":"daily",
"keep_shorts": false,
"keep_duplicates": false,
"upload_playlist_ID": "your_playlist_ID",
"override_json":false,
"verbosity": ["credentials","videos"]
}
```

## FAQ
There are none yet. But don't hesitate to ask by sending me an [email](mailto:killian.lebreton35@gmail.com).

## Contact
You can reach me by [email](mailto:killian.lebreton35@gmail.com). Please put *QTube* in the subject line.

## Acknowledgments
Big thanks [Corey Schafer](https://github.com/CoreyMSchafer) for his great tutorials, as well as for providing the OAuth snippets used in this software.

## License
This project is licensed under the [MIT License](LICENSE.txt).

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/Killian42/QTube",
    "name": "QTube",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "Killian Lebreton <killian.lebreton35@gmail.com>",
    "keywords": "youtube, videos, playlist, python, python3",
    "author": "Killian Lebreton",
    "author_email": "Killian Lebreton <killian.lebreton35@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/c3/8f/548c1517152466ed3bb1d737f58f92a8a1742d5d1698efd4da15051f00f6/QTube-2.0.0.tar.gz",
    "platform": null,
    "description": "<h1 align=\"center\">\r\n   <br>\r\n   <a href=\"https://github.com/Killian42/QTube/releases/latest\"><img src=\"logo.png\" alt=\"QTube\" width=\"500\"></a>\r\n   <br>\r\n</h1>\r\n\r\n<h3 align=\"center\">Automatically add Youtube videos to a playlist.</h3>\r\n\r\n<p align=\"center\">\r\n   <a href=\"https://www.repostatus.org/#active\"><img src=\"https://www.repostatus.org/badges/latest/active.svg\" alt=\"Project Status: Active \u2013 The project has reached a stable, usable state and is being actively developed.\" /></a>\r\n   <a href=\"https://github.com/Killian42/QTube/releases/latest\"><img src=\"https://img.shields.io/github/v/release/Killian42/QTube\" alt=\"Latest Version\"></a>\r\n   <a href=\"https://github.com/Killian42/QTube/issues\"><img src=\"https://img.shields.io/github/issues/Killian42/QTube\" alt=\"Open Issues\"></a>\r\n   <a href=\"https://github.com/Killian42/QTube/issues?q=is%3Aissue+is%3Aclosed\"><img src=\"https://img.shields.io/github/issues-closed/Killian42/QTube?color=sucess\" alt=\"Closed Issues\"></a>\r\n   <a href=\"https://opensource.org/licenses/MIT\"><img src=\"https://img.shields.io/badge/license-MIT-green\" alt=\"License\"></a>\r\n   <a href=\"https://github.com/psf/black\"><img src=\"https://img.shields.io/badge/code%20style-black-000000.svg\" alt=\"Code style: black\"></a>\r\n   <a href=\"https://github.com/Killian42/QTube\"><img src=\"https://img.shields.io/github/languages/code-size/Killian42/QTube\" alt=\"Code Size\"></a>\r\n</p>\r\n\r\n<p align=\"center\">\r\n   <a href=\"#about\">About</a> \u2022\r\n   <a href=\"#features\">Features</a> \u2022\r\n   <a href=\"#how-to-use\">How To Use</a> \u2022\r\n   <a href=\"#examples\">Examples</a> \u2022\r\n   <a href=\"#faq\">FAQ</a> \u2022\r\n   <a href=\"#contact\">Contact</a> \u2022\r\n   <a href=\"#acknowledgments\">Acknowledgments</a> \u2022\r\n   <a href=\"#license\">License</a>\r\n</p>\r\n\r\n## About\r\nThe reason for the existence of this software is Youtube's seemingly random behavior when it comes to notifying people that a new video has been published (late or missing notifications, useless notification bell, videos not appearing in the subscription tab, ...).\r\n\r\nWith this software, you can set a number of rules that determine which videos are added to a dedicated playlist, so you won't miss any new uploads!\r\n\r\n## Features\r\nEach of these rules is based on putting some kind of constraint on video properties. Currently, the following features are available:\r\n* Channel name filtering\r\n* Title filtering\r\n* Description filtering\r\n* Tags filtering\r\n* Language filtering\r\n* Caption filtering\r\n* Duration filtering\r\n* Quality filtering\r\n* Upload date filtering\r\n* Shorts filtering\r\n* Duplicate checking\r\n\r\n## How to use\r\nBefore using this software, you first need to get a Youtube API key and create a web app to get a client secrets file (that should look like [this](docs/client_secrets_template.json)). This [Corey Schafer video](https://www.youtube.com/watch?v=vQQEaSnQ_bs) goes through the process step by step.\r\n\r\nOnce that's done, either clone this repository or download the ZIP archive. Then, copy and rename the [user parameters template](docs/user_params_template.json) file to *user_params.json*. Modify it so that it fits your needs (more information on how in the [following table](#user-defined-parameters) and in the [examples section](#examples)).\r\n\r\nVerify that you have all of the dependencies installed (see the [requirements](requirements.txt) file).\r\n\r\nFinally, execute the [run.py](QTube/run.py) file to start the software.\r\n\r\nI would recommend creating a task to execute the program regularly (like once a day).\r\n\r\nFor more versatile uses, you can also use command line arguments with the [run.py](QTube/run.py) file. Enable this option by setting the parameter `override_json` to *True* in your JSON user parameters file. Provided command line arguments will then override what is in your JSON user parameters file.\r\n\r\n### User-defined parameters\r\n|Parameter|Optional|Description|Possible values|\r\n|--|:--:|:--:|:--:|\r\n|`required_in_channel_name`|Yes|Words that must be in channel names, typically channel names themselves. Videos from channels not containing any of the words of this list in their name will not be added.|Any string|\r\n|`banned_in_channel_name`|Yes|Words that must not be in channel names, typically channel names themselves. Videos from channels containing any of the words of this list in their name will not be added.|Any string|\r\n|`include_extra_channels`|No|Determines whether to include channels the user is not subscribed to.|boolean|\r\n|`extra_channel_handles`|Yes|Handles of additional channels to be checked. Handles are found at the end of a channel's URL: `https://www.youtube.com/@*handle*`|Any channel handle|\r\n|`required_in_title`|Yes|Words that must be in video titles. Videos with titles not containing any of the words of this list will not be added.|Any string|\r\n|`banned_in_title`|Yes|Words that must not be in video titles. Videos with titles containing any of the words of this list will not be added.|Any string|\r\n|`ignore_title_emojis`|No|Determines whether emojis are ignored in video titles.|boolean|\r\n|`ignore_title_punctuation`|No|Determines whether punctuation is ignored in video titles.|boolean|\r\n|`ignore_title_case`|No|Determines whether case is ignored in video titles.|boolean|\r\n|`required_in_description`|Yes|Words that must be in video descriptions. Videos with descriptions not containing any of the words of this list will not be added.|Any string|\r\n|`banned_in_description`|Yes|Words that must not be in video descriptions. Videos with descriptions containing any of the words of this list will not be added.|Any string|\r\n|`required_tags`|Yes|Tags that must be associated with the videos.|Any string|\r\n|`banned_tags`|Yes|Tags that must not be associated with the videos.|Any string|\r\n|`preferred_languages`|Yes|Languages the videos need to be in. Videos with an unspecified language will be added as a precaution.|Any [ISO 639-1 code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)|\r\n|`require_captions`|No|Determines whether to add videos with no captions.|boolean|\r\n|`caption_options`|Yes|Caption properties such as language, track kind, audio type and accessibility parameters.|See [Youtube captions docs](https://developers.google.com/youtube/v3/docs/captions)|\r\n|`allowed_durations`|Yes|Minimum and maximum video durations (in minutes).|Two positive integers|\r\n|`lowest_definition`|Yes|Minimum definition. Videos with definitions stricly lower than this value will not be added.|*SD* or *HD*|\r\n|`lowest_resolution`|Yes|Minimum resolution. Videos with resolutions stricly lower than this value will not be added.|Any of [Youtube standard resolutions](https://support.google.com/youtube/answer/6375112)|\r\n|`lowest_framerate`|Yes|Minimum framerate. Videos with framerates stricly lower than this value will not be added.|Positive integer|\r\n|`preferred_dimensions`|Yes|Dimension the videos need to be in.|*2D*, *3D* or both|\r\n|`preferred_projections`|Yes|Projection the videos need to be in.|*rectangular*, *360* or both|\r\n|`run_frequency`|No|Defines the duration, in days, of the timeframe considered by the software. Can be interpreted as the frequency the program should be run.|*daily*, *weekly*, *monthly* or any positive integer|\r\n|`keep_shorts`|No|Determines whether to add shorts.|boolean|\r\n|`keep_duplicates`|No|Determines whether to add videos that are already in the playlist.|boolean|\r\n|`upload_playlist_ID`|No|ID of the playlist the videos will be added to. Playlist IDs are found at the end of their URL: `https://www.youtube.com/playlist?list=*playlist_ID*`|Playlist ID|\r\n|`override_json`|No|Allow command line arguments to override user_params.json parameters.|boolean|\r\n|`verbosity`|No|Controls how much information is shown in the terminal. Options can be combined, so that selecting each option gives the same result as selecting *all*. <br>1: Everything is shown.<br>2: Nothing is shown.<br>3: Only information regarding function execution is shown.<br>4: Only information regarding credentials is shown (loading, retrieving and saving).<br>5: Only information regarding added videos is shown (number, channel names and video titles).|<br>*all*<sup> 1 </sup>, <br>*none*<sup> 2 </sup> , <br>*func*<sup> 3 </sup>, <br>*credentials*<sup> 4 </sup> ,<br>*videos*<sup> 5 </sup>.|\r\n\r\nAll parameters are case-sensitive by default and if you do not want to use an optional parameter, replace its value with *null* or delete the entry.\r\n\r\nFor further information about each parameter, check the note associated with the [release](https://github.com/Killian42/QTube/releases) they were introduced in.\r\n### Requirements\r\nSee the [requirements](requirements.txt) file.\r\n\r\n## Examples\r\nThis section presents examples of user parameters json files for concrete use-cases.\r\n* <a href=\"#example-1---every-videos-from-subscribed-channels\">Every videos from subscribed channels</a>\r\n* <a href=\"#example-2---higher-quality-videos\">Higher quality videos</a>\r\n* <a href=\"#example-3---specific-video-series-from-a-creator\">Video series from a creator</a> \r\n\r\n### Example 1 - Every videos from subscribed channels\r\nThe following *user_params.json* file would add every new videos from channels you are subcribed to.\r\n```\r\n{\r\n\"required_in_channel_name\": null,\r\n\"banned_in_channel_name\": null,\r\n\"include_extra_channels\": false,\r\n\"extra_channel_handles\": null,\r\n\"required_in_title\": null,\r\n\"banned_in_title\": null,\r\n\"ignore_title_emojis\": false,\r\n\"ignore_title_punctuation\": false,\r\n\"ignore_title_case\": false,\r\n\"required_in_description\": null,\r\n\"banned_in_description\": null,\r\n\"required_tags\": null,\r\n\"banned_tags\": null,\r\n\"preferred_languages\": null,\r\n\"require_captions\":false,\r\n\"caption_options\": null,\r\n\"allowed_durations\": null,\r\n\"lowest_definition\": null,\r\n\"lowest_resolution\": null,\r\n\"lowest_framerate\": null,\r\n\"preferred_dimensions\": null,\r\n\"preferred_projections\": null,\r\n\"run_frequency\":\"daily\",\r\n\"keep_shorts\": true,\r\n\"keep_duplicates\": false,\r\n\"upload_playlist_ID\": \"your_playlist_ID\",\r\n\"override_json\":false,\r\n\"verbosity\": [\"credentials\",\"videos\"]\r\n}\r\n```\r\n### Example 2 - Higher quality videos\r\nThe following *user_params.json* file would only add videos with good quality.\r\n```\r\n{\r\n\"required_in_channel_name\": null,\r\n\"banned_in_channel_name\": null,\r\n\"include_extra_channels\": false,\r\n\"extra_channel_handles\": null,\r\n\"required_in_title\": null,\r\n\"banned_in_title\": null,\r\n\"ignore_title_emojis\": false,\r\n\"ignore_title_punctuation\": false,\r\n\"ignore_title_case\": false,\r\n\"required_in_description\": null,\r\n\"banned_in_description\": null,\r\n\"required_tags\": null,\r\n\"banned_tags\": null,\r\n\"preferred_languages\": null,\r\n\"require_captions\":false,\r\n\"caption_options\": null,\r\n\"allowed_durations\": null,\r\n\"lowest_definition\": \"HD\",\r\n\"lowest_resolution\": \"1080p\",\r\n\"lowest_framerate\": 60,\r\n\"preferred_dimensions\": [\"2D\"],\r\n\"preferred_projections\": [\"rectangular\"],\r\n\"run_frequency\":\"daily\",\r\n\"keep_shorts\": true,\r\n\"keep_duplicates\": false,\r\n\"upload_playlist_ID\": \"your_playlist_ID\",\r\n\"override_json\":false,\r\n\"verbosity\": [\"credentials\",\"videos\"]\r\n}\r\n```\r\n### Example 3 - Specific video series from a creator\r\nThe following *user_params.json* file would only add the *$1 vs.* MrBeast videos.\r\n```\r\n{\r\n\"required_in_channel_name\": [\"MrBeast\"],\r\n\"banned_in_channel_name\": null,\r\n\"include_extra_channels\": false,\r\n\"extra_channel_handles\": null,\r\n\"required_in_title\": [\"$1 vs.\"],\r\n\"banned_in_title\": null,\r\n\"ignore_title_emojis\": true,\r\n\"ignore_title_punctuation\": false,\r\n\"ignore_title_case\": true,\r\n\"required_in_description\": null,\r\n\"banned_in_description\": null,\r\n\"required_tags\": null,\r\n\"banned_tags\": null,\r\n\"preferred_languages\": [\"en\"],\r\n\"require_captions\": false,\r\n\"caption_options\": null,\r\n\"allowed_durations\": null,\r\n\"lowest_definition\": \"HD\",\r\n\"lowest_resolution\": null,\r\n\"lowest_framerate\": null,\r\n\"preferred_dimensions\": [\"2D\"],\r\n\"preferred_projections\": [\"rectangular\"],\r\n\"run_frequency\":\"daily\",\r\n\"keep_shorts\": false,\r\n\"keep_duplicates\": false,\r\n\"upload_playlist_ID\": \"your_playlist_ID\",\r\n\"override_json\":false,\r\n\"verbosity\": [\"credentials\",\"videos\"]\r\n}\r\n```\r\n\r\n## FAQ\r\nThere are none yet. But don't hesitate to ask by sending me an [email](mailto:killian.lebreton35@gmail.com).\r\n\r\n## Contact\r\nYou can reach me by [email](mailto:killian.lebreton35@gmail.com). Please put *QTube* in the subject line.\r\n\r\n## Acknowledgments\r\nBig thanks [Corey Schafer](https://github.com/CoreyMSchafer) for his great tutorials, as well as for providing the OAuth snippets used in this software.\r\n\r\n## License\r\nThis project is licensed under the [MIT License](LICENSE.txt).\r\n",
    "bugtrack_url": null,
    "license": "MIT License  Copyright (c) [2024] [Killian Lebreton]  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ",
    "summary": "Automatically add Youtube videos to a playlist.",
    "version": "2.0.0",
    "project_urls": {
        "Homepage": "https://github.com/Killian42/QTube",
        "Issues": "https://github.com/Killian42/QTube/issues",
        "Repository": "https://github.com/Killian42/QTube"
    },
    "split_keywords": [
        "youtube",
        " videos",
        " playlist",
        " python",
        " python3"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e0fcf5a96661baf2b42d8f45c9354ec0874f6f37eb03bcfb8b0f29d84e8176b8",
                "md5": "3f66c7d1d6bfe897d0796594b780bd2a",
                "sha256": "9ee575655161f176bd6542d376a610d24d8d000bc78cf37064b359082f68d018"
            },
            "downloads": -1,
            "filename": "QTube-2.0.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "3f66c7d1d6bfe897d0796594b780bd2a",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 44998,
            "upload_time": "2024-04-09T21:16:36",
            "upload_time_iso_8601": "2024-04-09T21:16:36.853103Z",
            "url": "https://files.pythonhosted.org/packages/e0/fc/f5a96661baf2b42d8f45c9354ec0874f6f37eb03bcfb8b0f29d84e8176b8/QTube-2.0.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c38f548c1517152466ed3bb1d737f58f92a8a1742d5d1698efd4da15051f00f6",
                "md5": "08d748d3f3cdde053faa4a6dba571c5c",
                "sha256": "bb337c401705dcd4f96c03ff42780d5386f92219aa93f3630a8207664210b0a2"
            },
            "downloads": -1,
            "filename": "QTube-2.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "08d748d3f3cdde053faa4a6dba571c5c",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 45762,
            "upload_time": "2024-04-09T21:16:40",
            "upload_time_iso_8601": "2024-04-09T21:16:40.405931Z",
            "url": "https://files.pythonhosted.org/packages/c3/8f/548c1517152466ed3bb1d737f58f92a8a1742d5d1698efd4da15051f00f6/QTube-2.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-04-09 21:16:40",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Killian42",
    "github_project": "QTube",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "google_api_python_client",
            "specs": [
                [
                    "==",
                    "2.119.0"
                ]
            ]
        },
        {
            "name": "google_auth_oauthlib",
            "specs": [
                [
                    "==",
                    "1.0.0"
                ]
            ]
        },
        {
            "name": "isodate",
            "specs": [
                [
                    "==",
                    "0.6.1"
                ]
            ]
        },
        {
            "name": "numpy",
            "specs": [
                [
                    "==",
                    "1.24.3"
                ]
            ]
        },
        {
            "name": "protobuf",
            "specs": [
                [
                    "==",
                    "4.25.1"
                ]
            ]
        },
        {
            "name": "pytube",
            "specs": [
                [
                    "==",
                    "15.0.0"
                ]
            ]
        },
        {
            "name": "Requests",
            "specs": [
                [
                    "==",
                    "2.31.0"
                ]
            ]
        },
        {
            "name": "setuptools",
            "specs": [
                [
                    "==",
                    "68.2.2"
                ]
            ]
        }
    ],
    "lcname": "qtube"
}
        
Elapsed time: 0.23581s