mirror of
https://github.com/yt-dlp/yt-dlp
synced 2025-12-20 08:05:40 +07:00
Compare commits
1 Commits
2021.09.25
...
2021.01.07
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0e7f2c7b4d |
4
.gitattributes
vendored
4
.gitattributes
vendored
@@ -1,4 +0,0 @@
|
|||||||
* text=auto
|
|
||||||
|
|
||||||
Makefile* text whitespace=-tab-in-indent
|
|
||||||
*.sh text eol=lf
|
|
||||||
13
.github/FUNDING.yml
vendored
13
.github/FUNDING.yml
vendored
@@ -1,13 +0,0 @@
|
|||||||
# These are supported funding model platforms
|
|
||||||
|
|
||||||
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
|
||||||
patreon: # Replace with a single Patreon username
|
|
||||||
open_collective: # Replace with a single Open Collective username
|
|
||||||
ko_fi: # Replace with a single Ko-fi username
|
|
||||||
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
|
||||||
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
|
||||||
liberapay: # Replace with a single Liberapay username
|
|
||||||
issuehunt: # Replace with a single IssueHunt username
|
|
||||||
otechie: # Replace with a single Otechie username
|
|
||||||
|
|
||||||
custom: ['https://github.com/yt-dlp/yt-dlp/blob/master/Collaborators.md#collaborators']
|
|
||||||
18
.github/ISSUE_TEMPLATE/1_broken_site.md
vendored
18
.github/ISSUE_TEMPLATE/1_broken_site.md
vendored
@@ -20,16 +20,16 @@
|
|||||||
## Checklist
|
## Checklist
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of yt-dlp:
|
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of youtube-dlc:
|
||||||
- First of, make sure you are using the latest version of yt-dlp. Run `yt-dlp --version` and ensure your version is 2021.09.25. If it's not, see https://github.com/yt-dlp/yt-dlp on how to update. Issues with outdated version will be REJECTED.
|
- First of, make sure you are using the latest version of youtube-dlc. Run `youtube-dlc --version` and ensure your version is 2021.01.07. If it's not, see https://github.com/pukkandan/yt-dlc on how to update. Issues with outdated version will be REJECTED.
|
||||||
- Make sure that all provided video/audio/playlist URLs (if any) are alive and playable in a browser.
|
- Make sure that all provided video/audio/playlist URLs (if any) are alive and playable in a browser.
|
||||||
- Make sure that all URLs and arguments with special characters are properly quoted or escaped as explained in https://github.com/yt-dlp/yt-dlp.
|
- Make sure that all URLs and arguments with special characters are properly quoted or escaped as explained in https://github.com/pukkandan/yt-dlc.
|
||||||
- Search the bugtracker for similar issues: https://github.com/yt-dlp/yt-dlp. DO NOT post duplicates.
|
- Search the bugtracker for similar issues: https://github.com/pukkandan/yt-dlc. DO NOT post duplicates.
|
||||||
- Finally, put x into all relevant boxes like this [x] (Dont forget to delete the empty space)
|
- Finally, put x into all relevant boxes like this [x] (Dont forget to delete the empty space)
|
||||||
-->
|
-->
|
||||||
|
|
||||||
- [ ] I'm reporting a broken site support
|
- [ ] I'm reporting a broken site support
|
||||||
- [ ] I've verified that I'm running yt-dlp version **2021.09.25**
|
- [ ] I've verified that I'm running youtube-dlc version **2021.01.07**
|
||||||
- [ ] I've checked that all provided URLs are alive and playable in a browser
|
- [ ] I've checked that all provided URLs are alive and playable in a browser
|
||||||
- [ ] I've checked that all URLs and arguments with special characters are properly quoted or escaped
|
- [ ] I've checked that all URLs and arguments with special characters are properly quoted or escaped
|
||||||
- [ ] I've searched the bugtracker for similar issues including closed ones
|
- [ ] I've searched the bugtracker for similar issues including closed ones
|
||||||
@@ -38,13 +38,13 @@ ## Checklist
|
|||||||
## Verbose log
|
## Verbose log
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Provide the complete verbose output of yt-dlp that clearly demonstrates the problem.
|
Provide the complete verbose output of youtube-dlc that clearly demonstrates the problem.
|
||||||
Add the `-v` flag to your command line you run yt-dlp with (`yt-dlp -v <your command line>`), copy the WHOLE output and insert it below. It should look similar to this:
|
Add the `-v` flag to your command line you run youtube-dlc with (`youtube-dlc -v <your command line>`), copy the WHOLE output and insert it below. It should look similar to this:
|
||||||
[debug] System config: []
|
[debug] System config: []
|
||||||
[debug] User config: []
|
[debug] User config: []
|
||||||
[debug] Command-line args: [u'-v', u'http://www.youtube.com/watch?v=BaW_jenozKc']
|
[debug] Command-line args: [u'-v', u'http://www.youtube.com/watch?v=BaW_jenozKcj']
|
||||||
[debug] Encodings: locale cp1251, fs mbcs, out cp866, pref cp1251
|
[debug] Encodings: locale cp1251, fs mbcs, out cp866, pref cp1251
|
||||||
[debug] yt-dlp version 2021.09.25
|
[debug] youtube-dlc version 2021.01.07
|
||||||
[debug] Python version 2.7.11 - Windows-2003Server-5.2.3790-SP2
|
[debug] Python version 2.7.11 - Windows-2003Server-5.2.3790-SP2
|
||||||
[debug] exe versions: ffmpeg N-75573-g1d0487f, ffprobe N-75573-g1d0487f, rtmpdump 2.4
|
[debug] exe versions: ffmpeg N-75573-g1d0487f, ffprobe N-75573-g1d0487f, rtmpdump 2.4
|
||||||
[debug] Proxy map: {}
|
[debug] Proxy map: {}
|
||||||
|
|||||||
11
.github/ISSUE_TEMPLATE/2_site_support_request.md
vendored
11
.github/ISSUE_TEMPLATE/2_site_support_request.md
vendored
@@ -20,19 +20,18 @@
|
|||||||
## Checklist
|
## Checklist
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of yt-dlp:
|
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of youtube-dlc:
|
||||||
- First of, make sure you are using the latest version of yt-dlp. Run `yt-dlp --version` and ensure your version is 2021.09.25. If it's not, see https://github.com/yt-dlp/yt-dlp on how to update. Issues with outdated version will be REJECTED.
|
- First of, make sure you are using the latest version of youtube-dlc. Run `youtube-dlc --version` and ensure your version is 2021.01.07. If it's not, see https://github.com/pukkandan/yt-dlc on how to update. Issues with outdated version will be REJECTED.
|
||||||
- Make sure that all provided video/audio/playlist URLs (if any) are alive and playable in a browser.
|
- Make sure that all provided video/audio/playlist URLs (if any) are alive and playable in a browser.
|
||||||
- Make sure that site you are requesting is not dedicated to copyright infringement, see https://github.com/yt-dlp/yt-dlp. yt-dlp does not support such sites. In order for site support request to be accepted all provided example URLs should not violate any copyrights.
|
- Make sure that site you are requesting is not dedicated to copyright infringement, see https://github.com/pukkandan/yt-dlc. youtube-dlc does not support such sites. In order for site support request to be accepted all provided example URLs should not violate any copyrights.
|
||||||
- Search the bugtracker for similar site support requests: https://github.com/yt-dlp/yt-dlp. DO NOT post duplicates.
|
- Search the bugtracker for similar site support requests: https://github.com/pukkandan/yt-dlc. DO NOT post duplicates.
|
||||||
- Finally, put x into all relevant boxes like this [x] (Dont forget to delete the empty space)
|
- Finally, put x into all relevant boxes like this [x] (Dont forget to delete the empty space)
|
||||||
-->
|
-->
|
||||||
|
|
||||||
- [ ] I'm reporting a new site support request
|
- [ ] I'm reporting a new site support request
|
||||||
- [ ] I've verified that I'm running yt-dlp version **2021.09.25**
|
- [ ] I've verified that I'm running youtube-dlc version **2021.01.07**
|
||||||
- [ ] I've checked that all provided URLs are alive and playable in a browser
|
- [ ] I've checked that all provided URLs are alive and playable in a browser
|
||||||
- [ ] I've checked that none of provided URLs violate any copyrights
|
- [ ] I've checked that none of provided URLs violate any copyrights
|
||||||
- [ ] The provided URLs do not contain any DRM to the best of my knowledge
|
|
||||||
- [ ] I've searched the bugtracker for similar site support requests including closed ones
|
- [ ] I've searched the bugtracker for similar site support requests including closed ones
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -20,14 +20,14 @@
|
|||||||
## Checklist
|
## Checklist
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of yt-dlp:
|
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of youtube-dlc:
|
||||||
- First of, make sure you are using the latest version of yt-dlp. Run `yt-dlp --version` and ensure your version is 2021.09.25. If it's not, see https://github.com/yt-dlp/yt-dlp on how to update. Issues with outdated version will be REJECTED.
|
- First of, make sure you are using the latest version of youtube-dlc. Run `youtube-dlc --version` and ensure your version is 2021.01.07. If it's not, see https://github.com/pukkandan/yt-dlc on how to update. Issues with outdated version will be REJECTED.
|
||||||
- Search the bugtracker for similar site feature requests: https://github.com/yt-dlp/yt-dlp. DO NOT post duplicates.
|
- Search the bugtracker for similar site feature requests: https://github.com/pukkandan/yt-dlc. DO NOT post duplicates.
|
||||||
- Finally, put x into all relevant boxes like this [x] (Dont forget to delete the empty space)
|
- Finally, put x into all relevant boxes like this [x] (Dont forget to delete the empty space)
|
||||||
-->
|
-->
|
||||||
|
|
||||||
- [ ] I'm reporting a site feature request
|
- [ ] I'm reporting a site feature request
|
||||||
- [ ] I've verified that I'm running yt-dlp version **2021.09.25**
|
- [ ] I've verified that I'm running youtube-dlc version **2021.01.07**
|
||||||
- [ ] I've searched the bugtracker for similar site feature requests including closed ones
|
- [ ] I've searched the bugtracker for similar site feature requests including closed ones
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
23
.github/ISSUE_TEMPLATE/4_bug_report.md
vendored
23
.github/ISSUE_TEMPLATE/4_bug_report.md
vendored
@@ -20,19 +20,18 @@
|
|||||||
## Checklist
|
## Checklist
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of yt-dlp:
|
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of youtube-dlc:
|
||||||
- First of, make sure you are using the latest version of yt-dlp. Run `yt-dlp --version` and ensure your version is 2021.09.25. If it's not, see https://github.com/yt-dlp/yt-dlp on how to update. Issues with outdated version will be REJECTED.
|
- First of, make sure you are using the latest version of youtube-dlc. Run `youtube-dlc --version` and ensure your version is 2021.01.07. If it's not, see https://github.com/pukkandan/yt-dlc on how to update. Issues with outdated version will be REJECTED.
|
||||||
- Make sure that all provided video/audio/playlist URLs (if any) are alive and playable in a browser.
|
- Make sure that all provided video/audio/playlist URLs (if any) are alive and playable in a browser.
|
||||||
- Make sure that all URLs and arguments with special characters are properly quoted or escaped as explained in https://github.com/yt-dlp/yt-dlp.
|
- Make sure that all URLs and arguments with special characters are properly quoted or escaped as explained in https://github.com/pukkandan/yt-dlc.
|
||||||
- Search the bugtracker for similar issues: https://github.com/yt-dlp/yt-dlp. DO NOT post duplicates.
|
- Search the bugtracker for similar issues: https://github.com/pukkandan/yt-dlc. DO NOT post duplicates.
|
||||||
- Read bugs section in FAQ: https://github.com/yt-dlp/yt-dlp
|
- Read bugs section in FAQ: https://github.com/pukkandan/yt-dlc
|
||||||
- Finally, put x into all relevant boxes like this [x] (Dont forget to delete the empty space)
|
- Finally, put x into all relevant boxes like this [x] (Dont forget to delete the empty space)
|
||||||
-->
|
-->
|
||||||
|
|
||||||
- [ ] I'm reporting a bug unrelated to a specific site
|
- [ ] I'm reporting a broken site support issue
|
||||||
- [ ] I've verified that I'm running yt-dlp version **2021.09.25**
|
- [ ] I've verified that I'm running youtube-dlc version **2021.01.07**
|
||||||
- [ ] I've checked that all provided URLs are alive and playable in a browser
|
- [ ] I've checked that all provided URLs are alive and playable in a browser
|
||||||
- [ ] The provided URLs do not contain any DRM to the best of my knowledge
|
|
||||||
- [ ] I've checked that all URLs and arguments with special characters are properly quoted or escaped
|
- [ ] I've checked that all URLs and arguments with special characters are properly quoted or escaped
|
||||||
- [ ] I've searched the bugtracker for similar bug reports including closed ones
|
- [ ] I've searched the bugtracker for similar bug reports including closed ones
|
||||||
- [ ] I've read bugs section in FAQ
|
- [ ] I've read bugs section in FAQ
|
||||||
@@ -41,13 +40,13 @@ ## Checklist
|
|||||||
## Verbose log
|
## Verbose log
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Provide the complete verbose output of yt-dlp that clearly demonstrates the problem.
|
Provide the complete verbose output of youtube-dlc that clearly demonstrates the problem.
|
||||||
Add the `-v` flag to your command line you run yt-dlp with (`yt-dlp -v <your command line>`), copy the WHOLE output and insert it below. It should look similar to this:
|
Add the `-v` flag to your command line you run youtube-dlc with (`youtube-dlc -v <your command line>`), copy the WHOLE output and insert it below. It should look similar to this:
|
||||||
[debug] System config: []
|
[debug] System config: []
|
||||||
[debug] User config: []
|
[debug] User config: []
|
||||||
[debug] Command-line args: [u'-v', u'http://www.youtube.com/watch?v=BaW_jenozKc']
|
[debug] Command-line args: [u'-v', u'http://www.youtube.com/watch?v=BaW_jenozKcj']
|
||||||
[debug] Encodings: locale cp1251, fs mbcs, out cp866, pref cp1251
|
[debug] Encodings: locale cp1251, fs mbcs, out cp866, pref cp1251
|
||||||
[debug] yt-dlp version 2021.09.25
|
[debug] youtube-dlc version 2021.01.07
|
||||||
[debug] Python version 2.7.11 - Windows-2003Server-5.2.3790-SP2
|
[debug] Python version 2.7.11 - Windows-2003Server-5.2.3790-SP2
|
||||||
[debug] exe versions: ffmpeg N-75573-g1d0487f, ffprobe N-75573-g1d0487f, rtmpdump 2.4
|
[debug] exe versions: ffmpeg N-75573-g1d0487f, ffprobe N-75573-g1d0487f, rtmpdump 2.4
|
||||||
[debug] Proxy map: {}
|
[debug] Proxy map: {}
|
||||||
|
|||||||
8
.github/ISSUE_TEMPLATE/5_feature_request.md
vendored
8
.github/ISSUE_TEMPLATE/5_feature_request.md
vendored
@@ -20,14 +20,14 @@
|
|||||||
## Checklist
|
## Checklist
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of yt-dlp:
|
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of youtube-dlc:
|
||||||
- First of, make sure you are using the latest version of yt-dlp. Run `yt-dlp --version` and ensure your version is 2021.09.25. If it's not, see https://github.com/yt-dlp/yt-dlp on how to update. Issues with outdated version will be REJECTED.
|
- First of, make sure you are using the latest version of youtube-dlc. Run `youtube-dlc --version` and ensure your version is 2021.01.07. If it's not, see https://github.com/pukkandan/yt-dlc on how to update. Issues with outdated version will be REJECTED.
|
||||||
- Search the bugtracker for similar feature requests: https://github.com/yt-dlp/yt-dlp. DO NOT post duplicates.
|
- Search the bugtracker for similar feature requests: https://github.com/pukkandan/yt-dlc. DO NOT post duplicates.
|
||||||
- Finally, put x into all relevant boxes like this [x] (Dont forget to delete the empty space)
|
- Finally, put x into all relevant boxes like this [x] (Dont forget to delete the empty space)
|
||||||
-->
|
-->
|
||||||
|
|
||||||
- [ ] I'm reporting a feature request
|
- [ ] I'm reporting a feature request
|
||||||
- [ ] I've verified that I'm running yt-dlp version **2021.09.25**
|
- [ ] I've verified that I'm running youtube-dlc version **2021.01.07**
|
||||||
- [ ] I've searched the bugtracker for similar feature requests including closed ones
|
- [ ] I've searched the bugtracker for similar feature requests including closed ones
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
10
.github/ISSUE_TEMPLATE/6_question.md
vendored
10
.github/ISSUE_TEMPLATE/6_question.md
vendored
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: Ask question
|
name: Ask question
|
||||||
about: Ask yt-dlp related question
|
about: Ask youtube-dl related question
|
||||||
title: "[Question]"
|
title: "[Question]"
|
||||||
labels: question
|
labels: question
|
||||||
assignees: ''
|
assignees: ''
|
||||||
@@ -20,9 +20,9 @@
|
|||||||
## Checklist
|
## Checklist
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of yt-dlp:
|
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of youtube-dl:
|
||||||
- Look through the README (https://github.com/yt-dlp/yt-dlp) and FAQ (https://github.com/yt-dlp/yt-dlp) for similar questions
|
- Look through the README (https://github.com/blackjack4494/yt-dlc) and FAQ (https://github.com/blackjack4494/yt-dlc) for similar questions
|
||||||
- Search the bugtracker for similar questions: https://github.com/yt-dlp/yt-dlp
|
- Search the bugtracker for similar questions: https://github.com/blackjack4494/yt-dlc
|
||||||
- Finally, put x into all relevant boxes like this [x] (Dont forget to delete the empty space)
|
- Finally, put x into all relevant boxes like this [x] (Dont forget to delete the empty space)
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ ## Checklist
|
|||||||
## Question
|
## Question
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Ask your question in an arbitrary form. Please make sure it's worded well enough to be understood, see https://github.com/yt-dlp/yt-dlp.
|
Ask your question in an arbitrary form. Please make sure it's worded well enough to be understood, see https://github.com/blackjack4494/yt-dlc.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
WRITE QUESTION HERE
|
WRITE QUESTION HERE
|
||||||
|
|||||||
18
.github/ISSUE_TEMPLATE_tmpl/1_broken_site.md
vendored
18
.github/ISSUE_TEMPLATE_tmpl/1_broken_site.md
vendored
@@ -20,16 +20,16 @@
|
|||||||
## Checklist
|
## Checklist
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of yt-dlp:
|
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of youtube-dlc:
|
||||||
- First of, make sure you are using the latest version of yt-dlp. Run `yt-dlp --version` and ensure your version is %(version)s. If it's not, see https://github.com/yt-dlp/yt-dlp on how to update. Issues with outdated version will be REJECTED.
|
- First of, make sure you are using the latest version of youtube-dlc. Run `youtube-dlc --version` and ensure your version is %(version)s. If it's not, see https://github.com/pukkandan/yt-dlc on how to update. Issues with outdated version will be REJECTED.
|
||||||
- Make sure that all provided video/audio/playlist URLs (if any) are alive and playable in a browser.
|
- Make sure that all provided video/audio/playlist URLs (if any) are alive and playable in a browser.
|
||||||
- Make sure that all URLs and arguments with special characters are properly quoted or escaped as explained in https://github.com/yt-dlp/yt-dlp.
|
- Make sure that all URLs and arguments with special characters are properly quoted or escaped as explained in https://github.com/pukkandan/yt-dlc.
|
||||||
- Search the bugtracker for similar issues: https://github.com/yt-dlp/yt-dlp. DO NOT post duplicates.
|
- Search the bugtracker for similar issues: https://github.com/pukkandan/yt-dlc. DO NOT post duplicates.
|
||||||
- Finally, put x into all relevant boxes like this [x] (Dont forget to delete the empty space)
|
- Finally, put x into all relevant boxes like this [x] (Dont forget to delete the empty space)
|
||||||
-->
|
-->
|
||||||
|
|
||||||
- [ ] I'm reporting a broken site support
|
- [ ] I'm reporting a broken site support
|
||||||
- [ ] I've verified that I'm running yt-dlp version **%(version)s**
|
- [ ] I've verified that I'm running youtube-dlc version **%(version)s**
|
||||||
- [ ] I've checked that all provided URLs are alive and playable in a browser
|
- [ ] I've checked that all provided URLs are alive and playable in a browser
|
||||||
- [ ] I've checked that all URLs and arguments with special characters are properly quoted or escaped
|
- [ ] I've checked that all URLs and arguments with special characters are properly quoted or escaped
|
||||||
- [ ] I've searched the bugtracker for similar issues including closed ones
|
- [ ] I've searched the bugtracker for similar issues including closed ones
|
||||||
@@ -38,13 +38,13 @@ ## Checklist
|
|||||||
## Verbose log
|
## Verbose log
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Provide the complete verbose output of yt-dlp that clearly demonstrates the problem.
|
Provide the complete verbose output of youtube-dlc that clearly demonstrates the problem.
|
||||||
Add the `-v` flag to your command line you run yt-dlp with (`yt-dlp -v <your command line>`), copy the WHOLE output and insert it below. It should look similar to this:
|
Add the `-v` flag to your command line you run youtube-dlc with (`youtube-dlc -v <your command line>`), copy the WHOLE output and insert it below. It should look similar to this:
|
||||||
[debug] System config: []
|
[debug] System config: []
|
||||||
[debug] User config: []
|
[debug] User config: []
|
||||||
[debug] Command-line args: [u'-v', u'http://www.youtube.com/watch?v=BaW_jenozKc']
|
[debug] Command-line args: [u'-v', u'http://www.youtube.com/watch?v=BaW_jenozKcj']
|
||||||
[debug] Encodings: locale cp1251, fs mbcs, out cp866, pref cp1251
|
[debug] Encodings: locale cp1251, fs mbcs, out cp866, pref cp1251
|
||||||
[debug] yt-dlp version %(version)s
|
[debug] youtube-dlc version %(version)s
|
||||||
[debug] Python version 2.7.11 - Windows-2003Server-5.2.3790-SP2
|
[debug] Python version 2.7.11 - Windows-2003Server-5.2.3790-SP2
|
||||||
[debug] exe versions: ffmpeg N-75573-g1d0487f, ffprobe N-75573-g1d0487f, rtmpdump 2.4
|
[debug] exe versions: ffmpeg N-75573-g1d0487f, ffprobe N-75573-g1d0487f, rtmpdump 2.4
|
||||||
[debug] Proxy map: {}
|
[debug] Proxy map: {}
|
||||||
|
|||||||
@@ -20,19 +20,18 @@
|
|||||||
## Checklist
|
## Checklist
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of yt-dlp:
|
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of youtube-dlc:
|
||||||
- First of, make sure you are using the latest version of yt-dlp. Run `yt-dlp --version` and ensure your version is %(version)s. If it's not, see https://github.com/yt-dlp/yt-dlp on how to update. Issues with outdated version will be REJECTED.
|
- First of, make sure you are using the latest version of youtube-dlc. Run `youtube-dlc --version` and ensure your version is %(version)s. If it's not, see https://github.com/pukkandan/yt-dlc on how to update. Issues with outdated version will be REJECTED.
|
||||||
- Make sure that all provided video/audio/playlist URLs (if any) are alive and playable in a browser.
|
- Make sure that all provided video/audio/playlist URLs (if any) are alive and playable in a browser.
|
||||||
- Make sure that site you are requesting is not dedicated to copyright infringement, see https://github.com/yt-dlp/yt-dlp. yt-dlp does not support such sites. In order for site support request to be accepted all provided example URLs should not violate any copyrights.
|
- Make sure that site you are requesting is not dedicated to copyright infringement, see https://github.com/pukkandan/yt-dlc. youtube-dlc does not support such sites. In order for site support request to be accepted all provided example URLs should not violate any copyrights.
|
||||||
- Search the bugtracker for similar site support requests: https://github.com/yt-dlp/yt-dlp. DO NOT post duplicates.
|
- Search the bugtracker for similar site support requests: https://github.com/pukkandan/yt-dlc. DO NOT post duplicates.
|
||||||
- Finally, put x into all relevant boxes like this [x] (Dont forget to delete the empty space)
|
- Finally, put x into all relevant boxes like this [x] (Dont forget to delete the empty space)
|
||||||
-->
|
-->
|
||||||
|
|
||||||
- [ ] I'm reporting a new site support request
|
- [ ] I'm reporting a new site support request
|
||||||
- [ ] I've verified that I'm running yt-dlp version **%(version)s**
|
- [ ] I've verified that I'm running youtube-dlc version **%(version)s**
|
||||||
- [ ] I've checked that all provided URLs are alive and playable in a browser
|
- [ ] I've checked that all provided URLs are alive and playable in a browser
|
||||||
- [ ] I've checked that none of provided URLs violate any copyrights
|
- [ ] I've checked that none of provided URLs violate any copyrights
|
||||||
- [ ] The provided URLs do not contain any DRM to the best of my knowledge
|
|
||||||
- [ ] I've searched the bugtracker for similar site support requests including closed ones
|
- [ ] I've searched the bugtracker for similar site support requests including closed ones
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -20,14 +20,14 @@
|
|||||||
## Checklist
|
## Checklist
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of yt-dlp:
|
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of youtube-dlc:
|
||||||
- First of, make sure you are using the latest version of yt-dlp. Run `yt-dlp --version` and ensure your version is %(version)s. If it's not, see https://github.com/yt-dlp/yt-dlp on how to update. Issues with outdated version will be REJECTED.
|
- First of, make sure you are using the latest version of youtube-dlc. Run `youtube-dlc --version` and ensure your version is %(version)s. If it's not, see https://github.com/pukkandan/yt-dlc on how to update. Issues with outdated version will be REJECTED.
|
||||||
- Search the bugtracker for similar site feature requests: https://github.com/yt-dlp/yt-dlp. DO NOT post duplicates.
|
- Search the bugtracker for similar site feature requests: https://github.com/pukkandan/yt-dlc. DO NOT post duplicates.
|
||||||
- Finally, put x into all relevant boxes like this [x] (Dont forget to delete the empty space)
|
- Finally, put x into all relevant boxes like this [x] (Dont forget to delete the empty space)
|
||||||
-->
|
-->
|
||||||
|
|
||||||
- [ ] I'm reporting a site feature request
|
- [ ] I'm reporting a site feature request
|
||||||
- [ ] I've verified that I'm running yt-dlp version **%(version)s**
|
- [ ] I've verified that I'm running youtube-dlc version **%(version)s**
|
||||||
- [ ] I've searched the bugtracker for similar site feature requests including closed ones
|
- [ ] I've searched the bugtracker for similar site feature requests including closed ones
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
23
.github/ISSUE_TEMPLATE_tmpl/4_bug_report.md
vendored
23
.github/ISSUE_TEMPLATE_tmpl/4_bug_report.md
vendored
@@ -20,19 +20,18 @@
|
|||||||
## Checklist
|
## Checklist
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of yt-dlp:
|
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of youtube-dlc:
|
||||||
- First of, make sure you are using the latest version of yt-dlp. Run `yt-dlp --version` and ensure your version is %(version)s. If it's not, see https://github.com/yt-dlp/yt-dlp on how to update. Issues with outdated version will be REJECTED.
|
- First of, make sure you are using the latest version of youtube-dlc. Run `youtube-dlc --version` and ensure your version is %(version)s. If it's not, see https://github.com/pukkandan/yt-dlc on how to update. Issues with outdated version will be REJECTED.
|
||||||
- Make sure that all provided video/audio/playlist URLs (if any) are alive and playable in a browser.
|
- Make sure that all provided video/audio/playlist URLs (if any) are alive and playable in a browser.
|
||||||
- Make sure that all URLs and arguments with special characters are properly quoted or escaped as explained in https://github.com/yt-dlp/yt-dlp.
|
- Make sure that all URLs and arguments with special characters are properly quoted or escaped as explained in https://github.com/pukkandan/yt-dlc.
|
||||||
- Search the bugtracker for similar issues: https://github.com/yt-dlp/yt-dlp. DO NOT post duplicates.
|
- Search the bugtracker for similar issues: https://github.com/pukkandan/yt-dlc. DO NOT post duplicates.
|
||||||
- Read bugs section in FAQ: https://github.com/yt-dlp/yt-dlp
|
- Read bugs section in FAQ: https://github.com/pukkandan/yt-dlc
|
||||||
- Finally, put x into all relevant boxes like this [x] (Dont forget to delete the empty space)
|
- Finally, put x into all relevant boxes like this [x] (Dont forget to delete the empty space)
|
||||||
-->
|
-->
|
||||||
|
|
||||||
- [ ] I'm reporting a bug unrelated to a specific site
|
- [ ] I'm reporting a broken site support issue
|
||||||
- [ ] I've verified that I'm running yt-dlp version **%(version)s**
|
- [ ] I've verified that I'm running youtube-dlc version **%(version)s**
|
||||||
- [ ] I've checked that all provided URLs are alive and playable in a browser
|
- [ ] I've checked that all provided URLs are alive and playable in a browser
|
||||||
- [ ] The provided URLs do not contain any DRM to the best of my knowledge
|
|
||||||
- [ ] I've checked that all URLs and arguments with special characters are properly quoted or escaped
|
- [ ] I've checked that all URLs and arguments with special characters are properly quoted or escaped
|
||||||
- [ ] I've searched the bugtracker for similar bug reports including closed ones
|
- [ ] I've searched the bugtracker for similar bug reports including closed ones
|
||||||
- [ ] I've read bugs section in FAQ
|
- [ ] I've read bugs section in FAQ
|
||||||
@@ -41,13 +40,13 @@ ## Checklist
|
|||||||
## Verbose log
|
## Verbose log
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Provide the complete verbose output of yt-dlp that clearly demonstrates the problem.
|
Provide the complete verbose output of youtube-dlc that clearly demonstrates the problem.
|
||||||
Add the `-v` flag to your command line you run yt-dlp with (`yt-dlp -v <your command line>`), copy the WHOLE output and insert it below. It should look similar to this:
|
Add the `-v` flag to your command line you run youtube-dlc with (`youtube-dlc -v <your command line>`), copy the WHOLE output and insert it below. It should look similar to this:
|
||||||
[debug] System config: []
|
[debug] System config: []
|
||||||
[debug] User config: []
|
[debug] User config: []
|
||||||
[debug] Command-line args: [u'-v', u'http://www.youtube.com/watch?v=BaW_jenozKc']
|
[debug] Command-line args: [u'-v', u'http://www.youtube.com/watch?v=BaW_jenozKcj']
|
||||||
[debug] Encodings: locale cp1251, fs mbcs, out cp866, pref cp1251
|
[debug] Encodings: locale cp1251, fs mbcs, out cp866, pref cp1251
|
||||||
[debug] yt-dlp version %(version)s
|
[debug] youtube-dlc version %(version)s
|
||||||
[debug] Python version 2.7.11 - Windows-2003Server-5.2.3790-SP2
|
[debug] Python version 2.7.11 - Windows-2003Server-5.2.3790-SP2
|
||||||
[debug] exe versions: ffmpeg N-75573-g1d0487f, ffprobe N-75573-g1d0487f, rtmpdump 2.4
|
[debug] exe versions: ffmpeg N-75573-g1d0487f, ffprobe N-75573-g1d0487f, rtmpdump 2.4
|
||||||
[debug] Proxy map: {}
|
[debug] Proxy map: {}
|
||||||
|
|||||||
@@ -20,14 +20,14 @@
|
|||||||
## Checklist
|
## Checklist
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of yt-dlp:
|
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of youtube-dlc:
|
||||||
- First of, make sure you are using the latest version of yt-dlp. Run `yt-dlp --version` and ensure your version is %(version)s. If it's not, see https://github.com/yt-dlp/yt-dlp on how to update. Issues with outdated version will be REJECTED.
|
- First of, make sure you are using the latest version of youtube-dlc. Run `youtube-dlc --version` and ensure your version is %(version)s. If it's not, see https://github.com/pukkandan/yt-dlc on how to update. Issues with outdated version will be REJECTED.
|
||||||
- Search the bugtracker for similar feature requests: https://github.com/yt-dlp/yt-dlp. DO NOT post duplicates.
|
- Search the bugtracker for similar feature requests: https://github.com/pukkandan/yt-dlc. DO NOT post duplicates.
|
||||||
- Finally, put x into all relevant boxes like this [x] (Dont forget to delete the empty space)
|
- Finally, put x into all relevant boxes like this [x] (Dont forget to delete the empty space)
|
||||||
-->
|
-->
|
||||||
|
|
||||||
- [ ] I'm reporting a feature request
|
- [ ] I'm reporting a feature request
|
||||||
- [ ] I've verified that I'm running yt-dlp version **%(version)s**
|
- [ ] I've verified that I'm running youtube-dlc version **%(version)s**
|
||||||
- [ ] I've searched the bugtracker for similar feature requests including closed ones
|
- [ ] I've searched the bugtracker for similar feature requests including closed ones
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
4
.github/PULL_REQUEST_TEMPLATE.md
vendored
4
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -8,10 +8,10 @@ ## Please follow the guide below
|
|||||||
|
|
||||||
### Before submitting a *pull request* make sure you have:
|
### Before submitting a *pull request* make sure you have:
|
||||||
- [ ] At least skimmed through [adding new extractor tutorial](https://github.com/ytdl-org/youtube-dl#adding-support-for-a-new-site) and [youtube-dl coding conventions](https://github.com/ytdl-org/youtube-dl#youtube-dl-coding-conventions) sections
|
- [ ] At least skimmed through [adding new extractor tutorial](https://github.com/ytdl-org/youtube-dl#adding-support-for-a-new-site) and [youtube-dl coding conventions](https://github.com/ytdl-org/youtube-dl#youtube-dl-coding-conventions) sections
|
||||||
- [ ] [Searched](https://github.com/yt-dlp/yt-dlp/search?q=is%3Apr&type=Issues) the bugtracker for similar pull requests
|
- [ ] [Searched](https://github.com/pukkandan/yt-dlc/search?q=is%3Apr&type=Issues) the bugtracker for similar pull requests
|
||||||
- [ ] Checked the code with [flake8](https://pypi.python.org/pypi/flake8)
|
- [ ] Checked the code with [flake8](https://pypi.python.org/pypi/flake8)
|
||||||
|
|
||||||
### In order to be accepted and merged into yt-dlp each piece of code must be in public domain or released under [Unlicense](http://unlicense.org/). Check one of the following options:
|
### In order to be accepted and merged into youtube-dl each piece of code must be in public domain or released under [Unlicense](http://unlicense.org/). Check one of the following options:
|
||||||
- [ ] I am the original author of this code and I am willing to release it under [Unlicense](http://unlicense.org/)
|
- [ ] I am the original author of this code and I am willing to release it under [Unlicense](http://unlicense.org/)
|
||||||
- [ ] I am not the original author of this code but it is in public domain or released under [Unlicense](http://unlicense.org/) (provide reliable evidence)
|
- [ ] I am not the original author of this code but it is in public domain or released under [Unlicense](http://unlicense.org/) (provide reliable evidence)
|
||||||
|
|
||||||
|
|||||||
31
.github/banner.svg
vendored
31
.github/banner.svg
vendored
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 24 KiB |
273
.github/workflows/build.yml
vendored
273
.github/workflows/build.yml
vendored
@@ -7,20 +7,16 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build_unix:
|
build_unix:
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
outputs:
|
outputs:
|
||||||
ytdlp_version: ${{ steps.bump_version.outputs.ytdlp_version }}
|
ytdlc_version: ${{ steps.bump_version.outputs.ytdlc_version }}
|
||||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||||
sha256_bin: ${{ steps.sha256_bin.outputs.sha256_bin }}
|
sha2_unix: ${{ steps.sha2_file.outputs.sha2_unix }}
|
||||||
sha512_bin: ${{ steps.sha512_bin.outputs.sha512_bin }}
|
|
||||||
sha256_tar: ${{ steps.sha256_tar.outputs.sha256_tar }}
|
|
||||||
sha512_tar: ${{ steps.sha512_tar.outputs.sha512_tar }}
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@v2
|
uses: actions/setup-python@v2
|
||||||
with:
|
with:
|
||||||
@@ -29,240 +25,132 @@ jobs:
|
|||||||
run: sudo apt-get -y install zip pandoc man
|
run: sudo apt-get -y install zip pandoc man
|
||||||
- name: Bump version
|
- name: Bump version
|
||||||
id: bump_version
|
id: bump_version
|
||||||
run: |
|
run: python scripts/update-version-workflow.py
|
||||||
python devscripts/update-version.py
|
- name: Check the output from My action
|
||||||
make issuetemplates
|
run: echo "${{ steps.bump_version.outputs.ytdlc_version }}"
|
||||||
- name: Print version
|
|
||||||
run: echo "${{ steps.bump_version.outputs.ytdlp_version }}"
|
|
||||||
- name: Update master
|
|
||||||
id: push_update
|
|
||||||
run: |
|
|
||||||
git config --global user.email "${{ github.event.pusher.email }}"
|
|
||||||
git config --global user.name "${{ github.event.pusher.name }}"
|
|
||||||
git add -u
|
|
||||||
git commit -m "[version] update" -m ":ci skip all"
|
|
||||||
git pull --rebase origin ${{ github.event.repository.master_branch }}
|
|
||||||
git push origin ${{ github.event.ref }}:${{ github.event.repository.master_branch }}
|
|
||||||
echo ::set-output name=head_sha::$(git rev-parse HEAD)
|
|
||||||
- name: Get Changelog
|
|
||||||
id: get_changelog
|
|
||||||
run: |
|
|
||||||
changelog=$(cat Changelog.md | grep -oPz '(?s)(?<=### ${{ steps.bump_version.outputs.ytdlp_version }}\n{2}).+?(?=\n{2,3}###)')
|
|
||||||
echo "changelog<<EOF" >> $GITHUB_ENV
|
|
||||||
echo "$changelog" >> $GITHUB_ENV
|
|
||||||
echo "EOF" >> $GITHUB_ENV
|
|
||||||
- name: Run Make
|
- name: Run Make
|
||||||
run: make all tar
|
run: make
|
||||||
- name: Get SHA2-256SUMS for yt-dlp
|
|
||||||
id: sha256_bin
|
|
||||||
run: echo "::set-output name=sha256_bin::$(sha256sum yt-dlp | awk '{print $1}')"
|
|
||||||
- name: Get SHA2-256SUMS for yt-dlp.tar.gz
|
|
||||||
id: sha256_tar
|
|
||||||
run: echo "::set-output name=sha256_tar::$(sha256sum yt-dlp.tar.gz | awk '{print $1}')"
|
|
||||||
- name: Get SHA2-512SUMS for yt-dlp
|
|
||||||
id: sha512_bin
|
|
||||||
run: echo "::set-output name=sha512_bin::$(sha512sum yt-dlp | awk '{print $1}')"
|
|
||||||
- name: Get SHA2-512SUMS for yt-dlp.tar.gz
|
|
||||||
id: sha512_tar
|
|
||||||
run: echo "::set-output name=sha512_tar::$(sha512sum yt-dlp.tar.gz | awk '{print $1}')"
|
|
||||||
- name: Install dependencies for pypi
|
|
||||||
env:
|
|
||||||
PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
|
|
||||||
if: "env.PYPI_TOKEN != ''"
|
|
||||||
run: |
|
|
||||||
python -m pip install --upgrade pip
|
|
||||||
pip install setuptools wheel twine
|
|
||||||
- name: Build and publish on pypi
|
|
||||||
env:
|
|
||||||
TWINE_USERNAME: __token__
|
|
||||||
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
|
|
||||||
if: "env.TWINE_PASSWORD != ''"
|
|
||||||
run: |
|
|
||||||
rm -rf dist/*
|
|
||||||
python setup.py sdist bdist_wheel
|
|
||||||
twine upload dist/*
|
|
||||||
- name: Install SSH private key
|
|
||||||
env:
|
|
||||||
BREW_TOKEN: ${{ secrets.BREW_TOKEN }}
|
|
||||||
if: "env.BREW_TOKEN != ''"
|
|
||||||
uses: webfactory/ssh-agent@v0.5.3
|
|
||||||
with:
|
|
||||||
ssh-private-key: ${{ env.BREW_TOKEN }}
|
|
||||||
- name: Update Homebrew Formulae
|
|
||||||
env:
|
|
||||||
BREW_TOKEN: ${{ secrets.BREW_TOKEN }}
|
|
||||||
if: "env.BREW_TOKEN != ''"
|
|
||||||
run: |
|
|
||||||
git clone git@github.com:yt-dlp/homebrew-taps taps/
|
|
||||||
python3 devscripts/update-formulae.py taps/Formula/yt-dlp.rb "${{ steps.bump_version.outputs.ytdlp_version }}"
|
|
||||||
git -C taps/ config user.name github-actions
|
|
||||||
git -C taps/ config user.email github-actions@example.com
|
|
||||||
git -C taps/ commit -am 'yt-dlp: ${{ steps.bump_version.outputs.ytdlp_version }}'
|
|
||||||
git -C taps/ push
|
|
||||||
- name: Create Release
|
- name: Create Release
|
||||||
id: create_release
|
id: create_release
|
||||||
uses: actions/create-release@v1
|
uses: actions/create-release@v1
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
with:
|
with:
|
||||||
tag_name: ${{ steps.bump_version.outputs.ytdlp_version }}
|
tag_name: ${{ steps.bump_version.outputs.ytdlc_version }}
|
||||||
release_name: yt-dlp ${{ steps.bump_version.outputs.ytdlp_version }}
|
release_name: youtube-dlc ${{ steps.bump_version.outputs.ytdlc_version }}
|
||||||
commitish: ${{ steps.push_update.outputs.head_sha }}
|
|
||||||
body: |
|
body: |
|
||||||
Changelog:
|
Changelog:
|
||||||
${{ env.changelog }}
|
PLACEHOLDER
|
||||||
draft: false
|
draft: false
|
||||||
prerelease: false
|
prerelease: false
|
||||||
- name: Upload yt-dlp Unix binary
|
- name: Upload youtube-dlc Unix binary
|
||||||
id: upload-release-asset
|
id: upload-release-asset
|
||||||
uses: actions/upload-release-asset@v1
|
uses: actions/upload-release-asset@v1
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
with:
|
with:
|
||||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||||
asset_path: ./yt-dlp
|
asset_path: ./youtube-dlc
|
||||||
asset_name: yt-dlp
|
asset_name: youtube-dlc
|
||||||
asset_content_type: application/octet-stream
|
asset_content_type: application/octet-stream
|
||||||
- name: Upload Source tar
|
- name: Get SHA2-256SUMS for youtube-dlc
|
||||||
uses: actions/upload-release-asset@v1
|
id: sha2_file
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
SHA2: ${{ hashFiles('youtube-dlc') }}
|
||||||
with:
|
run: echo "::set-output name=sha2_unix::$SHA2"
|
||||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
# - name: Install dependencies for pypi
|
||||||
asset_path: ./yt-dlp.tar.gz
|
# run: |
|
||||||
asset_name: yt-dlp.tar.gz
|
# python -m pip install --upgrade pip
|
||||||
asset_content_type: application/gzip
|
# pip install setuptools wheel twine
|
||||||
|
# - name: Build and publish
|
||||||
|
# env:
|
||||||
|
# TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
|
||||||
|
# TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
|
||||||
|
# run: |
|
||||||
|
# rm -rf dist/*
|
||||||
|
# python setup.py sdist bdist_wheel
|
||||||
|
# twine upload dist/*
|
||||||
|
|
||||||
build_windows:
|
build_windows:
|
||||||
runs-on: windows-latest
|
|
||||||
needs: build_unix
|
|
||||||
|
|
||||||
outputs:
|
runs-on: windows-latest
|
||||||
sha256_win: ${{ steps.sha256_win.outputs.sha256_win }}
|
|
||||||
sha512_win: ${{ steps.sha512_win.outputs.sha512_win }}
|
needs: build_unix
|
||||||
sha256_win_zip: ${{ steps.sha256_win_zip.outputs.sha256_win_zip }}
|
|
||||||
sha512_win_zip: ${{ steps.sha512_win_zip.outputs.sha512_win_zip }}
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
# 3.8 is used for Win7 support
|
- name: Set up Python
|
||||||
- name: Set up Python 3.8
|
|
||||||
uses: actions/setup-python@v2
|
uses: actions/setup-python@v2
|
||||||
with:
|
with:
|
||||||
python-version: '3.8'
|
python-version: '3.8'
|
||||||
- name: Upgrade pip and enable wheel support
|
|
||||||
run: python -m pip install --upgrade pip setuptools wheel
|
|
||||||
- name: Install Requirements
|
- name: Install Requirements
|
||||||
# Custom pyinstaller built with https://github.com/yt-dlp/pyinstaller-builds
|
run: pip install pyinstaller
|
||||||
run: pip install "https://yt-dlp.github.io/Pyinstaller-Builds/x86_64/pyinstaller-4.5.1-py3-none-any.whl" mutagen pycryptodome websockets
|
|
||||||
- name: Bump version
|
- name: Bump version
|
||||||
id: bump_version
|
run: python scripts/update-version-workflow.py
|
||||||
run: python devscripts/update-version.py
|
|
||||||
- name: Print version
|
|
||||||
run: echo "${{ steps.bump_version.outputs.ytdlp_version }}"
|
|
||||||
- name: Run PyInstaller Script
|
- name: Run PyInstaller Script
|
||||||
run: python pyinst.py 64
|
run: python pyinst.py
|
||||||
- name: Upload yt-dlp.exe Windows binary
|
- name: Upload youtube-dlc.exe Windows binary
|
||||||
id: upload-release-windows
|
id: upload-release-windows
|
||||||
uses: actions/upload-release-asset@v1
|
uses: actions/upload-release-asset@v1
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
with:
|
with:
|
||||||
upload_url: ${{ needs.build_unix.outputs.upload_url }}
|
upload_url: ${{ needs.build_unix.outputs.upload_url }}
|
||||||
asset_path: ./dist/yt-dlp.exe
|
asset_path: ./dist/youtube-dlc.exe
|
||||||
asset_name: yt-dlp.exe
|
asset_name: youtube-dlc.exe
|
||||||
asset_content_type: application/vnd.microsoft.portable-executable
|
asset_content_type: application/vnd.microsoft.portable-executable
|
||||||
- name: Get SHA2-256SUMS for yt-dlp.exe
|
- name: Get SHA2-256SUMS for youtube-dlc.exe
|
||||||
id: sha256_win
|
id: sha2_file_win
|
||||||
run: echo "::set-output name=sha256_win::$((Get-FileHash dist\yt-dlp.exe -Algorithm SHA256).Hash.ToLower())"
|
|
||||||
- name: Get SHA2-512SUMS for yt-dlp.exe
|
|
||||||
id: sha512_win
|
|
||||||
run: echo "::set-output name=sha512_win::$((Get-FileHash dist\yt-dlp.exe -Algorithm SHA512).Hash.ToLower())"
|
|
||||||
- name: Run PyInstaller Script with --onedir
|
|
||||||
run: python pyinst.py 64 --onedir
|
|
||||||
- uses: papeloto/action-zip@v1
|
|
||||||
with:
|
|
||||||
files: ./dist/yt-dlp
|
|
||||||
dest: ./dist/yt-dlp.zip
|
|
||||||
- name: Upload yt-dlp.zip Windows onedir
|
|
||||||
id: upload-release-windows-zip
|
|
||||||
uses: actions/upload-release-asset@v1
|
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
SHA2_win: ${{ hashFiles('dist/youtube-dlc.exe') }}
|
||||||
with:
|
run: echo "::set-output name=sha2_windows::$SHA2_win"
|
||||||
upload_url: ${{ needs.build_unix.outputs.upload_url }}
|
|
||||||
asset_path: ./dist/yt-dlp.zip
|
|
||||||
asset_name: yt-dlp.zip
|
|
||||||
asset_content_type: application/zip
|
|
||||||
- name: Get SHA2-256SUMS for yt-dlp.zip
|
|
||||||
id: sha256_win_zip
|
|
||||||
run: echo "::set-output name=sha256_win_zip::$((Get-FileHash dist\yt-dlp.zip -Algorithm SHA256).Hash.ToLower())"
|
|
||||||
- name: Get SHA2-512SUMS for yt-dlp.zip
|
|
||||||
id: sha512_win_zip
|
|
||||||
run: echo "::set-output name=sha512_win_zip::$((Get-FileHash dist\yt-dlp.zip -Algorithm SHA512).Hash.ToLower())"
|
|
||||||
|
|
||||||
build_windows32:
|
build_windows32:
|
||||||
runs-on: windows-latest
|
|
||||||
needs: [build_unix, build_windows]
|
|
||||||
|
|
||||||
outputs:
|
runs-on: windows-latest
|
||||||
sha256_win32: ${{ steps.sha256_win32.outputs.sha256_win32 }}
|
|
||||||
sha512_win32: ${{ steps.sha512_win32.outputs.sha512_win32 }}
|
needs: [build_unix, build_windows]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
# 3.7 is used for Vista support. See https://github.com/yt-dlp/yt-dlp/issues/390
|
- name: Set up Python 3.4.4 32-Bit
|
||||||
- name: Set up Python 3.7 32-Bit
|
|
||||||
uses: actions/setup-python@v2
|
uses: actions/setup-python@v2
|
||||||
with:
|
with:
|
||||||
python-version: '3.7'
|
python-version: '3.4.4'
|
||||||
architecture: 'x86'
|
architecture: 'x86'
|
||||||
- name: Upgrade pip and enable wheel support
|
- name: Install Requirements for 32 Bit
|
||||||
run: python -m pip install --upgrade pip setuptools wheel
|
run: pip install pyinstaller==3.5
|
||||||
- name: Install Requirements
|
|
||||||
run: pip install "https://yt-dlp.github.io/Pyinstaller-Builds/i686/pyinstaller-4.5.1-py3-none-any.whl" mutagen pycryptodome websockets
|
|
||||||
- name: Bump version
|
- name: Bump version
|
||||||
id: bump_version
|
run: python scripts/update-version-workflow.py
|
||||||
run: python devscripts/update-version.py
|
|
||||||
- name: Print version
|
|
||||||
run: echo "${{ steps.bump_version.outputs.ytdlp_version }}"
|
|
||||||
- name: Run PyInstaller Script for 32 Bit
|
- name: Run PyInstaller Script for 32 Bit
|
||||||
run: python pyinst.py 32
|
run: python pyinst32.py
|
||||||
- name: Upload Executable yt-dlp_x86.exe
|
- name: Upload Executable youtube-dlc_x86.exe
|
||||||
id: upload-release-windows32
|
id: upload-release-windows32
|
||||||
uses: actions/upload-release-asset@v1
|
uses: actions/upload-release-asset@v1
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
with:
|
with:
|
||||||
upload_url: ${{ needs.build_unix.outputs.upload_url }}
|
upload_url: ${{ needs.build_unix.outputs.upload_url }}
|
||||||
asset_path: ./dist/yt-dlp_x86.exe
|
asset_path: ./dist/youtube-dlc_x86.exe
|
||||||
asset_name: yt-dlp_x86.exe
|
asset_name: youtube-dlc_x86.exe
|
||||||
asset_content_type: application/vnd.microsoft.portable-executable
|
asset_content_type: application/vnd.microsoft.portable-executable
|
||||||
- name: Get SHA2-256SUMS for yt-dlp_x86.exe
|
- name: Get SHA2-256SUMS for youtube-dlc_x86.exe
|
||||||
id: sha256_win32
|
id: sha2_file_win32
|
||||||
run: echo "::set-output name=sha256_win32::$((Get-FileHash dist\yt-dlp_x86.exe -Algorithm SHA256).Hash.ToLower())"
|
env:
|
||||||
- name: Get SHA2-512SUMS for yt-dlp_x86.exe
|
SHA2_win32: ${{ hashFiles('dist/youtube-dlc_x86.exe') }}
|
||||||
id: sha512_win32
|
run: echo "::set-output name=sha2_windows32::$SHA2_win32"
|
||||||
run: echo "::set-output name=sha512_win32::$((Get-FileHash dist\yt-dlp_x86.exe -Algorithm SHA512).Hash.ToLower())"
|
|
||||||
|
|
||||||
finish:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: [build_unix, build_windows, build_windows32]
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Make SHA2-256SUMS file
|
- name: Make SHA2-256SUMS file
|
||||||
env:
|
env:
|
||||||
SHA256_WIN: ${{ needs.build_windows.outputs.sha256_win }}
|
SHA2_WINDOWS: ${{ needs.build_windows.outputs.sha2_windows }}
|
||||||
SHA256_WIN_ZIP: ${{ needs.build_windows.outputs.sha256_win_zip }}
|
SHA2_WINDOWS32: ${{ steps.sha2_file_win32.outputs.sha2_windows32 }}
|
||||||
SHA256_WIN32: ${{ needs.build_windows32.outputs.sha256_win32 }}
|
SHA2_UNIX: ${{ needs.build_unix.outputs.sha2_unix }}
|
||||||
SHA256_BIN: ${{ needs.build_unix.outputs.sha256_bin }}
|
YTDLC_VERSION: ${{ needs.build_unix.outputs.ytdlc_version }}
|
||||||
SHA256_TAR: ${{ needs.build_unix.outputs.sha256_tar }}
|
|
||||||
run: |
|
run: |
|
||||||
echo "${{ env.SHA256_WIN }} yt-dlp.exe" >> SHA2-256SUMS
|
echo "version:${env:YTDLC_VERSION}" >> SHA2-256SUMS
|
||||||
echo "${{ env.SHA256_WIN32 }} yt-dlp_x86.exe" >> SHA2-256SUMS
|
echo "youtube-dlc.exe:${env:SHA2_WINDOWS}" >> SHA2-256SUMS
|
||||||
echo "${{ env.SHA256_BIN }} yt-dlp" >> SHA2-256SUMS
|
echo "youtube-dlc_x86.exe:${env:SHA2_WINDOWS32}" >> SHA2-256SUMS
|
||||||
echo "${{ env.SHA256_TAR }} yt-dlp.tar.gz" >> SHA2-256SUMS
|
echo "youtube-dlc:${env:SHA2_UNIX}" >> SHA2-256SUMS
|
||||||
echo "${{ env.SHA256_WIN_ZIP }} yt-dlp.zip" >> SHA2-256SUMS
|
|
||||||
- name: Upload 256SUMS file
|
- name: Upload 256SUMS file
|
||||||
id: upload-sums
|
id: upload-sums
|
||||||
uses: actions/upload-release-asset@v1
|
uses: actions/upload-release-asset@v1
|
||||||
@@ -273,26 +161,3 @@ jobs:
|
|||||||
asset_path: ./SHA2-256SUMS
|
asset_path: ./SHA2-256SUMS
|
||||||
asset_name: SHA2-256SUMS
|
asset_name: SHA2-256SUMS
|
||||||
asset_content_type: text/plain
|
asset_content_type: text/plain
|
||||||
- name: Make SHA2-512SUMS file
|
|
||||||
env:
|
|
||||||
SHA512_WIN: ${{ needs.build_windows.outputs.sha512_win }}
|
|
||||||
SHA512_WIN_ZIP: ${{ needs.build_windows.outputs.sha512_win_zip }}
|
|
||||||
SHA512_WIN32: ${{ needs.build_windows32.outputs.sha512_win32 }}
|
|
||||||
SHA512_BIN: ${{ needs.build_unix.outputs.sha512_bin }}
|
|
||||||
SHA512_TAR: ${{ needs.build_unix.outputs.sha512_tar }}
|
|
||||||
run: |
|
|
||||||
echo "${{ env.SHA512_WIN }} yt-dlp.exe" >> SHA2-512SUMS
|
|
||||||
echo "${{ env.SHA512_WIN32 }} yt-dlp_x86.exe" >> SHA2-512SUMS
|
|
||||||
echo "${{ env.SHA512_BIN }} yt-dlp" >> SHA2-512SUMS
|
|
||||||
echo "${{ env.SHA512_TAR }} yt-dlp.tar.gz" >> SHA2-512SUMS
|
|
||||||
echo "${{ env.SHA512_WIN_ZIP }} yt-dlp.zip" >> SHA2-512SUMS
|
|
||||||
- name: Upload 512SUMS file
|
|
||||||
id: upload-512sums
|
|
||||||
uses: actions/upload-release-asset@v1
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
with:
|
|
||||||
upload_url: ${{ needs.build_unix.outputs.upload_url }}
|
|
||||||
asset_path: ./SHA2-512SUMS
|
|
||||||
asset_name: SHA2-512SUMS
|
|
||||||
asset_content_type: text/plain
|
|
||||||
|
|||||||
75
.github/workflows/ci.yml
vendored
Normal file
75
.github/workflows/ci.yml
vendored
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
name: CI
|
||||||
|
on: [push]
|
||||||
|
jobs:
|
||||||
|
tests:
|
||||||
|
name: Tests
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: true
|
||||||
|
matrix:
|
||||||
|
os: [ubuntu-latest]
|
||||||
|
# TODO: python 2.6
|
||||||
|
# 3.3, 3.4 are not running
|
||||||
|
python-version: [2.7, 3.5, 3.6, 3.7, 3.8, 3.9, pypy-2.7, pypy-3.6, pypy-3.7]
|
||||||
|
python-impl: [cpython]
|
||||||
|
ytdl-test-set: [core, download]
|
||||||
|
run-tests-ext: [sh]
|
||||||
|
include:
|
||||||
|
# python 3.2 is only available on windows via setup-python
|
||||||
|
- os: windows-latest
|
||||||
|
python-version: 3.2
|
||||||
|
python-impl: cpython
|
||||||
|
ytdl-test-set: core
|
||||||
|
run-tests-ext: bat
|
||||||
|
- os: windows-latest
|
||||||
|
python-version: 3.2
|
||||||
|
python-impl: cpython
|
||||||
|
ytdl-test-set: download
|
||||||
|
run-tests-ext: bat
|
||||||
|
# jython
|
||||||
|
- os: ubuntu-latest
|
||||||
|
python-impl: jython
|
||||||
|
ytdl-test-set: core
|
||||||
|
run-tests-ext: sh
|
||||||
|
- os: ubuntu-latest
|
||||||
|
python-impl: jython
|
||||||
|
ytdl-test-set: download
|
||||||
|
run-tests-ext: sh
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Set up Python ${{ matrix.python-version }}
|
||||||
|
uses: actions/setup-python@v2
|
||||||
|
if: ${{ matrix.python-impl == 'cpython' }}
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
- name: Set up Java 8
|
||||||
|
if: ${{ matrix.python-impl == 'jython' }}
|
||||||
|
uses: actions/setup-java@v1
|
||||||
|
with:
|
||||||
|
java-version: 8
|
||||||
|
- name: Install Jython
|
||||||
|
if: ${{ matrix.python-impl == 'jython' }}
|
||||||
|
run: |
|
||||||
|
wget http://search.maven.org/remotecontent?filepath=org/python/jython-installer/2.7.1/jython-installer-2.7.1.jar -O jython-installer.jar
|
||||||
|
java -jar jython-installer.jar -s -d "$HOME/jython"
|
||||||
|
echo "$HOME/jython/bin" >> $GITHUB_PATH
|
||||||
|
- name: Install nose
|
||||||
|
run: pip install nose
|
||||||
|
- name: Run tests
|
||||||
|
continue-on-error: ${{ matrix.ytdl-test-set == 'download' || matrix.python-impl == 'jython' }}
|
||||||
|
env:
|
||||||
|
YTDL_TEST_SET: ${{ matrix.ytdl-test-set }}
|
||||||
|
run: ./devscripts/run_tests.${{ matrix.run-tests-ext }}
|
||||||
|
flake8:
|
||||||
|
name: Linter
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: 3.9
|
||||||
|
- name: Install flake8
|
||||||
|
run: pip install flake8
|
||||||
|
- name: Run flake8
|
||||||
|
run: flake8 .
|
||||||
31
.github/workflows/core.yml
vendored
31
.github/workflows/core.yml
vendored
@@ -1,31 +0,0 @@
|
|||||||
name: Core Tests
|
|
||||||
on: [push, pull_request]
|
|
||||||
jobs:
|
|
||||||
tests:
|
|
||||||
name: Core Tests
|
|
||||||
if: "!contains(github.event.head_commit.message, 'ci skip')"
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
os: [ubuntu-18.04]
|
|
||||||
# py3.9 is in quick-test
|
|
||||||
python-version: [3.7, 3.8, 3.10-dev, pypy-3.6, pypy-3.7]
|
|
||||||
run-tests-ext: [sh]
|
|
||||||
include:
|
|
||||||
# atleast one of the tests must be in windows
|
|
||||||
- os: windows-latest
|
|
||||||
python-version: 3.6
|
|
||||||
run-tests-ext: bat
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: Set up Python ${{ matrix.python-version }}
|
|
||||||
uses: actions/setup-python@v2
|
|
||||||
with:
|
|
||||||
python-version: ${{ matrix.python-version }}
|
|
||||||
- name: Install pytest
|
|
||||||
run: pip install pytest
|
|
||||||
- name: Run tests
|
|
||||||
continue-on-error: False
|
|
||||||
run: ./devscripts/run_tests.${{ matrix.run-tests-ext }} core
|
|
||||||
# Linter is in quick-test
|
|
||||||
28
.github/workflows/download.yml
vendored
28
.github/workflows/download.yml
vendored
@@ -1,28 +0,0 @@
|
|||||||
name: Download Tests
|
|
||||||
on: [push, pull_request]
|
|
||||||
jobs:
|
|
||||||
tests:
|
|
||||||
name: Download Tests
|
|
||||||
if: "contains(github.event.head_commit.message, 'ci run dl')"
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
strategy:
|
|
||||||
fail-fast: true
|
|
||||||
matrix:
|
|
||||||
os: [ubuntu-18.04]
|
|
||||||
python-version: [3.7, 3.8, 3.9, 3.10-dev, pypy-3.6, pypy-3.7]
|
|
||||||
run-tests-ext: [sh]
|
|
||||||
include:
|
|
||||||
- os: windows-latest
|
|
||||||
python-version: 3.6
|
|
||||||
run-tests-ext: bat
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: Set up Python ${{ matrix.python-version }}
|
|
||||||
uses: actions/setup-python@v2
|
|
||||||
with:
|
|
||||||
python-version: ${{ matrix.python-version }}
|
|
||||||
- name: Install pytest
|
|
||||||
run: pip install pytest
|
|
||||||
- name: Run tests
|
|
||||||
continue-on-error: true
|
|
||||||
run: ./devscripts/run_tests.${{ matrix.run-tests-ext }} download
|
|
||||||
33
.github/workflows/python-publish.yml.disable
vendored
Normal file
33
.github/workflows/python-publish.yml.disable
vendored
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
# This workflows will upload a Python Package using Twine when a release is created
|
||||||
|
# For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries
|
||||||
|
|
||||||
|
name: Upload Python Package
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- release
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: '3.x'
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
python -m pip install --upgrade pip
|
||||||
|
pip install setuptools wheel twine
|
||||||
|
- name: Build and publish
|
||||||
|
env:
|
||||||
|
TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
|
||||||
|
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
|
||||||
|
run: |
|
||||||
|
rm -rf dist/*
|
||||||
|
python setup.py sdist bdist_wheel
|
||||||
|
twine upload dist/*
|
||||||
33
.github/workflows/quick-test.yml
vendored
33
.github/workflows/quick-test.yml
vendored
@@ -1,33 +0,0 @@
|
|||||||
name: Quick Test
|
|
||||||
on: [push, pull_request]
|
|
||||||
jobs:
|
|
||||||
tests:
|
|
||||||
name: Core Test
|
|
||||||
if: "!contains(github.event.head_commit.message, 'ci skip all')"
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: Set up Python
|
|
||||||
uses: actions/setup-python@v2
|
|
||||||
with:
|
|
||||||
python-version: 3.9
|
|
||||||
- name: Install test requirements
|
|
||||||
run: pip install pytest pycryptodome
|
|
||||||
- name: Run tests
|
|
||||||
run: ./devscripts/run_tests.sh core
|
|
||||||
flake8:
|
|
||||||
name: Linter
|
|
||||||
if: "!contains(github.event.head_commit.message, 'ci skip all')"
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: Set up Python
|
|
||||||
uses: actions/setup-python@v2
|
|
||||||
with:
|
|
||||||
python-version: 3.9
|
|
||||||
- name: Install flake8
|
|
||||||
run: pip install flake8
|
|
||||||
- name: Make lazy extractors
|
|
||||||
run: python devscripts/make_lazy_extractors.py yt_dlp/extractor/lazy_extractors.py
|
|
||||||
- name: Run flake8
|
|
||||||
run: flake8 .
|
|
||||||
127
.gitignore
vendored
127
.gitignore
vendored
@@ -1,11 +1,35 @@
|
|||||||
# Config
|
*.pyc
|
||||||
*.conf
|
*.pyo
|
||||||
*.spec
|
*.class
|
||||||
cookies
|
*~
|
||||||
*cookies.txt
|
*.DS_Store
|
||||||
.netrc
|
wine-py2exe/
|
||||||
|
py2exe.log
|
||||||
# Downloaded
|
*.kate-swp
|
||||||
|
build/
|
||||||
|
dist/
|
||||||
|
zip/
|
||||||
|
MANIFEST
|
||||||
|
README.txt
|
||||||
|
youtube-dl.1
|
||||||
|
youtube-dlc.1
|
||||||
|
youtube-dl.bash-completion
|
||||||
|
youtube-dlc.bash-completion
|
||||||
|
youtube-dl.fish
|
||||||
|
youtube-dlc.fish
|
||||||
|
youtube_dl/extractor/lazy_extractors.py
|
||||||
|
youtube_dlc/extractor/lazy_extractors.py
|
||||||
|
youtube-dl
|
||||||
|
youtube-dlc
|
||||||
|
youtube-dl.exe
|
||||||
|
youtube-dlc.exe
|
||||||
|
youtube-dl.tar.gz
|
||||||
|
youtube-dlc.tar.gz
|
||||||
|
youtube-dlc.spec
|
||||||
|
.coverage
|
||||||
|
cover/
|
||||||
|
updates_key.pem
|
||||||
|
*.egg-info
|
||||||
*.srt
|
*.srt
|
||||||
*.ttml
|
*.ttml
|
||||||
*.sbv
|
*.sbv
|
||||||
@@ -16,92 +40,29 @@ cookies
|
|||||||
*.m4v
|
*.m4v
|
||||||
*.mp3
|
*.mp3
|
||||||
*.3gp
|
*.3gp
|
||||||
*.webm
|
|
||||||
*.wav
|
*.wav
|
||||||
*.ape
|
*.ape
|
||||||
*.mkv
|
*.mkv
|
||||||
*.flac
|
|
||||||
*.avi
|
|
||||||
*.swf
|
*.swf
|
||||||
*.part
|
*.part
|
||||||
*.part-*
|
|
||||||
*.ytdl
|
*.ytdl
|
||||||
*.dump
|
|
||||||
*.frag
|
|
||||||
*.frag.urls
|
|
||||||
*.aria2
|
|
||||||
*.swp
|
*.swp
|
||||||
*.ogg
|
|
||||||
*.opus
|
|
||||||
*.info.json
|
|
||||||
*.live_chat.json
|
|
||||||
*.jpg
|
|
||||||
*.jpeg
|
|
||||||
*.png
|
|
||||||
*.webp
|
|
||||||
*.annotations.xml
|
|
||||||
*.description
|
|
||||||
|
|
||||||
# Allow config/media files in testdata
|
|
||||||
!test/**
|
|
||||||
|
|
||||||
# Python
|
|
||||||
*.pyc
|
|
||||||
*.pyo
|
|
||||||
.pytest_cache
|
|
||||||
wine-py2exe/
|
|
||||||
py2exe.log
|
|
||||||
build/
|
|
||||||
dist/
|
|
||||||
zip/
|
|
||||||
tmp/
|
|
||||||
venv/
|
|
||||||
completions/
|
|
||||||
|
|
||||||
# Misc
|
|
||||||
*~
|
|
||||||
*.DS_Store
|
|
||||||
*.kate-swp
|
|
||||||
MANIFEST
|
|
||||||
test/local_parameters.json
|
|
||||||
.coverage
|
|
||||||
cover/
|
|
||||||
secrets/
|
|
||||||
updates_key.pem
|
|
||||||
*.egg-info
|
|
||||||
.tox
|
|
||||||
*.class
|
|
||||||
|
|
||||||
# Generated
|
|
||||||
AUTHORS
|
|
||||||
README.txt
|
|
||||||
.mailmap
|
|
||||||
*.1
|
|
||||||
*.bash-completion
|
|
||||||
*.fish
|
|
||||||
*.exe
|
|
||||||
*.tar.gz
|
|
||||||
*.zsh
|
|
||||||
*.spec
|
*.spec
|
||||||
test/testdata/player-*.js
|
test/local_parameters.json
|
||||||
|
.tox
|
||||||
|
youtube-dl.zsh
|
||||||
|
youtube-dlc.zsh
|
||||||
|
|
||||||
# Binary
|
# IntelliJ related files
|
||||||
/youtube-dl
|
|
||||||
/youtube-dlc
|
|
||||||
/yt-dlp
|
|
||||||
yt-dlp.zip
|
|
||||||
*.exe
|
|
||||||
|
|
||||||
# Text Editor / IDE
|
|
||||||
.idea
|
.idea
|
||||||
*.iml
|
*.iml
|
||||||
|
|
||||||
|
tmp/
|
||||||
|
venv/
|
||||||
|
|
||||||
|
# VS Code related files
|
||||||
.vscode
|
.vscode
|
||||||
*.sublime-*
|
|
||||||
|
|
||||||
# Lazy extractors
|
cookies.txt
|
||||||
*/extractor/lazy_extractors.py
|
|
||||||
|
|
||||||
# Plugins
|
*.sublime-workspace
|
||||||
ytdlp_plugins/extractor/*
|
|
||||||
!ytdlp_plugins/extractor/__init__.py
|
|
||||||
!ytdlp_plugins/extractor/sample.py
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
# .readthedocs.yaml
|
|
||||||
# Read the Docs configuration file
|
|
||||||
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
|
||||||
|
|
||||||
# Required
|
|
||||||
version: 2
|
|
||||||
|
|
||||||
# Build documentation in the docs/ directory with Sphinx
|
|
||||||
sphinx:
|
|
||||||
configuration: docs/conf.py
|
|
||||||
|
|
||||||
# Optionally build your docs in additional formats such as PDF
|
|
||||||
formats:
|
|
||||||
- epub
|
|
||||||
- pdf
|
|
||||||
- htmlzip
|
|
||||||
|
|
||||||
# Optionally set the version of Python and requirements required to build your docs
|
|
||||||
python:
|
|
||||||
version: 3
|
|
||||||
install:
|
|
||||||
- requirements: docs/requirements.txt
|
|
||||||
38
.travis.yml.disabled
Normal file
38
.travis.yml.disabled
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
language: python
|
||||||
|
python:
|
||||||
|
- "2.6"
|
||||||
|
- "2.7"
|
||||||
|
- "3.2"
|
||||||
|
- "3.3"
|
||||||
|
- "3.4"
|
||||||
|
- "3.5"
|
||||||
|
- "3.6"
|
||||||
|
- "pypy"
|
||||||
|
- "pypy3"
|
||||||
|
dist: trusty
|
||||||
|
env:
|
||||||
|
- YTDL_TEST_SET=core
|
||||||
|
jobs:
|
||||||
|
include:
|
||||||
|
- python: 3.7
|
||||||
|
dist: xenial
|
||||||
|
env: YTDL_TEST_SET=core
|
||||||
|
- python: 3.8
|
||||||
|
dist: xenial
|
||||||
|
env: YTDL_TEST_SET=core
|
||||||
|
- python: 3.8-dev
|
||||||
|
dist: xenial
|
||||||
|
env: YTDL_TEST_SET=core
|
||||||
|
- env: JYTHON=true; YTDL_TEST_SET=core
|
||||||
|
- name: flake8
|
||||||
|
python: 3.8
|
||||||
|
dist: xenial
|
||||||
|
install: pip install flake8
|
||||||
|
script: flake8 .
|
||||||
|
fast_finish: true
|
||||||
|
allow_failures:
|
||||||
|
- env: YTDL_TEST_SET=download
|
||||||
|
- env: JYTHON=true; YTDL_TEST_SET=core
|
||||||
|
before_install:
|
||||||
|
- if [ "$JYTHON" == "true" ]; then ./devscripts/install_jython.sh; export PATH="$HOME/jython/bin:$PATH"; fi
|
||||||
|
script: ./devscripts/run_tests.sh
|
||||||
248
AUTHORS
Normal file
248
AUTHORS
Normal file
@@ -0,0 +1,248 @@
|
|||||||
|
Ricardo Garcia Gonzalez
|
||||||
|
Danny Colligan
|
||||||
|
Benjamin Johnson
|
||||||
|
Vasyl' Vavrychuk
|
||||||
|
Witold Baryluk
|
||||||
|
Paweł Paprota
|
||||||
|
Gergely Imreh
|
||||||
|
Rogério Brito
|
||||||
|
Philipp Hagemeister
|
||||||
|
Sören Schulze
|
||||||
|
Kevin Ngo
|
||||||
|
Ori Avtalion
|
||||||
|
shizeeg
|
||||||
|
Filippo Valsorda
|
||||||
|
Christian Albrecht
|
||||||
|
Dave Vasilevsky
|
||||||
|
Jaime Marquínez Ferrándiz
|
||||||
|
Jeff Crouse
|
||||||
|
Osama Khalid
|
||||||
|
Michael Walter
|
||||||
|
M. Yasoob Ullah Khalid
|
||||||
|
Julien Fraichard
|
||||||
|
Johny Mo Swag
|
||||||
|
Axel Noack
|
||||||
|
Albert Kim
|
||||||
|
Pierre Rudloff
|
||||||
|
Huarong Huo
|
||||||
|
Ismael Mejía
|
||||||
|
Steffan Donal
|
||||||
|
Andras Elso
|
||||||
|
Jelle van der Waa
|
||||||
|
Marcin Cieślak
|
||||||
|
Anton Larionov
|
||||||
|
Takuya Tsuchida
|
||||||
|
Sergey M.
|
||||||
|
Michael Orlitzky
|
||||||
|
Chris Gahan
|
||||||
|
Saimadhav Heblikar
|
||||||
|
Mike Col
|
||||||
|
Oleg Prutz
|
||||||
|
pulpe
|
||||||
|
Andreas Schmitz
|
||||||
|
Michael Kaiser
|
||||||
|
Niklas Laxström
|
||||||
|
David Triendl
|
||||||
|
Anthony Weems
|
||||||
|
David Wagner
|
||||||
|
Juan C. Olivares
|
||||||
|
Mattias Harrysson
|
||||||
|
phaer
|
||||||
|
Sainyam Kapoor
|
||||||
|
Nicolas Évrard
|
||||||
|
Jason Normore
|
||||||
|
Hoje Lee
|
||||||
|
Adam Thalhammer
|
||||||
|
Georg Jähnig
|
||||||
|
Ralf Haring
|
||||||
|
Koki Takahashi
|
||||||
|
Ariset Llerena
|
||||||
|
Adam Malcontenti-Wilson
|
||||||
|
Tobias Bell
|
||||||
|
Naglis Jonaitis
|
||||||
|
Charles Chen
|
||||||
|
Hassaan Ali
|
||||||
|
Dobrosław Żybort
|
||||||
|
David Fabijan
|
||||||
|
Sebastian Haas
|
||||||
|
Alexander Kirk
|
||||||
|
Erik Johnson
|
||||||
|
Keith Beckman
|
||||||
|
Ole Ernst
|
||||||
|
Aaron McDaniel (mcd1992)
|
||||||
|
Magnus Kolstad
|
||||||
|
Hari Padmanaban
|
||||||
|
Carlos Ramos
|
||||||
|
5moufl
|
||||||
|
lenaten
|
||||||
|
Dennis Scheiba
|
||||||
|
Damon Timm
|
||||||
|
winwon
|
||||||
|
Xavier Beynon
|
||||||
|
Gabriel Schubiner
|
||||||
|
xantares
|
||||||
|
Jan Matějka
|
||||||
|
Mauroy Sébastien
|
||||||
|
William Sewell
|
||||||
|
Dao Hoang Son
|
||||||
|
Oskar Jauch
|
||||||
|
Matthew Rayfield
|
||||||
|
t0mm0
|
||||||
|
Tithen-Firion
|
||||||
|
Zack Fernandes
|
||||||
|
cryptonaut
|
||||||
|
Adrian Kretz
|
||||||
|
Mathias Rav
|
||||||
|
Petr Kutalek
|
||||||
|
Will Glynn
|
||||||
|
Max Reimann
|
||||||
|
Cédric Luthi
|
||||||
|
Thijs Vermeir
|
||||||
|
Joel Leclerc
|
||||||
|
Christopher Krooss
|
||||||
|
Ondřej Caletka
|
||||||
|
Dinesh S
|
||||||
|
Johan K. Jensen
|
||||||
|
Yen Chi Hsuan
|
||||||
|
Enam Mijbah Noor
|
||||||
|
David Luhmer
|
||||||
|
Shaya Goldberg
|
||||||
|
Paul Hartmann
|
||||||
|
Frans de Jonge
|
||||||
|
Robin de Rooij
|
||||||
|
Ryan Schmidt
|
||||||
|
Leslie P. Polzer
|
||||||
|
Duncan Keall
|
||||||
|
Alexander Mamay
|
||||||
|
Devin J. Pohly
|
||||||
|
Eduardo Ferro Aldama
|
||||||
|
Jeff Buchbinder
|
||||||
|
Amish Bhadeshia
|
||||||
|
Joram Schrijver
|
||||||
|
Will W.
|
||||||
|
Mohammad Teimori Pabandi
|
||||||
|
Roman Le Négrate
|
||||||
|
Matthias Küch
|
||||||
|
Julian Richen
|
||||||
|
Ping O.
|
||||||
|
Mister Hat
|
||||||
|
Peter Ding
|
||||||
|
jackyzy823
|
||||||
|
George Brighton
|
||||||
|
Remita Amine
|
||||||
|
Aurélio A. Heckert
|
||||||
|
Bernhard Minks
|
||||||
|
sceext
|
||||||
|
Zach Bruggeman
|
||||||
|
Tjark Saul
|
||||||
|
slangangular
|
||||||
|
Behrouz Abbasi
|
||||||
|
ngld
|
||||||
|
nyuszika7h
|
||||||
|
Shaun Walbridge
|
||||||
|
Lee Jenkins
|
||||||
|
Anssi Hannula
|
||||||
|
Lukáš Lalinský
|
||||||
|
Qijiang Fan
|
||||||
|
Rémy Léone
|
||||||
|
Marco Ferragina
|
||||||
|
reiv
|
||||||
|
Muratcan Simsek
|
||||||
|
Evan Lu
|
||||||
|
flatgreen
|
||||||
|
Brian Foley
|
||||||
|
Vignesh Venkat
|
||||||
|
Tom Gijselinck
|
||||||
|
Founder Fang
|
||||||
|
Andrew Alexeyew
|
||||||
|
Saso Bezlaj
|
||||||
|
Erwin de Haan
|
||||||
|
Jens Wille
|
||||||
|
Robin Houtevelts
|
||||||
|
Patrick Griffis
|
||||||
|
Aidan Rowe
|
||||||
|
mutantmonkey
|
||||||
|
Ben Congdon
|
||||||
|
Kacper Michajłow
|
||||||
|
José Joaquín Atria
|
||||||
|
Viťas Strádal
|
||||||
|
Kagami Hiiragi
|
||||||
|
Philip Huppert
|
||||||
|
blahgeek
|
||||||
|
Kevin Deldycke
|
||||||
|
inondle
|
||||||
|
Tomáš Čech
|
||||||
|
Déstin Reed
|
||||||
|
Roman Tsiupa
|
||||||
|
Artur Krysiak
|
||||||
|
Jakub Adam Wieczorek
|
||||||
|
Aleksandar Topuzović
|
||||||
|
Nehal Patel
|
||||||
|
Rob van Bekkum
|
||||||
|
Petr Zvoníček
|
||||||
|
Pratyush Singh
|
||||||
|
Aleksander Nitecki
|
||||||
|
Sebastian Blunt
|
||||||
|
Matěj Cepl
|
||||||
|
Xie Yanbo
|
||||||
|
Philip Xu
|
||||||
|
John Hawkinson
|
||||||
|
Rich Leeper
|
||||||
|
Zhong Jianxin
|
||||||
|
Thor77
|
||||||
|
Mattias Wadman
|
||||||
|
Arjan Verwer
|
||||||
|
Costy Petrisor
|
||||||
|
Logan B
|
||||||
|
Alex Seiler
|
||||||
|
Vijay Singh
|
||||||
|
Paul Hartmann
|
||||||
|
Stephen Chen
|
||||||
|
Fabian Stahl
|
||||||
|
Bagira
|
||||||
|
Odd Stråbø
|
||||||
|
Philip Herzog
|
||||||
|
Thomas Christlieb
|
||||||
|
Marek Rusinowski
|
||||||
|
Tobias Gruetzmacher
|
||||||
|
Olivier Bilodeau
|
||||||
|
Lars Vierbergen
|
||||||
|
Juanjo Benages
|
||||||
|
Xiao Di Guan
|
||||||
|
Thomas Winant
|
||||||
|
Daniel Twardowski
|
||||||
|
Jeremie Jarosh
|
||||||
|
Gerard Rovira
|
||||||
|
Marvin Ewald
|
||||||
|
Frédéric Bournival
|
||||||
|
Timendum
|
||||||
|
gritstub
|
||||||
|
Adam Voss
|
||||||
|
Mike Fährmann
|
||||||
|
Jan Kundrát
|
||||||
|
Giuseppe Fabiano
|
||||||
|
Örn Guðjónsson
|
||||||
|
Parmjit Virk
|
||||||
|
Genki Sky
|
||||||
|
Ľuboš Katrinec
|
||||||
|
Corey Nicholson
|
||||||
|
Ashutosh Chaudhary
|
||||||
|
John Dong
|
||||||
|
Tatsuyuki Ishi
|
||||||
|
Daniel Weber
|
||||||
|
Kay Bouché
|
||||||
|
Yang Hongbo
|
||||||
|
Lei Wang
|
||||||
|
Petr Novák
|
||||||
|
Leonardo Taccari
|
||||||
|
Martin Weinelt
|
||||||
|
Surya Oktafendri
|
||||||
|
TingPing
|
||||||
|
Alexandre Macabies
|
||||||
|
Bastian de Groot
|
||||||
|
Niklas Haas
|
||||||
|
András Veres-Szentkirályi
|
||||||
|
Enes Solak
|
||||||
|
Nathan Rossi
|
||||||
|
Thomas van der Berg
|
||||||
|
Luca Cherubin
|
||||||
8
AUTHORS-Fork
Normal file
8
AUTHORS-Fork
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
pukkandan
|
||||||
|
h-h-h-h
|
||||||
|
pauldubois98
|
||||||
|
nixxo
|
||||||
|
GreyAlien502
|
||||||
|
kyuyeunk
|
||||||
|
siikamiika
|
||||||
|
jbruchon
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
$ youtube-dl -v <your command line>
|
$ youtube-dl -v <your command line>
|
||||||
[debug] System config: []
|
[debug] System config: []
|
||||||
[debug] User config: []
|
[debug] User config: []
|
||||||
[debug] Command-line args: [u'-v', u'https://www.youtube.com/watch?v=BaW_jenozKc']
|
[debug] Command-line args: [u'-v', u'https://www.youtube.com/watch?v=BaW_jenozKcj']
|
||||||
[debug] Encodings: locale cp1251, fs mbcs, out cp866, pref cp1251
|
[debug] Encodings: locale cp1251, fs mbcs, out cp866, pref cp1251
|
||||||
[debug] youtube-dl version 2015.12.06
|
[debug] youtube-dl version 2015.12.06
|
||||||
[debug] Git HEAD: 135392e
|
[debug] Git HEAD: 135392e
|
||||||
@@ -81,17 +81,16 @@ # DEVELOPER INSTRUCTIONS
|
|||||||
python -m unittest discover
|
python -m unittest discover
|
||||||
python test/test_download.py
|
python test/test_download.py
|
||||||
nosetests
|
nosetests
|
||||||
pytest
|
|
||||||
|
|
||||||
See item 6 of [new extractor tutorial](#adding-support-for-a-new-site) for how to run extractor specific test cases.
|
See item 6 of [new extractor tutorial](#adding-support-for-a-new-site) for how to run extractor specific test cases.
|
||||||
|
|
||||||
If you want to create a build of youtube-dl yourself, you'll need
|
If you want to create a build of youtube-dl yourself, you'll need
|
||||||
|
|
||||||
* python3
|
* python
|
||||||
* make (only GNU make is supported)
|
* make (only GNU make is supported)
|
||||||
* pandoc
|
* pandoc
|
||||||
* zip
|
* zip
|
||||||
* pytest
|
* nosetests
|
||||||
|
|
||||||
### Adding support for a new site
|
### Adding support for a new site
|
||||||
|
|
||||||
|
|||||||
120
CONTRIBUTORS
120
CONTRIBUTORS
@@ -1,120 +0,0 @@
|
|||||||
pukkandan (owner)
|
|
||||||
shirt-dev (collaborator)
|
|
||||||
coletdjnz/colethedj (collaborator)
|
|
||||||
Ashish0804 (collaborator)
|
|
||||||
h-h-h-h
|
|
||||||
pauldubois98
|
|
||||||
nixxo
|
|
||||||
GreyAlien502
|
|
||||||
kyuyeunk
|
|
||||||
siikamiika
|
|
||||||
jbruchon
|
|
||||||
alexmerkel
|
|
||||||
glenn-slayden
|
|
||||||
Unrud
|
|
||||||
wporr
|
|
||||||
mariuszskon
|
|
||||||
ohnonot
|
|
||||||
samiksome
|
|
||||||
alxnull
|
|
||||||
FelixFrog
|
|
||||||
Zocker1999NET
|
|
||||||
nao20010128nao
|
|
||||||
kurumigi
|
|
||||||
bbepis
|
|
||||||
animelover1984/horahoradev
|
|
||||||
Pccode66
|
|
||||||
RobinD42
|
|
||||||
hseg
|
|
||||||
DennyDai
|
|
||||||
codeasashu
|
|
||||||
teesid
|
|
||||||
kevinoconnor7
|
|
||||||
damianoamatruda
|
|
||||||
2ShedsJackson
|
|
||||||
CXwudi
|
|
||||||
xtkoba
|
|
||||||
llacb47
|
|
||||||
hheimbuerger
|
|
||||||
B0pol
|
|
||||||
lkho
|
|
||||||
fstirlitz
|
|
||||||
Lamieur
|
|
||||||
tsukumijima
|
|
||||||
Hadi0609
|
|
||||||
b5eff52
|
|
||||||
craftingmod
|
|
||||||
tpikonen
|
|
||||||
tripulse
|
|
||||||
king-millez
|
|
||||||
alex-gedeon
|
|
||||||
hhirtz
|
|
||||||
louie-github
|
|
||||||
MinePlayersPE
|
|
||||||
olifre
|
|
||||||
rhsmachine/zenerdi0de
|
|
||||||
nihil-admirari
|
|
||||||
krichbanana
|
|
||||||
ohmybahgosh
|
|
||||||
nyuszika7h
|
|
||||||
blackjack4494
|
|
||||||
pyx
|
|
||||||
TpmKranz
|
|
||||||
mzbaulhaque
|
|
||||||
zackmark29
|
|
||||||
mbway
|
|
||||||
zerodytrash
|
|
||||||
wesnm
|
|
||||||
pento
|
|
||||||
rigstot
|
|
||||||
dirkf
|
|
||||||
funniray
|
|
||||||
Jessecar96
|
|
||||||
jhwgh1968
|
|
||||||
kikuyan
|
|
||||||
max-te
|
|
||||||
nchilada
|
|
||||||
pgaig
|
|
||||||
PSlava
|
|
||||||
stdedos
|
|
||||||
u-spec-png
|
|
||||||
Sipherdrakon
|
|
||||||
kidonng
|
|
||||||
smege1001
|
|
||||||
tandy1000
|
|
||||||
IONECarter
|
|
||||||
capntrips
|
|
||||||
mrfade
|
|
||||||
ParadoxGBB
|
|
||||||
wlritchi
|
|
||||||
NeroBurner
|
|
||||||
mahanstreamer
|
|
||||||
alerikaisattera
|
|
||||||
Derkades
|
|
||||||
BunnyHelp
|
|
||||||
i6t
|
|
||||||
std-move
|
|
||||||
Chocobozzz
|
|
||||||
ouwou
|
|
||||||
korli
|
|
||||||
octotherp
|
|
||||||
CeruleanSky
|
|
||||||
zootedb0t
|
|
||||||
chao813
|
|
||||||
ChillingPepper
|
|
||||||
ConquerorDopy
|
|
||||||
dalanmiller
|
|
||||||
DigitalDJ
|
|
||||||
f4pp3rk1ng
|
|
||||||
gesa
|
|
||||||
Jules-A
|
|
||||||
makeworld-the-better-one
|
|
||||||
MKSherbini
|
|
||||||
mrx23dot
|
|
||||||
poschi3
|
|
||||||
raphaeldore
|
|
||||||
renalid
|
|
||||||
sleaux-meaux
|
|
||||||
sulyi
|
|
||||||
tmarki
|
|
||||||
Vangelis66
|
|
||||||
1160
Changelog.md
1160
Changelog.md
File diff suppressed because it is too large
Load Diff
@@ -1,39 +0,0 @@
|
|||||||
# Collaborators
|
|
||||||
|
|
||||||
This is a list of the collaborators of the project and their major contributions. See the [Changelog](Changelog.md) for more details.
|
|
||||||
|
|
||||||
You can also find lists of all [contributors of yt-dlp](CONTRIBUTORS) and [authors of youtube-dl](https://github.com/ytdl-org/youtube-dl/blob/master/AUTHORS)
|
|
||||||
|
|
||||||
|
|
||||||
## [pukkandan](https://github.com/pukkandan)
|
|
||||||
|
|
||||||
[](https://ko-fi.com/pukkandan)
|
|
||||||
|
|
||||||
* Owner of the fork
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [shirt](https://github.com/shirt-dev)
|
|
||||||
|
|
||||||
[](https://ko-fi.com/shirt)
|
|
||||||
|
|
||||||
* Multithreading (`-N`) and aria2c support for fragment downloads
|
|
||||||
* Support for media initialization and discontinuity in HLS
|
|
||||||
* The self-updater (`-U`)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [coletdjnz](https://github.com/coletdjnz)
|
|
||||||
|
|
||||||
[](https://github.com/sponsors/coletdjnz)
|
|
||||||
|
|
||||||
* YouTube improvements including: age-gate bypass, private playlists, multiple-clients (to avoid throttling) and a lot of under-the-hood improvements
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [Ashish0804](https://github.com/Ashish0804)
|
|
||||||
|
|
||||||
[](https://ko-fi.com/ashish0804)
|
|
||||||
|
|
||||||
* Added support for new websites Zee5, MXPlayer, DiscoveryPlusIndia, ShemarooMe, Utreon etc
|
|
||||||
* Added playlist/series downloads for TubiTv, SonyLIV, Voot, HotStar etc
|
|
||||||
14
MANIFEST.in
14
MANIFEST.in
@@ -1,9 +1,9 @@
|
|||||||
include AUTHORS
|
|
||||||
include Changelog.md
|
|
||||||
include LICENSE
|
|
||||||
include README.md
|
include README.md
|
||||||
include completions/*/*
|
include LICENSE
|
||||||
include supportedsites.md
|
include AUTHORS
|
||||||
include yt-dlp.1
|
include ChangeLog
|
||||||
recursive-include devscripts *
|
include youtube-dlc.bash-completion
|
||||||
|
include youtube-dlc.fish
|
||||||
|
include youtube-dlc.1
|
||||||
|
recursive-include docs Makefile conf.py *.rst
|
||||||
recursive-include test *
|
recursive-include test *
|
||||||
|
|||||||
149
Makefile
149
Makefile
@@ -1,38 +1,16 @@
|
|||||||
all: yt-dlp doc pypi-files
|
all: youtube-dlc README.md CONTRIBUTING.md README.txt issuetemplates youtube-dlc.1 youtube-dlc.bash-completion youtube-dlc.zsh youtube-dlc.fish supportedsites
|
||||||
clean: clean-test clean-dist clean-cache
|
|
||||||
completions: completion-bash completion-fish completion-zsh
|
|
||||||
doc: README.md CONTRIBUTING.md issuetemplates supportedsites
|
doc: README.md CONTRIBUTING.md issuetemplates supportedsites
|
||||||
ot: offlinetest
|
|
||||||
tar: yt-dlp.tar.gz
|
|
||||||
|
|
||||||
# Keep this list in sync with MANIFEST.in
|
clean:
|
||||||
# intended use: when building a source distribution,
|
rm -rf youtube-dlc.1.temp.md youtube-dlc.1 youtube-dlc.bash-completion README.txt MANIFEST build/ dist/ .coverage cover/ youtube-dlc.tar.gz youtube-dlc.zsh youtube-dlc.fish youtube_dlc/extractor/lazy_extractors.py *.dump *.part* *.ytdl *.info.json *.mp4 *.m4a *.flv *.mp3 *.avi *.mkv *.webm *.3gp *.wav *.ape *.swf *.jpg *.png CONTRIBUTING.md.tmp youtube-dlc youtube-dlc.exe
|
||||||
# make pypi-files && python setup.py sdist
|
find . -name "*.pyc" -delete
|
||||||
pypi-files: AUTHORS Changelog.md LICENSE README.md README.txt supportedsites completions yt-dlp.1 devscripts/* test/*
|
find . -name "*.class" -delete
|
||||||
|
|
||||||
.PHONY: all clean install test tar pypi-files completions ot offlinetest codetest supportedsites
|
|
||||||
|
|
||||||
clean-test:
|
|
||||||
rm -rf *.3gp *.annotations.xml *.ape *.avi *.description *.dump *.flac *.flv *.frag *.frag.aria2 *.frag.urls \
|
|
||||||
*.info.json *.jpeg *.jpg *.live_chat.json *.m4a *.m4v *.mkv *.mp3 *.mp4 *.ogg *.opus *.part* *.png *.sbv *.srt \
|
|
||||||
*.swf *.swp *.ttml *.vtt *.wav *.webm *.webp *.ytdl test/testdata/player-*.js
|
|
||||||
clean-dist:
|
|
||||||
rm -rf yt-dlp.1.temp.md yt-dlp.1 README.txt MANIFEST build/ dist/ .coverage cover/ yt-dlp.tar.gz completions/ yt_dlp/extractor/lazy_extractors.py *.spec CONTRIBUTING.md.tmp yt-dlp yt-dlp.exe yt_dlp.egg-info/ AUTHORS .mailmap
|
|
||||||
clean-cache:
|
|
||||||
find . -name "*.pyc" -o -name "*.class" -delete
|
|
||||||
|
|
||||||
completion-bash: completions/bash/yt-dlp
|
|
||||||
completion-fish: completions/fish/yt-dlp.fish
|
|
||||||
completion-zsh: completions/zsh/_yt-dlp
|
|
||||||
lazy-extractors: yt_dlp/extractor/lazy_extractors.py
|
|
||||||
|
|
||||||
PREFIX ?= /usr/local
|
PREFIX ?= /usr/local
|
||||||
DESTDIR ?= .
|
|
||||||
BINDIR ?= $(PREFIX)/bin
|
BINDIR ?= $(PREFIX)/bin
|
||||||
MANDIR ?= $(PREFIX)/man
|
MANDIR ?= $(PREFIX)/man
|
||||||
SHAREDIR ?= $(PREFIX)/share
|
SHAREDIR ?= $(PREFIX)/share
|
||||||
# make_supportedsites.py doesnot work correctly in python2
|
PYTHON ?= /usr/bin/env python
|
||||||
PYTHON ?= /usr/bin/env python3
|
|
||||||
|
|
||||||
# set SYSCONFDIR to /etc if PREFIX=/usr or PREFIX=/usr/local
|
# set SYSCONFDIR to /etc if PREFIX=/usr or PREFIX=/usr/local
|
||||||
SYSCONFDIR = $(shell if [ $(PREFIX) = /usr -o $(PREFIX) = /usr/local ]; then echo /etc; else echo $(PREFIX)/etc; fi)
|
SYSCONFDIR = $(shell if [ $(PREFIX) = /usr -o $(PREFIX) = /usr/local ]; then echo /etc; else echo $(PREFIX)/etc; fi)
|
||||||
@@ -40,45 +18,68 @@ SYSCONFDIR = $(shell if [ $(PREFIX) = /usr -o $(PREFIX) = /usr/local ]; then ech
|
|||||||
# set markdown input format to "markdown-smart" for pandoc version 2 and to "markdown" for pandoc prior to version 2
|
# set markdown input format to "markdown-smart" for pandoc version 2 and to "markdown" for pandoc prior to version 2
|
||||||
MARKDOWN = $(shell if [ `pandoc -v | head -n1 | cut -d" " -f2 | head -c1` = "2" ]; then echo markdown-smart; else echo markdown; fi)
|
MARKDOWN = $(shell if [ `pandoc -v | head -n1 | cut -d" " -f2 | head -c1` = "2" ]; then echo markdown-smart; else echo markdown; fi)
|
||||||
|
|
||||||
install: yt-dlp yt-dlp.1 completions
|
install: youtube-dlc youtube-dlc.1 youtube-dlc.bash-completion youtube-dlc.zsh youtube-dlc.fish
|
||||||
install -Dm755 yt-dlp $(DESTDIR)$(BINDIR)
|
install -d $(DESTDIR)$(BINDIR)
|
||||||
install -Dm644 yt-dlp.1 $(DESTDIR)$(MANDIR)/man1
|
install -m 755 youtube-dlc $(DESTDIR)$(BINDIR)
|
||||||
install -Dm644 completions/bash/yt-dlp $(DESTDIR)$(SHAREDIR)/bash-completion/completions/yt-dlp
|
install -d $(DESTDIR)$(MANDIR)/man1
|
||||||
install -Dm644 completions/zsh/_yt-dlp $(DESTDIR)$(SHAREDIR)/zsh/site-functions/_yt-dlp
|
install -m 644 youtube-dlc.1 $(DESTDIR)$(MANDIR)/man1
|
||||||
install -Dm644 completions/fish/yt-dlp.fish $(DESTDIR)$(SHAREDIR)/fish/vendor_completions.d/yt-dlp.fish
|
install -d $(DESTDIR)$(SYSCONFDIR)/bash_completion.d
|
||||||
|
install -m 644 youtube-dlc.bash-completion $(DESTDIR)$(SYSCONFDIR)/bash_completion.d/youtube-dlc
|
||||||
|
install -d $(DESTDIR)$(SHAREDIR)/zsh/site-functions
|
||||||
|
install -m 644 youtube-dlc.zsh $(DESTDIR)$(SHAREDIR)/zsh/site-functions/_youtube-dlc
|
||||||
|
install -d $(DESTDIR)$(SYSCONFDIR)/fish/completions
|
||||||
|
install -m 644 youtube-dlc.fish $(DESTDIR)$(SYSCONFDIR)/fish/completions/youtube-dlc.fish
|
||||||
|
|
||||||
codetest:
|
codetest:
|
||||||
flake8 .
|
flake8 .
|
||||||
|
|
||||||
test:
|
test:
|
||||||
$(PYTHON) -m pytest
|
#nosetests --with-coverage --cover-package=youtube_dlc --cover-html --verbose --processes 4 test
|
||||||
|
nosetests --verbose test
|
||||||
$(MAKE) codetest
|
$(MAKE) codetest
|
||||||
|
|
||||||
offlinetest: codetest
|
ot: offlinetest
|
||||||
$(PYTHON) -m pytest -k "not download"
|
|
||||||
|
|
||||||
yt-dlp: yt_dlp/*.py yt_dlp/*/*.py
|
# Keep this list in sync with devscripts/run_tests.sh
|
||||||
|
offlinetest: codetest
|
||||||
|
$(PYTHON) -m nose --verbose test \
|
||||||
|
--exclude test_age_restriction.py \
|
||||||
|
--exclude test_download.py \
|
||||||
|
--exclude test_iqiyi_sdk_interpreter.py \
|
||||||
|
--exclude test_socks.py \
|
||||||
|
--exclude test_subtitles.py \
|
||||||
|
--exclude test_write_annotations.py \
|
||||||
|
--exclude test_youtube_lists.py \
|
||||||
|
--exclude test_youtube_signature.py
|
||||||
|
|
||||||
|
tar: youtube-dlc.tar.gz
|
||||||
|
|
||||||
|
.PHONY: all clean install test tar bash-completion pypi-files zsh-completion fish-completion ot offlinetest codetest supportedsites
|
||||||
|
|
||||||
|
pypi-files: youtube-dlc.bash-completion README.txt youtube-dlc.1 youtube-dlc.fish
|
||||||
|
|
||||||
|
youtube-dlc: youtube_dlc/*.py youtube_dlc/*/*.py
|
||||||
mkdir -p zip
|
mkdir -p zip
|
||||||
for d in yt_dlp yt_dlp/downloader yt_dlp/extractor yt_dlp/postprocessor ; do \
|
for d in youtube_dlc youtube_dlc/downloader youtube_dlc/extractor youtube_dlc/postprocessor ; do \
|
||||||
mkdir -p zip/$$d ;\
|
mkdir -p zip/$$d ;\
|
||||||
cp -pPR $$d/*.py zip/$$d/ ;\
|
cp -pPR $$d/*.py zip/$$d/ ;\
|
||||||
done
|
done
|
||||||
touch -t 200001010101 zip/yt_dlp/*.py zip/yt_dlp/*/*.py
|
touch -t 200001010101 zip/youtube_dlc/*.py zip/youtube_dlc/*/*.py
|
||||||
mv zip/yt_dlp/__main__.py zip/
|
mv zip/youtube_dlc/__main__.py zip/
|
||||||
cd zip ; zip -q ../yt-dlp yt_dlp/*.py yt_dlp/*/*.py __main__.py
|
cd zip ; zip -q ../youtube-dlc youtube_dlc/*.py youtube_dlc/*/*.py __main__.py
|
||||||
rm -rf zip
|
rm -rf zip
|
||||||
echo '#!$(PYTHON)' > yt-dlp
|
echo '#!$(PYTHON)' > youtube-dlc
|
||||||
cat yt-dlp.zip >> yt-dlp
|
cat youtube-dlc.zip >> youtube-dlc
|
||||||
rm yt-dlp.zip
|
rm youtube-dlc.zip
|
||||||
chmod a+x yt-dlp
|
chmod a+x youtube-dlc
|
||||||
|
|
||||||
README.md: yt_dlp/*.py yt_dlp/*/*.py
|
README.md: youtube_dlc/*.py youtube_dlc/*/*.py
|
||||||
COLUMNS=80 $(PYTHON) yt_dlp/__main__.py --help | $(PYTHON) devscripts/make_readme.py
|
COLUMNS=80 $(PYTHON) youtube_dlc/__main__.py --help | $(PYTHON) devscripts/make_readme.py
|
||||||
|
|
||||||
CONTRIBUTING.md: README.md
|
CONTRIBUTING.md: README.md
|
||||||
$(PYTHON) devscripts/make_contributing.py README.md CONTRIBUTING.md
|
$(PYTHON) devscripts/make_contributing.py README.md CONTRIBUTING.md
|
||||||
|
|
||||||
issuetemplates: devscripts/make_issue_template.py .github/ISSUE_TEMPLATE_tmpl/1_broken_site.md .github/ISSUE_TEMPLATE_tmpl/2_site_support_request.md .github/ISSUE_TEMPLATE_tmpl/3_site_feature_request.md .github/ISSUE_TEMPLATE_tmpl/4_bug_report.md .github/ISSUE_TEMPLATE_tmpl/5_feature_request.md yt_dlp/version.py
|
issuetemplates: devscripts/make_issue_template.py .github/ISSUE_TEMPLATE_tmpl/1_broken_site.md .github/ISSUE_TEMPLATE_tmpl/2_site_support_request.md .github/ISSUE_TEMPLATE_tmpl/3_site_feature_request.md .github/ISSUE_TEMPLATE_tmpl/4_bug_report.md .github/ISSUE_TEMPLATE_tmpl/5_feature_request.md youtube_dlc/version.py
|
||||||
$(PYTHON) devscripts/make_issue_template.py .github/ISSUE_TEMPLATE_tmpl/1_broken_site.md .github/ISSUE_TEMPLATE/1_broken_site.md
|
$(PYTHON) devscripts/make_issue_template.py .github/ISSUE_TEMPLATE_tmpl/1_broken_site.md .github/ISSUE_TEMPLATE/1_broken_site.md
|
||||||
$(PYTHON) devscripts/make_issue_template.py .github/ISSUE_TEMPLATE_tmpl/2_site_support_request.md .github/ISSUE_TEMPLATE/2_site_support_request.md
|
$(PYTHON) devscripts/make_issue_template.py .github/ISSUE_TEMPLATE_tmpl/2_site_support_request.md .github/ISSUE_TEMPLATE/2_site_support_request.md
|
||||||
$(PYTHON) devscripts/make_issue_template.py .github/ISSUE_TEMPLATE_tmpl/3_site_feature_request.md .github/ISSUE_TEMPLATE/3_site_feature_request.md
|
$(PYTHON) devscripts/make_issue_template.py .github/ISSUE_TEMPLATE_tmpl/3_site_feature_request.md .github/ISSUE_TEMPLATE/3_site_feature_request.md
|
||||||
@@ -86,34 +87,39 @@ issuetemplates: devscripts/make_issue_template.py .github/ISSUE_TEMPLATE_tmpl/1_
|
|||||||
$(PYTHON) devscripts/make_issue_template.py .github/ISSUE_TEMPLATE_tmpl/5_feature_request.md .github/ISSUE_TEMPLATE/5_feature_request.md
|
$(PYTHON) devscripts/make_issue_template.py .github/ISSUE_TEMPLATE_tmpl/5_feature_request.md .github/ISSUE_TEMPLATE/5_feature_request.md
|
||||||
|
|
||||||
supportedsites:
|
supportedsites:
|
||||||
$(PYTHON) devscripts/make_supportedsites.py supportedsites.md
|
$(PYTHON) devscripts/make_supportedsites.py docs/supportedsites.md
|
||||||
|
|
||||||
README.txt: README.md
|
README.txt: README.md
|
||||||
pandoc -f $(MARKDOWN) -t plain README.md -o README.txt
|
pandoc -f $(MARKDOWN) -t plain README.md -o README.txt
|
||||||
|
|
||||||
yt-dlp.1: README.md
|
youtube-dlc.1: README.md
|
||||||
$(PYTHON) devscripts/prepare_manpage.py yt-dlp.1.temp.md
|
$(PYTHON) devscripts/prepare_manpage.py youtube-dlc.1.temp.md
|
||||||
pandoc -s -f $(MARKDOWN) -t man yt-dlp.1.temp.md -o yt-dlp.1
|
pandoc -s -f $(MARKDOWN) -t man youtube-dlc.1.temp.md -o youtube-dlc.1
|
||||||
rm -f yt-dlp.1.temp.md
|
rm -f youtube-dlc.1.temp.md
|
||||||
|
|
||||||
completions/bash/yt-dlp: yt_dlp/*.py yt_dlp/*/*.py devscripts/bash-completion.in
|
youtube-dlc.bash-completion: youtube_dlc/*.py youtube_dlc/*/*.py devscripts/bash-completion.in
|
||||||
mkdir -p completions/bash
|
|
||||||
$(PYTHON) devscripts/bash-completion.py
|
$(PYTHON) devscripts/bash-completion.py
|
||||||
|
|
||||||
completions/zsh/_yt-dlp: yt_dlp/*.py yt_dlp/*/*.py devscripts/zsh-completion.in
|
bash-completion: youtube-dlc.bash-completion
|
||||||
mkdir -p completions/zsh
|
|
||||||
|
youtube-dlc.zsh: youtube_dlc/*.py youtube_dlc/*/*.py devscripts/zsh-completion.in
|
||||||
$(PYTHON) devscripts/zsh-completion.py
|
$(PYTHON) devscripts/zsh-completion.py
|
||||||
|
|
||||||
completions/fish/yt-dlp.fish: yt_dlp/*.py yt_dlp/*/*.py devscripts/fish-completion.in
|
zsh-completion: youtube-dlc.zsh
|
||||||
mkdir -p completions/fish
|
|
||||||
|
youtube-dlc.fish: youtube_dlc/*.py youtube_dlc/*/*.py devscripts/fish-completion.in
|
||||||
$(PYTHON) devscripts/fish-completion.py
|
$(PYTHON) devscripts/fish-completion.py
|
||||||
|
|
||||||
_EXTRACTOR_FILES = $(shell find yt_dlp/extractor -iname '*.py' -and -not -iname 'lazy_extractors.py')
|
fish-completion: youtube-dlc.fish
|
||||||
yt_dlp/extractor/lazy_extractors.py: devscripts/make_lazy_extractors.py devscripts/lazy_load_template.py $(_EXTRACTOR_FILES)
|
|
||||||
|
lazy-extractors: youtube_dlc/extractor/lazy_extractors.py
|
||||||
|
|
||||||
|
_EXTRACTOR_FILES = $(shell find youtube_dlc/extractor -iname '*.py' -and -not -iname 'lazy_extractors.py')
|
||||||
|
youtube_dlc/extractor/lazy_extractors.py: devscripts/make_lazy_extractors.py devscripts/lazy_load_template.py $(_EXTRACTOR_FILES)
|
||||||
$(PYTHON) devscripts/make_lazy_extractors.py $@
|
$(PYTHON) devscripts/make_lazy_extractors.py $@
|
||||||
|
|
||||||
yt-dlp.tar.gz: yt-dlp README.md supportedsites.md yt-dlp.1 completions Changelog.md AUTHORS
|
youtube-dlc.tar.gz: youtube-dlc README.md README.txt youtube-dlc.1 youtube-dlc.bash-completion youtube-dlc.zsh youtube-dlc.fish ChangeLog AUTHORS
|
||||||
@tar -czf $(DESTDIR)/yt-dlp.tar.gz --transform "s|^|yt-dlp/|" --owner 0 --group 0 \
|
@tar -czf youtube-dlc.tar.gz --transform "s|^|youtube-dlc/|" --owner 0 --group 0 \
|
||||||
--exclude '*.DS_Store' \
|
--exclude '*.DS_Store' \
|
||||||
--exclude '*.kate-swp' \
|
--exclude '*.kate-swp' \
|
||||||
--exclude '*.pyc' \
|
--exclude '*.pyc' \
|
||||||
@@ -123,13 +129,8 @@ yt-dlp.tar.gz: yt-dlp README.md supportedsites.md yt-dlp.1 completions Changelog
|
|||||||
--exclude '.git' \
|
--exclude '.git' \
|
||||||
--exclude 'docs/_build' \
|
--exclude 'docs/_build' \
|
||||||
-- \
|
-- \
|
||||||
devscripts test \
|
bin devscripts test youtube_dlc docs \
|
||||||
Changelog.md AUTHORS LICENSE README.md supportedsites.md \
|
ChangeLog AUTHORS LICENSE README.md README.txt \
|
||||||
Makefile MANIFEST.in yt-dlp.1 completions \
|
Makefile MANIFEST.in youtube-dlc.1 youtube-dlc.bash-completion \
|
||||||
setup.py setup.cfg yt-dlp yt_dlp
|
youtube-dlc.zsh youtube-dlc.fish setup.py setup.cfg \
|
||||||
|
youtube-dlc
|
||||||
AUTHORS: .mailmap
|
|
||||||
git shortlog -s -n | cut -f2 | sort > AUTHORS
|
|
||||||
|
|
||||||
.mailmap:
|
|
||||||
git shortlog -s -e -n | awk '!(out[$$NF]++) { $$1="";sub(/^[ \t]+/,""); print}' > .mailmap
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
__yt_dlp()
|
__youtube_dlc()
|
||||||
{
|
{
|
||||||
local cur prev opts fileopts diropts keywords
|
local cur prev opts fileopts diropts keywords
|
||||||
COMPREPLY=()
|
COMPREPLY=()
|
||||||
@@ -26,4 +26,4 @@ __yt_dlp()
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
complete -F __yt_dlp yt-dlp
|
complete -F __youtube_dlc youtube-dlc
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import os
|
import os
|
||||||
@@ -6,9 +6,9 @@
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
sys.path.insert(0, dirn(dirn((os.path.abspath(__file__)))))
|
sys.path.insert(0, dirn(dirn((os.path.abspath(__file__)))))
|
||||||
import yt_dlp
|
import youtube_dlc
|
||||||
|
|
||||||
BASH_COMPLETION_FILE = "completions/bash/yt-dlp"
|
BASH_COMPLETION_FILE = "youtube-dlc.bash-completion"
|
||||||
BASH_COMPLETION_TEMPLATE = "devscripts/bash-completion.in"
|
BASH_COMPLETION_TEMPLATE = "devscripts/bash-completion.in"
|
||||||
|
|
||||||
|
|
||||||
@@ -26,5 +26,5 @@ def build_completion(opt_parser):
|
|||||||
f.write(filled_template)
|
f.write(filled_template)
|
||||||
|
|
||||||
|
|
||||||
parser = yt_dlp.parseOpts()[0]
|
parser = youtube_dlc.parseOpts()[0]
|
||||||
build_completion(parser)
|
build_completion(parser)
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
# UNUSED
|
|
||||||
|
|
||||||
#!/usr/bin/python3
|
#!/usr/bin/python3
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
@@ -14,7 +12,7 @@
|
|||||||
import os.path
|
import os.path
|
||||||
|
|
||||||
sys.path.insert(0, os.path.dirname(os.path.dirname((os.path.abspath(__file__)))))
|
sys.path.insert(0, os.path.dirname(os.path.dirname((os.path.abspath(__file__)))))
|
||||||
from yt_dlp.compat import (
|
from youtube_dlc.compat import (
|
||||||
compat_input,
|
compat_input,
|
||||||
compat_http_server,
|
compat_http_server,
|
||||||
compat_str,
|
compat_str,
|
||||||
@@ -327,7 +325,7 @@ class YoutubeDLBuilder(object):
|
|||||||
authorizedUsers = ['fraca7', 'phihag', 'rg3', 'FiloSottile', 'ytdl-org']
|
authorizedUsers = ['fraca7', 'phihag', 'rg3', 'FiloSottile', 'ytdl-org']
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
if self.repoName != 'yt-dlp':
|
if self.repoName != 'youtube-dlc':
|
||||||
raise BuildError('Invalid repository "%s"' % self.repoName)
|
raise BuildError('Invalid repository "%s"' % self.repoName)
|
||||||
if self.user not in self.authorizedUsers:
|
if self.user not in self.authorizedUsers:
|
||||||
raise HTTPError('Unauthorized user "%s"' % self.user, 401)
|
raise HTTPError('Unauthorized user "%s"' % self.user, 401)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
"""
|
"""
|
||||||
@@ -15,8 +15,8 @@
|
|||||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||||
|
|
||||||
from test.helper import gettestcases
|
from test.helper import gettestcases
|
||||||
from yt_dlp.utils import compat_urllib_parse_urlparse
|
from youtube_dlc.utils import compat_urllib_parse_urlparse
|
||||||
from yt_dlp.utils import compat_urllib_request
|
from youtube_dlc.utils import compat_urllib_request
|
||||||
|
|
||||||
if len(sys.argv) > 1:
|
if len(sys.argv) > 1:
|
||||||
METHOD = 'LIST'
|
METHOD = 'LIST'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Unused
|
# Unused
|
||||||
|
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import io
|
import io
|
||||||
@@ -14,13 +14,13 @@
|
|||||||
|
|
||||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||||
|
|
||||||
from yt_dlp.compat import (
|
from youtube_dlc.compat import (
|
||||||
compat_basestring,
|
compat_basestring,
|
||||||
compat_getpass,
|
compat_getpass,
|
||||||
compat_print,
|
compat_print,
|
||||||
compat_urllib_request,
|
compat_urllib_request,
|
||||||
)
|
)
|
||||||
from yt_dlp.utils import (
|
from youtube_dlc.utils import (
|
||||||
make_HTTPS_handler,
|
make_HTTPS_handler,
|
||||||
sanitized_Request,
|
sanitized_Request,
|
||||||
)
|
)
|
||||||
@@ -100,7 +100,7 @@ def main():
|
|||||||
releaser = GitHubReleaser()
|
releaser = GitHubReleaser()
|
||||||
|
|
||||||
new_release = releaser.create_release(
|
new_release = releaser.create_release(
|
||||||
version, name='yt-dlp %s' % version, body=body)
|
version, name='youtube-dlc %s' % version, body=body)
|
||||||
release_id = new_release['id']
|
release_id = new_release['id']
|
||||||
|
|
||||||
for asset in os.listdir(build_path):
|
for asset in os.listdir(build_path):
|
||||||
|
|||||||
@@ -2,4 +2,4 @@
|
|||||||
{{commands}}
|
{{commands}}
|
||||||
|
|
||||||
|
|
||||||
complete --command yt-dlp --arguments ":ytfavorites :ytrecommended :ytsubscriptions :ytwatchlater :ythistory"
|
complete --command youtube-dlc --arguments ":ytfavorites :ytrecommended :ytsubscriptions :ytwatchlater :ythistory"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import optparse
|
import optparse
|
||||||
@@ -7,10 +7,10 @@
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
sys.path.insert(0, dirn(dirn((os.path.abspath(__file__)))))
|
sys.path.insert(0, dirn(dirn((os.path.abspath(__file__)))))
|
||||||
import yt_dlp
|
import youtube_dlc
|
||||||
from yt_dlp.utils import shell_quote
|
from youtube_dlc.utils import shell_quote
|
||||||
|
|
||||||
FISH_COMPLETION_FILE = 'completions/fish/yt-dlp.fish'
|
FISH_COMPLETION_FILE = 'youtube-dlc.fish'
|
||||||
FISH_COMPLETION_TEMPLATE = 'devscripts/fish-completion.in'
|
FISH_COMPLETION_TEMPLATE = 'devscripts/fish-completion.in'
|
||||||
|
|
||||||
EXTRA_ARGS = {
|
EXTRA_ARGS = {
|
||||||
@@ -31,7 +31,7 @@ def build_completion(opt_parser):
|
|||||||
for group in opt_parser.option_groups:
|
for group in opt_parser.option_groups:
|
||||||
for option in group.option_list:
|
for option in group.option_list:
|
||||||
long_option = option.get_opt_string().strip('-')
|
long_option = option.get_opt_string().strip('-')
|
||||||
complete_cmd = ['complete', '--command', 'yt-dlp', '--long-option', long_option]
|
complete_cmd = ['complete', '--command', 'youtube-dlc', '--long-option', long_option]
|
||||||
if option._short_opts:
|
if option._short_opts:
|
||||||
complete_cmd += ['--short-option', option._short_opts[0].strip('-')]
|
complete_cmd += ['--short-option', option._short_opts[0].strip('-')]
|
||||||
if option.help != optparse.SUPPRESS_HELP:
|
if option.help != optparse.SUPPRESS_HELP:
|
||||||
@@ -46,5 +46,5 @@ def build_completion(opt_parser):
|
|||||||
f.write(filled_template)
|
f.write(filled_template)
|
||||||
|
|
||||||
|
|
||||||
parser = yt_dlp.parseOpts()[0]
|
parser = youtube_dlc.parseOpts()[0]
|
||||||
build_completion(parser)
|
build_completion(parser)
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import codecs
|
import codecs
|
||||||
@@ -8,8 +7,8 @@
|
|||||||
import sys
|
import sys
|
||||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||||
|
|
||||||
from yt_dlp.utils import intlist_to_bytes
|
from youtube_dlc.utils import intlist_to_bytes
|
||||||
from yt_dlp.aes import aes_encrypt, key_expansion
|
from youtube_dlc.aes import aes_encrypt, key_expansion
|
||||||
|
|
||||||
secret_msg = b'Secret message goes here'
|
secret_msg = b'Secret message goes here'
|
||||||
|
|
||||||
|
|||||||
6
devscripts/gh-pages.unused/add-version.py → devscripts/gh-pages/add-version.py
Normal file → Executable file
6
devscripts/gh-pages.unused/add-version.py → devscripts/gh-pages/add-version.py
Normal file → Executable file
@@ -22,9 +22,9 @@
|
|||||||
new_version = {}
|
new_version = {}
|
||||||
|
|
||||||
filenames = {
|
filenames = {
|
||||||
'bin': 'yt-dlp',
|
'bin': 'youtube-dlc',
|
||||||
'exe': 'yt-dlp.exe',
|
'exe': 'youtube-dlc.exe',
|
||||||
'tar': 'yt-dlp-%s.tar.gz' % version}
|
'tar': 'youtube-dlc-%s.tar.gz' % version}
|
||||||
build_dir = os.path.join('..', '..', 'build', version)
|
build_dir = os.path.join('..', '..', 'build', version)
|
||||||
for key, filename in filenames.items():
|
for key, filename in filenames.items():
|
||||||
url = 'https://yt-dl.org/downloads/%s/%s' % (version, filename)
|
url = 'https://yt-dl.org/downloads/%s/%s' % (version, filename)
|
||||||
0
devscripts/gh-pages.unused/generate-download.py → devscripts/gh-pages/generate-download.py
Normal file → Executable file
0
devscripts/gh-pages.unused/generate-download.py → devscripts/gh-pages/generate-download.py
Normal file → Executable file
0
devscripts/gh-pages.unused/sign-versions.py → devscripts/gh-pages/sign-versions.py
Normal file → Executable file
0
devscripts/gh-pages.unused/sign-versions.py → devscripts/gh-pages/sign-versions.py
Normal file → Executable file
2
devscripts/gh-pages.unused/update-copyright.py → devscripts/gh-pages/update-copyright.py
Normal file → Executable file
2
devscripts/gh-pages.unused/update-copyright.py → devscripts/gh-pages/update-copyright.py
Normal file → Executable file
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python
|
||||||
# coding: utf-8
|
# coding: utf-8
|
||||||
|
|
||||||
from __future__ import with_statement, unicode_literals
|
from __future__ import with_statement, unicode_literals
|
||||||
10
devscripts/gh-pages.unused/update-feed.py → devscripts/gh-pages/update-feed.py
Normal file → Executable file
10
devscripts/gh-pages.unused/update-feed.py → devscripts/gh-pages/update-feed.py
Normal file → Executable file
@@ -11,24 +11,24 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<feed xmlns="http://www.w3.org/2005/Atom">
|
<feed xmlns="http://www.w3.org/2005/Atom">
|
||||||
<link rel="self" href="http://ytdl-org.github.io/youtube-dl/update/releases.atom" />
|
<link rel="self" href="http://ytdl-org.github.io/youtube-dl/update/releases.atom" />
|
||||||
<title>yt-dlp releases</title>
|
<title>youtube-dlc releases</title>
|
||||||
<id>https://yt-dl.org/feed/yt-dlp-updates-feed</id>
|
<id>https://yt-dl.org/feed/youtube-dlc-updates-feed</id>
|
||||||
<updated>@TIMESTAMP@</updated>
|
<updated>@TIMESTAMP@</updated>
|
||||||
@ENTRIES@
|
@ENTRIES@
|
||||||
</feed>""")
|
</feed>""")
|
||||||
|
|
||||||
entry_template = textwrap.dedent("""
|
entry_template = textwrap.dedent("""
|
||||||
<entry>
|
<entry>
|
||||||
<id>https://yt-dl.org/feed/yt-dlp-updates-feed/yt-dlp-@VERSION@</id>
|
<id>https://yt-dl.org/feed/youtube-dlc-updates-feed/youtube-dlc-@VERSION@</id>
|
||||||
<title>New version @VERSION@</title>
|
<title>New version @VERSION@</title>
|
||||||
<link href="http://ytdl-org.github.io/yt-dlp" />
|
<link href="http://ytdl-org.github.io/youtube-dlc" />
|
||||||
<content type="xhtml">
|
<content type="xhtml">
|
||||||
<div xmlns="http://www.w3.org/1999/xhtml">
|
<div xmlns="http://www.w3.org/1999/xhtml">
|
||||||
Downloads available at <a href="https://yt-dl.org/downloads/@VERSION@/">https://yt-dl.org/downloads/@VERSION@/</a>
|
Downloads available at <a href="https://yt-dl.org/downloads/@VERSION@/">https://yt-dl.org/downloads/@VERSION@/</a>
|
||||||
</div>
|
</div>
|
||||||
</content>
|
</content>
|
||||||
<author>
|
<author>
|
||||||
<name>The yt-dlp maintainers</name>
|
<name>The youtube-dlc maintainers</name>
|
||||||
</author>
|
</author>
|
||||||
<updated>@TIMESTAMP@</updated>
|
<updated>@TIMESTAMP@</updated>
|
||||||
</entry>
|
</entry>
|
||||||
6
devscripts/gh-pages.unused/update-sites.py → devscripts/gh-pages/update-sites.py
Normal file → Executable file
6
devscripts/gh-pages.unused/update-sites.py → devscripts/gh-pages/update-sites.py
Normal file → Executable file
@@ -5,10 +5,10 @@
|
|||||||
import os
|
import os
|
||||||
import textwrap
|
import textwrap
|
||||||
|
|
||||||
# We must be able to import yt_dlp
|
# We must be able to import youtube_dlc
|
||||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
|
||||||
|
|
||||||
import yt_dlp
|
import youtube_dlc
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
@@ -16,7 +16,7 @@ def main():
|
|||||||
template = tmplf.read()
|
template = tmplf.read()
|
||||||
|
|
||||||
ie_htmls = []
|
ie_htmls = []
|
||||||
for ie in yt_dlp.list_extractors(age_limit=None):
|
for ie in youtube_dlc.list_extractors(age_limit=None):
|
||||||
ie_html = '<b>{}</b>'.format(ie.IE_NAME)
|
ie_html = '<b>{}</b>'.format(ie.IE_NAME)
|
||||||
ie_desc = getattr(ie, 'IE_DESC', None)
|
ie_desc = getattr(ie, 'IE_DESC', None)
|
||||||
if ie_desc is False:
|
if ie_desc is False:
|
||||||
@@ -1,25 +1,19 @@
|
|||||||
# coding: utf-8
|
# coding: utf-8
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
|
||||||
class LazyLoadMetaClass(type):
|
class LazyLoadExtractor(object):
|
||||||
def __getattr__(cls, name):
|
|
||||||
return getattr(cls._get_real_class(), name)
|
|
||||||
|
|
||||||
|
|
||||||
class LazyLoadExtractor(metaclass=LazyLoadMetaClass):
|
|
||||||
_module = None
|
_module = None
|
||||||
_WORKING = True
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _get_real_class(cls):
|
def ie_key(cls):
|
||||||
if '__real_class' not in cls.__dict__:
|
return cls.__name__[:-2]
|
||||||
mod = __import__(cls._module, fromlist=(cls.__name__,))
|
|
||||||
cls.__real_class = getattr(mod, cls.__name__)
|
|
||||||
return cls.__real_class
|
|
||||||
|
|
||||||
def __new__(cls, *args, **kwargs):
|
def __new__(cls, *args, **kwargs):
|
||||||
real_cls = cls._get_real_class()
|
mod = __import__(cls._module, fromlist=(cls.__name__,))
|
||||||
|
real_cls = getattr(mod, cls.__name__)
|
||||||
instance = real_cls.__new__(real_cls)
|
instance = real_cls.__new__(real_cls)
|
||||||
instance.__init__(*args, **kwargs)
|
instance.__init__(*args, **kwargs)
|
||||||
return instance
|
return instance
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 40 KiB |
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
# import io
|
# import io
|
||||||
@@ -21,7 +21,7 @@ def main():
|
|||||||
bug_text = re.search( """
|
bug_text = re.search( """
|
||||||
# r'(?s)#\s*BUGS\s*[^\n]*\s*(.*?)#\s*COPYRIGHT', readme).group(1)
|
# r'(?s)#\s*BUGS\s*[^\n]*\s*(.*?)#\s*COPYRIGHT', readme).group(1)
|
||||||
# dev_text = re.search(
|
# dev_text = re.search(
|
||||||
# r'(?s)(#\s*DEVELOPER INSTRUCTIONS.*?)#\s*EMBEDDING yt-dlp',
|
# r'(?s)(#\s*DEVELOPER INSTRUCTIONS.*?)#\s*EMBEDDING youtube-dlc',
|
||||||
""" readme).group(1)
|
""" readme).group(1)
|
||||||
|
|
||||||
out = bug_text + dev_text
|
out = bug_text + dev_text
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import io
|
import io
|
||||||
@@ -16,9 +16,9 @@ def main():
|
|||||||
with io.open(infile, encoding='utf-8') as inf:
|
with io.open(infile, encoding='utf-8') as inf:
|
||||||
issue_template_tmpl = inf.read()
|
issue_template_tmpl = inf.read()
|
||||||
|
|
||||||
# Get the version from yt_dlp/version.py without importing the package
|
# Get the version from youtube_dlc/version.py without importing the package
|
||||||
exec(compile(open('yt_dlp/version.py').read(),
|
exec(compile(open('youtube_dlc/version.py').read(),
|
||||||
'yt_dlp/version.py', 'exec'))
|
'youtube_dlc/version.py', 'exec'))
|
||||||
|
|
||||||
out = issue_template_tmpl % {'version': locals()['__version__']}
|
out = issue_template_tmpl % {'version': locals()['__version__']}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
from __future__ import unicode_literals, print_function
|
from __future__ import unicode_literals, print_function
|
||||||
|
|
||||||
from inspect import getsource
|
from inspect import getsource
|
||||||
@@ -15,29 +14,19 @@
|
|||||||
if os.path.exists(lazy_extractors_filename):
|
if os.path.exists(lazy_extractors_filename):
|
||||||
os.remove(lazy_extractors_filename)
|
os.remove(lazy_extractors_filename)
|
||||||
|
|
||||||
# Block plugins from loading
|
from youtube_dlc.extractor import _ALL_CLASSES
|
||||||
plugins_dirname = 'ytdlp_plugins'
|
from youtube_dlc.extractor.common import InfoExtractor, SearchInfoExtractor
|
||||||
plugins_blocked_dirname = 'ytdlp_plugins_blocked'
|
|
||||||
if os.path.exists(plugins_dirname):
|
|
||||||
os.rename(plugins_dirname, plugins_blocked_dirname)
|
|
||||||
|
|
||||||
from yt_dlp.extractor import _ALL_CLASSES
|
|
||||||
from yt_dlp.extractor.common import InfoExtractor, SearchInfoExtractor
|
|
||||||
|
|
||||||
if os.path.exists(plugins_blocked_dirname):
|
|
||||||
os.rename(plugins_blocked_dirname, plugins_dirname)
|
|
||||||
|
|
||||||
with open('devscripts/lazy_load_template.py', 'rt') as f:
|
with open('devscripts/lazy_load_template.py', 'rt') as f:
|
||||||
module_template = f.read()
|
module_template = f.read()
|
||||||
|
|
||||||
CLASS_PROPERTIES = ['ie_key', 'working', '_match_valid_url', 'suitable', '_match_id', 'get_temp_id']
|
|
||||||
module_contents = [
|
module_contents = [
|
||||||
module_template,
|
module_template + '\n' + getsource(InfoExtractor.suitable) + '\n',
|
||||||
*[getsource(getattr(InfoExtractor, k)) for k in CLASS_PROPERTIES],
|
'class LazyLoadSearchExtractor(LazyLoadExtractor):\n pass\n']
|
||||||
'\nclass LazyLoadSearchExtractor(LazyLoadExtractor):\n pass\n']
|
|
||||||
|
|
||||||
ie_template = '''
|
ie_template = '''
|
||||||
class {name}({bases}):
|
class {name}({bases}):
|
||||||
|
_VALID_URL = {valid_url!r}
|
||||||
_module = '{module}'
|
_module = '{module}'
|
||||||
'''
|
'''
|
||||||
|
|
||||||
@@ -58,17 +47,14 @@ def get_base_name(base):
|
|||||||
|
|
||||||
|
|
||||||
def build_lazy_ie(ie, name):
|
def build_lazy_ie(ie, name):
|
||||||
|
valid_url = getattr(ie, '_VALID_URL', None)
|
||||||
s = ie_template.format(
|
s = ie_template.format(
|
||||||
name=name,
|
name=name,
|
||||||
bases=', '.join(map(get_base_name, ie.__bases__)),
|
bases=', '.join(map(get_base_name, ie.__bases__)),
|
||||||
|
valid_url=valid_url,
|
||||||
module=ie.__module__)
|
module=ie.__module__)
|
||||||
valid_url = getattr(ie, '_VALID_URL', None)
|
|
||||||
if valid_url:
|
|
||||||
s += f' _VALID_URL = {valid_url!r}\n'
|
|
||||||
if not ie._WORKING:
|
|
||||||
s += ' _WORKING = False\n'
|
|
||||||
if ie.suitable.__func__ is not InfoExtractor.suitable.__func__:
|
if ie.suitable.__func__ is not InfoExtractor.suitable.__func__:
|
||||||
s += f'\n{getsource(ie.suitable)}'
|
s += '\n' + getsource(ie.suitable)
|
||||||
if hasattr(ie, '_make_valid_url'):
|
if hasattr(ie, '_make_valid_url'):
|
||||||
# search extractors
|
# search extractors
|
||||||
s += make_valid_template.format(valid_url=ie._make_valid_url())
|
s += make_valid_template.format(valid_url=ie._make_valid_url())
|
||||||
@@ -106,7 +92,7 @@ def build_lazy_ie(ie, name):
|
|||||||
names.append(name)
|
names.append(name)
|
||||||
|
|
||||||
module_contents.append(
|
module_contents.append(
|
||||||
'\n_ALL_CLASSES = [{0}]'.format(', '.join(names)))
|
'_ALL_CLASSES = [{0}]'.format(', '.join(names)))
|
||||||
|
|
||||||
module_src = '\n'.join(module_contents) + '\n'
|
module_src = '\n'.join(module_contents) + '\n'
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,3 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
# yt-dlp --help | make_readme.py
|
|
||||||
# This must be run in a console of correct width
|
|
||||||
|
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import io
|
import io
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import io
|
import io
|
||||||
@@ -7,10 +7,10 @@
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
|
||||||
# Import yt_dlp
|
# Import youtube_dlc
|
||||||
ROOT_DIR = os.path.join(os.path.dirname(__file__), '..')
|
ROOT_DIR = os.path.join(os.path.dirname(__file__), '..')
|
||||||
sys.path.insert(0, ROOT_DIR)
|
sys.path.insert(0, ROOT_DIR)
|
||||||
import yt_dlp
|
import youtube_dlc
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
@@ -33,7 +33,7 @@ def gen_ies_md(ies):
|
|||||||
ie_md += ' (Currently broken)'
|
ie_md += ' (Currently broken)'
|
||||||
yield ie_md
|
yield ie_md
|
||||||
|
|
||||||
ies = sorted(yt_dlp.gen_extractors(), key=lambda i: i.IE_NAME.lower())
|
ies = sorted(youtube_dlc.gen_extractors(), key=lambda i: i.IE_NAME.lower())
|
||||||
out = '# Supported sites\n' + ''.join(
|
out = '# Supported sites\n' + ''.join(
|
||||||
' - ' + md + '\n'
|
' - ' + md + '\n'
|
||||||
for md in gen_ies_md(ies))
|
for md in gen_ies_md(ies))
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import io
|
import io
|
||||||
@@ -9,7 +8,7 @@
|
|||||||
ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||||
README_FILE = os.path.join(ROOT_DIR, 'README.md')
|
README_FILE = os.path.join(ROOT_DIR, 'README.md')
|
||||||
|
|
||||||
PREFIX = r'''%yt-dlp(1)
|
PREFIX = r'''%youtube-dlc(1)
|
||||||
|
|
||||||
# NAME
|
# NAME
|
||||||
|
|
||||||
@@ -17,7 +16,7 @@
|
|||||||
|
|
||||||
# SYNOPSIS
|
# SYNOPSIS
|
||||||
|
|
||||||
**yt-dlp** \[OPTIONS\] URL [URL...]
|
**youtube-dlc** \[OPTIONS\] URL [URL...]
|
||||||
|
|
||||||
'''
|
'''
|
||||||
|
|
||||||
@@ -34,7 +33,7 @@ def main():
|
|||||||
readme = f.read()
|
readme = f.read()
|
||||||
|
|
||||||
readme = re.sub(r'(?s)^.*?(?=# DESCRIPTION)', '', readme)
|
readme = re.sub(r'(?s)^.*?(?=# DESCRIPTION)', '', readme)
|
||||||
readme = re.sub(r'\s+yt-dlp \[OPTIONS\] URL \[URL\.\.\.\]', '', readme)
|
readme = re.sub(r'\s+youtube-dlc \[OPTIONS\] URL \[URL\.\.\.\]', '', readme)
|
||||||
readme = PREFIX + readme
|
readme = PREFIX + readme
|
||||||
|
|
||||||
readme = filter_options(readme)
|
readme = filter_options(readme)
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# Unused
|
# Unused
|
||||||
|
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# IMPORTANT: the following assumptions are made
|
# IMPORTANT: the following assumptions are made
|
||||||
@@ -55,14 +54,14 @@ fi
|
|||||||
|
|
||||||
if [ ! -z "`git tag | grep "$version"`" ]; then echo 'ERROR: version already present'; exit 1; fi
|
if [ ! -z "`git tag | grep "$version"`" ]; then echo 'ERROR: version already present'; exit 1; fi
|
||||||
if [ ! -z "`git status --porcelain | grep -v CHANGELOG`" ]; then echo 'ERROR: the working directory is not clean; commit or stash changes'; exit 1; fi
|
if [ ! -z "`git status --porcelain | grep -v CHANGELOG`" ]; then echo 'ERROR: the working directory is not clean; commit or stash changes'; exit 1; fi
|
||||||
useless_files=$(find yt_dlp -type f -not -name '*.py')
|
useless_files=$(find youtube_dlc -type f -not -name '*.py')
|
||||||
if [ ! -z "$useless_files" ]; then echo "ERROR: Non-.py files in yt_dlp: $useless_files"; exit 1; fi
|
if [ ! -z "$useless_files" ]; then echo "ERROR: Non-.py files in youtube_dlc: $useless_files"; exit 1; fi
|
||||||
if [ ! -f "updates_key.pem" ]; then echo 'ERROR: updates_key.pem missing'; exit 1; fi
|
if [ ! -f "updates_key.pem" ]; then echo 'ERROR: updates_key.pem missing'; exit 1; fi
|
||||||
if ! type pandoc >/dev/null 2>/dev/null; then echo 'ERROR: pandoc is missing'; exit 1; fi
|
if ! type pandoc >/dev/null 2>/dev/null; then echo 'ERROR: pandoc is missing'; exit 1; fi
|
||||||
if ! python3 -c 'import rsa' 2>/dev/null; then echo 'ERROR: python3-rsa is missing'; exit 1; fi
|
if ! python3 -c 'import rsa' 2>/dev/null; then echo 'ERROR: python3-rsa is missing'; exit 1; fi
|
||||||
if ! python3 -c 'import wheel' 2>/dev/null; then echo 'ERROR: wheel is missing'; exit 1; fi
|
if ! python3 -c 'import wheel' 2>/dev/null; then echo 'ERROR: wheel is missing'; exit 1; fi
|
||||||
|
|
||||||
read -p "Is Changelog up to date? (y/n) " -n 1
|
read -p "Is ChangeLog up to date? (y/n) " -n 1
|
||||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then exit 1; fi
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then exit 1; fi
|
||||||
|
|
||||||
/bin/echo -e "\n### First of all, testing..."
|
/bin/echo -e "\n### First of all, testing..."
|
||||||
@@ -70,18 +69,18 @@ make clean
|
|||||||
if $skip_tests ; then
|
if $skip_tests ; then
|
||||||
echo 'SKIPPING TESTS'
|
echo 'SKIPPING TESTS'
|
||||||
else
|
else
|
||||||
nosetests --verbose --with-coverage --cover-package=yt_dlp --cover-html test --stop || exit 1
|
nosetests --verbose --with-coverage --cover-package=youtube_dlc --cover-html test --stop || exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
/bin/echo -e "\n### Changing version in version.py..."
|
/bin/echo -e "\n### Changing version in version.py..."
|
||||||
sed -i "s/__version__ = '.*'/__version__ = '$version'/" yt_dlp/version.py
|
sed -i "s/__version__ = '.*'/__version__ = '$version'/" youtube_dlc/version.py
|
||||||
|
|
||||||
/bin/echo -e "\n### Changing version in Changelog..."
|
/bin/echo -e "\n### Changing version in ChangeLog..."
|
||||||
sed -i "s/<unreleased>/$version/" Changelog.md
|
sed -i "s/<unreleased>/$version/" ChangeLog
|
||||||
|
|
||||||
/bin/echo -e "\n### Committing documentation, templates and yt_dlp/version.py..."
|
/bin/echo -e "\n### Committing documentation, templates and youtube_dlc/version.py..."
|
||||||
make README.md CONTRIBUTING.md issuetemplates supportedsites
|
make README.md CONTRIBUTING.md issuetemplates supportedsites
|
||||||
git add README.md CONTRIBUTING.md .github/ISSUE_TEMPLATE/1_broken_site.md .github/ISSUE_TEMPLATE/2_site_support_request.md .github/ISSUE_TEMPLATE/3_site_feature_request.md .github/ISSUE_TEMPLATE/4_bug_report.md .github/ISSUE_TEMPLATE/5_feature_request.md .github/ISSUE_TEMPLATE/6_question.md docs/supportedsites.md yt_dlp/version.py Changelog.md
|
git add README.md CONTRIBUTING.md .github/ISSUE_TEMPLATE/1_broken_site.md .github/ISSUE_TEMPLATE/2_site_support_request.md .github/ISSUE_TEMPLATE/3_site_feature_request.md .github/ISSUE_TEMPLATE/4_bug_report.md .github/ISSUE_TEMPLATE/5_feature_request.md .github/ISSUE_TEMPLATE/6_question.md docs/supportedsites.md youtube_dlc/version.py ChangeLog
|
||||||
git commit $gpg_sign_commits -m "release $version"
|
git commit $gpg_sign_commits -m "release $version"
|
||||||
|
|
||||||
/bin/echo -e "\n### Now tagging, signing and pushing..."
|
/bin/echo -e "\n### Now tagging, signing and pushing..."
|
||||||
@@ -96,13 +95,13 @@ git push origin "$version"
|
|||||||
|
|
||||||
/bin/echo -e "\n### OK, now it is time to build the binaries..."
|
/bin/echo -e "\n### OK, now it is time to build the binaries..."
|
||||||
REV=$(git rev-parse HEAD)
|
REV=$(git rev-parse HEAD)
|
||||||
make yt-dlp yt-dlp.tar.gz
|
make youtube-dlc youtube-dlc.tar.gz
|
||||||
read -p "VM running? (y/n) " -n 1
|
read -p "VM running? (y/n) " -n 1
|
||||||
wget "http://$buildserver/build/ytdl-org/youtube-dl/yt-dlp.exe?rev=$REV" -O yt-dlp.exe
|
wget "http://$buildserver/build/ytdl-org/youtube-dl/youtube-dlc.exe?rev=$REV" -O youtube-dlc.exe
|
||||||
mkdir -p "build/$version"
|
mkdir -p "build/$version"
|
||||||
mv yt-dlp yt-dlp.exe "build/$version"
|
mv youtube-dlc youtube-dlc.exe "build/$version"
|
||||||
mv yt-dlp.tar.gz "build/$version/yt-dlp-$version.tar.gz"
|
mv youtube-dlc.tar.gz "build/$version/youtube-dlc-$version.tar.gz"
|
||||||
RELEASE_FILES="yt-dlp yt-dlp.exe yt-dlp-$version.tar.gz"
|
RELEASE_FILES="youtube-dlc youtube-dlc.exe youtube-dlc-$version.tar.gz"
|
||||||
(cd build/$version/ && md5sum $RELEASE_FILES > MD5SUMS)
|
(cd build/$version/ && md5sum $RELEASE_FILES > MD5SUMS)
|
||||||
(cd build/$version/ && sha1sum $RELEASE_FILES > SHA1SUMS)
|
(cd build/$version/ && sha1sum $RELEASE_FILES > SHA1SUMS)
|
||||||
(cd build/$version/ && sha256sum $RELEASE_FILES > SHA2-256SUMS)
|
(cd build/$version/ && sha256sum $RELEASE_FILES > SHA2-256SUMS)
|
||||||
@@ -112,7 +111,7 @@ RELEASE_FILES="yt-dlp yt-dlp.exe yt-dlp-$version.tar.gz"
|
|||||||
for f in $RELEASE_FILES; do gpg --passphrase-repeat 5 --detach-sig "build/$version/$f"; done
|
for f in $RELEASE_FILES; do gpg --passphrase-repeat 5 --detach-sig "build/$version/$f"; done
|
||||||
|
|
||||||
ROOT=$(pwd)
|
ROOT=$(pwd)
|
||||||
python devscripts/create-github-release.py Changelog.md $version "$ROOT/build/$version"
|
python devscripts/create-github-release.py ChangeLog $version "$ROOT/build/$version"
|
||||||
|
|
||||||
ssh ytdl@yt-dl.org "sh html/update_latest.sh $version"
|
ssh ytdl@yt-dl.org "sh html/update_latest.sh $version"
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
@setlocal
|
|
||||||
@echo off
|
@echo off
|
||||||
cd /d %~dp0..
|
|
||||||
|
|
||||||
if ["%~1"]==[""] (
|
rem Keep this list in sync with the `offlinetest` target in Makefile
|
||||||
set "test_set="
|
set DOWNLOAD_TESTS="age_restriction^|download^|iqiyi_sdk_interpreter^|socks^|subtitles^|write_annotations^|youtube_lists^|youtube_signature"
|
||||||
) else if ["%~1"]==["core"] (
|
|
||||||
set "test_set=-k "not download""
|
if "%YTDL_TEST_SET%" == "core" (
|
||||||
) else if ["%~1"]==["download"] (
|
set test_set="-I test_("%DOWNLOAD_TESTS%")\.py"
|
||||||
set "test_set=-k download"
|
set multiprocess_args=""
|
||||||
|
) else if "%YTDL_TEST_SET%" == "download" (
|
||||||
|
set test_set="-I test_(?!"%DOWNLOAD_TESTS%").+\.py"
|
||||||
|
set multiprocess_args="--processes=4 --process-timeout=540"
|
||||||
) else (
|
) else (
|
||||||
echo.Invalid test type "%~1". Use "core" ^| "download"
|
echo YTDL_TEST_SET is not set or invalid
|
||||||
exit /b 1
|
exit /b 1
|
||||||
)
|
)
|
||||||
|
|
||||||
pytest %test_set%
|
nosetests test --verbose %test_set:"=% %multiprocess_args:"=%
|
||||||
|
|||||||
@@ -1,14 +1,22 @@
|
|||||||
#!/bin/sh
|
#!/bin/bash
|
||||||
|
|
||||||
if [ -z $1 ]; then
|
# Keep this list in sync with the `offlinetest` target in Makefile
|
||||||
test_set='test'
|
DOWNLOAD_TESTS="age_restriction|download|iqiyi_sdk_interpreter|socks|subtitles|write_annotations|youtube_lists|youtube_signature"
|
||||||
elif [ $1 = 'core' ]; then
|
|
||||||
test_set='not download'
|
|
||||||
elif [ $1 = 'download' ]; then
|
|
||||||
test_set='download'
|
|
||||||
else
|
|
||||||
echo 'Invalid test type "'$1'". Use "core" | "download"'
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
python3 -m pytest -k "$test_set"
|
test_set=""
|
||||||
|
multiprocess_args=""
|
||||||
|
|
||||||
|
case "$YTDL_TEST_SET" in
|
||||||
|
core)
|
||||||
|
test_set="-I test_($DOWNLOAD_TESTS)\.py"
|
||||||
|
;;
|
||||||
|
download)
|
||||||
|
test_set="-I test_(?!$DOWNLOAD_TESTS).+\.py"
|
||||||
|
multiprocess_args="--processes=4 --process-timeout=540"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
nosetests test --verbose $test_set $multiprocess_args
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Unused
|
# Unused
|
||||||
|
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import itertools
|
import itertools
|
||||||
@@ -11,11 +11,11 @@
|
|||||||
|
|
||||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||||
|
|
||||||
from yt_dlp.compat import (
|
from youtube_dlc.compat import (
|
||||||
compat_print,
|
compat_print,
|
||||||
compat_urllib_request,
|
compat_urllib_request,
|
||||||
)
|
)
|
||||||
from yt_dlp.utils import format_bytes
|
from youtube_dlc.utils import format_bytes
|
||||||
|
|
||||||
|
|
||||||
def format_size(bytes):
|
def format_size(bytes):
|
||||||
@@ -38,9 +38,9 @@ def format_size(bytes):
|
|||||||
asset_name = asset['name']
|
asset_name = asset['name']
|
||||||
total_bytes += asset['download_count'] * asset['size']
|
total_bytes += asset['download_count'] * asset['size']
|
||||||
if all(not re.match(p, asset_name) for p in (
|
if all(not re.match(p, asset_name) for p in (
|
||||||
r'^yt-dlp$',
|
r'^youtube-dlc$',
|
||||||
r'^yt-dlp-\d{4}\.\d{2}\.\d{2}(?:\.\d+)?\.tar\.gz$',
|
r'^youtube-dlc-\d{4}\.\d{2}\.\d{2}(?:\.\d+)?\.tar\.gz$',
|
||||||
r'^yt-dlp\.exe$')):
|
r'^youtube-dlc\.exe$')):
|
||||||
continue
|
continue
|
||||||
compat_print(
|
compat_print(
|
||||||
' %s size: %s downloads: %d'
|
' %s size: %s downloads: %d'
|
||||||
|
|||||||
@@ -1,37 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
import json
|
|
||||||
import os
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
||||||
|
|
||||||
from yt_dlp.compat import compat_urllib_request
|
|
||||||
|
|
||||||
|
|
||||||
# usage: python3 ./devscripts/update-formulae.py <path-to-formulae-rb> <version>
|
|
||||||
# version can be either 0-aligned (yt-dlp version) or normalized (PyPl version)
|
|
||||||
|
|
||||||
filename, version = sys.argv[1:]
|
|
||||||
|
|
||||||
normalized_version = '.'.join(str(int(x)) for x in version.split('.'))
|
|
||||||
|
|
||||||
pypi_release = json.loads(compat_urllib_request.urlopen(
|
|
||||||
'https://pypi.org/pypi/yt-dlp/%s/json' % normalized_version
|
|
||||||
).read().decode('utf-8'))
|
|
||||||
|
|
||||||
tarball_file = next(x for x in pypi_release['urls'] if x['filename'].endswith('.tar.gz'))
|
|
||||||
|
|
||||||
sha256sum = tarball_file['digests']['sha256']
|
|
||||||
url = tarball_file['url']
|
|
||||||
|
|
||||||
with open(filename, 'r') as r:
|
|
||||||
formulae_text = r.read()
|
|
||||||
|
|
||||||
formulae_text = re.sub(r'sha256 "[0-9a-f]*?"', 'sha256 "%s"' % sha256sum, formulae_text)
|
|
||||||
formulae_text = re.sub(r'url "[^"]*?"', 'url "%s"' % url, formulae_text)
|
|
||||||
|
|
||||||
with open(filename, 'w') as w:
|
|
||||||
w.write(formulae_text)
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from datetime import datetime
|
|
||||||
# import urllib.request
|
|
||||||
|
|
||||||
# response = urllib.request.urlopen('https://blackjack4494.github.io/youtube-dlc/update/LATEST_VERSION')
|
|
||||||
# old_version = response.read().decode('utf-8')
|
|
||||||
|
|
||||||
exec(compile(open('yt_dlp/version.py').read(), 'yt_dlp/version.py', 'exec'))
|
|
||||||
old_version = locals()['__version__']
|
|
||||||
|
|
||||||
old_version_list = old_version.split(".", 4)
|
|
||||||
|
|
||||||
old_ver = '.'.join(old_version_list[:3])
|
|
||||||
old_rev = old_version_list[3] if len(old_version_list) > 3 else ''
|
|
||||||
|
|
||||||
ver = datetime.utcnow().strftime("%Y.%m.%d")
|
|
||||||
rev = str(int(old_rev or 0) + 1) if old_ver == ver else ''
|
|
||||||
|
|
||||||
VERSION = '.'.join((ver, rev)) if rev else ver
|
|
||||||
# VERSION_LIST = [(int(v) for v in ver.split(".") + [rev or 0])]
|
|
||||||
|
|
||||||
print('::set-output name=ytdlp_version::' + VERSION)
|
|
||||||
|
|
||||||
file_version_py = open('yt_dlp/version.py', 'rt')
|
|
||||||
data = file_version_py.read()
|
|
||||||
data = data.replace(old_version, VERSION)
|
|
||||||
file_version_py.close()
|
|
||||||
|
|
||||||
file_version_py = open('yt_dlp/version.py', 'wt')
|
|
||||||
file_version_py.write(data)
|
|
||||||
file_version_py.close()
|
|
||||||
@@ -1,5 +1,3 @@
|
|||||||
# UNUSED
|
|
||||||
|
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Run with as parameter a setup.py that works in the current directory
|
# Run with as parameter a setup.py that works in the current directory
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#compdef yt-dlp
|
#compdef youtube-dlc
|
||||||
|
|
||||||
__yt_dlp() {
|
__youtube_dlc() {
|
||||||
local curcontext="$curcontext" fileopts diropts cur prev
|
local curcontext="$curcontext" fileopts diropts cur prev
|
||||||
typeset -A opt_args
|
typeset -A opt_args
|
||||||
fileopts="{{fileopts}}"
|
fileopts="{{fileopts}}"
|
||||||
@@ -27,4 +27,4 @@ __yt_dlp() {
|
|||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
__yt_dlp
|
__youtube_dlc
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import os
|
import os
|
||||||
@@ -6,9 +6,9 @@
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
sys.path.insert(0, dirn(dirn((os.path.abspath(__file__)))))
|
sys.path.insert(0, dirn(dirn((os.path.abspath(__file__)))))
|
||||||
import yt_dlp
|
import youtube_dlc
|
||||||
|
|
||||||
ZSH_COMPLETION_FILE = "completions/zsh/_yt-dlp"
|
ZSH_COMPLETION_FILE = "youtube-dlc.zsh"
|
||||||
ZSH_COMPLETION_TEMPLATE = "devscripts/zsh-completion.in"
|
ZSH_COMPLETION_TEMPLATE = "devscripts/zsh-completion.in"
|
||||||
|
|
||||||
|
|
||||||
@@ -45,5 +45,5 @@ def build_completion(opt_parser):
|
|||||||
f.write(template)
|
f.write(template)
|
||||||
|
|
||||||
|
|
||||||
parser = yt_dlp.parseOpts()[0]
|
parser = youtube_dlc.parseOpts()[0]
|
||||||
build_completion(parser)
|
build_completion(parser)
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
orphan: true
|
|
||||||
---
|
|
||||||
```{include} ../Changelog.md
|
|
||||||
```
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
orphan: true
|
|
||||||
---
|
|
||||||
```{include} ../Collaborators.md
|
|
||||||
```
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
---
|
|
||||||
orphan: true
|
|
||||||
---
|
|
||||||
# LICENSE
|
|
||||||
```{include} ../LICENSE
|
|
||||||
```
|
|
||||||
@@ -85,17 +85,17 @@ qthelp:
|
|||||||
@echo
|
@echo
|
||||||
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
|
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
|
||||||
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
|
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
|
||||||
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/yt-dlp.qhcp"
|
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/youtube-dlc.qhcp"
|
||||||
@echo "To view the help file:"
|
@echo "To view the help file:"
|
||||||
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/yt-dlp.qhc"
|
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/youtube-dlc.qhc"
|
||||||
|
|
||||||
devhelp:
|
devhelp:
|
||||||
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
|
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
|
||||||
@echo
|
@echo
|
||||||
@echo "Build finished."
|
@echo "Build finished."
|
||||||
@echo "To view the help file:"
|
@echo "To view the help file:"
|
||||||
@echo "# mkdir -p $$HOME/.local/share/devhelp/yt-dlp"
|
@echo "# mkdir -p $$HOME/.local/share/devhelp/youtube-dlc"
|
||||||
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/yt-dlp"
|
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/youtube-dlc"
|
||||||
@echo "# devhelp"
|
@echo "# devhelp"
|
||||||
|
|
||||||
epub:
|
epub:
|
||||||
|
|||||||
@@ -1,2 +0,0 @@
|
|||||||
```{include} ../README.md
|
|
||||||
```
|
|
||||||
45
docs/conf.py
45
docs/conf.py
@@ -1,12 +1,21 @@
|
|||||||
# coding: utf-8
|
# coding: utf-8
|
||||||
#
|
#
|
||||||
# yt-dlp documentation build configuration file
|
# youtube-dlc documentation build configuration file, created by
|
||||||
|
# sphinx-quickstart on Fri Mar 14 21:05:43 2014.
|
||||||
|
#
|
||||||
|
# This file is execfile()d with the current directory set to its
|
||||||
|
# containing dir.
|
||||||
|
#
|
||||||
|
# Note that not all possible configuration values are present in this
|
||||||
|
# autogenerated file.
|
||||||
|
#
|
||||||
|
# All configuration values have a default; values that are commented out
|
||||||
|
# serve to show the default.
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
|
# Allows to import youtube_dlc
|
||||||
# Allows to import yt-dlp
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||||
sys.path.insert(0, os.path.abspath('..'))
|
|
||||||
|
|
||||||
# -- General configuration ------------------------------------------------
|
# -- General configuration ------------------------------------------------
|
||||||
|
|
||||||
@@ -14,26 +23,28 @@
|
|||||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||||
# ones.
|
# ones.
|
||||||
extensions = [
|
extensions = [
|
||||||
'myst_parser',
|
'sphinx.ext.autodoc',
|
||||||
]
|
]
|
||||||
|
|
||||||
# Add any paths that contain templates here, relative to this directory.
|
# Add any paths that contain templates here, relative to this directory.
|
||||||
templates_path = ['_templates']
|
templates_path = ['_templates']
|
||||||
|
|
||||||
|
# The suffix of source filenames.
|
||||||
|
source_suffix = '.rst'
|
||||||
|
|
||||||
# The master toctree document.
|
# The master toctree document.
|
||||||
master_doc = 'README'
|
master_doc = 'index'
|
||||||
|
|
||||||
# General information about the project.
|
# General information about the project.
|
||||||
project = u'yt-dlp'
|
project = u'youtube-dlc'
|
||||||
author = u'yt-dlp'
|
copyright = u'2014, Ricardo Garcia Gonzalez'
|
||||||
copyright = u'UNLICENSE'
|
|
||||||
|
|
||||||
# The version info for the project you're documenting, acts as replacement for
|
# The version info for the project you're documenting, acts as replacement for
|
||||||
# |version| and |release|, also used in various other places throughout the
|
# |version| and |release|, also used in various other places throughout the
|
||||||
# built documents.
|
# built documents.
|
||||||
#
|
#
|
||||||
# The short X.Y version.
|
# The short X.Y version.
|
||||||
from yt_dlp.version import __version__
|
from youtube_dlc.version import __version__
|
||||||
version = __version__
|
version = __version__
|
||||||
# The full version, including alpha/beta/rc tags.
|
# The full version, including alpha/beta/rc tags.
|
||||||
release = version
|
release = version
|
||||||
@@ -51,18 +62,10 @@
|
|||||||
# a list of builtin themes.
|
# a list of builtin themes.
|
||||||
html_theme = 'default'
|
html_theme = 'default'
|
||||||
|
|
||||||
# Disable highlights
|
|
||||||
highlight_language = 'none'
|
|
||||||
|
|
||||||
# Add any paths that contain custom static files (such as style sheets) here,
|
# Add any paths that contain custom static files (such as style sheets) here,
|
||||||
# relative to this directory. They are copied after the builtin static files,
|
# relative to this directory. They are copied after the builtin static files,
|
||||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||||
# html_static_path = ['_static']
|
html_static_path = ['_static']
|
||||||
|
|
||||||
# Enable heading anchors
|
# Output file base name for HTML help builder.
|
||||||
myst_heading_anchors = 4
|
htmlhelp_basename = 'youtube-dlcdoc'
|
||||||
|
|
||||||
# Suppress heading warnings
|
|
||||||
suppress_warnings = [
|
|
||||||
'myst.header',
|
|
||||||
]
|
|
||||||
|
|||||||
31
docs/faq.md
Normal file
31
docs/faq.md
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
- Q: How to redirect to another extractor?
|
||||||
|
- A:
|
||||||
|
- Most simple using only `url_result`
|
||||||
|
```
|
||||||
|
# get proper url first if needed.
|
||||||
|
return self.url_result(url)
|
||||||
|
```
|
||||||
|
- Using `_request_webpage` and `to_screen` in addition
|
||||||
|
```
|
||||||
|
urlh = self._request_webpage(
|
||||||
|
url, id, note='Downloading redirect page')
|
||||||
|
url = urlh.geturl()
|
||||||
|
self.to_screen('Following redirect: %s' % url)
|
||||||
|
return self.url_result(url)
|
||||||
|
```
|
||||||
|
- Using `return` construction
|
||||||
|
```
|
||||||
|
return {
|
||||||
|
'_type': 'url_transparent',
|
||||||
|
'url': url,
|
||||||
|
'ie_key': ExampleIE.ie_key(),
|
||||||
|
'id': id,
|
||||||
|
}
|
||||||
|
# Alternative if extractor supports internal uri like kaltura
|
||||||
|
return {
|
||||||
|
'_type': 'url_transparent',
|
||||||
|
'url': 'kaltura:%s:%s' % (partner_id, kaltura_id),
|
||||||
|
'ie_key': KalturaIE.ie_key(),
|
||||||
|
'id': id,
|
||||||
|
}
|
||||||
|
```
|
||||||
23
docs/index.rst
Normal file
23
docs/index.rst
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
Welcome to youtube-dlc's documentation!
|
||||||
|
======================================
|
||||||
|
|
||||||
|
*youtube-dlc* is a command-line program to download videos from YouTube.com and more sites.
|
||||||
|
It can also be used in Python code.
|
||||||
|
|
||||||
|
Developer guide
|
||||||
|
---------------
|
||||||
|
|
||||||
|
This section contains information for using *youtube-dlc* from Python programs.
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 2
|
||||||
|
|
||||||
|
module_guide
|
||||||
|
|
||||||
|
Indices and tables
|
||||||
|
==================
|
||||||
|
|
||||||
|
* :ref:`genindex`
|
||||||
|
* :ref:`modindex`
|
||||||
|
* :ref:`search`
|
||||||
|
|
||||||
67
docs/module_guide.rst
Normal file
67
docs/module_guide.rst
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
Using the ``youtube_dlc`` module
|
||||||
|
===============================
|
||||||
|
|
||||||
|
When using the ``youtube_dlc`` module, you start by creating an instance of :class:`YoutubeDL` and adding all the available extractors:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
>>> from youtube_dlc import YoutubeDL
|
||||||
|
>>> ydl = YoutubeDL()
|
||||||
|
>>> ydl.add_default_info_extractors()
|
||||||
|
|
||||||
|
Extracting video information
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
You use the :meth:`YoutubeDL.extract_info` method for getting the video information, which returns a dictionary:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
>>> info = ydl.extract_info('http://www.youtube.com/watch?v=BaW_jenozKc', download=False)
|
||||||
|
[youtube] Setting language
|
||||||
|
[youtube] BaW_jenozKc: Downloading webpage
|
||||||
|
[youtube] BaW_jenozKc: Downloading video info webpage
|
||||||
|
[youtube] BaW_jenozKc: Extracting video information
|
||||||
|
>>> info['title']
|
||||||
|
'youtube-dlc test video "\'/\\ä↭𝕐'
|
||||||
|
>>> info['height'], info['width']
|
||||||
|
(720, 1280)
|
||||||
|
|
||||||
|
If you want to download or play the video you can get its url:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
>>> info['url']
|
||||||
|
'https://...'
|
||||||
|
|
||||||
|
Extracting playlist information
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
The playlist information is extracted in a similar way, but the dictionary is a bit different:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
>>> playlist = ydl.extract_info('http://www.ted.com/playlists/13/open_source_open_world', download=False)
|
||||||
|
[TED] open_source_open_world: Downloading playlist webpage
|
||||||
|
...
|
||||||
|
>>> playlist['title']
|
||||||
|
'Open-source, open world'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
You can access the videos in the playlist with the ``entries`` field:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
>>> for video in playlist['entries']:
|
||||||
|
... print('Video #%d: %s' % (video['playlist_index'], video['title']))
|
||||||
|
|
||||||
|
Video #1: How Arduino is open-sourcing imagination
|
||||||
|
Video #2: The year open data went worldwide
|
||||||
|
Video #3: Massive-scale online collaboration
|
||||||
|
Video #4: The art of asking
|
||||||
|
Video #5: How cognitive surplus will change the world
|
||||||
|
Video #6: The birth of Wikipedia
|
||||||
|
Video #7: Coding a better government
|
||||||
|
Video #8: The era of open innovation
|
||||||
|
Video #9: The currency of the new economy is trust
|
||||||
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
myst-parser
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,6 +0,0 @@
|
|||||||
---
|
|
||||||
orphan: true
|
|
||||||
---
|
|
||||||
# ytdlp_plugins
|
|
||||||
|
|
||||||
See [https://github.com/yt-dlp/yt-dlp/tree/master/ytdlp_plugins](https://github.com/yt-dlp/yt-dlp/tree/master/ytdlp_plugins).
|
|
||||||
1
make_win.bat
Normal file
1
make_win.bat
Normal file
@@ -0,0 +1 @@
|
|||||||
|
py -m PyInstaller youtube_dlc\__main__.py --onefile --name youtube-dlc --version-file win\ver.txt --icon win\icon\cloud.ico --upx-exclude=vcruntime140.dll
|
||||||
115
pyinst.py
115
pyinst.py
@@ -1,44 +1,55 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
# coding: utf-8
|
|
||||||
|
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
import sys
|
|
||||||
# import os
|
|
||||||
import platform
|
|
||||||
|
|
||||||
from PyInstaller.utils.hooks import collect_submodules
|
|
||||||
from PyInstaller.utils.win32.versioninfo import (
|
from PyInstaller.utils.win32.versioninfo import (
|
||||||
VarStruct, VarFileInfo, StringStruct, StringTable,
|
VarStruct, VarFileInfo, StringStruct, StringTable,
|
||||||
StringFileInfo, FixedFileInfo, VSVersionInfo, SetVersion,
|
StringFileInfo, FixedFileInfo, VSVersionInfo, SetVersion,
|
||||||
)
|
)
|
||||||
import PyInstaller.__main__
|
import PyInstaller.__main__
|
||||||
|
|
||||||
arch = sys.argv[1] if len(sys.argv) > 1 else platform.architecture()[0][:2]
|
from datetime import datetime
|
||||||
assert arch in ('32', '64')
|
|
||||||
_x86 = '_x86' if arch == '32' else ''
|
|
||||||
|
|
||||||
opts = sys.argv[2:] or ['--onefile']
|
FILE_DESCRIPTION = 'Media Downloader'
|
||||||
print(f'Building {arch}bit version with options {opts}')
|
|
||||||
|
|
||||||
FILE_DESCRIPTION = 'yt-dlp%s' % (' (32 Bit)' if _x86 else '')
|
exec(compile(open('youtube_dlc/version.py').read(), 'youtube_dlc/version.py', 'exec'))
|
||||||
|
|
||||||
# root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
|
_LATEST_VERSION = locals()['__version__']
|
||||||
# print('Changing working directory to %s' % root_dir)
|
|
||||||
# os.chdir(root_dir)
|
|
||||||
|
|
||||||
exec(compile(open('yt_dlp/version.py').read(), 'yt_dlp/version.py', 'exec'))
|
_OLD_VERSION = _LATEST_VERSION.rsplit("-", 1)
|
||||||
VERSION = locals()['__version__']
|
|
||||||
|
|
||||||
VERSION_LIST = VERSION.split('.')
|
if len(_OLD_VERSION) > 0:
|
||||||
VERSION_LIST = list(map(int, VERSION_LIST)) + [0] * (4 - len(VERSION_LIST))
|
old_ver = _OLD_VERSION[0]
|
||||||
|
|
||||||
print('Version: %s%s' % (VERSION, _x86))
|
old_rev = ''
|
||||||
print('Remember to update the version using devscipts\\update-version.py')
|
if len(_OLD_VERSION) > 1:
|
||||||
|
old_rev = _OLD_VERSION[1]
|
||||||
|
|
||||||
VERSION_FILE = VSVersionInfo(
|
now = datetime.now()
|
||||||
|
# ver = f'{datetime.today():%Y.%m.%d}'
|
||||||
|
ver = now.strftime("%Y.%m.%d")
|
||||||
|
rev = ''
|
||||||
|
|
||||||
|
if old_ver == ver:
|
||||||
|
if old_rev:
|
||||||
|
rev = int(old_rev) + 1
|
||||||
|
else:
|
||||||
|
rev = 1
|
||||||
|
|
||||||
|
_SEPARATOR = '-'
|
||||||
|
|
||||||
|
version = _SEPARATOR.join(filter(None, [ver, str(rev)]))
|
||||||
|
|
||||||
|
print(version)
|
||||||
|
|
||||||
|
version_list = ver.split(".")
|
||||||
|
_year, _month, _day = [int(value) for value in version_list]
|
||||||
|
_rev = 0
|
||||||
|
if rev:
|
||||||
|
_rev = rev
|
||||||
|
_ver_tuple = _year, _month, _day, _rev
|
||||||
|
|
||||||
|
version_file = VSVersionInfo(
|
||||||
ffi=FixedFileInfo(
|
ffi=FixedFileInfo(
|
||||||
filevers=VERSION_LIST,
|
filevers=_ver_tuple,
|
||||||
prodvers=VERSION_LIST,
|
prodvers=_ver_tuple,
|
||||||
mask=0x3F,
|
mask=0x3F,
|
||||||
flags=0x0,
|
flags=0x0,
|
||||||
OS=0x4,
|
OS=0x4,
|
||||||
@@ -47,39 +58,35 @@
|
|||||||
date=(0, 0),
|
date=(0, 0),
|
||||||
),
|
),
|
||||||
kids=[
|
kids=[
|
||||||
StringFileInfo([
|
StringFileInfo(
|
||||||
|
[
|
||||||
StringTable(
|
StringTable(
|
||||||
'040904B0', [
|
"040904B0",
|
||||||
StringStruct('Comments', 'yt-dlp%s Command Line Interface.' % _x86),
|
[
|
||||||
StringStruct('CompanyName', 'https://github.com/yt-dlp'),
|
StringStruct("Comments", "Youtube-dlc Command Line Interface."),
|
||||||
StringStruct('FileDescription', FILE_DESCRIPTION),
|
StringStruct("CompanyName", "theidel@uni-bremen.de"),
|
||||||
StringStruct('FileVersion', VERSION),
|
StringStruct("FileDescription", FILE_DESCRIPTION),
|
||||||
StringStruct('InternalName', 'yt-dlp%s' % _x86),
|
StringStruct("FileVersion", version),
|
||||||
|
StringStruct("InternalName", "youtube-dlc"),
|
||||||
StringStruct(
|
StringStruct(
|
||||||
'LegalCopyright',
|
"LegalCopyright",
|
||||||
'pukkandan.ytdlp@gmail.com | UNLICENSE',
|
"theidel@uni-bremen.de | UNLICENSE",
|
||||||
),
|
),
|
||||||
StringStruct('OriginalFilename', 'yt-dlp%s.exe' % _x86),
|
StringStruct("OriginalFilename", "youtube-dlc.exe"),
|
||||||
StringStruct('ProductName', 'yt-dlp%s' % _x86),
|
StringStruct("ProductName", "Youtube-dlc"),
|
||||||
StringStruct(
|
StringStruct("ProductVersion", version + " | git.io/JUGsM"),
|
||||||
'ProductVersion',
|
],
|
||||||
'%s%s on Python %s' % (VERSION, _x86, platform.python_version())),
|
)
|
||||||
])]),
|
]
|
||||||
VarFileInfo([VarStruct('Translation', [0, 1200])])
|
),
|
||||||
|
VarFileInfo([VarStruct("Translation", [0, 1200])])
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
dependancies = ['Crypto', 'mutagen'] + collect_submodules('websockets')
|
|
||||||
excluded_modules = ['test', 'ytdlp_plugins', 'youtube-dl', 'youtube-dlc']
|
|
||||||
|
|
||||||
PyInstaller.__main__.run([
|
PyInstaller.__main__.run([
|
||||||
'--name=yt-dlp%s' % _x86,
|
'--name=youtube-dlc',
|
||||||
'--icon=devscripts/logo.ico',
|
'--onefile',
|
||||||
*[f'--exclude-module={module}' for module in excluded_modules],
|
'--icon=win/icon/cloud.ico',
|
||||||
*[f'--hidden-import={module}' for module in dependancies],
|
'youtube_dlc/__main__.py',
|
||||||
'--upx-exclude=vcruntime140.dll',
|
|
||||||
'--noconfirm',
|
|
||||||
*opts,
|
|
||||||
'yt_dlp/__main__.py',
|
|
||||||
])
|
])
|
||||||
SetVersion('dist/yt-dlp%s.exe' % _x86, VERSION_FILE)
|
SetVersion('dist/youtube-dlc.exe', version_file)
|
||||||
|
|||||||
92
pyinst32.py
Normal file
92
pyinst32.py
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
from __future__ import unicode_literals
|
||||||
|
from PyInstaller.utils.win32.versioninfo import (
|
||||||
|
VarStruct, VarFileInfo, StringStruct, StringTable,
|
||||||
|
StringFileInfo, FixedFileInfo, VSVersionInfo, SetVersion,
|
||||||
|
)
|
||||||
|
import PyInstaller.__main__
|
||||||
|
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
FILE_DESCRIPTION = 'Media Downloader 32 Bit Version'
|
||||||
|
|
||||||
|
exec(compile(open('youtube_dlc/version.py').read(), 'youtube_dlc/version.py', 'exec'))
|
||||||
|
|
||||||
|
_LATEST_VERSION = locals()['__version__']
|
||||||
|
|
||||||
|
_OLD_VERSION = _LATEST_VERSION.rsplit("-", 1)
|
||||||
|
|
||||||
|
if len(_OLD_VERSION) > 0:
|
||||||
|
old_ver = _OLD_VERSION[0]
|
||||||
|
|
||||||
|
old_rev = ''
|
||||||
|
if len(_OLD_VERSION) > 1:
|
||||||
|
old_rev = _OLD_VERSION[1]
|
||||||
|
|
||||||
|
now = datetime.now()
|
||||||
|
# ver = f'{datetime.today():%Y.%m.%d}'
|
||||||
|
ver = now.strftime("%Y.%m.%d")
|
||||||
|
rev = ''
|
||||||
|
|
||||||
|
if old_ver == ver:
|
||||||
|
if old_rev:
|
||||||
|
rev = int(old_rev) + 1
|
||||||
|
else:
|
||||||
|
rev = 1
|
||||||
|
|
||||||
|
_SEPARATOR = '-'
|
||||||
|
|
||||||
|
version = _SEPARATOR.join(filter(None, [ver, str(rev)]))
|
||||||
|
|
||||||
|
print(version)
|
||||||
|
|
||||||
|
version_list = ver.split(".")
|
||||||
|
_year, _month, _day = [int(value) for value in version_list]
|
||||||
|
_rev = 0
|
||||||
|
if rev:
|
||||||
|
_rev = rev
|
||||||
|
_ver_tuple = _year, _month, _day, _rev
|
||||||
|
|
||||||
|
version_file = VSVersionInfo(
|
||||||
|
ffi=FixedFileInfo(
|
||||||
|
filevers=_ver_tuple,
|
||||||
|
prodvers=_ver_tuple,
|
||||||
|
mask=0x3F,
|
||||||
|
flags=0x0,
|
||||||
|
OS=0x4,
|
||||||
|
fileType=0x1,
|
||||||
|
subtype=0x0,
|
||||||
|
date=(0, 0),
|
||||||
|
),
|
||||||
|
kids=[
|
||||||
|
StringFileInfo(
|
||||||
|
[
|
||||||
|
StringTable(
|
||||||
|
"040904B0",
|
||||||
|
[
|
||||||
|
StringStruct("Comments", "Youtube-dlc_x86 Command Line Interface."),
|
||||||
|
StringStruct("CompanyName", "theidel@uni-bremen.de"),
|
||||||
|
StringStruct("FileDescription", FILE_DESCRIPTION),
|
||||||
|
StringStruct("FileVersion", version),
|
||||||
|
StringStruct("InternalName", "youtube-dlc_x86"),
|
||||||
|
StringStruct(
|
||||||
|
"LegalCopyright",
|
||||||
|
"theidel@uni-bremen.de | UNLICENSE",
|
||||||
|
),
|
||||||
|
StringStruct("OriginalFilename", "youtube-dlc_x86.exe"),
|
||||||
|
StringStruct("ProductName", "Youtube-dlc_x86"),
|
||||||
|
StringStruct("ProductVersion", version + "_x86 | git.io/JUGsM"),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
]
|
||||||
|
),
|
||||||
|
VarFileInfo([VarStruct("Translation", [0, 1200])])
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
PyInstaller.__main__.run([
|
||||||
|
'--name=youtube-dlc_x86',
|
||||||
|
'--onefile',
|
||||||
|
'--icon=win/icon/cloud.ico',
|
||||||
|
'youtube_dlc/__main__.py',
|
||||||
|
])
|
||||||
|
SetVersion('dist/youtube-dlc_x86.exe', version_file)
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
[pytest]
|
|
||||||
addopts = -ra -v --strict-markers
|
|
||||||
markers =
|
|
||||||
download
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
mutagen
|
|
||||||
pycryptodome
|
|
||||||
websockets
|
|
||||||
44
scripts/update-version-workflow.py
Normal file
44
scripts/update-version-workflow.py
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
from __future__ import unicode_literals
|
||||||
|
from datetime import datetime
|
||||||
|
# import urllib.request
|
||||||
|
|
||||||
|
# response = urllib.request.urlopen('https://blackjack4494.github.io/youtube-dlc/update/LATEST_VERSION')
|
||||||
|
# _LATEST_VERSION = response.read().decode('utf-8')
|
||||||
|
|
||||||
|
exec(compile(open('youtube_dlc/version.py').read(), 'youtube_dlc/version.py', 'exec'))
|
||||||
|
|
||||||
|
_LATEST_VERSION = locals()['__version__']
|
||||||
|
|
||||||
|
_OLD_VERSION = _LATEST_VERSION.rsplit("-", 1)
|
||||||
|
|
||||||
|
if len(_OLD_VERSION) > 0:
|
||||||
|
old_ver = _OLD_VERSION[0]
|
||||||
|
|
||||||
|
old_rev = ''
|
||||||
|
if len(_OLD_VERSION) > 1:
|
||||||
|
old_rev = _OLD_VERSION[1]
|
||||||
|
|
||||||
|
now = datetime.now()
|
||||||
|
# ver = f'{datetime.today():%Y.%m.%d}'
|
||||||
|
ver = now.strftime("%Y.%m.%d")
|
||||||
|
rev = ''
|
||||||
|
|
||||||
|
if old_ver == ver:
|
||||||
|
if old_rev:
|
||||||
|
rev = int(old_rev) + 1
|
||||||
|
else:
|
||||||
|
rev = 1
|
||||||
|
|
||||||
|
_SEPARATOR = '-'
|
||||||
|
|
||||||
|
version = _SEPARATOR.join(filter(None, [ver, str(rev)]))
|
||||||
|
|
||||||
|
print('::set-output name=ytdlc_version::' + version)
|
||||||
|
|
||||||
|
file_version_py = open('youtube_dlc/version.py', 'rt')
|
||||||
|
data = file_version_py.read()
|
||||||
|
data = data.replace(locals()['__version__'], version)
|
||||||
|
file_version_py.close()
|
||||||
|
file_version_py = open('youtube_dlc/version.py', 'wt')
|
||||||
|
file_version_py.write(data)
|
||||||
|
file_version_py.close()
|
||||||
33
scripts/update-version.py
Normal file
33
scripts/update-version.py
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
# Unused
|
||||||
|
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
from datetime import datetime
|
||||||
|
import urllib.request
|
||||||
|
|
||||||
|
response = urllib.request.urlopen('https://blackjack4494.github.io/youtube-dlc/update/LATEST_VERSION')
|
||||||
|
|
||||||
|
_LATEST_VERSION = response.read().decode('utf-8')
|
||||||
|
|
||||||
|
_OLD_VERSION = _LATEST_VERSION.rsplit("-", 1)
|
||||||
|
|
||||||
|
if len(_OLD_VERSION) > 0:
|
||||||
|
old_ver = _OLD_VERSION[0]
|
||||||
|
|
||||||
|
old_rev = ''
|
||||||
|
if len(_OLD_VERSION) > 1:
|
||||||
|
old_rev = _OLD_VERSION[1]
|
||||||
|
|
||||||
|
now = datetime.now()
|
||||||
|
# ver = f'{datetime.today():%Y.%m.%d}'
|
||||||
|
ver = now.strftime("%Y.%m.%d")
|
||||||
|
rev = ''
|
||||||
|
|
||||||
|
if old_ver == ver:
|
||||||
|
if old_rev:
|
||||||
|
rev = int(old_rev) + 1
|
||||||
|
else:
|
||||||
|
rev = 1
|
||||||
|
|
||||||
|
_SEPARATOR = '-'
|
||||||
|
|
||||||
|
version = _SEPARATOR.join(filter(None, [ver, str(rev)]))
|
||||||
@@ -2,5 +2,5 @@
|
|||||||
universal = True
|
universal = True
|
||||||
|
|
||||||
[flake8]
|
[flake8]
|
||||||
exclude = yt_dlp/extractor/__init__.py,devscripts/buildserver.py,devscripts/lazy_load_template.py,devscripts/make_issue_template.py,setup.py,build,.git,venv,devscripts/create-github-release.py,devscripts/release.sh,devscripts/show-downloads-statistics.py
|
exclude = youtube_dlc/extractor/__init__.py,devscripts/buildserver.py,devscripts/lazy_load_template.py,devscripts/make_issue_template.py,setup.py,build,.git,venv,devscripts/create-github-release.py,devscripts/release.sh,devscripts/show-downloads-statistics.py,scripts/update-version.py
|
||||||
ignore = E402,E501,E731,E741,W503
|
ignore = E402,E501,E731,E741,W503
|
||||||
111
setup.py
111
setup.py
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python
|
||||||
# coding: utf-8
|
# coding: utf-8
|
||||||
|
|
||||||
from setuptools import setup, Command, find_packages
|
from setuptools import setup, Command, find_packages
|
||||||
@@ -7,30 +7,21 @@
|
|||||||
import sys
|
import sys
|
||||||
from distutils.spawn import spawn
|
from distutils.spawn import spawn
|
||||||
|
|
||||||
|
# Get the version from youtube_dlc/version.py without importing the package
|
||||||
|
exec(compile(open('youtube_dlc/version.py').read(),
|
||||||
|
'youtube_dlc/version.py', 'exec'))
|
||||||
|
|
||||||
# Get the version from yt_dlp/version.py without importing the package
|
DESCRIPTION = 'Media downloader supporting various sites such as youtube'
|
||||||
exec(compile(open('yt_dlp/version.py').read(), 'yt_dlp/version.py', 'exec'))
|
LONG_DESCRIPTION = 'Command-line program to download videos from YouTube.com and other video sites. Based on a more active community fork.'
|
||||||
|
|
||||||
|
|
||||||
DESCRIPTION = 'Command-line program to download videos from YouTube.com and many other other video platforms.'
|
|
||||||
|
|
||||||
LONG_DESCRIPTION = '\n\n'.join((
|
|
||||||
'Official repository: <https://github.com/yt-dlp/yt-dlp>',
|
|
||||||
'**PS**: Some links in this document will not work since this is a copy of the README.md from Github',
|
|
||||||
open('README.md', 'r', encoding='utf-8').read()))
|
|
||||||
|
|
||||||
REQUIREMENTS = ['mutagen', 'pycryptodome', 'websockets']
|
|
||||||
|
|
||||||
if sys.argv[1:2] == ['py2exe']:
|
|
||||||
raise NotImplementedError('py2exe is not currently supported; instead, use "pyinst.py" to build with pyinstaller')
|
|
||||||
|
|
||||||
|
|
||||||
|
if len(sys.argv) >= 2 and sys.argv[1] == 'py2exe':
|
||||||
|
print("inv")
|
||||||
|
else:
|
||||||
files_spec = [
|
files_spec = [
|
||||||
('share/bash-completion/completions', ['completions/bash/yt-dlp']),
|
('etc/bash_completion.d', ['youtube-dlc.bash-completion']),
|
||||||
('share/zsh/site-functions', ['completions/zsh/_yt-dlp']),
|
('etc/fish/completions', ['youtube-dlc.fish']),
|
||||||
('share/fish/vendor_completions.d', ['completions/fish/yt-dlp.fish']),
|
('share/doc/youtube_dlc', ['README.txt']),
|
||||||
('share/doc/yt_dlp', ['README.txt']),
|
('share/man/man1', ['youtube-dlc.1'])
|
||||||
('share/man/man1', ['yt-dlp.1'])
|
|
||||||
]
|
]
|
||||||
root = os.path.dirname(os.path.abspath(__file__))
|
root = os.path.dirname(os.path.abspath(__file__))
|
||||||
data_files = []
|
data_files = []
|
||||||
@@ -38,7 +29,7 @@
|
|||||||
resfiles = []
|
resfiles = []
|
||||||
for fn in files:
|
for fn in files:
|
||||||
if not os.path.exists(fn):
|
if not os.path.exists(fn):
|
||||||
warnings.warn('Skipping file %s since it is not present. Try running `make pypi-files` first' % fn)
|
warnings.warn('Skipping file %s since it is not present. Type make to build all automatically generated files.' % fn)
|
||||||
else:
|
else:
|
||||||
resfiles.append(fn)
|
resfiles.append(fn)
|
||||||
data_files.append((dirname, resfiles))
|
data_files.append((dirname, resfiles))
|
||||||
@@ -46,8 +37,10 @@
|
|||||||
params = {
|
params = {
|
||||||
'data_files': data_files,
|
'data_files': data_files,
|
||||||
}
|
}
|
||||||
params['entry_points'] = {'console_scripts': ['yt-dlp = yt_dlp:main']}
|
#if setuptools_available:
|
||||||
|
params['entry_points'] = {'console_scripts': ['youtube-dlc = youtube_dlc:main']}
|
||||||
|
#else:
|
||||||
|
# params['scripts'] = ['bin/youtube-dlc']
|
||||||
|
|
||||||
class build_lazy_extractors(Command):
|
class build_lazy_extractors(Command):
|
||||||
description = 'Build the extractor lazy loading module'
|
description = 'Build the extractor lazy loading module'
|
||||||
@@ -60,44 +53,50 @@ def finalize_options(self):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
spawn([sys.executable, 'devscripts/make_lazy_extractors.py', 'yt_dlp/extractor/lazy_extractors.py'],
|
spawn(
|
||||||
dry_run=self.dry_run)
|
[sys.executable, 'devscripts/make_lazy_extractors.py', 'youtube_dlc/extractor/lazy_extractors.py'],
|
||||||
|
dry_run=self.dry_run,
|
||||||
|
)
|
||||||
packages = find_packages(exclude=('youtube_dl', 'test', 'ytdlp_plugins'))
|
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name='yt-dlp',
|
name="youtube_dlc",
|
||||||
version=__version__,
|
version=__version__,
|
||||||
maintainer='pukkandan',
|
maintainer="Tom-Oliver Heidel",
|
||||||
maintainer_email='pukkandan.ytdlp@gmail.com',
|
maintainer_email="theidel@uni-bremen.de",
|
||||||
description=DESCRIPTION,
|
description=DESCRIPTION,
|
||||||
long_description=LONG_DESCRIPTION,
|
long_description=LONG_DESCRIPTION,
|
||||||
long_description_content_type='text/markdown',
|
# long_description_content_type="text/markdown",
|
||||||
url='https://github.com/yt-dlp/yt-dlp',
|
url="https://github.com/pukkandan/yt-dlc",
|
||||||
packages=packages,
|
packages=find_packages(exclude=("youtube_dl","test",)),
|
||||||
install_requires=REQUIREMENTS,
|
#packages=[
|
||||||
project_urls={
|
# 'youtube_dlc',
|
||||||
'Documentation': 'https://yt-dlp.readthedocs.io',
|
# 'youtube_dlc.extractor', 'youtube_dlc.downloader',
|
||||||
'Source': 'https://github.com/yt-dlp/yt-dlp',
|
# 'youtube_dlc.postprocessor'],
|
||||||
'Tracker': 'https://github.com/yt-dlp/yt-dlp/issues',
|
|
||||||
#'Funding': 'https://donate.pypi.org',
|
|
||||||
},
|
|
||||||
classifiers=[
|
classifiers=[
|
||||||
'Topic :: Multimedia :: Video',
|
"Topic :: Multimedia :: Video",
|
||||||
'Development Status :: 5 - Production/Stable',
|
"Development Status :: 5 - Production/Stable",
|
||||||
'Environment :: Console',
|
"Environment :: Console",
|
||||||
'Programming Language :: Python',
|
"Programming Language :: Python",
|
||||||
'Programming Language :: Python :: 3.6',
|
"Programming Language :: Python :: 2",
|
||||||
'Programming Language :: Python :: 3.7',
|
"Programming Language :: Python :: 2.6",
|
||||||
'Programming Language :: Python :: 3.8',
|
"Programming Language :: Python :: 2.7",
|
||||||
'Programming Language :: Python :: Implementation',
|
"Programming Language :: Python :: 3",
|
||||||
'Programming Language :: Python :: Implementation :: CPython',
|
"Programming Language :: Python :: 3.2",
|
||||||
'Programming Language :: Python :: Implementation :: PyPy',
|
"Programming Language :: Python :: 3.3",
|
||||||
'License :: Public Domain',
|
"Programming Language :: Python :: 3.4",
|
||||||
'Operating System :: OS Independent',
|
"Programming Language :: Python :: 3.5",
|
||||||
|
"Programming Language :: Python :: 3.6",
|
||||||
|
"Programming Language :: Python :: 3.7",
|
||||||
|
"Programming Language :: Python :: 3.8",
|
||||||
|
"Programming Language :: Python :: Implementation",
|
||||||
|
"Programming Language :: Python :: Implementation :: CPython",
|
||||||
|
"Programming Language :: Python :: Implementation :: IronPython",
|
||||||
|
"Programming Language :: Python :: Implementation :: Jython",
|
||||||
|
"Programming Language :: Python :: Implementation :: PyPy",
|
||||||
|
"License :: Public Domain",
|
||||||
|
"Operating System :: OS Independent",
|
||||||
],
|
],
|
||||||
python_requires='>=3.6',
|
python_requires='>=2.6',
|
||||||
|
|
||||||
cmdclass={'build_lazy_extractors': build_lazy_extractors},
|
cmdclass={'build_lazy_extractors': build_lazy_extractors},
|
||||||
**params
|
**params
|
||||||
|
|||||||
1362
supportedsites.md
1362
supportedsites.md
File diff suppressed because it is too large
Load Diff
@@ -10,26 +10,18 @@
|
|||||||
import ssl
|
import ssl
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
import yt_dlp.extractor
|
import youtube_dlc.extractor
|
||||||
from yt_dlp import YoutubeDL
|
from youtube_dlc import YoutubeDL
|
||||||
from yt_dlp.compat import (
|
from youtube_dlc.compat import (
|
||||||
compat_os_name,
|
compat_os_name,
|
||||||
compat_str,
|
compat_str,
|
||||||
)
|
)
|
||||||
from yt_dlp.utils import (
|
from youtube_dlc.utils import (
|
||||||
preferredencoding,
|
preferredencoding,
|
||||||
write_string,
|
write_string,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
if "pytest" in sys.modules:
|
|
||||||
import pytest
|
|
||||||
is_download_test = pytest.mark.download
|
|
||||||
else:
|
|
||||||
def is_download_test(testClass):
|
|
||||||
return testClass
|
|
||||||
|
|
||||||
|
|
||||||
def get_params(override=None):
|
def get_params(override=None):
|
||||||
PARAMETERS_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)),
|
PARAMETERS_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)),
|
||||||
"parameters.json")
|
"parameters.json")
|
||||||
@@ -98,7 +90,7 @@ def report_warning(self, message):
|
|||||||
|
|
||||||
|
|
||||||
def gettestcases(include_onlymatching=False):
|
def gettestcases(include_onlymatching=False):
|
||||||
for ie in yt_dlp.extractor.gen_extractors():
|
for ie in youtube_dlc.extractor.gen_extractors():
|
||||||
for tc in ie.get_testcases(include_onlymatching):
|
for tc in ie.get_testcases(include_onlymatching):
|
||||||
yield tc
|
yield tc
|
||||||
|
|
||||||
@@ -198,10 +190,7 @@ def expect_info_dict(self, got_dict, expected_dict):
|
|||||||
expect_dict(self, got_dict, expected_dict)
|
expect_dict(self, got_dict, expected_dict)
|
||||||
# Check for the presence of mandatory fields
|
# Check for the presence of mandatory fields
|
||||||
if got_dict.get('_type') not in ('playlist', 'multi_video'):
|
if got_dict.get('_type') not in ('playlist', 'multi_video'):
|
||||||
mandatory_fields = ['id', 'title']
|
for key in ('id', 'url', 'title', 'ext'):
|
||||||
if expected_dict.get('ext'):
|
|
||||||
mandatory_fields.extend(('url', 'ext'))
|
|
||||||
for key in mandatory_fields:
|
|
||||||
self.assertTrue(got_dict.get(key), 'Missing mandatory field %s' % key)
|
self.assertTrue(got_dict.get(key), 'Missing mandatory field %s' % key)
|
||||||
# Check for mandatory fields that are automatically set by YoutubeDL
|
# Check for mandatory fields that are automatically set by YoutubeDL
|
||||||
for key in ['webpage_url', 'extractor', 'extractor_key']:
|
for key in ['webpage_url', 'extractor', 'extractor_key']:
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"check_formats": false,
|
|
||||||
"consoletitle": false,
|
"consoletitle": false,
|
||||||
"continuedl": true,
|
"continuedl": true,
|
||||||
"forcedescription": false,
|
"forcedescription": false,
|
||||||
@@ -15,11 +14,12 @@
|
|||||||
"logtostderr": false,
|
"logtostderr": false,
|
||||||
"matchtitle": null,
|
"matchtitle": null,
|
||||||
"max_downloads": null,
|
"max_downloads": null,
|
||||||
"overwrites": null,
|
"nooverwrites": false,
|
||||||
"nopart": false,
|
"nopart": false,
|
||||||
"noprogress": false,
|
"noprogress": false,
|
||||||
"outtmpl": "%(id)s.%(ext)s",
|
"outtmpl": "%(id)s.%(ext)s",
|
||||||
"password": null,
|
"password": null,
|
||||||
|
"playlistend": -1,
|
||||||
"playliststart": 1,
|
"playliststart": 1,
|
||||||
"prefer_free_formats": false,
|
"prefer_free_formats": false,
|
||||||
"quiet": false,
|
"quiet": false,
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user