1
0
mirror of https://github.com/ytdl-org/youtube-dl.git synced 2026-05-10 07:33:39 +00:00

Compare commits

..

1168 Commits

Author SHA1 Message Date
dirkf 11e3e97ba3 [gh-pages] Alias latest/version 2023-08-01 20:13:00 +01:00
Sergey M․ 21b7590575 Move myself to inactive 2021-12-17 02:21:18 +07:00
Sergey M․ f298ae8802 release 2021.12.17 2021-12-17 02:01:43 +07:00
Sergey M․ 6c1249d2b4 release 2021.06.06 2021-06-06 02:01:45 +07:00
Sergey M․ 72372c78f7 release 2021.05.16 2021-05-16 22:56:44 +07:00
Sergey M․ 5deee00d46 release 2021.04.26 2021-04-26 01:34:58 +07:00
Sergey M․ 979607edcb Update link to MSVC 2010 SP1 (x86) redist (closes #28845) 2021-04-24 17:00:27 +07:00
Sergey M․ 7a41debc6a release 2021.04.17 2021-04-17 03:51:40 +07:00
Sergey M․ d6e2088f21 release 2021.04.07 2021-04-07 03:43:51 +07:00
Sergey M․ 340f735935 release 2021.04.01 2021-04-01 04:48:38 +07:00
Sergey M․ 23734970a8 release 2021.03.31 2021-03-31 03:00:33 +07:00
Sergey M․ 80058d56b3 release 2021.03.25 2021-03-25 00:05:43 +07:00
Sergey M․ 1dba9b2a1b release 2021.03.14 2021-03-14 09:39:41 +07:00
Sergey M․ b3092ac022 release 2021.03.03 2021-03-03 11:49:14 +07:00
Sergey M․ 5fb6f1bc71 release 2021.03.02 2021-03-02 06:21:38 +07:00
Sergey M․ 7eab4b4a9a release 2021.02.22 2021-02-22 02:45:58 +07:00
Sergey M․ 0c41dc0741 release 2021.02.10 2021-02-10 22:36:20 +07:00
Sergey M․ 89b207849d release 2021.02.04.1 2021-02-04 13:13:06 +07:00
Sergey M․ cbf4dee6cb release 2021.02.04 2021-02-04 04:50:57 +07:00
Sergey M․ a66bbc90fc release 2021.01.24.1 2021-01-24 18:12:56 +07:00
Sergey M․ 6273b04b73 release 2021.01.16 2021-01-16 09:53:16 +07:00
Sergey M․ 628ec56431 release 2021.01.08 2021-01-08 11:06:09 +07:00
Sergey M․ 747e773e3e release 2021.01.03 2021-01-03 09:14:43 +07:00
Sergey M․ 78a7c60c89 release 2020.12.31 2020-12-31 05:19:41 +07:00
Sergey M․ 6d9bb94008 release 2020.12.29 2020-12-29 02:55:21 +07:00
Sergey M․ 132c97246e release 2020.12.26 2020-12-26 23:19:04 +07:00
Sergey M․ b8beaff3ea release 2020.12.22 2020-12-22 04:49:36 +07:00
Sergey M․ 2338db7a69 release 2020.12.14 2020-12-14 00:59:09 +07:00
Sergey M․ 8dee034ddb Move Yen to inactive core team members 2020-12-13 05:21:38 +07:00
Sergey M․ 7e7217b17a release 2020.12.12 2020-12-12 07:11:32 +07:00
Sergey M․ 78b3e4d2e7 release 2020.12.09 2020-12-09 04:27:53 +07:00
Sergey M․ 072adab987 release 2020.12.07 2020-12-07 02:05:04 +07:00
Sergey M․ fd5e5af703 release 2020.12.05 2020-12-05 03:41:30 +07:00
Sergey M․ 9ff667f26c release 2020.12.02 2020-12-02 01:39:09 +07:00
Sergey M․ f8361daa6b release 2020.11.29 2020-11-29 13:54:30 +07:00
Sergey M․ 6f495a5525 release 2020.11.26 2020-11-26 03:07:21 +07:00
Sergey M․ 89cef3ed0c release 2020.11.24 2020-11-24 00:24:56 +07:00
Sergey M․ c7f71a7102 release 2020.11.21.1 2020-11-22 00:00:56 +07:00
Sergey M․ 89bf39b675 release 2020.11.21 2020-11-21 23:57:32 +07:00
Sergey M․ 4be1df33b3 release 2020.11.19 2020-11-19 05:24:23 +07:00
Sergey M․ 574ba8b950 release 2020.11.18 2020-11-18 04:17:08 +07:00
Sergey M․ 853fd31b84 release 2020.11.17 2020-11-17 04:01:43 +07:00
Sergey M․ b2cdf7473d Add Philipp's GPG key last signed release date 2020-11-16 21:39:47 +07:00
Sergey M․ da56601790 Actualize GPG keys section 2020-11-16 21:34:57 +07:00
Sergey M․ aeb93a55d9 release 2020.11.12 2020-11-16 21:27:43 +07:00
Sergey M․ 13423a0949 release 2020.11.01.1 2020-11-16 21:27:43 +07:00
Sergey M․ 6493199602 release 2020.11.01 2020-11-16 21:27:43 +07:00
Chih-Hsuan Yen ed3623e794 Remove references for donations for legal concerns.
Closes: https://github.com/ytdl-org/youtube-dl/issues/15194
Closes: https://github.com/ytdl-org/youtube-dl/issues/2524
2020-09-26 00:21:42 +08:00
Philipp Hagemeister c5c0ca9a17 Mark myself as inactive
Due to legal reasons, I no longer can be affiliated with the youtube-dl project.
2020-09-25 00:33:48 +02:00
Sergey M․ 73aafe6587 release 2020.09.20 2020-09-20 12:32:23 +07:00
Sergey M․ e9294b3cd0 release 2020.09.14 2020-09-14 03:38:57 +07:00
Sergey M․ 3ca6e38c3e release 2020.09.06 2020-09-06 13:02:12 +07:00
Sergey M․ 70514be571 release 2020.07.28 2020-07-28 05:14:51 +07:00
Sergey M․ 1b2524162f release 2020.06.16.1 2020-06-16 06:23:50 +07:00
Sergey M․ 1b0ccbc9d3 release 2020.06.16 2020-06-16 02:55:30 +07:00
Sergey M․ ae70e648d7 release 2020.06.06 2020-06-06 01:53:37 +07:00
Sergey M․ eb06cd75f1 release 2020.05.29 2020-05-29 03:36:59 +07:00
Sergey M․ a1fb6467a7 release 2020.05.08 2020-05-08 18:12:50 +07:00
Sergey M․ ccddbf1d38 release 2020.05.03 2020-05-03 00:07:22 +07:00
Sergey M․ 1c3a449f5f release 2020.03.24 2020-03-24 03:16:14 +07:00
Sergey M․ 26725aae4e release 2020.03.08 2020-03-08 18:30:27 +07:00
Sergey M․ 861860d6d8 release 2020.03.06 2020-03-06 00:27:17 +07:00
Sergey M․ 051cd5a534 release 2020.03.01 2020-03-01 20:13:04 +07:00
Sergey M․ 74a4ae8fd5 release 2020.02.16 2020-02-16 22:45:24 +07:00
Sergey M․ 86b3bc6bb8 release 2020.01.24 2020-01-24 04:18:39 +07:00
Sergey M․ 9020751c99 release 2020.01.15 2020-01-15 01:39:46 +07:00
Sergey M․ 6424e27c16 release 2020.01.01 2020-01-01 05:26:26 +07:00
Sergey M․ b8e1172d6c release 2019.12.25 2019-12-25 01:18:37 +07:00
Sergey M․ 69a953d6b4 release 2019.11.28 2019-11-28 23:27:18 +07:00
Sergey M․ 1dd56efcbd release 2019.11.22 2019-11-22 01:26:08 +07:00
Sergey M․ a013159360 release 2019.11.05 2019-11-05 05:34:36 +07:00
Sergey M․ 4f9877e04a release 2019.10.29 2019-10-29 06:14:08 +07:00
Sergey M․ b8cd091fab release 2019.10.22 2019-10-22 00:10:44 +07:00
Sergey M․ 95eeda441b release 2019.10.16 2019-10-16 03:28:22 +07:00
Sergey M․ 5e66f5010e release 2019.09.28 2019-09-28 00:32:51 +07:00
Sergey M․ 456fb91a96 release 2019.09.12.1 2019-09-12 03:02:00 +07:00
Sergey M․ 0a323b22e1 release 2019.09.12 2019-09-12 01:53:14 +07:00
Sergey M․ f8234fe551 release 2019.09.01 2019-09-01 03:34:50 +07:00
Sergey M․ ad1040b7b4 Add links to GPG keys 2019-09-01 03:30:14 +07:00
Sergey M․ 534772c742 release 2019.08.13 2019-08-13 23:20:50 +07:00
Sergey M․ 847f6fe89f release 2019.08.02 2019-08-02 05:41:41 +07:00
Sergey M․ 6c421d7698 release 2019.07.30 2019-07-30 09:45:52 +07:00
Sergey M․ 198f635221 release 2019.07.27 2019-07-27 03:47:02 +07:00
Sergey M․ f5c004598b release 2019.07.16 2019-07-16 00:03:58 +07:00
Sergey M․ 3c2d79f7f0 release 2019.07.14 2019-07-14 03:16:51 +07:00
Sergey M․ 84d88ccaa2 release 2019.07.12 2019-07-12 00:45:57 +07:00
Sergey M․ 4cd1f2ac10 release 2019.07.02 2019-07-02 01:11:40 +07:00
Sergey M․ 315216bb83 release 2019.06.27 2019-06-27 23:59:22 +07:00
Sergey M․ a60d0a4a55 release 2019.06.21 2019-06-21 23:06:06 +07:00
ealgase 6090852410 Update link to GitHub issues page (#21409)
Have people pick an issue template instead of creating an empty issue
2019-06-18 01:24:09 +07:00
Sergey M․ d49c19762a release 2019.06.08 2019-06-08 03:49:28 +07:00
Sergey M․ d725e72738 release 2019.05.20 2019-05-20 23:31:52 +07:00
Sergey M․ e1c2436106 release 2019.05.11 2019-05-11 06:09:44 +07:00
Sergey M․ 8092594ed6 release 2019.04.30 2019-04-30 06:14:33 +07:00
Sergey M․ aab797009d release 2019.04.24 2019-04-24 10:07:57 +07:00
Sergey M․ 70d4271b2b release 2019.04.17 2019-04-17 01:04:32 +07:00
Sergey M․ e76bf566e7 release 2019.04.07 2019-04-07 04:21:57 +07:00
Sergey M․ 64c0b8c091 release 2019.04.01 2019-04-01 23:56:54 +07:00
Sergey M․ eab897a77b release 2019.03.18 2019-03-18 01:52:59 +07:00
Sergey M․ 04cd51a0d2 Start moving to ytdl-org 2019-03-11 04:02:00 +07:00
Sergey M․ 366611a433 release 2019.03.09 2019-03-09 02:55:40 +07:00
Sergey M․ 2cdb4cbda8 release 2019.03.01 2019-03-01 01:05:49 +07:00
Sergey M․ b7c4159cf4 release 2019.02.18 2019-02-18 02:13:07 +07:00
Sergey M․ 776ab5d197 release 2019.02.08 2019-02-08 01:14:34 +07:00
Sergey M․ c8c49ed9f2 release 2019.01.30.1 2019-01-30 06:21:19 +07:00
Sergey M․ 8f784279fa release 2019.01.30 2019-01-30 00:10:39 +07:00
Sergey M․ 9efd7102bf release 2019.01.27 2019-01-27 21:30:06 +07:00
Sergey M․ d8ed44d0c5 release 2019.01.24 2019-01-24 01:47:59 +07:00
Sergey M․ f8c035788c release 2019.01.23 2019-01-23 04:49:04 +07:00
Sergey M․ 9ffe8f3881 release 2019.01.17 2019-01-17 10:29:19 +07:00
Sergey M․ dbf36b0f0d release 2019.01.16 2019-01-16 02:25:56 +07:00
Sergey M․ 3d818b9608 release 2019.01.10 2019-01-10 23:33:51 +07:00
Sergey M․ 33479e1148 release 2019.01.02 2019-01-02 23:54:41 +07:00
Sergey M․ 80a8975990 release 2018.12.31 2019-01-01 00:02:02 +07:00
Sergey M․ 025607be72 release 2018.12.17 2018-12-17 05:39:47 +07:00
Sergey M․ 0780a7264f release 2018.12.09 2018-12-09 23:13:41 +07:00
Sergey M․ b58b254a97 release 2018.12.03 2018-12-03 00:12:07 +07:00
Sergey M․ bc966de080 release 2018.11.23 2018-11-23 00:18:34 +07:00
Sergey M․ cbee43ed19 release 2018.11.18 2018-11-18 00:13:43 +07:00
Sergey M․ 882e952aef release 2018.11.07 2018-11-07 01:40:08 +07:00
Sergey M․ 5f154c6cea release 2018.11.03 2018-11-03 02:59:23 +07:00
Sergey M․ eb6f7c190b release 2018.10.29 2018-10-29 00:41:13 +07:00
Sergey M․ c2a2a95eee release 2018.10.05 2018-10-05 02:33:34 +07:00
Sergey M․ 33c2f66cce release 2018.09.26 2018-09-26 12:00:35 +07:00
Sergey M․ 7c9892610d release 2018.09.18 2018-09-18 01:48:40 +07:00
Sergey M․ 14a0b8b228 release 2018.09.10 2018-09-10 02:50:48 +07:00
Sergey M․ d5c28fe83a release 2018.09.08 2018-09-08 03:44:54 +07:00
Sergey M․ c215f09b95 release 2018.09.01 2018-09-01 18:42:18 +07:00
Sergey M․ e95b4e63a0 release 2018.08.28 2018-08-28 03:13:04 +07:00
Sergey M․ 830431d0d8 release 2018.08.22 2018-08-22 02:34:36 +07:00
Sergey M․ e10516b65d release 2018.08.04 2018-08-04 01:25:44 +07:00
Sergey M․ 3651ec647c release 2018.07.29 2018-07-29 07:04:22 +07:00
Sergey M․ 31027fac78 release 2018.07.21 2018-07-21 21:02:27 +07:00
Sergey M․ dd13bb2901 release 2018.07.10 2018-07-10 02:11:28 +07:00
Sergey M․ 1ef6d64f84 release 2018.07.04 2018-07-04 05:01:26 +07:00
Sergey M․ ea0af571a2 release 2018.06.25 2018-06-25 02:28:19 +07:00
Sergey M․ b9f6f5400b release 2018.06.19 2018-06-19 23:18:09 +07:00
Sergey M․ a6871badf8 release 2018.06.18 2018-06-18 01:36:23 +07:00
Sergey M․ 9cb5e51de0 release 2018.06.14 2018-06-14 01:27:01 +07:00
Sergey M․ 76dbdca39f release 2018.06.11 2018-06-11 01:59:24 +07:00
Sergey M․ bef98ad2f4 release 2018.06.04 2018-06-04 02:43:51 +07:00
Sergey M․ 3a8ea8d17a Actualize copyrights 2018-06-04 02:39:30 +07:00
Sergey M․ efe19c0d37 release 2018.06.02 2018-06-02 01:53:07 +07:00
Sergey M․ 7db2ace54b release 2018.05.30 2018-05-30 21:56:13 +07:00
Sergey M․ 610d07eca7 release 2018.05.26 2018-05-26 13:04:23 +07:00
Sergey M․ cff7ad06d7 release 2018.05.18 2018-05-18 00:34:43 +07:00
Sergey M․ 493beb72af release 2018.05.09 2018-05-09 00:38:22 +07:00
Sergey M․ 0f2ff4f2e2 release 2018.05.01 2018-05-01 03:41:20 +07:00
Sergey M․ b9f748bdcb release 2018.04.25 2018-04-25 02:03:29 +07:00
Sergey M․ c94a4a7d3f release 2018.04.16 2018-04-16 01:11:13 +07:00
Sergey M․ 8e6efd6191 release 2018.04.09 2018-04-09 01:21:26 +07:00
Sergey M․ 99b8fd6cd3 release 2018.04.03 2018-04-03 00:28:34 +07:00
Sergey M․ f2411c698b release 2018.03.26.1 2018-03-26 22:33:42 +07:00
Sergey M․ 63e1223703 release 2018.03.26 2018-03-26 22:27:17 +07:00
Sergey M․ 2dd46e74a2 release 2018.03.20 2018-03-20 01:58:01 +07:00
Sergey M․ 2d59dbf140 release 2018.03.14 2018-03-14 22:51:48 +07:00
Sergey M․ 0ea14737af release 2018.03.10 2018-03-10 04:48:00 +07:00
Sergey M․ b8b7dbbaef release 2018.03.03 2018-03-03 01:38:48 +07:00
Sergey M․ 40c0ea163e release 2018.02.26 2018-02-26 04:25:23 +07:00
Sergey M․ 0e9e748a01 release 2018.02.25 2018-02-25 20:53:48 +07:00
Sergey M․ 540d4d0308 release 2018.02.22 2018-02-22 23:52:36 +07:00
Sergey M․ 679abbc99e release 2018.02.11 2018-02-11 22:33:31 +07:00
Sergey M․ c291983979 release 2018.02.08 2018-02-08 23:41:34 +07:00
Sergey M․ 42f75d4d45 release 2018.02.04 2018-02-04 08:04:48 +07:00
Sergey M․ 929045923f release 2018.02.03 2018-02-03 23:46:12 +07:00
Sergey M․ 3fc2784af8 release 2018.01.27 2018-01-27 23:46:12 +07:00
Sergey M․ 2c2dd943e0 release 2018.01.21 2018-01-21 21:27:47 +07:00
Sergey M․ e655f10673 release 2018.01.18 2018-01-18 23:43:45 +07:00
Sergey M․ 49aea39b26 release 2018.01.14 2018-01-14 00:15:39 +07:00
Sergey M․ 55a35ce9a1 release 2018.01.07 2018-01-07 23:54:06 +07:00
Sergey M․ 8457b78f9d release 2017.12.31 2017-12-31 04:32:33 +07:00
Sergey M․ 23e4d4fee3 release 2017.12.28 2017-12-28 23:14:59 +07:00
Sergey M․ 81153fdc24 release 2017.12.23 2017-12-23 21:26:27 +07:00
Sergey M․ f7644f0ffd release 2017.12.14 2017-12-14 05:21:18 +07:00
Sergey M․ 4a79deb63d release 2017.12.10 2017-12-10 23:20:52 +07:00
Sergey M․ 4e748007fc release 2017.12.02 2017-12-02 21:36:37 +07:00
Sergey M․ 0bc87bb732 release 2017.11.26 2017-11-26 21:51:15 +07:00
Sergey M․ 33db337845 release 2017.11.15 2017-11-15 00:21:39 +07:00
Sergey M․ 0f2f505c2f release 2017.11.06 2017-11-06 22:43:04 +07:00
Sergey M․ 71bff58a00 release 2017.10.29 2017-10-29 07:24:53 +07:00
Sergey M․ 2a11c83e32 release 2017.10.20 2017-10-20 23:42:43 +07:00
Sergey M․ f6a68a76d3 release 2017.10.15.1 2017-10-15 06:18:34 +07:00
Sergey M․ d451428eb0 release 2017.10.15 2017-10-15 02:28:59 +07:00
Sergey M․ 004938f463 release 2017.10.12 2017-10-12 01:08:25 +07:00
Sergey M․ d810a3fd73 release 2017.10.07 2017-10-07 05:04:53 +07:00
Sergey M․ 0b4bb07d96 release 2017.10.01 2017-10-01 21:56:35 +07:00
Sergey M․ 7033a5c718 release 2017.09.24 2017-09-24 00:24:55 +07:00
Sergey M․ 19d55d19f1 release 2017.09.15 2017-09-15 21:50:11 +07:00
Sergey M․ a17cf2f21e release 2017.09.11 2017-09-11 03:32:37 +07:00
Sergey M․ 0559e642f3 release 2017.09.10 2017-09-10 22:21:15 +07:00
Sergey M․ 879f4b5a4b release 2017.09.02 2017-09-02 01:10:22 +07:00
Sergey M․ f1c88434fe release 2017.08.27.1 2017-08-27 06:11:35 +07:00
Sergey M․ 329002a07d release 2017.08.27 2017-08-27 04:30:22 +07:00
Sergey M․ 0bd3d4f43b release 2017.08.23 2017-08-23 23:25:09 +07:00
Sergey M․ 0d842f0931 release 2017.08.18 2017-08-18 01:07:28 +07:00
Sergey M․ 7ffb188d0e release 2017.08.13 2017-08-13 09:00:21 +07:00
Sergey M․ 53653526df release 2017.08.09 2017-08-09 23:54:16 +07:00
Sergey M․ 3f7778cff5 release 2017.08.06 2017-08-06 09:07:41 +07:00
Sergey M․ f502243adb release 2017.07.30.1 2017-07-30 20:49:10 +07:00
Sergey M․ 551e77c1cd release 2017.07.23 2017-07-23 01:10:58 +07:00
Sergey M․ 234fc749eb release 2017.07.15 2017-07-15 07:38:20 +07:00
Sergey M․ 3979f9d91b Actualize about page 2017-07-15 07:25:53 +07:00
Sergey M․ 2baebebe4a release 2017.07.09 2017-07-09 20:18:41 +07:00
Sergey M․ d0cd4e653b release 2017.07.02 2017-07-02 20:18:56 +07:00
Sergey M․ 4dcb6bc04a release 2017.06.25 2017-06-25 05:17:55 +07:00
Sergey M․ 78844ace39 release 2017.06.23 2017-06-23 02:15:01 +07:00
Sergey M․ dcfd9d7a45 release 2017.06.18 2017-06-18 00:18:41 +07:00
Sergey M․ dccd806cb3 release 2017.06.12 2017-06-12 02:25:02 +07:00
Sergey M․ 4096a0d66f release 2017.06.05 2017-06-05 00:49:58 +07:00
Sergey M․ 76f8048076 release 2017.05.29 2017-05-29 00:43:56 +07:00
Sergey M․ 2742d23142 release 2017.05.26 2017-05-26 22:47:49 +07:00
Sergey M․ 5f170b1bda release 2017.05.23 2017-05-23 00:19:45 +07:00
Sergey M․ bf10513151 release 2017.05.18.1 2017-05-18 23:01:39 +07:00
Sergey M․ 3b2623455b release 2017.05.18 2017-05-18 22:36:12 +07:00
Sergey M․ 48fb22678c release 2017.05.14 2017-05-14 07:40:21 +07:00
Sergey M․ 28b168333b release 2017.05.09 2017-05-09 04:22:36 +07:00
Sergey M․ 253c51a16e release 2017.05.07 2017-05-07 04:53:26 +07:00
Sergey M․ 38de738253 release 2017.05.01 2017-05-01 01:42:55 +07:00
Sergey M․ 098929c2c6 release 2017.04.28 2017-04-28 18:31:43 +07:00
Sergey M․ b876a9cd72 release 2017.04.26 2017-04-26 00:08:50 +07:00
Sergey M․ 629dc1892f release 2017.04.17 2017-04-17 00:48:58 +07:00
Sergey M․ 4b8c87e5ae release 2017.04.16 2017-04-16 01:51:15 +07:00
Sergey M․ 83a5be5c78 release 2017.04.15 2017-04-15 01:41:40 +07:00
Sergey M․ 4e0652e5fc release 2017.04.14 2017-04-14 00:33:59 +07:00
Sergey M․ 54ebda6963 release 2017.04.11 2017-04-11 02:20:05 +07:00
Sergey M․ a9af16af9d release 2017.04.09 2017-04-09 00:03:53 +07:00
Sergey M․ 59f724af05 release 2017.04.03 2017-04-03 03:56:26 +07:00
Sergey M․ da53aa217d release 2017.04.02 2017-04-02 02:40:50 +07:00
Sergey M․ 9b1a20166b release 2017.03.26 2017-03-26 08:13:15 +07:00
Sergey M․ fb6696ca3a release 2017.03.24 2017-03-24 00:26:02 +07:00
Sergey M․ 112ed9c7ab release 2017.03.22 2017-03-22 02:49:04 +07:00
Sergey M․ 14d7ce7a21 release 2017.03.20 2017-03-20 00:09:38 +07:00
Sergey M․ 1cabc6acc3 release 2017.03.16 2017-03-16 22:44:31 +07:00
Sergey M․ e327cee999 release 2017.03.15 2017-03-15 02:04:31 +07:00
Sergey M․ 366ab6fbd4 release 2017.03.10 2017-03-10 23:29:18 +07:00
Sergey M․ 69d33a207a release 2017.03.07 2017-03-07 04:00:57 +07:00
Sergey M․ af016730ce release 2017.03.06 2017-03-06 04:06:16 +07:00
Sergey M․ 92541af62c release 2017.03.05 2017-03-05 02:25:16 +07:00
Sergey M․ b2066bc974 release 2017.03.02 2017-03-03 00:21:47 +07:00
Sergey M․ dd6c468984 release 2017.02.28 2017-03-01 00:14:41 +07:00
Sergey M․ 0202d38902 release 2017.02.27 2017-02-27 23:30:02 +07:00
Sergey M․ 83b62c9084 release 2017.02.24.1 2017-02-24 22:01:27 +07:00
Sergey M․ a428893aba release 2017.02.24 2017-02-24 06:11:14 +07:00
Sergey M․ ed83a1aefb release 2017.02.22 2017-02-22 23:52:35 +07:00
Sergey M․ e9a4b18b92 release 2017.02.21 2017-02-21 23:50:31 +07:00
Sergey M․ f4b623972c release 2017.02.17 2017-02-18 00:02:14 +07:00
Sergey M․ da22904fb0 release 2017.02.16 2017-02-16 00:11:50 +07:00
Sergey M․ 15751f4b67 release 2017.02.14 2017-02-14 01:11:58 +07:00
Sergey M․ 797a77034c release 2017.02.11 2017-02-11 03:25:44 +07:00
Sergey M․ f339ed8700 release 2017.02.10 2017-02-10 01:29:30 +07:00
Sergey M․ b3b47f32a8 release 2017.02.07 2017-02-07 02:06:54 +07:00
Sergey M․ e48688b313 release 2017.02.04.1 2017-02-04 23:28:16 +07:00
Sergey M․ 0696cdc164 release 2017.02.04 2017-02-04 23:00:00 +07:00
Sergey M․ 4f0a956f84 release 2017.02.01 2017-02-01 03:22:17 +07:00
Sergey M․ 932b2a23f1 release 2017.01.31 2017-01-31 22:26:42 +07:00
Sergey M․ efcd0e8d13 release 2017.01.29 2017-01-29 13:23:27 +07:00
Sergey M․ 0f766d3382 release 2017.01.28 2017-01-28 00:36:01 +07:00
Sergey M․ 9f85dd5863 release 2017.01.25 2017-01-25 23:37:51 +07:00
Sergey M․ c445b0e36c release 2017.01.24 2017-01-24 03:00:59 +07:00
Sergey M․ 92fb683c67 release 2017.01.22 2017-01-22 19:01:16 +07:00
Sergey M․ d549f3d89e release 2017.01.18 2017-01-18 23:11:56 +07:00
Sergey M․ 51feebce2a release 2017.01.16 2017-01-16 23:46:07 +07:00
Sergey M․ 38438fdf67 release 2017.01.14 2017-01-14 07:33:02 +07:00
Sergey M․ 8999c1e5ca release 2017.01.10 2017-01-10 21:31:15 +07:00
Sergey M․ 4b53472d1a release 2017.01.08 2017-01-08 21:00:21 +07:00
Sergey M․ 9655675e93 release 2017.01.05 2017-01-05 04:12:15 +07:00
Sergey M․ 56c3abce9a release 2017.01.02 2017-01-02 23:57:04 +07:00
Sergey M․ b7cf13240d release 2016.12.31 2017-01-01 00:00:44 +07:00
Sergey M․ 8454ae5c66 release 2016.12.22 2016-12-22 22:54:48 +07:00
Sergey M․ 89155cba2f release 2016.12.20 2016-12-20 22:41:33 +07:00
Sergey M․ d6210cc567 release 2016.12.18 2016-12-18 19:52:37 +07:00
Sergey M․ 64368043c2 release 2016.12.15 2016-12-15 21:18:40 +07:00
Sergey M․ 9afe56446e release 2016.12.12 2016-12-12 01:46:48 +07:00
Sergey M․ e58db47e88 release 2016.12.09 2016-12-09 02:48:10 +07:00
Sergey M․ b3fce8f4b0 release 2016.12.01 2016-12-01 00:16:55 +07:00
Sergey M․ bbc77dc77b release 2016.11.27 2016-11-27 20:07:45 +07:00
Sergey M․ 5dd9c9bd8e release 2016.11.22 2016-11-22 22:34:14 +07:00
Sergey M․ 872e22ef7a release 2016.11.18 2016-11-18 00:27:06 +07:00
Sergey M․ b70620141d release 2016.11.14.1 2016-11-14 02:49:51 +07:00
Sergey M․ 5abd12d6db release 2016.11.08.1 2016-11-08 22:32:44 +07:00
Sergey M․ 0d64f775fd release 2016.11.08 2016-11-08 22:13:07 +07:00
Sergey M․ 498a616957 release 2016.11.04 2016-11-04 22:10:57 +07:00
Sergey M․ df811195b3 release 2016.11.02 2016-11-02 02:41:14 +07:00
Sergey M․ 8a4416f196 release 2016.10.31 2016-10-31 01:38:45 +07:00
Sergey M․ 078a5ae930 release 2016.10.26 2016-10-26 19:57:26 +07:00
Sergey M․ 28bfe57d98 release 2016.10.25 2016-10-25 03:21:27 +07:00
Sergey M․ f35f2c3054 release 2016.10.21.1 2016-10-21 05:01:59 +07:00
Sergey M․ d979231c90 release 2016.10.21 2016-10-21 03:14:17 +07:00
Sergey M․ b408c2cee9 release 2016.10.19 2016-10-19 23:58:20 +07:00
Sergey M․ 2a230e0d14 release 2016.10.16 2016-10-16 03:26:09 +07:00
Sergey M․ 23aa1b6d8a release 2016.10.12 2016-10-12 21:32:32 +07:00
Sergey M․ a054e619cc release 2016.10.07 2016-10-07 22:27:15 +07:00
Sergey M․ a2a5e76628 release 2016.10.02 2016-10-02 15:59:38 +07:00
Sergey M․ b7538715d6 release 2016.09.27 2016-09-27 23:13:50 +07:00
Sergey M․ d3a2da730d release 2016.09.24 2016-09-24 02:18:35 +07:00
Sergey M․ 54d490ab70 release 2016.09.19 2016-09-19 03:00:23 +07:00
Sergey M․ c5647fb553 release 2016.09.18 2016-09-18 17:19:22 +07:00
Sergey M․ cd9433026d release 2016.09.15 2016-09-15 23:51:59 +07:00
Sergey M․ 09bb21c5c1 release 2016.09.11.1 2016-09-11 23:36:05 +07:00
Sergey M․ f50f62f3ba release 2016.09.11 2016-09-11 23:22:44 +07:00
Sergey M․ e0217ea0c7 release 2016.09.08 2016-09-08 23:49:54 +07:00
Sergey M․ 9515d34cdf Put donations info into separate paragraph 2016-09-08 23:44:37 +07:00
Philipp Hagemeister f8e043ccff Merge pull request #10590 from prayashm/patch-1
Add donations.html link
2016-09-08 14:55:53 +02:00
Prayash Mohapatra 55ae1a5152 Add donations.html link 2016-09-08 02:17:57 +05:30
Sergey M․ fff5d4c3da release 2016.09.04.1 2016-09-04 21:00:18 +07:00
Sergey M․ ae7c722607 release 2016.09.04 2016-09-04 20:54:02 +07:00
Sergey M․ 7bafd90591 release 2016.09.03 2016-09-03 01:49:22 +07:00
Sergey M․ 384c6af240 release 2016.08.31 2016-08-31 02:41:46 +07:00
Sergey M․ ca3d1c51dc release 2016.08.28 2016-08-28 07:25:37 +07:00
Sergey M․ f18c4ec060 release 2016.08.24.1 2016-08-24 10:13:08 +07:00
Sergey M․ 37f34abf6b release 2016.08.24 2016-08-24 01:41:06 +07:00
Philipp Hagemeister b65bb17fd9 highlight actual fingerprints
It has always been possible to generate keys with the same key ID (it's only 32 Bit, duh). There has now been a public demonstration of just that.
Do what we should have done ages ago by listing the full fingerprint only.
2016-08-22 01:26:41 +02:00
Sergey M․ 33f2f9f683 release 2016.08.22 2016-08-22 04:19:28 +07:00
Sergey M․ 9f87328418 release 2016.08.19 2016-08-19 00:17:23 +07:00
Sergey M․ b46638472a release 2016.08.17 2016-08-17 06:23:32 +07:00
Sergey M․ ddc28e92b9 release 2016.08.13 2016-08-13 23:19:51 +07:00
Sergey M․ 082742d195 release 2016.08.12 2016-08-12 00:24:30 +07:00
Philipp Hagemeister 310ec3b601 download.html.in: Remove outdated warning
No current webbrowser I am aware of has this behavior.
2016-08-09 20:03:20 +02:00
Sergey M․ dc27b9ef78 release 2016.08.10 2016-08-10 00:23:47 +07:00
Sergey M․ 99e1e39110 release 2016.08.07 2016-08-07 21:15:26 +07:00
Sergey M․ 5139edb775 release 2016.08.06 2016-08-06 01:25:42 +07:00
Sergey M․ 74cf4844c8 release 2016.08.01 2016-08-01 23:01:50 +07:00
Sergey M․ 22625eefbc release 2016.07.30 2016-07-30 14:47:34 +07:00
Sergey M․ 9b52314abf release 2016.07.28 2016-07-28 02:44:58 +07:00
Sergey M․ 3f6ea8989c release 2016.07.26.2 2016-07-26 23:59:39 +07:00
Sergey M․ ecd7dd9d08 release 2016.07.24 2016-07-24 11:41:33 +07:00
Sergey M․ c7bd93ab2f Actualize about page 2016-07-24 11:37:23 +07:00
Sergey M․ 10e07d485f release 2016.07.22 2016-07-22 23:13:47 +07:00
Sergey M․ 9d6f60a694 release 2016.07.17 2016-07-17 19:07:37 +07:00
Sergey M․ 3dbb634bf3 Use latest in download URLs 2016-07-17 18:56:36 +07:00
Sergey M․ 3533ba6d46 release 2016.07.16 2016-07-16 02:21:57 +07:00
Sergey M․ 252faa3af8 release 2016.07.13 2016-07-14 00:00:39 +07:00
Philipp Hagemeister 06da7aaca8 download.html: correct design 2016-07-12 00:15:59 +02:00
Philipp Hagemeister 55c68753df download.html: only use SHA256 sum
MD5 and to a lesser degree SHA1 are no longer useful to detect malicious modfication, so don't mention them.
Clarify that the numbers after the exe are hashsums.
Closes #10066
2016-07-12 00:15:17 +02:00
Sergey M․ 11e59ef04e release 2016.07.11 2016-07-11 03:19:00 +07:00
Sergey M․ b6b3380673 release 2016.07.09.2 2016-07-09 22:24:33 +07:00
Sergey M․ 9ebe17e80d release 2016.07.09.1 2016-07-09 10:08:07 +07:00
Sergey M․ 1559154b5a release 2016.07.09 2016-07-09 07:19:01 +07:00
Sergey M․ f84c714975 release 2016.07.07 2016-07-07 01:56:07 +07:00
Sergey M․ e1ae332b66 release 2016.07.06 2016-07-06 00:56:17 +07:00
Sergey M․ 51b27bbd59 release 2016.07.05 2016-07-05 06:35:15 +07:00
Sergey M․ c3eaebf2b3 release 2016.07.03.1 2016-07-03 21:31:18 +07:00
Sergey M․ 24ddfc3d4c release 2016.07.03 2016-07-03 03:21:10 +07:00
Philipp Hagemeister d894820391 Move @FiloSottile's key to historical 2016-07-01 22:12:56 +02:00
Sergey M․ 3ca7a40328 release 2016.07.02 2016-07-02 02:49:58 +07:00
Sergey M․ 7943fc726f release 2016.07.01 2016-07-01 04:01:45 +07:00
Sergey M․ e6c82a724d release 2016.06.30 2016-06-30 23:59:14 +07:00
Sergey M․ a029847fad release 2016.06.27 2016-06-27 23:12:15 +07:00
Sergey M․ 3aa66003a2 release 2016.06.26 2016-06-26 21:17:53 +07:00
Sergey M․ 0d208ed61d release 2016.06.25 2016-06-25 03:04:53 +07:00
Sergey M․ 7d32baaca9 release 2016.06.23.1 2016-06-23 09:44:24 +07:00
Sergey M․ 0b1a935eac release 2016.06.23 2016-06-23 04:31:07 +07:00
Sergey M․ ce64943931 release 2016.06.22 2016-06-22 23:46:10 +07:00
Sergey M․ 772283aa5f release 2016.06.20 2016-06-20 20:52:18 +07:00
Sergey M․ 5d5615f148 release 2016.06.19.1 2016-06-19 03:59:03 +07:00
Sergey M․ d47189bbcc release 2016.06.19 2016-06-19 02:33:32 +07:00
Sergey M․ 658975165e Add link to more sites 2016-06-18 22:12:24 +07:00
Sergey M․ d6d7600e37 Remove 'small' from description (Closes #9814) 2016-06-18 22:07:43 +07:00
Sergey M․ 2b60161e60 release 2016.06.18.1 2016-06-18 06:22:31 +07:00
Sergey M․ d7c814e4f7 release 2016.06.16 2016-06-16 22:52:30 +07:00
Sergey M․ 058c2daacc release 2016.06.14 2016-06-14 02:22:04 +07:00
Sergey M․ 145c9da564 release 2016.06.12 2016-06-12 12:08:33 +07:00
Sergey M․ 4cdb53c6ed release 2016.06.11.3 2016-06-11 08:35:40 +07:00
Sergey M․ 4c6805ceb2 release 2016.06.11.1 2016-06-11 03:02:13 +07:00
Sergey M․ dfb01371c8 release 2016.06.11 2016-06-11 02:44:49 +07:00
Sergey M․ af480e49ed Add -L to curl command line 2016-06-11 02:30:37 +07:00
Sergey M․ 8793251a03 release 2016.06.03 2016-06-03 23:27:48 +07:00
Sergey M․ 3d4970c6c0 release 2016.06.02 2016-06-02 01:21:51 +07:00
Sergey M․ 579ce0021e release 2016.05.30.2 2016-05-30 03:13:19 +07:00
Sergey M․ c063643e0f release 2016.05.30.1 2016-05-30 03:04:42 +07:00
Sergey M․ 1ab2908c7a release 2016.05.30 2016-05-30 01:19:32 +07:00
Sergey M․ d761e8a499 Clarify c runtime dependency 2016-05-30 00:54:48 +07:00
Sergey M․ 16a78ee8a8 Clarify Windows build 2016-05-29 12:42:10 +06:00
Sergey M․ a4084fc999 Add myself to GPG keys list 2016-05-29 12:25:17 +06:00
Philipp Hagemeister 27425e1e20 release 2016.05.21.2 2016-05-21 21:50:48 +02:00
Philipp Hagemeister 9f24d385e1 release 2016.05.16 2016-05-16 17:28:38 +02:00
Philipp Hagemeister 2b2f5d9156 release 2016.05.10 2016-05-10 09:14:08 +02:00
Philipp Hagemeister 4b15902432 release 2016.05.01 2016-05-01 10:30:29 +02:00
Philipp Hagemeister ef9ade0b77 release 2016.04.24 2016-04-24 17:09:44 +02:00
Philipp Hagemeister c11b84913a release 2016.04.19 2016-04-19 03:10:06 +02:00
Philipp Hagemeister 054156ac27 release 2016.04.13 2016-04-13 08:05:08 +02:00
Philipp Hagemeister 4388049201 release 2016.04.06 2016-04-06 15:16:29 +02:00
Philipp Hagemeister 737468e540 release 2016.04.05 2016-04-05 18:39:14 +02:00
Philipp Hagemeister e8c339da56 release 2016.04.01 2016-04-01 09:13:47 +02:00
Philipp Hagemeister 4555a7c83a release 2016.03.27 2016-03-27 17:00:27 +02:00
Philipp Hagemeister 9a71eb490e release 2016.03.26 2016-03-26 09:01:03 +01:00
Philipp Hagemeister 3d547b08c0 release 2016.03.25 2016-03-25 09:30:38 +01:00
Philipp Hagemeister 25982d3f66 release 2016.03.18 2016-03-18 11:46:46 +01:00
Philipp Hagemeister 74afb16e77 release 2016.03.14 2016-03-14 10:29:54 +01:00
Philipp Hagemeister 63e3ee4264 release 2016.03.06 2016-03-06 10:13:35 +01:00
Philipp Hagemeister fe10c160cc release 2016.03.01 2016-03-01 00:11:09 +01:00
Philipp Hagemeister c04b8cca69 release 2016.02.27 2016-02-27 21:41:57 +01:00
Philipp Hagemeister a3c2bdf818 release 2016.02.22 2016-02-22 12:01:27 +01:00
Philipp Hagemeister 8f8a03e36a release 2016.02.13 2016-02-13 08:30:15 +01:00
Philipp Hagemeister c1f884ce73 release 2016.02.10 2016-02-10 16:21:10 +01:00
Philipp Hagemeister 13437d26fa release 2016.02.09.1 2016-02-09 20:23:54 +01:00
Philipp Hagemeister 25fb0a671f release 2016.02.09 2016-02-09 13:01:38 +01:00
Philipp Hagemeister 7befbd830a release 2016.02.05.1 2016-02-05 15:19:14 +01:00
Philipp Hagemeister 56a6bfac2f release 2016.02.05 2016-02-05 11:07:33 +01:00
Philipp Hagemeister 4c13aed2ac release 2016.02.04 2016-02-04 13:40:48 +01:00
Philipp Hagemeister 854d1627da release 2016.02.01 2016-02-01 12:15:32 +01:00
Philipp Hagemeister f960ec7fad release 2016.01.31 2016-01-31 13:03:08 +01:00
Philipp Hagemeister d8a6bb81c0 release 2016.01.29 2016-01-29 12:24:08 +01:00
Philipp Hagemeister 168eb9c372 release 2016.01.27 2016-01-27 09:05:56 +01:00
Philipp Hagemeister 67ad5ea0d7 release 2016.01.23 2016-01-23 12:05:43 +01:00
Philipp Hagemeister 757043ab70 release 2016.01.15 2016-01-15 19:46:44 +01:00
Philipp Hagemeister 196c06f959 release 2016.01.14 2016-01-14 15:47:26 +01:00
Philipp Hagemeister fe8cbe9623 release 2016.01.09 2016-01-09 01:19:28 +01:00
Philipp Hagemeister 46f6a0dcdb release 2016.01.01 2016-01-01 12:21:17 +01:00
Philipp Hagemeister 1b3da21bcd release 2015.12.31 2015-12-31 16:57:33 +01:00
Philipp Hagemeister 7c765c45c9 release 2015.12.29 2015-12-29 11:05:50 +01:00
Philipp Hagemeister 217f29f44d release 2015.12.23 2015-12-23 14:08:19 +01:00
Philipp Hagemeister 411ef9fd0c release 2015.12.21 2015-12-21 11:46:41 +01:00
Philipp Hagemeister c096b6a83c release 2015.12.18 2015-12-18 14:25:26 +01:00
Philipp Hagemeister f5a5e29d2c release 2015.12.13 2015-12-13 10:56:18 +01:00
Philipp Hagemeister 6b71876402 release 2015.12.10 2015-12-10 17:07:19 +01:00
Philipp Hagemeister aaf061ce5e release 2015.12.09 2015-12-09 15:45:26 +01:00
Philipp Hagemeister 71e67c54d3 release 2015.12.06 2015-12-06 18:52:11 +01:00
Philipp Hagemeister 136d318592 release 2015.12.05 2015-12-05 16:09:27 +01:00
Philipp Hagemeister 111d1bdaeb release 2015.11.27.1 2015-11-27 16:43:48 +01:00
Philipp Hagemeister 07b956eeab release 2015.11.24 2015-11-24 07:49:46 +01:00
Philipp Hagemeister 7d94a5677f release 2015.11.23 2015-11-23 18:11:03 +01:00
Philipp Hagemeister 8633e60931 release 2015.11.21 2015-11-21 23:38:43 +01:00
Philipp Hagemeister da83d86935 release 2015.11.19 2015-11-19 15:40:08 +01:00
Philipp Hagemeister 157ddaf5c4 release 2015.11.18 2015-11-18 19:25:23 +01:00
Philipp Hagemeister 71dab9aee6 release 2015.11.15 2015-11-15 22:18:27 +01:00
Philipp Hagemeister ade87212d2 release 2015.11.13 2015-11-13 11:08:24 +01:00
Philipp Hagemeister abf90fe835 release 2015.11.10 2015-11-10 11:44:39 +01:00
Philipp Hagemeister a50ad865c5 release 2015.11.02 2015-11-02 16:24:38 +01:00
Philipp Hagemeister 5a00a85c62 release 2015.11.01 2015-11-01 14:22:57 +01:00
Philipp Hagemeister a158a7168e release 2015.10.24 2015-10-24 00:13:34 +02:00
Philipp Hagemeister ac132aee81 release 2015.10.23 2015-10-23 09:49:49 +02:00
Philipp Hagemeister 0791453d64 release 2015.10.18 2015-10-18 19:48:24 +02:00
Philipp Hagemeister 3dd2d8588b release 2015.10.16 2015-10-16 21:44:35 +02:00
Philipp Hagemeister 4b16f7be5b release 2015.10.13 2015-10-13 01:10:54 +02:00
Philipp Hagemeister e4c56e74a6 release 2015.10.12 2015-10-12 06:56:32 +02:00
Philipp Hagemeister 592d526e3e release 2015.10.09 2015-10-09 09:12:26 +02:00
Philipp Hagemeister f7d5b32507 release 2015.10.06.2 2015-10-06 23:50:03 +02:00
Philipp Hagemeister cde9823276 release 2015.10.06.1 2015-10-06 17:48:41 +02:00
Philipp Hagemeister c7ecb30755 release 2015.10.06 2015-10-06 09:16:37 +02:00
Philipp Hagemeister 7b7a810726 release 2015.09.28 2015-09-28 04:51:58 +02:00
Philipp Hagemeister bf98b012da release 2015.09.22 2015-09-22 22:53:10 +02:00
Philipp Hagemeister fa420d115d release 2015.09.09 2015-09-09 21:28:28 +02:00
Philipp Hagemeister 9caabdca83 release 2015.09.03 2015-09-03 12:35:51 +02:00
Philipp Hagemeister 4027267350 release 2015.08.28 2015-08-28 05:07:35 +02:00
Philipp Hagemeister 40cba3ae9a release 2015.08.23 2015-08-24 00:08:11 +02:00
Philipp Hagemeister 4dcb412869 release 2015.08.16.1 2015-08-16 23:52:09 +02:00
Philipp Hagemeister 9d55e73482 release 2015.08.16 2015-08-16 01:08:18 +02:00
Philipp Hagemeister a4f3acef97 release 2015.08.09 2015-08-09 20:18:19 +02:00
Philipp Hagemeister e74d2bdbc5 release 2015.08.06.1 2015-08-06 23:10:27 +02:00
Philipp Hagemeister d8196bece3 release 2015.07.28 2015-07-28 11:36:28 +02:00
Philipp Hagemeister 416f66a0b8 release 2015.07.21 2015-07-21 17:45:38 +02:00
Philipp Hagemeister a5d13c04d9 release 2015.07.18 2015-07-18 12:07:28 +02:00
Philipp Hagemeister b1a027002f release 2015.07.07 2015-07-07 10:45:03 +02:00
Philipp Hagemeister 87fa98037b release 2015.07.04 2015-07-04 09:38:09 +02:00
Philipp Hagemeister 3bb38bbbc5 release 2015.06.25 2015-06-25 07:46:57 +02:00
Philipp Hagemeister 9004185837 release 2015.06.15 2015-06-15 01:42:07 +02:00
Philipp Hagemeister adb380a355 Merge branch 'gh-pages' of github.com:rg3/youtube-dl into gh-pages 2015-06-04 21:59:19 +02:00
Philipp Hagemeister f1d3e95e46 release 2015.06.04.1 2015-06-04 21:56:50 +02:00
Philipp Hagemeister 9a75356870 release 2015.05.29 2015-05-29 08:14:46 +02:00
Sergey M. 1fc67b04d6 Clarify chmod command access permissions 2015-05-24 18:40:19 +06:00
Philipp Hagemeister 6685d1371f release 2015.05.20 2015-05-20 10:12:55 +02:00
Philipp Hagemeister 7ab18af783 release 2015.05.15 2015-05-15 10:30:06 +02:00
Philipp Hagemeister 36525e582b release 2015.05.10 2015-05-10 01:17:36 +02:00
Philipp Hagemeister 996790ebf8 release 2015.05.04 2015-05-04 15:16:16 +02:00
Philipp Hagemeister e75db9e70d release 2015.05.03 2015-05-03 22:44:47 +02:00
Philipp Hagemeister 70564bedb1 release 2015.04.28 2015-04-28 09:27:42 +02:00
Philipp Hagemeister 9717bdcc3d release 2015.04.26 2015-04-26 22:55:13 +02:00
Philipp Hagemeister 885c2259ec release 2015.04.17 2015-04-17 11:42:06 +02:00
Philipp Hagemeister 0882affb2e release 2015.04.09 2015-04-09 00:38:51 +02:00
Philipp Hagemeister d4317e2562 release 2015.04.03 2015-04-03 10:31:42 +02:00
Philipp Hagemeister 444be07f45 release 2015.03.28 2015-03-28 08:37:41 +01:00
Philipp Hagemeister a0ffcdb14c release 2015.03.24 2015-03-24 16:43:07 +01:00
Philipp Hagemeister a3c4b14e99 release 2015.03.18 2015-03-18 22:12:14 +01:00
Philipp Hagemeister 2548810ae1 release 2015.03.15 2015-03-15 19:42:28 +01:00
Philipp Hagemeister edf21705b7 release 2015.03.09 2015-03-09 03:08:48 +01:00
Philipp Hagemeister cac4d9ca02 release 2015.03.03.1 2015-03-03 14:04:17 +01:00
Philipp Hagemeister 801be27bf7 release 2015.03.03 2015-03-03 00:08:50 +01:00
Philipp Hagemeister c32a9ec29d release 2015.02.28 2015-02-28 21:28:20 +01:00
Philipp Hagemeister 6bcb3bb7a5 release 2015.02.26.2 2015-02-26 09:49:14 +01:00
Philipp Hagemeister 9dd5db7193 release 2015.02.26.1 2015-02-26 01:49:37 +01:00
Philipp Hagemeister 0b2374ea7e release 2015.02.26 2015-02-26 00:45:36 +01:00
Philipp Hagemeister 87ef91e888 release 2015.02.24.2 2015-02-24 16:37:49 +01:00
Philipp Hagemeister 81cb7c3f82 release 2015.02.24.1 2015-02-24 11:41:55 +01:00
Philipp Hagemeister b7fd00d68e release 2015.02.24 2015-02-24 11:32:25 +01:00
Philipp Hagemeister 01c432efcf release 2015.02.23.1 2015-02-23 18:56:21 +01:00
Philipp Hagemeister 540800e022 release 2015.02.23 2015-02-23 16:49:08 +01:00
Philipp Hagemeister b7c2f29c71 release 2015.02.21 2015-02-21 21:33:35 +01:00
Philipp Hagemeister 5f1e535937 release 2015.02.20 2015-02-20 23:29:08 +01:00
Philipp Hagemeister 31316b769c release 2015.02.19.3 2015-02-19 19:32:51 +01:00
Philipp Hagemeister 34779a9f20 release 2015.02.19.2 2015-02-19 01:47:14 +01:00
Philipp Hagemeister 4665572a61 release 2015.02.19.1 2015-02-19 01:08:30 +01:00
Philipp Hagemeister 25547d4e68 release 2015.02.19 2015-02-19 00:37:13 +01:00
Philipp Hagemeister 6d2840b147 release 2015.02.18.1 2015-02-18 11:03:11 +01:00
Philipp Hagemeister 6ea3d86cfe release 2015.02.18 2015-02-18 00:53:44 +01:00
Philipp Hagemeister 114d17529f release 2015.02.17.2 2015-02-17 17:40:26 +01:00
Philipp Hagemeister 597232528d release 2015.02.17 2015-02-17 17:31:00 +01:00
Philipp Hagemeister 4d1b121aa6 release 2015.02.16.1 2015-02-16 15:49:30 +01:00
Philipp Hagemeister 327906b652 release 2015.02.16 2015-02-16 04:55:10 +01:00
Philipp Hagemeister 776a127f38 release 2015.02.11 2015-02-11 19:07:08 +01:00
Philipp Hagemeister 9f0acce278 release 2015.02.10.5 2015-02-10 16:03:50 +01:00
Philipp Hagemeister 08f4c0f0e0 release 2015.02.10.4 2015-02-10 11:32:20 +01:00
Philipp Hagemeister 0103a02725 release 2015.02.10.3 2015-02-10 05:56:38 +01:00
Philipp Hagemeister 79379d02f3 release 2015.02.10.2 2015-02-10 03:36:45 +01:00
Philipp Hagemeister 2d2bd2a8cb release 2015.02.10.1 2015-02-10 01:56:52 +01:00
Philipp Hagemeister bb11b2fb3e release 2015.02.10 2015-02-10 01:24:01 +01:00
Philipp Hagemeister 071bec0e36 release 2015.02.09.3 2015-02-09 16:02:56 +01:00
Philipp Hagemeister 7fbd4db982 release 2015.02.09.2 2015-02-09 14:51:07 +01:00
Philipp Hagemeister 4e5165686d release 2015.02.09.1 2015-02-09 10:54:59 +01:00
Philipp Hagemeister 5525db3f74 release 2015.02.09 2015-02-09 10:33:02 +01:00
Philipp Hagemeister a5d09c457d release 2015.02.06 2015-02-06 14:49:03 +01:00
Philipp Hagemeister 3e88ea52e6 release 2015.02.04 2015-02-04 16:11:52 +01:00
Philipp Hagemeister 40fc4799f7 release 2015.02.03.1 2015-02-03 11:07:13 +01:00
Philipp Hagemeister cff0f7ded9 release 2015.02.03 2015-02-03 00:28:30 +01:00
Philipp Hagemeister 80dc055bf1 release 2015.02.02.5 2015-02-02 23:50:19 +01:00
Philipp Hagemeister e4e7579d0f release 2015.02.02.4 2015-02-02 23:41:52 +01:00
Philipp Hagemeister 683d41296c release 2015.02.02.2 2015-02-02 22:14:05 +01:00
Philipp Hagemeister 6169a90659 release 2015.02.02 2015-02-02 01:56:28 +01:00
Philipp Hagemeister 00ea5a500d release 2015.01.30.2 2015-01-30 04:49:09 +01:00
Philipp Hagemeister eb0846f1f0 release 2015.01.30.1 2015-01-30 04:02:43 +01:00
Philipp Hagemeister 2b11530bdb Replace documentation.html with README.md
This allows us to have all the current documentation in one place.
Closes #4817.
2015-01-30 03:01:19 +01:00
Philipp Hagemeister 2f6ff3c625 release 2015.01.25 2015-01-25 21:56:31 +01:00
Philipp Hagemeister b1b1bb29eb release 2015.01.23.4 2015-01-23 18:59:52 +01:00
Philipp Hagemeister b13efe451f release 2015.01.23.3 2015-01-23 12:21:28 +01:00
Philipp Hagemeister 0eb22525e7 release 2015.01.23.2 2015-01-23 11:24:42 +01:00
Philipp Hagemeister 1a2d700c8a release 2015.01.23.1 2015-01-23 00:35:58 +01:00
Philipp Hagemeister c7eab954b7 release 2015.01.23 2015-01-23 00:10:58 +01:00
Philipp Hagemeister 0fc90fb0ff release 2015.01.22 2015-01-22 13:11:14 +01:00
Philipp Hagemeister fdf7547735 release 2015.01.16 2015-01-16 14:26:02 +01:00
Philipp Hagemeister 03105f6854 release 2015.01.15.1 2015-01-15 22:46:27 +01:00
Philipp Hagemeister 41a49da1af release 2015.01.15 2015-01-15 12:50:30 +01:00
Philipp Hagemeister 3a863e1fdb release 2015.01.11 2015-01-11 17:52:27 +01:00
Philipp Hagemeister ef90868590 release 2015.01.10.2 2015-01-10 21:05:47 +01:00
Philipp Hagemeister 998259644e release 2015.01.10.1 2015-01-10 20:08:51 +01:00
Philipp Hagemeister febd9d6e84 release 2015.01.10 2015-01-10 05:54:30 +01:00
Philipp Hagemeister bb50007287 release 2015.01.09.2 2015-01-10 00:03:35 +01:00
Philipp Hagemeister fbcbaa08d2 release 2015.01.09.1 2015-01-09 21:35:36 +01:00
Philipp Hagemeister 79ae0d9359 release 2015.01.09 2015-01-09 20:24:35 +01:00
Philipp Hagemeister 73d6793ff4 release 2015.01.08 2015-01-08 16:21:40 +01:00
Philipp Hagemeister 2933146728 release 2015.01.07.2 2015-01-07 07:47:14 +01:00
Philipp Hagemeister 459c608b68 release 2015.01.07 2015-01-07 07:27:44 +01:00
Philipp Hagemeister 1b4bdeefe9 release 2015.01.05.1 2015-01-05 22:45:29 +01:00
Philipp Hagemeister 07f924bc45 release 2015.01.05 2015-01-05 18:56:02 +01:00
Philipp Hagemeister 0d17780e87 release 2015.01.04 2015-01-04 03:19:09 +01:00
Philipp Hagemeister d128f35310 Denote Python 3.2 support 2015-01-04 02:52:19 +01:00
Philipp Hagemeister 051e107eff Link to modern FAQ 2015-01-04 02:49:50 +01:00
Philipp Hagemeister 9c4ebf4970 Avoid mixed-content warnings 2015-01-04 02:46:28 +01:00
Philipp Hagemeister b59fb8d81b release 2015.01.03 2015-01-03 18:38:38 +01:00
Philipp Hagemeister d1f2600900 release 2015.01.02 2015-01-02 16:00:32 +01:00
Philipp Hagemeister e9260dbb31 release 2015.01.01 2015-01-01 21:51:17 +01:00
Philipp Hagemeister 868522e4c2 release 2014.12.17.2 2014-12-17 11:42:44 +01:00
Philipp Hagemeister 8149c54acf release 2014.12.17.1 2014-12-17 11:32:32 +01:00
Philipp Hagemeister 01ec54d121 release 2014.12.17 2014-12-17 10:57:14 +01:00
Philipp Hagemeister fa3d853f77 release 2014.12.16.2 2014-12-16 16:53:12 +01:00
Philipp Hagemeister 37d868f0f4 release 2014.12.16.1 2014-12-16 16:08:07 +01:00
Philipp Hagemeister 678d7bff51 release 2014.12.16 2014-12-16 00:33:55 +01:00
Philipp Hagemeister 7b86336325 release 2014.12.15 2014-12-15 01:42:54 +01:00
Philipp Hagemeister b8e8032f4d release 2014.12.14 2014-12-14 00:22:00 +01:00
Philipp Hagemeister 31d0cf05e0 release 2014.12.13.1 2014-12-13 23:55:05 +01:00
Philipp Hagemeister e3a3ac788f release 2014.12.13 2014-12-13 23:17:33 +01:00
Philipp Hagemeister 9bb483f879 release 2014.12.12.7 2014-12-12 18:29:19 +01:00
Philipp Hagemeister a1fa9761da release 2014.12.12.5 2014-12-12 17:48:39 +01:00
Philipp Hagemeister b831f149de release 2014.12.12.4 2014-12-12 17:21:10 +01:00
Philipp Hagemeister 4deb5d6900 release 2014.12.12.3 2014-12-12 16:51:21 +01:00
Philipp Hagemeister c191693e04 release 2014.12.12.2 2014-12-12 15:59:45 +01:00
Philipp Hagemeister 6e834f71b5 release 2014.12.12.1 2014-12-12 03:39:03 +01:00
Philipp Hagemeister 709a4eaca6 release 2014.12.10.3 2014-12-10 15:22:15 +01:00
Philipp Hagemeister 54526d3ff3 release 2014.12.10.2 2014-12-10 14:42:05 +01:00
Philipp Hagemeister 4f929b4877 release 2014.12.10.1 2014-12-10 13:27:56 +01:00
Philipp Hagemeister 2309c33451 release 2014.12.10 2014-12-10 12:26:40 +01:00
Philipp Hagemeister 7be418c432 release 2014.12.06.1 2014-12-06 00:52:04 +01:00
Philipp Hagemeister ac7b35363e release 2014.12.06 2014-12-06 00:47:31 +01:00
Philipp Hagemeister ff3bc15613 release 2014.12.04.2 2014-12-04 17:54:49 +01:00
Philipp Hagemeister eb5bc48718 release 2014.12.04.1 2014-12-04 17:04:49 +01:00
Philipp Hagemeister f57eec1bcb release 2014.12.04 2014-12-04 08:41:10 +01:00
Philipp Hagemeister 45162344b7 release 2014.12.03 2014-12-03 12:19:51 +01:00
Philipp Hagemeister e7250b59e1 release 2014.12.01 2014-12-01 17:33:02 +01:00
Philipp Hagemeister e7453bd649 release 2014.11.27 2014-11-27 16:07:17 +01:00
Philipp Hagemeister 2515aa0ab0 release 2014.11.26.4 2014-11-26 23:02:39 +01:00
Philipp Hagemeister 3e3977a554 release 2014.11.26.3 2014-11-26 22:18:22 +01:00
Philipp Hagemeister 82e4cbf19a release 2014.11.26.1 2014-11-26 22:05:41 +01:00
Philipp Hagemeister c64a67ccfd release 2014.11.26 2014-11-26 10:50:48 +01:00
Philipp Hagemeister 8c8b0e4ffd release 2014.11.25.1 2014-11-25 14:38:09 +01:00
Philipp Hagemeister 8238e31efb release 2014.11.25 2014-11-25 10:03:04 +01:00
Philipp Hagemeister 85ea5698b8 Merge branch 'gh-pages' of github.com:rg3/youtube-dl into gh-pages 2014-11-24 23:54:08 +01:00
Philipp Hagemeister 3742c04ee0 release 2014.11.24 2014-11-24 23:52:36 +01:00
Jaime Marquínez Ferrándiz e1a90e58d1 Merge pull request #4299 from crdx/patch-1
fix typo
2014-11-24 21:41:31 +01:00
Sean S 5e2e5b8a22 fix small typo 2014-11-24 20:06:26 +00:00
Philipp Hagemeister 9ce1f77204 release 2014.11.23.1 2014-11-23 10:57:16 +01:00
Philipp Hagemeister 34edc2b0b8 release 2014.11.23 2014-11-23 10:03:00 +01:00
Philipp Hagemeister d1bbe1e28b release 2014.11.21.1 2014-11-21 23:23:55 +01:00
Philipp Hagemeister 4bdc0e241a release 2014.11.21 2014-11-21 10:49:58 +01:00
Philipp Hagemeister ff764dd711 release 2014.11.20 2014-11-20 08:59:58 +01:00
Philipp Hagemeister 9077c895d9 release 2014.11.16 2014-11-16 00:54:37 +01:00
Philipp Hagemeister d3fd131e01 release 2014.11.15.1 2014-11-15 15:24:58 +01:00
Philipp Hagemeister 593a53026d release 2014.11.15 2014-11-15 11:15:23 +01:00
Philipp Hagemeister 890f6ffcdb release 2014.11.14 2014-11-14 22:39:23 +01:00
Philipp Hagemeister 0e5a26df53 release 2014.11.13.3 2014-11-13 16:31:57 +01:00
Philipp Hagemeister 7c10780356 release 2014.11.13.2 2014-11-13 16:25:36 +01:00
Philipp Hagemeister ed3c5f675b release 2014.11.13.1 2014-11-13 15:50:04 +01:00
Philipp Hagemeister d9089f9e69 release 2014.11.13 2014-11-13 10:03:13 +01:00
Philipp Hagemeister 50215c5106 release 2014.11.12.1 2014-11-12 11:47:33 +01:00
Philipp Hagemeister af596e7e2c release 2014.11.12 2014-11-12 09:17:46 +01:00
Philipp Hagemeister 901ac74b81 release 2014.11.09 2014-11-09 22:37:21 +01:00
Philipp Hagemeister 424f72d298 release 2014.11.04 2014-11-04 23:47:01 +01:00
Philipp Hagemeister a67cbf349c release 2014.11.02.1 2014-11-02 10:34:28 +01:00
Philipp Hagemeister c75740b5da release 2014.10.30 2014-10-30 10:18:45 +01:00
Philipp Hagemeister 1b7b087361 release 2014.10.29 2014-10-29 23:36:12 +01:00
Philipp Hagemeister b2ac1e6bd7 release 2014.10.27 2014-10-27 02:46:47 +01:00
Philipp Hagemeister 08011414c9 release 2014.10.26.2 2014-10-26 21:52:22 +01:00
Philipp Hagemeister e86358349a release 2014.10.26.1 2014-10-26 21:07:45 +01:00
Philipp Hagemeister da3fad69c5 release 2014.10.26 2014-10-26 17:37:09 +01:00
Philipp Hagemeister 9f783b25d1 release 2014.10.25 2014-10-25 00:47:51 +02:00
Philipp Hagemeister 31d51aa70f release 2014.10.24 2014-10-24 14:57:44 +02:00
Philipp Hagemeister 23c6d465ad release 2014.10.23 2014-10-23 20:24:40 +02:00
Philipp Hagemeister 20af98619c release 2014.10.18 2014-10-18 20:25:57 +02:00
Philipp Hagemeister e906eeae09 release 2014.10.15 2014-10-15 12:42:46 +02:00
Philipp Hagemeister 5ceedab0e8 release 2014.10.13 2014-10-13 10:20:12 +02:00
Philipp Hagemeister 7f19047270 release 2014.10.12 2014-10-12 22:31:09 +02:00
Philipp Hagemeister b9c4c1b640 release 2014.10.05.2 2014-10-05 22:19:14 +02:00
Philipp Hagemeister d55df49929 release 2014.10.05 2014-10-05 08:00:01 +02:00
Philipp Hagemeister 507e12d727 release 2014.10.02 2014-10-02 15:38:46 +02:00
Philipp Hagemeister 7b445bb0a0 Document config file location on Windows (#1881) 2014-09-29 21:58:41 +02:00
Philipp Hagemeister 57d91e2c31 release 2014.09.29.2 2014-09-29 04:53:29 +02:00
Philipp Hagemeister f16919ebad release 2014.09.29.1 2014-09-29 02:11:19 +02:00
Philipp Hagemeister 29a75387d7 release 2014.09.28.1 2014-09-28 12:19:10 +02:00
Philipp Hagemeister 757d2fff32 release 2014.09.28 2014-09-28 09:52:47 +02:00
Philipp Hagemeister c07ddd87a1 release 2014.09.25 2014-09-25 02:02:48 +02:00
Philipp Hagemeister 3579a6dbe0 release 2014.09.24.1 2014-09-24 14:19:05 +02:00
Philipp Hagemeister babe46018b release 2014.09.24 2014-09-24 11:16:45 +02:00
Philipp Hagemeister 72166059b3 release 2014.09.22 2014-09-22 13:11:04 +02:00
Philipp Hagemeister 9ce623c24d release 2014.09.19 2014-09-19 10:02:47 +02:00
Philipp Hagemeister 890a1cf917 release 2014.09.18 2014-09-18 18:49:04 +02:00
Philipp Hagemeister 08f60a6db5 release 2014.09.16.1 2014-09-16 23:38:36 +02:00
Philipp Hagemeister 78a7220c20 release 2014.09.16 2014-09-16 10:14:37 +02:00
Philipp Hagemeister b22048e3fc release 2014.09.15.1 2014-09-15 15:31:35 +02:00
Philipp Hagemeister c837fc59b8 release 2014.09.15 2014-09-15 15:16:34 +02:00
Philipp Hagemeister 97c9abd4b0 release 2014.09.14.3 2014-09-14 16:56:12 +02:00
Philipp Hagemeister 1b4bf0f3d1 release 2014.09.12 2014-09-12 08:01:28 +02:00
Philipp Hagemeister 914ff382d0 release 2014.09.10.1 2014-09-10 16:43:10 +02:00
Philipp Hagemeister 84794766aa release 2014.09.10 2014-09-10 12:42:39 +02:00
Philipp Hagemeister df24469c79 release 2014.09.06 2014-09-06 15:40:10 +02:00
Philipp Hagemeister f3a2b50b09 release 2014.09.04.3 2014-09-04 16:38:14 +02:00
Philipp Hagemeister e1f869e5e4 release 2014.09.04.1 2014-09-04 04:55:09 +02:00
Philipp Hagemeister 48edbf72f4 release 2014.09.04 2014-09-04 01:35:38 +02:00
Philipp Hagemeister 96217a7344 release 2014.09.01.2 2014-09-02 00:12:43 +02:00
Philipp Hagemeister d1603ead12 release 2014.09.01.1 2014-09-01 00:30:50 +02:00
Philipp Hagemeister 3236a3c603 release 2014.09.01 2014-09-01 00:10:27 +02:00
Philipp Hagemeister 34be9175a2 release 2014.08.29 2014-08-29 01:10:21 +02:00
Philipp Hagemeister cfe7713497 release 2014.08.28.2 2014-08-28 18:09:04 +02:00
Philipp Hagemeister b1f4e7a747 release 2014.08.28.1 2014-08-28 14:07:25 +02:00
Philipp Hagemeister 132b1532c6 release 2014.08.28 2014-08-28 01:44:00 +02:00
Philipp Hagemeister 12ca402bd7 release 2014.08.27.1 2014-08-27 02:40:40 +02:00
Philipp Hagemeister 65d1813840 release 2014.08.27 2014-08-27 01:47:30 +02:00
Philipp Hagemeister 667ef5ede4 release 2014.08.26 2014-08-26 21:34:32 +02:00
Philipp Hagemeister 62f1cbb88d release 2014.08.25.3 2014-08-25 18:42:51 +02:00
Philipp Hagemeister cf84511178 release 2014.08.25.2 2014-08-25 16:54:37 +02:00
Philipp Hagemeister 67de8f0589 release 2014.08.25 2014-08-25 09:42:26 +02:00
Philipp Hagemeister 778bfd76a6 release 2014.08.24.6 2014-08-24 15:24:02 +02:00
Philipp Hagemeister 365843a199 release 2014.08.24.5 2014-08-24 07:01:38 +02:00
Philipp Hagemeister 0326f6eda5 release 2014.08.24.4 2014-08-24 06:48:32 +02:00
Philipp Hagemeister b095a9bc3a release 2014.08.24.3 2014-08-24 05:37:59 +02:00
Philipp Hagemeister 64bdc95e11 release 2014.08.24.2 2014-08-24 04:55:13 +02:00
Philipp Hagemeister 2ed065729f release 2014.08.24.1 2014-08-24 03:30:56 +02:00
Philipp Hagemeister 60a010f665 release 2014.08.24 2014-08-24 02:49:20 +02:00
Philipp Hagemeister 803d3bd32d release 2014.08.23 2014-08-23 15:28:52 +02:00
Philipp Hagemeister deff9e0884 release 2014.08.22.3 2014-08-22 18:45:37 +02:00
Philipp Hagemeister 0345c8d777 release 2014.08.22.2 2014-08-22 03:19:39 +02:00
Philipp Hagemeister b3ebf44676 release 2014.08.22.1 2014-08-22 03:05:41 +02:00
Philipp Hagemeister df9f4d2baa release 2014.08.21.3 2014-08-21 18:07:19 +02:00
Philipp Hagemeister e073b8fa28 release 2014.08.21.2 2014-08-21 13:14:11 +02:00
Philipp Hagemeister d95287d2ae release 2014.08.21.1 2014-08-21 12:24:57 +02:00
Philipp Hagemeister b24b55c27b release 2014.08.10 2014-08-10 19:51:13 +02:00
Philipp Hagemeister 25beeb8dc4 release 2014.08.05 2014-08-05 17:24:39 +02:00
Philipp Hagemeister af50cac100 release 2014.08.02.1 2014-08-02 18:20:51 +02:00
Philipp Hagemeister 2709569cb2 release 2014.08.02 2014-08-02 12:33:22 +02:00
Philipp Hagemeister d5289eb78f release 2014.07.30 2014-07-30 09:57:28 +02:00
Philipp Hagemeister 289ff5644d release 2014.07.25.1 2014-07-25 10:52:25 +02:00
Philipp Hagemeister b466c5d28f release 2014.07.25 2014-07-25 07:08:57 +02:00
Philipp Hagemeister 423fba294a release 2014.07.24 2014-07-24 11:27:51 +02:00
Philipp Hagemeister d504be6d68 release 2014.07.23.2 2014-07-23 02:29:07 +02:00
Philipp Hagemeister 71bd78a193 release 2014.07.23.1 2014-07-23 01:33:40 +02:00
Philipp Hagemeister d0e59bf20d release 2014.07.23 2014-07-23 01:21:49 +02:00
Philipp Hagemeister ddc86a33dc release 2014.07.22 2014-07-22 17:04:25 +02:00
Philipp Hagemeister a513c01a24 release 2014.07.21 2014-07-21 18:14:01 +02:00
Philipp Hagemeister f6e1f2630d release 2014.07.20.2 2014-07-20 23:26:41 +02:00
Philipp Hagemeister c8855ec895 release 2014.07.20.1 2014-07-20 22:00:12 +02:00
Philipp Hagemeister 25bb51bca3 release 2014.07.20 2014-07-20 18:55:39 +02:00
Philipp Hagemeister 5eda0b4c08 release 2014.07.15 2014-07-15 23:06:12 +02:00
Philipp Hagemeister bd4a929996 fix an HTML error 2014-07-13 17:26:52 +02:00
Philipp Hagemeister db4ee49745 link list of supported sites on main page 2014-07-13 17:26:46 +02:00
Philipp Hagemeister 809804b1b0 Clarify that the youtube-dl exe works without Python (Fixes #3249) 2014-07-13 17:26:24 +02:00
Philipp Hagemeister 453ae702ee release 2014.07.11.3 2014-07-11 17:30:26 +02:00
Philipp Hagemeister 2fbb7eb190 release 2014.07.11.2 2014-07-11 13:38:40 +02:00
Philipp Hagemeister 0a0fc250dc release 2014.07.11.1 2014-07-11 11:58:15 +02:00
Philipp Hagemeister e299dbb8c9 release 2014.07.11 2014-07-11 10:53:48 +02:00
Philipp Hagemeister 1c6cd59a03 release 2014.07.10 2014-07-10 14:57:55 +02:00
Philipp Hagemeister b94fac1143 release 2014.06.26 2014-06-26 17:34:09 +02:00
Philipp Hagemeister 44caf6a435 release 2014.06.25 2014-06-25 21:36:29 +02:00
Philipp Hagemeister d62ea494d9 release 2014.06.24.1 2014-06-24 09:15:30 +02:00
Philipp Hagemeister 6581294d11 release 2014.06.19 2014-06-19 17:18:09 +02:00
Philipp Hagemeister 2cdbb0ea2e Merge branch 'gh-pages' of github.com:rg3/youtube-dl into gh-pages 2014-06-16 10:56:08 +02:00
Philipp Hagemeister 1d083917ef release 2014.06.16 2014-06-16 10:55:14 +02:00
Philipp Hagemeister 7b51ff76aa Merge pull request #3070 from EvanHahn/homebrew-instructions
Add Homebrew install instructions
2014-06-12 20:26:15 +02:00
Evan Hahn 2a1c4c2d37 Add Homebrew install instructions 2014-06-12 10:41:08 -07:00
Philipp Hagemeister c3cdb616f3 release 2014.06.09 2014-06-09 23:21:53 +02:00
Philipp Hagemeister 11aeec39d7 release 2014.06.07 2014-06-07 16:46:01 +02:00
Philipp Hagemeister 864a09fff0 release 2014.06.04 2014-06-04 06:52:39 +02:00
Philipp Hagemeister 8629db7f23 release 2014.06.02 2014-06-02 10:50:31 +02:00
Philipp Hagemeister 389588e362 release 2014.05.31.4 2014-05-31 20:48:00 +02:00
Philipp Hagemeister 20bb589883 release 2014.05.19 2014-05-19 11:57:22 +02:00
Philipp Hagemeister 081cc94583 release 2014.05.16.1 2014-05-16 15:57:29 +02:00
Philipp Hagemeister 3081d368bc release 2014.05.16 2014-05-16 12:20:34 +02:00
Philipp Hagemeister a67fe93cd6 release 2014.05.13 2014-05-13 10:25:12 +02:00
Philipp Hagemeister 9190a734e6 release 2014.05.12 2014-05-12 16:42:31 +02:00
Philipp Hagemeister ee5d951160 release 2014.05.05 2014-05-05 03:17:54 +02:00
Philipp Hagemeister 57f7d997aa release 2014.04.30.1 2014-04-30 10:14:35 +02:00
Philipp Hagemeister 524b6a2fd0 release 2014.04.30 2014-04-30 02:11:34 +02:00
Philipp Hagemeister 3228c709d4 release 2014.04.21.6 2014-04-21 16:20:52 +02:00
Philipp Hagemeister c78dff0119 release 2014.04.21.5 2014-04-21 16:00:19 +02:00
Philipp Hagemeister de13322e71 release 2014.04.21.4 2014-04-21 15:28:05 +02:00
Philipp Hagemeister 14af0080ea release 2014.04.21.3 2014-04-21 12:42:49 +02:00
Philipp Hagemeister 455f4dbd65 release 2014.04.21.2 2014-04-21 07:17:26 +02:00
Philipp Hagemeister db831975a2 release 2014.04.21.1 2014-04-21 06:40:19 +02:00
Philipp Hagemeister 0fb9d3e3f8 release 2014.04.21 2014-04-21 02:49:04 +02:00
Philipp Hagemeister 3612000f81 release 2014.04.19 2014-04-19 12:46:42 +02:00
Philipp Hagemeister 6773911609 release 2014.04.13 2014-04-13 03:27:36 +02:00
Philipp Hagemeister 783436dda9 release 2014.04.11.2 2014-04-11 09:49:02 +02:00
Philipp Hagemeister 685b357631 release 2014.04.11.1 2014-04-11 01:34:16 +02:00
Philipp Hagemeister 030c5d014a release 2014.04.07.4 2014-04-07 23:25:49 +02:00
Philipp Hagemeister 22a41b7d30 release 2014.04.07.3 2014-04-07 22:50:20 +02:00
Philipp Hagemeister 9667720e74 release 2014.04.07.2 2014-04-07 21:44:20 +02:00
Philipp Hagemeister 36152c3da7 release 2014.04.07.1 2014-04-07 15:46:26 +02:00
Philipp Hagemeister 52351c0372 release 2014.04.07 2014-04-07 13:49:05 +02:00
Philipp Hagemeister 9c0e70fd32 release 2014.04.04.7 2014-04-04 23:04:55 +02:00
Philipp Hagemeister e32838d54c release 2014.04.04.6 2014-04-04 22:51:49 +02:00
Philipp Hagemeister 2d2d9d1108 release 2014.04.04.5 2014-04-04 22:32:24 +02:00
Philipp Hagemeister 9c323f4926 release 2014.04.04.4 2014-04-04 22:21:38 +02:00
Philipp Hagemeister 2de3613cd7 release 2014.04.04.2 2014-04-04 02:38:36 +02:00
Philipp Hagemeister bbd7253743 release 2014.04.04.3 2014-04-04 02:15:41 +02:00
Philipp Hagemeister 5e6e2c1ac6 release 2014.04.04.1 2014-04-04 00:31:19 +02:00
Philipp Hagemeister f17a9ace3a release 2014.04.04 2014-04-04 00:10:34 +02:00
Philipp Hagemeister f7156ab56e release 2014.04.03.3 2014-04-03 16:25:04 +02:00
Philipp Hagemeister 693e0ae049 release 2014.04.03.2 2014-04-03 15:31:15 +02:00
Philipp Hagemeister 7b6e6131ad release 2014.04.03.1 2014-04-03 09:06:51 +02:00
Philipp Hagemeister 8e5e8656e0 release 2014.04.03 2014-04-03 06:15:28 +02:00
Philipp Hagemeister 38c43f6644 release 2014.04.02 2014-04-02 14:33:15 +02:00
Philipp Hagemeister e6c9e944ac release 2014.04.01.3 2014-04-01 13:20:58 +02:00
Philipp Hagemeister 7a22d25719 release 2014.04.01.2 2014-04-01 06:04:49 +02:00
Philipp Hagemeister 934e86ff0c release 2014.04.01.1 2014-04-01 00:27:55 +02:00
Philipp Hagemeister 68cba3e46a release 2014.04.01 2014-04-01 00:06:09 +02:00
Philipp Hagemeister 08d4cab829 release 2014.03.30.1 2014-03-30 16:04:42 +02:00
Philipp Hagemeister 2073acb594 release 2014.03.30 2014-03-30 07:28:27 +02:00
Philipp Hagemeister dcd600069e release 2014.03.29 2014-03-29 14:05:10 +01:00
Philipp Hagemeister 15d57b9673 release 2014.03.28 2014-03-28 23:18:09 +01:00
Philipp Hagemeister f79e8b7ab8 release 2014.03.27.1 2014-03-27 02:54:40 +01:00
Philipp Hagemeister c8b64cf1d6 release 2014.03.27 2014-03-27 02:26:02 +01:00
Philipp Hagemeister ea2dadfb5a release 2014.03.25.1 2014-03-25 14:30:40 +01:00
Philipp Hagemeister f3c9b0c286 release 2014.03.25 2014-03-25 04:06:07 +01:00
Philipp Hagemeister 65729455c7 release 2014.03.24.5 2014-03-24 23:26:34 +01:00
Philipp Hagemeister f7cc23f1e9 release 2014.03.24.4 2014-03-24 22:14:37 +01:00
Philipp Hagemeister 41e7dd23d1 release 2014.03.24.3 2014-03-24 17:15:13 +01:00
Philipp Hagemeister 9c7a1bbee9 release 2014.03.24.2 2014-03-24 15:03:47 +01:00
Philipp Hagemeister e76a774494 release 2014.03.24.1 2014-03-24 10:29:08 +01:00
Philipp Hagemeister e72711c9b0 release 2013.03.24.2 2014-03-24 02:28:53 +01:00
Philipp Hagemeister 9566442ef3 release 2013.03.24 2014-03-24 01:46:43 +01:00
Philipp Hagemeister 0e362aee7e release 2014.03.23 2014-03-23 16:09:31 +01:00
Philipp Hagemeister c65f61621c release 2014.03.21.5 2014-03-21 14:55:16 +01:00
Philipp Hagemeister 191c0f4e90 release 2014.03.21.3 2014-03-21 02:12:45 +01:00
Philipp Hagemeister 8b64d68089 release 2014.03.21.2 2014-03-21 01:44:34 +01:00
Philipp Hagemeister bb5a8bca6a release 2014.03.21.1 2014-03-21 01:22:30 +01:00
Philipp Hagemeister 2a403b5d4f release 2014.03.21 2014-03-21 00:44:35 +01:00
Philipp Hagemeister f6cdbe792e release 2014.03.20 2014-03-20 16:38:42 +01:00
Philipp Hagemeister 98328f6693 release 2014.03.18.1 2014-03-18 14:49:12 +01:00
Philipp Hagemeister bab31e5c21 release 2014.03.17 2014-03-17 14:52:02 +01:00
Philipp Hagemeister 02bc59198f release 2014.03.12 2014-03-12 14:54:35 +01:00
Philipp Hagemeister 0a27c5551b release 2014.03.11 2014-03-11 16:53:42 +01:00
Philipp Hagemeister 86da332b5b release 2014.03.10 2014-03-10 13:07:07 +01:00
Philipp Hagemeister 62d8317a73 release 2014.03.07.1 2014-03-07 16:08:43 +01:00
Philipp Hagemeister 41366765df release 2014.03.07 2014-03-07 06:47:07 +01:00
Philipp Hagemeister 6d9061d3e0 release 2014.03.06 2014-03-07 00:05:18 +01:00
Philipp Hagemeister 515403b421 release 2014.03.04.2 2014-03-04 21:02:20 +01:00
Philipp Hagemeister e5eb46a38a release 2014.03.04.1 2014-03-04 03:43:47 +01:00
Philipp Hagemeister 4948cca3fd release 2014.03.04 2014-03-04 03:36:27 +01:00
Philipp Hagemeister 47b5a0247f release 2014.03.03 2014-03-03 13:55:59 +01:00
Philipp Hagemeister bcb0eb70e0 release 2014.02.28 2014-02-28 14:57:09 +01:00
Philipp Hagemeister 3fb6d6a6ee release 2014.02.27.1 2014-02-27 16:14:05 +01:00
Philipp Hagemeister b7403001f3 release 2014.02.27 2014-02-27 07:28:28 +01:00
Philipp Hagemeister d5b8d93710 release 2014.02.26 2014-02-26 00:39:22 +01:00
Philipp Hagemeister 4b5e477e60 release 2014.02.25.1 2014-02-25 11:23:12 +01:00
Philipp Hagemeister c9875e8879 release 2014.02.25 2014-02-25 01:51:41 +01:00
Philipp Hagemeister d602cd1cb5 release 2014.02.24 2014-02-24 09:49:03 +01:00
Philipp Hagemeister de2966d1ea release 2014.02.22.1 2014-02-22 23:21:46 +01:00
Philipp Hagemeister 7eed3e3843 release 2014.02.22 2014-02-22 15:15:26 +01:00
Philipp Hagemeister dd00e42333 release 2014.02.21.1 2014-02-21 18:24:18 +01:00
Philipp Hagemeister 58b677fc73 release 2014.02.21 2014-02-21 12:25:46 +01:00
Philipp Hagemeister b32ae92a4e release 2014.02.20 2014-02-20 13:21:29 +01:00
Philipp Hagemeister 108d3b83e9 release 2014.02.19.1 2014-02-19 01:31:59 +01:00
Philipp Hagemeister 97dd4404b0 release 2014.02.19 2014-02-19 01:23:02 +01:00
Philipp Hagemeister 573bedb2fc release 2014.02.17 2014-02-17 11:43:32 +01:00
Philipp Hagemeister 263ce0864f release 2014.02.13 2014-02-13 19:22:40 +01:00
Philipp Hagemeister 6e4d131e23 release 2014.02.10 2014-02-10 02:06:00 +01:00
Philipp Hagemeister d79a7ae4b9 release 2014.02.08.2 2014-02-08 19:41:53 +01:00
Philipp Hagemeister 3b4af451a4 release 2014.02.08.1 2014-02-08 18:42:35 +01:00
Philipp Hagemeister 37d767ec49 release 2014.02.08 2014-02-08 16:34:54 +01:00
Philipp Hagemeister 59afad8ba4 release 2014.02.06.3 2014-02-07 01:48:36 +01:00
Philipp Hagemeister bdc68eb84a release 2014.02.06.2 2014-02-06 15:50:33 +01:00
Philipp Hagemeister e242fb16d4 release 2014.02.06.1 2014-02-06 11:34:29 +01:00
Philipp Hagemeister d24ff9356e release 2014.02.06 2014-02-06 03:32:58 +01:00
Philipp Hagemeister 9bd7125b93 release 2014.02.05 2014-02-05 21:44:31 +01:00
Philipp Hagemeister 420cefb071 release 2014.02.04.1 2014-02-04 23:38:10 +01:00
Philipp Hagemeister a486999504 release 2014.02.04 2014-02-04 16:36:11 +01:00
Philipp Hagemeister 77d02342d1 release 2014.02.03.1 2014-02-03 15:26:38 +01:00
Philipp Hagemeister f29214b135 release 2014.02.03 2014-02-03 06:59:02 +01:00
Philipp Hagemeister 809028e9fa release 2014.01.30.2 2014-01-30 19:36:46 +01:00
Philipp Hagemeister 1dd2c27354 release 2014.01.30.1 2014-01-30 05:57:09 +01:00
Philipp Hagemeister 7651ced5d1 release 2014.01.30 2014-01-30 05:02:45 +01:00
Philipp Hagemeister cd8b212f5b release 2014.01.29 2014-01-29 11:28:22 +01:00
Philipp Hagemeister c53f5c1332 release 2014.01.28.1 2014-01-28 03:48:33 +01:00
Philipp Hagemeister 30d89fba3a release 2014.01.27.2 2014-01-27 19:25:32 +01:00
Philipp Hagemeister 58efc4e3a8 release 2014.01.27.1 2014-01-27 07:12:51 +01:00
Philipp Hagemeister 2c714450ca release 2014.01.27 2014-01-27 07:09:22 +01:00
Philipp Hagemeister 9c07dd21e8 [donations] Linkify bitcoin 2014-01-27 03:06:21 +01:00
Philipp Hagemeister 27cf21a718 [donations] Mention BTC (#2238) 2014-01-27 03:04:46 +01:00
Philipp Hagemeister 590fe11a01 release 2014.01.23.4 2014-01-24 00:10:58 +01:00
Philipp Hagemeister 66e2e6495b release 2014.01.23.3 2014-01-24 00:00:40 +01:00
Philipp Hagemeister 2999c9fc2b release 2014.01.23.2 2014-01-23 19:15:46 +01:00
Philipp Hagemeister 7362738116 release 2014.01.23.1 2014-01-23 10:41:47 +01:00
Philipp Hagemeister 35c171b552 release 2014.01.23 2014-01-23 00:32:05 +01:00
Philipp Hagemeister 77941a2ec3 release 2014.01.22.5 2014-01-22 22:15:37 +01:00
Philipp Hagemeister 1e1e007962 release 2014.01.22.4 2014-01-22 21:16:54 +01:00
Philipp Hagemeister 3749d754de release 2014.01.22.3 2014-01-22 14:55:38 +01:00
Philipp Hagemeister c079f0aeea release 2014.01.22.2 2014-01-22 14:36:47 +01:00
Philipp Hagemeister d513c0e282 release 2014.01.22.1 2014-01-22 02:26:30 +01:00
Philipp Hagemeister 647c4ff6e2 release 2014.01.22 2014-01-22 00:24:23 +01:00
Philipp Hagemeister a41b958624 release 2014.01.21.1 2014-01-21 18:27:20 +01:00
Philipp Hagemeister 55baadab26 release 2014.01.21 2014-01-21 14:12:26 +01:00
Philipp Hagemeister 4d1261086a release 2014.01.20 2014-01-20 11:52:39 +01:00
Philipp Hagemeister 632cc94b53 release 2014.01.17.2 2014-01-17 04:27:58 +01:00
Philipp Hagemeister f147df731c release 2013.01.17.1 2014-01-17 03:13:08 +01:00
Philipp Hagemeister 32c72b8b45 release 2013.01.17 2014-01-17 02:17:28 +01:00
Philipp Hagemeister 516b8fc6d9 Update format documentation (Closes #2158) 2014-01-17 01:42:52 +01:00
Philipp Hagemeister aeeca4fa5c release 2014.01.08 2014-01-08 23:47:26 +01:00
Philipp Hagemeister 831eb2bee7 release 2014.01.07.5 2014-01-07 10:13:29 +01:00
Philipp Hagemeister fadea0241b release 2014.01.07.3 2014-01-07 08:34:43 +01:00
Philipp Hagemeister 604543e9a1 release 2014.01.07.1 2014-01-07 08:18:36 +01:00
Philipp Hagemeister 7cdf324189 release 2014.01.07 2014-01-07 05:37:53 +01:00
Philipp Hagemeister 1af2a670f8 release 2014.01.06.1 2014-01-06 19:29:39 +01:00
Philipp Hagemeister e4a93bdc2f release 2014.01.06 2014-01-06 17:50:12 +01:00
Philipp Hagemeister 216955eed2 release 2014.01.05.6 2014-01-05 12:13:00 +01:00
Philipp Hagemeister 7e8fcedf9b release 2014.01.05.5 2014-01-05 06:00:47 +01:00
Philipp Hagemeister dcc555a4eb release 2014.01.05.4 2014-01-05 05:45:45 +01:00
Philipp Hagemeister a7b4b8b819 release 2014.01.05.3 2014-01-05 05:34:43 +01:00
Philipp Hagemeister 912c10737a [Atom feed] Make all dates valid 2014-01-05 05:15:50 +01:00
Philipp Hagemeister 898535e6fe Improve Atom feed (#2081) 2014-01-05 05:03:33 +01:00
Philipp Hagemeister 0e4c82eea4 release 2014.01.05.1 2014-01-05 04:52:35 +01:00
Philipp Hagemeister 8b20599d6f release 2014.01.03 2014-01-03 12:18:39 +01:00
Philipp Hagemeister 97c7ea358c release 2013.12.26 2013-12-26 22:00:58 +01:00
Philipp Hagemeister 3b506e4652 release 2013.12.23.4 2013-12-23 05:14:39 +01:00
Philipp Hagemeister d952e4ca00 release 2013.12.23.3 2013-12-23 04:46:57 +01:00
Philipp Hagemeister c817e24689 release 2013.12.23.2 2013-12-23 04:33:44 +01:00
Philipp Hagemeister bfacf9503c release 2013.12.23.1 2013-12-23 04:22:43 +01:00
Philipp Hagemeister 95f310dd4e release 2013.12.23 2013-12-23 03:49:04 +01:00
Philipp Hagemeister 977584c07e release 2013.12.20 2013-12-20 17:11:32 +01:00
Philipp Hagemeister 4bfb57ea3e release 2013.12.17.2 2013-12-17 13:05:32 +01:00
Philipp Hagemeister 9eacff6377 release 2013.12.17.1 2013-12-17 04:16:10 +01:00
Philipp Hagemeister 566ec7305b release 2013.12.17 2013-12-17 02:54:19 +01:00
Philipp Hagemeister 9d69b0e1e8 release 2013.12.16.7 2013-12-16 22:23:23 +01:00
Philipp Hagemeister ef3cf84635 release 2013.12.16.6 2013-12-16 21:49:53 +01:00
Philipp Hagemeister 5c0d5fd588 release 2013.12.16.4 2013-12-16 21:14:07 +01:00
Philipp Hagemeister 21bff54f24 release 2013.12.16.3 2013-12-16 14:46:48 +01:00
Philipp Hagemeister a06fb40105 release 2013.12.16.2 2013-12-16 14:20:46 +01:00
Philipp Hagemeister 5d60fe65c8 release 2013.12.16.1 2013-12-16 06:14:46 +01:00
Philipp Hagemeister 3f60bdf21c release 2013.12.16 2013-12-16 04:48:44 +01:00
Philipp Hagemeister 3f0efb919a release 2013.12.11.2 2013-12-11 09:28:50 +01:00
Philipp Hagemeister 128fd87c1d release 2013.12.11.1 2013-12-11 08:59:01 +01:00
Philipp Hagemeister b2c4d5023c release 2013.12.11 2013-12-11 08:52:00 +01:00
Philipp Hagemeister 12c220af97 release 2013.12.10 2013-12-10 11:58:50 +01:00
Philipp Hagemeister d5bd62fa47 release 2013.12.09.4 2013-12-09 20:11:45 +01:00
Philipp Hagemeister a002dc993a release 2013.12.09.2 2013-12-09 18:37:18 +01:00
Philipp Hagemeister 150fc5cece release 2013.12.09.1 2013-12-09 04:12:20 +01:00
Philipp Hagemeister e0156de904 release 2013.12.09 2013-12-09 03:05:04 +01:00
Philipp Hagemeister 998e24adc9 release 2013.12.08.1 2013-12-08 07:35:56 +01:00
Philipp Hagemeister a0a0fa236e release 2013.12.08 2013-12-08 06:59:04 +01:00
Philipp Hagemeister bad94a7022 release 2013.12.04 2013-12-04 14:21:30 +01:00
Philipp Hagemeister 09f355f73b release 2013.12.03 2013-12-03 13:18:19 +01:00
Philipp Hagemeister a1ce6f914d release 2013.12.02 2013-12-02 15:01:38 +01:00
Philipp Hagemeister abf0865149 release 2013.11.29 2013-11-29 03:38:08 +01:00
Philipp Hagemeister ffa5af300e release 2013.11.28.1 2013-11-28 06:20:08 +01:00
Philipp Hagemeister 79806ab5a3 release 2013.11.28 2013-11-28 05:53:55 +01:00
Philipp Hagemeister 88584f74b5 release 2013.11.26 2013-11-26 10:48:14 +01:00
Philipp Hagemeister 7079c07db2 release 2013.11.25.3 2013-11-25 22:57:46 +01:00
Philipp Hagemeister bd2cf1dd4f release 2013.11.25.2 2013-11-25 15:49:04 +01:00
Philipp Hagemeister 035ee9c090 release 2013.11.25.1 2013-11-25 06:09:46 +01:00
Philipp Hagemeister 94a36fdcea release 2013.11.25 2013-11-25 03:45:35 +01:00
Philipp Hagemeister fcaafe5619 Remove duplicate list from documentation
Users are prone to overread the introductory text and conclude that just because an extractor is missing in this list, youtube-dl does not support the site.
2013-11-24 07:58:32 +01:00
Philipp Hagemeister 2097054c58 release 2013.11.24.1 2013-11-24 07:55:07 +01:00
Philipp Hagemeister aa6e508a39 release 2013.11.24 2013-11-24 07:33:47 +01:00
Philipp Hagemeister 1e4364dad6 release 2013.11.22.2 2013-11-22 23:28:10 +01:00
Philipp Hagemeister 0c0e6a64a3 release 2013.11.22.1 2013-11-22 20:25:49 +01:00
Philipp Hagemeister dde4488dd2 release 2013.11.22 2013-11-22 17:48:53 +01:00
Philipp Hagemeister 1fce91664e release 2013.11.21 2013-11-21 14:02:04 +01:00
Philipp Hagemeister fa79991c9a release 2013.11.20 2013-11-20 07:32:28 +01:00
Philipp Hagemeister aa0740099f release 2013.11.19 2013-11-19 12:51:45 +01:00
Philipp Hagemeister 907ea8357a release 2013.11.18.1 2013-11-18 14:01:34 +01:00
Philipp Hagemeister d71ce54c9d release 2013.11.18 2013-11-18 13:34:28 +01:00
Philipp Hagemeister 6da31d3f46 release 2013.11.17 2013-11-17 22:24:23 +01:00
Philipp Hagemeister 2488c5a094 release 2013.11.15.1 2013-11-15 14:37:46 +01:00
Philipp Hagemeister 0d2799f1ab release 2013.11.15 2013-11-15 02:05:19 +01:00
Philipp Hagemeister a429266549 release 2013.11.13 2013-11-13 11:12:44 +01:00
Philipp Hagemeister c4e7461ac4 release 2013.11.11 2013-11-11 18:39:21 +01:00
Philipp Hagemeister 757e64afc6 release 2013.11.07 2013-11-07 11:09:17 +01:00
Philipp Hagemeister 0a7456c6a7 release 2013.11.06.1 2013-11-06 22:15:41 +01:00
Philipp Hagemeister 149f358828 release 2013.11.06 2013-11-06 14:09:37 +01:00
Philipp Hagemeister aaa19f7d06 release 2013.11.03 2013-11-03 15:53:20 +01:00
Philipp Hagemeister 0daef4a0e4 release 2013.11.02 2013-11-02 11:23:54 +01:00
Philipp Hagemeister e2d49a0b93 release 2013.10.30 2013-10-30 01:18:58 +01:00
Philipp Hagemeister e3e599a555 release 2013.10.29 2013-10-29 06:50:46 +01:00
Philipp Hagemeister f41816778d release 2013.10.28 2013-10-28 11:39:32 +01:00
Philipp Hagemeister 009dc7c5a5 release 2013.10.23.2 2013-10-23 18:43:11 +02:00
Philipp Hagemeister 46fb9e95a0 release 2013.10.23.1 2013-10-23 15:13:57 +02:00
Philipp Hagemeister c7b6aa8db1 release 2013.10.23 2013-10-23 00:10:29 +02:00
Philipp Hagemeister 1b3b408cc4 release 2013.10.22 2013-10-22 23:01:36 +02:00
Philipp Hagemeister e5adce03ae release 2013.10.18.2 2013-10-18 23:25:05 +02:00
Philipp Hagemeister 4478038b58 release 2013.10.18.1 2013-10-18 11:47:32 +02:00
Philipp Hagemeister 275fe0b84a release 2013.10.18 2013-10-18 11:20:38 +02:00
Philipp Hagemeister e703403b01 release 2013.10.17 2013-10-17 02:23:59 +02:00
Philipp Hagemeister 3014883d87 release 2013.10.15 2013-10-15 12:29:40 +02:00
Philipp Hagemeister 16200ac861 release 2013.10.09 2013-10-09 23:53:17 +02:00
Philipp Hagemeister 96bb7f8050 release 2013.10.07 2013-10-07 14:36:58 +02:00
Philipp Hagemeister 61cc6dede0 release 2013.10.06 2013-10-06 07:23:25 +02:00
Philipp Hagemeister 37b3fc7b06 release 2013.10.04 2013-10-04 00:40:16 +02:00
Philipp Hagemeister f793d89f34 release 2013.10.01.1 2013-10-01 14:47:16 +02:00
Philipp Hagemeister df20183f34 release 2013.10.01 2013-10-01 11:46:54 +02:00
Philipp Hagemeister 6e1229457b release 2013.09.29 2013-09-29 14:43:38 +02:00
Philipp Hagemeister ecfaa4b127 release 2013.09.24.2 2013-09-24 21:58:15 +02:00
Philipp Hagemeister c750a62ac5 release 2013.09.24.1 2013-09-24 21:42:50 +02:00
Philipp Hagemeister 8186c26b07 release 2013.09.24 2013-09-24 21:36:22 +02:00
Philipp Hagemeister da6ae4d37a release 2013.09.20.1 2013-09-20 23:02:39 +02:00
Philipp Hagemeister f0f42bac08 release 2013.09.20 2013-09-20 10:29:48 +02:00
Philipp Hagemeister 4ae561e7af release 2013.09.17 2013-09-17 17:09:18 +02:00
Philipp Hagemeister 1535e44625 Update download.html as well 2013-09-16 04:33:41 +02:00
Philipp Hagemeister 1cd889a44e Advertise wget and curl (Closes #1147) 2013-09-16 04:21:00 +02:00
Philipp Hagemeister ee087a70ed release 2013.09.16 2013-09-16 04:14:52 +02:00
Philipp Hagemeister 853c2b9864 release 2013.11.09 2013-09-11 11:37:40 +02:00
Philipp Hagemeister 347cfe3a4b release 2013.09.10 2013-09-10 11:55:57 +02:00
Philipp Hagemeister ed8aa85130 release 2013.09.07 2013-09-08 00:29:39 +02:00
Philipp Hagemeister d08c332b8b release 2013.09.06.1 2013-09-06 11:08:32 +02:00
Philipp Hagemeister 2b9e50990e release 2013.09.06 2013-09-06 10:17:43 +02:00
Philipp Hagemeister 65be4a1276 release 2013.09.05 2013-09-05 22:55:17 +02:00
Philipp Hagemeister 8c0e9c62c9 release 2013.09.04 2013-09-04 14:50:37 +02:00
Philipp Hagemeister 9649cab51f Clarify donations 2013-09-02 13:41:42 +02:00
Philipp Hagemeister 6794888237 Add donations page (Fixes #1344) 2013-09-02 12:35:27 +02:00
Jaime Marquínez Ferrándiz 0f783c4790 Readd yahoo to the list of supposed sites
It has been fixed for a while.
2013-08-31 15:26:16 +02:00
Jaime Marquínez Ferrándiz 23ed3711fc Added the template for the supported sites and the generated page.
Link to that page in documentation.html
2013-08-31 15:09:41 +02:00
Philipp Hagemeister dbd043409c release 2013.08.30 2013-08-30 21:23:11 +02:00
Philipp Hagemeister 3d34010890 release 2013.08.29 2013-08-30 00:06:37 +02:00
Philipp Hagemeister 1a1ebb10a2 release 2013.08.28.1 2013-08-28 19:29:10 +02:00
Philipp Hagemeister e9f671d34f release 2013.08.28 2013-08-27 23:42:12 +02:00
Philipp Hagemeister d4d6cce692 release 2013.08.27 2013-08-27 02:36:41 +02:00
Philipp Hagemeister cd73b9f9df release 2013.08.23 2013-08-23 23:42:40 +02:00
Philipp Hagemeister 721656267b release 2013.08.22 2013-08-22 23:33:47 +02:00
Philipp Hagemeister 0d3e82002d release 2013.08.17 2013-08-17 08:47:02 +02:00
Philipp Hagemeister f42ceac10d release 2013.08.15 2013-08-15 22:53:48 +02:00
Philipp Hagemeister 1415d02075 release 2013.08.14 2013-08-14 10:23:40 +02:00
Philipp Hagemeister bcdbda3abe release 2013.08.09 2013-08-09 15:52:30 +02:00
Philipp Hagemeister cde9507171 release 2013.08.08.1 2013-08-08 20:49:29 +02:00
Philipp Hagemeister 3d3d76e745 release 2013.08.08 2013-08-08 00:52:44 +02:00
Philipp Hagemeister a7d6fa532a release 2013.08.02 2013-08-02 13:37:57 +02:00
Philipp Hagemeister d8fb038cca release 2013.07.31 2013-07-31 10:58:43 +02:00
Philipp Hagemeister 42fe48f81d release 2013.07.25.2 2013-07-25 23:03:17 +02:00
Philipp Hagemeister cc86b1e78c release 2013.07.25.1 2013-07-25 10:11:29 +02:00
Philipp Hagemeister 45059e938c release 2013.07.25 2013-07-25 09:38:41 +02:00
Philipp Hagemeister 80cbf875da release 2013.07.24.2 2013-07-24 21:25:54 +02:00
Philipp Hagemeister b4fc4c0cae release 2013.07.23.1 2013-07-23 18:44:25 +02:00
Philipp Hagemeister 57adf7b86b release 2013.07.23 2013-07-23 15:55:34 +02:00
Philipp Hagemeister 18e616ccf2 release 2013.07.19 2013-07-19 23:49:46 +02:00
Philipp Hagemeister 86cc15eb06 release 2013.07.18 2013-07-18 12:49:56 +02:00
Philipp Hagemeister 8f61efc5d9 release 2013.07.17.1 2013-07-17 11:26:29 +02:00
Philipp Hagemeister 1a21103b9f release 2013.07.17 2013-07-17 01:27:10 +02:00
Philipp Hagemeister 7269f7f6f8 release 2013.07.12 2013-07-12 00:03:14 +02:00
Philipp Hagemeister 582d80020d release 2013.07.11 2013-07-11 22:04:57 +02:00
Philipp Hagemeister f8d6958341 release 2013.07.10 2013-07-10 11:41:37 +02:00
Philipp Hagemeister 1824d80813 release 2013.07.08.1 2013-07-08 02:09:19 +02:00
Philipp Hagemeister 604ea6fcc3 release 2013.07.08 2013-07-08 01:35:29 +02:00
Philipp Hagemeister f31532a09e release 2013.07.07.01 2013-07-07 17:18:02 +02:00
Philipp Hagemeister 36128970bc release 2013.07.05 2013-07-05 15:14:15 +02:00
Philipp Hagemeister 95f17ed689 release 2013.07.04 2013-07-04 18:11:49 +02:00
Philipp Hagemeister 5d23097037 release 2013.07.02 2013-07-02 09:23:11 +02:00
Philipp Hagemeister b4a0cb65d2 release 2013.06.34.4 2013-06-29 20:27:48 +02:00
Philipp Hagemeister f172f50972 release 2013.06.34.3 2013-06-29 17:36:18 +02:00
Philipp Hagemeister ddd7e3903d release 2013.06.34.2 2013-06-27 21:06:56 +02:00
Philipp Hagemeister c052f7300c release 2013.06.34.1 2013-06-27 18:01:54 +02:00
Philipp Hagemeister 375db3649b release 2013.06.34 2013-06-27 13:06:57 +02:00
Philipp Hagemeister 4bcac9eadc release 2013.06.33 2013-06-25 22:45:44 +02:00
Philipp Hagemeister f2392cc419 release 2013.06.32 2013-06-25 21:05:34 +02:00
Philipp Hagemeister 4bba8b41a0 release 2013.06.31 2013-06-25 18:43:38 +02:00
Philipp Hagemeister 1deaa4f150 release 2013.06.30 2013-06-25 12:31:16 +02:00
Philipp Hagemeister e6e5130471 release 2013.06.29 2013-06-24 14:59:54 +02:00
Philipp Hagemeister eb409ed6e1 release 2013.06.28 2013-06-24 12:46:24 +02:00
Philipp Hagemeister 79ce12a211 release 2013.06.27 2013-06-24 10:42:51 +02:00
Philipp Hagemeister 93dad3d78c release 2013.06.26 2013-06-24 01:09:03 +02:00
Philipp Hagemeister 064abef36f release 2013.06.25 2013-06-24 00:23:35 +02:00
Philipp Hagemeister 6356d0fecd Merge branch 'gh-pages' of github.com:rg3/youtube-dl into gh-pages 2013-06-23 23:55:13 +02:00
Philipp Hagemeister 5ac0aa0a56 merge 2013-06-23 23:54:49 +02:00
Philipp Hagemeister 96c4401076 release 2013.06.23 2013-06-23 23:53:53 +02:00
Philipp Hagemeister 97b8fca23b release 2013.06.23 2013-06-23 23:51:30 +02:00
Philipp Hagemeister 4d45501232 Merge pull request #891 from Lx/gh-pages-conf-format
describe permitted .conf file content
2013-06-23 09:42:34 -07:00
Philipp Hagemeister c523528639 document new PGP key 2013-06-21 23:05:33 +02:00
Philipp Hagemeister 0b9da457da release 2013.06.21 2013-06-21 00:41:48 +02:00
Alex Peters 5ea8a2b4ff describe permitted .conf file content
Determined by inspecting the documentation for the Python `shlex`
module:

http://docs.python.org/2/library/shlex.html
2013-06-17 21:55:15 +10:00
Philipp Hagemeister d2b808ce4b release 2013.05.23 2013-05-23 13:42:54 +02:00
Philipp Hagemeister dadcaecdfa release 2013.05.14 2013-05-13 14:55:23 +02:00
Philipp Hagemeister 46d641a918 release 2013.05.10 2013-05-10 02:00:07 +02:00
Philipp Hagemeister 1feb835874 release 2013.05.07 2013-05-05 21:25:13 +02:00
Philipp Hagemeister 4fd46f8015 release 2013.05.05 2013-05-04 12:34:53 +02:00
Philipp Hagemeister 8a42178a6a release 2013.05.04 2013-05-04 07:17:52 +02:00
Philipp Hagemeister bb224c7c78 release 2013.05.01 2013-05-01 14:11:35 +02:00
Philipp Hagemeister ff99565e9b release 2013.04.31 2013-04-30 19:56:24 +02:00
Philipp Hagemeister 532122da0f release 2013.04.30 2013-04-30 18:27:06 +02:00
Philipp Hagemeister abcefe99a1 release 2013.04.28 2013-04-28 16:35:35 +02:00
Philipp Hagemeister 4fd463e86c Disable notes 2013-04-28 16:22:55 +02:00
Philipp Hagemeister 81c8e577ae release 2013.04.27 2013-04-28 16:15:14 +02:00
Philipp Hagemeister bb6dfb9553 Add note about -t by default 2013-04-27 21:59:15 +02:00
Jaime Marquínez Ferrándiz 3bd90071be Document order of preference for format selection (related #798) 2013-04-23 10:29:39 +02:00
Philipp Hagemeister fa6bc20e23 release 2013.04.22 2013-04-22 20:37:04 +02:00
Philipp Hagemeister d8330e5a1d release 2013.04.21 2013-04-21 13:00:36 +02:00
Philipp Hagemeister d429f1174a release 2013.04.18 2013-04-18 06:42:52 +02:00
Filippo Valsorda 543b572f1f Merge pull request #788 from jaimeMF/pip
Add pip installation command
2013-04-17 10:57:50 -07:00
Jaime Marquínez Ferrándiz fda2d312d4 Add link to pypi and a note about the update 2013-04-16 14:47:08 +02:00
Jaime Marquínez Ferrándiz 4a715cbacb Add pip installation command
Closes #786
2013-04-16 14:24:05 +02:00
Philipp Hagemeister de1351917d Merge pull request #787 from jaimeMF/commands_style
Move the style of the commands in download.html to style.css
2013-04-16 05:15:27 -07:00
Jaime Marquínez Ferrándiz 8f273b2c05 Move the style of the commands in download.html to style.css 2013-04-16 14:06:16 +02:00
Philipp Hagemeister f5c68c0d86 release 2013.04.11 2013-04-11 18:49:43 +02:00
Filippo Valsorda 24a170f8fd new GPG key - this new one is signed by the old expiried one - closes #779 2013-04-06 21:55:12 +02:00
Filippo Valsorda c5ba189be4 release 2013.04.03 2013-04-06 20:53:44 +02:00
Ricardo Garcia 66661fc019 Change rg3.github.com to rg3.github.io in atom feed 2013-04-06 10:43:34 +02:00
Ricardo Garcia a87558dc12 Documentation license change (fixes #768) 2013-04-03 20:09:38 +02:00
Philipp Hagemeister 8dfa0b76e6 minor feed improvements 2013-03-29 21:43:48 +01:00
Philipp Hagemeister 18aab9843e Correct feed URL 2013-03-29 21:37:51 +01:00
Philipp Hagemeister 7d8127b4b8 release 2013.03.29 2013-03-29 21:29:41 +01:00
Philipp Hagemeister 2386b04c24 Ignore egg-info 2013-03-29 21:19:05 +01:00
Philipp Hagemeister cd0b44fd5e Add link to RSS feed (#758) 2013-03-29 21:18:48 +01:00
Philipp Hagemeister ad8385f1fc release 2013.02.25 2013-02-25 00:34:21 +01:00
Philipp Hagemeister a908b7b816 release 2013.02.22 2013-02-24 00:55:16 +01:00
Philipp Hagemeister 4d8623ed73 release 2012.02.22 2013-02-22 16:46:14 +01:00
Philipp Hagemeister 30b8dbc74f Add note 2013-02-22 16:39:03 +01:00
Philipp Hagemeister e06c1be12d release 2013.02.19 2013-02-19 00:09:58 +01:00
Philipp Hagemeister 1726ff8b2e release 2013.02.18 2013-02-18 23:40:33 +01:00
Philipp Hagemeister 566a15f553 release 2013.02.02 2013-02-02 14:51:42 +01:00
Philipp Hagemeister 99c81cae13 release 2013.02.01 2013-02-01 18:00:15 +01:00
Philipp Hagemeister aa26b834bb release 2013.01.28 2013-01-27 19:10:13 +01:00
Philipp Hagemeister 2644989c7c Merge pull request #636 from jaimeMF/gh-pages
Fix the path to the configuration file
2013-01-13 10:23:50 -08:00
Jaime Marquínez Ferrándiz 158d35395f Fix the path to the configuration file 2013-01-13 19:10:44 +01:00
Philipp Hagemeister 7fb298e717 release 2013.01.13 2013-01-12 22:23:55 +01:00
Philipp Hagemeister 680adff87b Merge branch 'gh-pages' of /home/phihag/projects/youtube-dl/. into gh-pages
Conflicts:
	download.html
	update/LATEST_VERSION
	update/versions.json
2013-01-12 18:20:20 +01:00
Philipp Hagemeister efad35fb70 release 2013.01.12 2013-01-12 18:15:24 +01:00
Philipp Hagemeister 56e6a59bc9 release 2013.01.11 2013-01-12 18:06:07 +01:00
Philipp Hagemeister 7aa6cb5973 release 2013.01.11 2013-01-11 08:13:12 +01:00
Philipp Hagemeister 45af080919 release 2013.01.08 2013-01-08 10:33:37 +01:00
Philipp Hagemeister ffea5c2832 Delete test_coverage 2013-01-06 23:38:56 +01:00
Philipp Hagemeister 77b66b65bd release 2013.01.06 2013-01-06 23:27:36 +01:00
Philipp Hagemeister 3d710b6438 fix signature 2013-01-03 19:08:58 +01:00
Philipp Hagemeister 0ec40a3f16 remove 2012.12.11 from json (doesn't follow new naming scheme) 2013-01-03 18:53:29 +01:00
Philipp Hagemeister 077eb935fb Github seems to (wrongly) optimize HTML pages now, fix download page 2013-01-03 18:35:54 +01:00
Filippo Valsorda 2f0d49e70a release 2013.01.02 2013-01-02 22:47:06 +01:00
Filippo Valsorda a07549dc0f Updating docs 2012-12-31 18:44:31 +01:00
Filippo Valsorda 377689c9ee New download page template 2012-12-31 18:35:23 +01:00
Filippo Valsorda 38a4d6feac populated the .gitignore as we switch branches often; cover/ will be test_coverage/ 2012-12-31 18:10:52 +01:00
Filippo Valsorda 35a06ec0f4 undo 2012.12.27, never released to the public 2012-12-30 21:00:31 +01:00
Filippo Valsorda c8ff21bd82 moved docs and updates generation scripts from gh-pages branch to master 2012-12-30 20:12:14 +01:00
Filippo Valsorda 0e91665e1a New updates system and release 2012.12.27 2012-12-27 01:59:12 +01:00
Filippo Valsorda 480c972687 Test code coverage data in /cover/ 2012-12-18 12:44:56 +01:00
Philipp Hagemeister 642b5170e3 Update Python version in downloads 2012-12-16 13:43:29 +01:00
Philipp Hagemeister 6065e27a13 Add wget installation instructions 2012-12-16 13:39:45 +01:00
Philipp Hagemeister c860c18297 Build everything with Python 3 2012-12-16 13:33:56 +01:00
Philipp Hagemeister 2840ae3a8f Update homepage 2012-12-11 17:52:56 +01:00
Philipp Hagemeister b51355ef99 Credit @FiloSottile 2012-12-11 17:43:50 +01:00
Philipp Hagemeister 1762b604b1 new release 2012-12-11 17:34:56 +01:00
Philipp Hagemeister 8c64aa48d2 New generate-download for the new build mechanism 2012-12-11 17:34:33 +01:00
Philipp Hagemeister 8c3a45b6e4 Update supported extractors 2012-11-30 08:38:14 +01:00
Philipp Hagemeister dc9e2d8e0c Document CollegeHumor and arte.tv 2012-11-28 17:57:06 +01:00
Philipp Hagemeister e7d727efc2 Drop 2.5 support 2012-11-28 03:30:44 +01:00
Philipp Hagemeister a89c5d20c7 2012.11.29 2012-11-27 18:37:27 +01:00
Philipp Hagemeister 044cb16590 release 2012.11.28 2012-11-27 16:16:51 +01:00
Philipp Hagemeister 81db2d8040 Document --restrict-filenames, remove stitle 2012-11-27 16:06:59 +01:00
Philipp Hagemeister 2811949f4c Update doc for 2012.11.27 2012-11-27 00:26:05 +01:00
Philipp Hagemeister 3a2c78a2da Document configuration options 2012-11-26 23:23:33 +01:00
Philipp Hagemeister 23cf656bd1 Automatically update copyright (Closes #549) 2012-11-26 11:19:40 +01:00
Philipp Hagemeister 41ff5333f7 ignore temporary files 2012-11-26 11:18:31 +01:00
Philipp Hagemeister 571d094858 Clarify required Python version (#549) 2012-11-26 11:18:08 +01:00
Philipp Hagemeister 96679b26cf release 2012.11.17 2012-11-26 04:05:23 +01:00
Philipp Hagemeister b7d1a2247e Python 2.6 instead of 2.5 in about (Closes #516) 2012-11-07 01:49:35 +01:00
Philipp Hagemeister 9746c518a5 update docs 2012-10-10 19:33:08 +02:00
Philipp Hagemeister 959fa33ef9 release youtube-dl 2012.10.09 2012-10-10 19:27:50 +02:00
Philipp Hagemeister a44c76cdf4 release release 2012.09.27 2012-09-28 13:27:54 +02:00
Philipp Hagemeister 6a3ff26a01 Add recent breakages to FAQ (#433) 2012-09-27 23:29:40 +02:00
Philipp Hagemeister 60a1c34662 Drop 2.5 compatibility 2012-09-27 15:33:20 +02:00
Philipp Hagemeister 49bd2af54f Clarify 402 2012-02-28 02:00:00 +01:00
Philipp Hagemeister a5999b83fd release 2012.02.27 2012-02-27 20:20:08 +01:00
Philipp Hagemeister 82eedd7d83 update docs for 2012.02.26 2012-02-27 00:43:20 +01:00
Philipp Hagemeister 759320387a Use stitle instead of title in doc 2012-01-12 20:15:54 +01:00
Philipp Hagemeister 0be94d4c6a release 2012.01.08b docs 2012-01-08 17:24:46 +01:00
Philipp Hagemeister 6bd03617e6 docs for 2012.01.05 2012-01-05 11:10:14 +01:00
Philipp Hagemeister a3d06cfe6d doc for 2011.12.18 2011-12-17 01:35:45 +01:00
Philipp Hagemeister cd891850ec Release 2011.12.15 2011-12-15 20:33:49 +01:00
Philipp Hagemeister cdee681a2c Release 2011.12.08 2011-12-08 21:41:43 +01:00
Philipp Hagemeister db2c6281eb Release 2011.11.23: Update webpage 2011-11-23 10:39:50 +01:00
Philipp Hagemeister 06a129c9dd Release 2011.11.22 2011-11-22 15:39:04 +01:00
Philipp Hagemeister 5a938b5d04 +Makefile 2011-11-22 15:38:32 +01:00
Philipp Hagemeister b0e67d2404 Release 2011.11.21 2011-11-21 21:54:04 +01:00
Philipp Hagemeister 92961845c3 docs for 2011.10.19 2011-10-19 00:40:55 +02:00
Philipp Hagemeister f9c3398449 release 2011.09.30 2011-09-30 09:08:53 +02:00
Philipp Hagemeister bffe76ba4b Remove empty <tr>s in index 2011-09-28 09:55:54 +02:00
Philipp Hagemeister 0d29baa7c6 Make documentation valid HTML 2011-09-28 09:53:50 +02:00
Philipp Hagemeister dd9d3efcfb Make FAQ valid HTML 2011-09-28 09:52:01 +02:00
Philipp Hagemeister 9014805f26 Fix stray </a> in FAQ 2011-09-28 09:50:04 +02:00
Philipp Hagemeister f973da57a4 Switch to HTML5 doctype 2011-09-28 09:49:19 +02:00
Philipp Hagemeister a073eb792f Update documentation and FAQ 2011-09-28 09:47:54 +02:00
Philipp Hagemeister f202278fe1 Close <ul> in first FAQ question 2011-09-28 09:29:19 +02:00
Philipp Hagemeister 3328f34eb3 Update homepage for 2011.09.27 2011-09-27 21:44:59 +02:00
Philipp Hagemeister 50d7a239ae Raise correct args in exception 2011-09-27 21:44:02 +02:00
Philipp Hagemeister 81eb98e4bd Update docs 2011-09-27 21:17:50 +02:00
Philipp Hagemeister 78ef538449 Updated bug reporting instructions in the FAQ 2011-09-27 20:58:37 +02:00
Philipp Hagemeister 6e3ed6385c Download regeneration works with python 2.5 2011-09-27 20:50:03 +02:00
Ricardo Garcia a2dafa7316 Add creative commons license to webpages 2011-09-27 20:17:34 +02:00
Philipp Hagemeister 86e5e08789 release 2011.09.18c 2011-09-17 00:59:45 +02:00
Philipp Hagemeister e397cf5b47 2011.09.18b 2011-09-16 22:33:54 +02:00
Philipp Hagemeister 3fd01c88c5 Update documentation for 2011.09.18 2011-09-15 19:29:53 +02:00
Philipp Hagemeister d2cbb552b7 Update documentation for 2011.09.17 2011-09-15 19:25:07 +02:00
Philipp Hagemeister 9c358a8982 Release 2011.09.16 2011-09-15 18:49:20 +02:00
Philipp Hagemeister 7923514ea0 Release 2011.09.15 2011-09-14 22:56:50 +02:00
Philipp Hagemeister 004759c8f2 Add a prominent Develop link in the documentation (Closes #155) 2011-09-14 00:42:45 +02:00
Philipp Hagemeister 95f029a5d8 Release 2011.09.14 2011-09-14 00:02:16 +02:00
Philipp Hagemeister ac47cfe369 Update generate-download 2011-09-13 23:06:09 +02:00
Philipp Hagemeister 463fe92d26 Release new version 2011-09-13 23:05:58 +02:00
Ricardo Garcia ba8a90b0bf Regenerate download page 2011-08-04 19:16:25 +02:00
Ricardo Garcia 3a6c68881a Regenerate download page 2011-03-29 20:33:22 +02:00
Ricardo Garcia a290358c2f Regenerate download page 2011-02-26 00:48:41 +01:00
Ricardo Garcia 17faaa4548 Regenerate download page 2011-02-25 21:54:55 +01:00
Ricardo Garcia 3ea19089f9 Regenerate download page 2011-02-25 20:13:32 +01:00
Ricardo Garcia 9077650490 Add Gergely Imreh to the author list 2011-02-20 18:03:52 +01:00
Ricardo Garcia 2ecbfb4cbc Properly update Python version requirement in the documentation 2011-01-30 13:14:45 +01:00
Ricardo Garcia 3519974510 Regenerate download page 2011-01-30 13:12:45 +01:00
Ricardo Garcia e76e4dc8b1 Add Paweł Paprota to the list of authors in the documentation 2011-01-30 13:12:10 +01:00
Ricardo Garcia 01e013b5e3 Mention support for YouTube.com user videos in the documentation 2011-01-30 13:10:22 +01:00
Ricardo Garcia 64ea994344 Update documentation to reflect Python 2.5 requirement 2011-01-30 12:56:52 +01:00
Ricardo Garcia a3e9208c01 Add Witold Baryluk to the author list 2011-01-21 18:19:43 +01:00
Ricardo Garcia ec0d2e46c5 Add link to the project page from the about page 2011-01-07 10:43:13 +01:00
Ricardo Garcia 1b3dbefb04 Modify pages increasing the copyright year 2011-01-03 10:54:47 +01:00
Ricardo Garcia c3003bb4db Add question about option -g to the FAQ 2011-01-03 10:54:07 +01:00
Ricardo Garcia 6c7d5d8d14 Regenerate download page 2010-12-09 19:58:30 +01:00
Ricardo Garcia 35c0ad4587 Regenerate download page 2010-12-09 19:38:15 +01:00
Ricardo Garcia 941383109a Document new DepositFiles InfoExtractor 2010-12-08 10:59:59 +01:00
Ricardo Garcia c95ac4f062 Regenerate download page 2010-11-19 19:42:22 +01:00
Ricardo Garcia 0732b1f39f Document change from "ord" to "autonumber" in template 2010-11-19 19:38:36 +01:00
Ricardo Garcia 8d78373ea0 Document new upload_date template parameter 2010-11-19 19:38:07 +01:00
Ricardo Garcia 17082ad9db Put the main buttons ordered vertically 2010-11-19 18:24:03 +01:00
Ricardo Garcia 725d763c48 Reorganize website 2010-11-19 18:19:41 +01:00
Ricardo Garcia a993428ac9 Document rtmpdump's optional requirement in the main page 2010-11-06 18:46:50 +01:00
Ricardo Garcia 7136abc8f3 Improve documentation on "SyntaxError" to take Python 3.x into account 2010-11-06 18:45:10 +01:00
Ricardo Garcia 790622091e Renamed "generate-home" to "generate-index" for consistency 2010-11-06 11:29:10 +01:00
Ricardo Garcia db03ff92a6 Changed a few style aspects to make the page look better under IE 2010-11-06 11:29:10 +01:00
Ricardo Garcia b294d9fa38 Use SSL in URLs where possible 2010-11-06 11:28:56 +01:00
Ricardo Garcia 5de4c645e2 Make web pages valid HTML and remove a few glitches 2010-11-02 21:28:56 +01:00
Ricardo Garcia 05703c8f9c Minor changes to stylesheet 2010-11-01 11:28:23 +01:00
Ricardo Garcia f37b138766 Add copyright notice at the bottom of every page 2010-11-01 08:23:57 +01:00
Ricardo Garcia 5c7359365f Initial pages commit, using the wiki contents 2010-10-31 23:50:48 +01:00
999 changed files with 30107 additions and 181462 deletions
-63
View File
@@ -1,63 +0,0 @@
---
name: Broken site support
about: Report broken or misfunctioning site
title: ''
---
<!--
######################################################################
WARNING!
IGNORING THE FOLLOWING TEMPLATE WILL RESULT IN ISSUE CLOSED AS INCOMPLETE
######################################################################
-->
## Checklist
<!--
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of youtube-dl:
- First of, make sure you are using the latest version of youtube-dl. Run `youtube-dl --version` and ensure your version is 2021.12.17. If it's not, see https://yt-dl.org/update 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 URLs and arguments with special characters are properly quoted or escaped as explained in http://yt-dl.org/escape.
- Search the bugtracker for similar issues: http://yt-dl.org/search-issues. DO NOT post duplicates.
- Finally, put x into all relevant boxes (like this [x])
-->
- [ ] I'm reporting a broken site support
- [ ] I've verified that I'm running youtube-dl version **2021.12.17**
- [ ] 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 searched the bugtracker for similar issues including closed ones
## Verbose log
<!--
Provide the complete verbose output of youtube-dl that clearly demonstrates the problem.
Add the `-v` flag to your command line you run youtube-dl with (`youtube-dl -v <your command line>`), copy the WHOLE output and insert it below. It should look similar to this:
[debug] System config: []
[debug] User config: []
[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] youtube-dl version 2021.12.17
[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] Proxy map: {}
<more lines>
-->
```
PASTE VERBOSE LOG HERE
```
## Description
<!--
Provide an explanation of your issue in an arbitrary form. Provide any additional information, suggested solution and as much context and examples as possible.
If work on your issue requires account credentials please provide them or explain how one can obtain them.
-->
WRITE DESCRIPTION HERE
@@ -1,54 +0,0 @@
---
name: Site support request
about: Request support for a new site
title: ''
labels: 'site-support-request'
---
<!--
######################################################################
WARNING!
IGNORING THE FOLLOWING TEMPLATE WILL RESULT IN ISSUE CLOSED AS INCOMPLETE
######################################################################
-->
## Checklist
<!--
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of youtube-dl:
- First of, make sure you are using the latest version of youtube-dl. Run `youtube-dl --version` and ensure your version is 2021.12.17. If it's not, see https://yt-dl.org/update 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 site you are requesting is not dedicated to copyright infringement, see https://yt-dl.org/copyright-infringement. youtube-dl 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: http://yt-dl.org/search-issues. DO NOT post duplicates.
- Finally, put x into all relevant boxes (like this [x])
-->
- [ ] I'm reporting a new site support request
- [ ] I've verified that I'm running youtube-dl version **2021.12.17**
- [ ] 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 searched the bugtracker for similar site support requests including closed ones
## Example URLs
<!--
Provide all kinds of example URLs support for which should be included. Replace following example URLs by yours.
-->
- Single video: https://www.youtube.com/watch?v=BaW_jenozKc
- Single video: https://youtu.be/BaW_jenozKc
- Playlist: https://www.youtube.com/playlist?list=PL4lCao7KL_QFVb7Iudeipvc2BCavECqzc
## Description
<!--
Provide any additional information.
If work on your issue requires account credentials please provide them or explain how one can obtain them.
-->
WRITE DESCRIPTION HERE
@@ -1,37 +0,0 @@
---
name: Site feature request
about: Request a new functionality for a site
title: ''
---
<!--
######################################################################
WARNING!
IGNORING THE FOLLOWING TEMPLATE WILL RESULT IN ISSUE CLOSED AS INCOMPLETE
######################################################################
-->
## Checklist
<!--
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of youtube-dl:
- First of, make sure you are using the latest version of youtube-dl. Run `youtube-dl --version` and ensure your version is 2021.12.17. If it's not, see https://yt-dl.org/update on how to update. Issues with outdated version will be REJECTED.
- Search the bugtracker for similar site feature requests: http://yt-dl.org/search-issues. DO NOT post duplicates.
- Finally, put x into all relevant boxes (like this [x])
-->
- [ ] I'm reporting a site feature request
- [ ] I've verified that I'm running youtube-dl version **2021.12.17**
- [ ] I've searched the bugtracker for similar site feature requests including closed ones
## Description
<!--
Provide an explanation of your site feature request in an arbitrary form. Please make sure the description is worded well enough to be understood, see https://github.com/ytdl-org/youtube-dl#is-the-description-of-the-issue-itself-sufficient. Provide any additional information, suggested solution and as much context and examples as possible.
-->
WRITE DESCRIPTION HERE
-65
View File
@@ -1,65 +0,0 @@
---
name: Bug report
about: Report a bug unrelated to any particular site or extractor
title: ''
---
<!--
######################################################################
WARNING!
IGNORING THE FOLLOWING TEMPLATE WILL RESULT IN ISSUE CLOSED AS INCOMPLETE
######################################################################
-->
## Checklist
<!--
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of youtube-dl:
- First of, make sure you are using the latest version of youtube-dl. Run `youtube-dl --version` and ensure your version is 2021.12.17. If it's not, see https://yt-dl.org/update 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 URLs and arguments with special characters are properly quoted or escaped as explained in http://yt-dl.org/escape.
- Search the bugtracker for similar issues: http://yt-dl.org/search-issues. DO NOT post duplicates.
- Read bugs section in FAQ: http://yt-dl.org/reporting
- Finally, put x into all relevant boxes (like this [x])
-->
- [ ] I'm reporting a broken site support issue
- [ ] I've verified that I'm running youtube-dl version **2021.12.17**
- [ ] 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 searched the bugtracker for similar bug reports including closed ones
- [ ] I've read bugs section in FAQ
## Verbose log
<!--
Provide the complete verbose output of youtube-dl that clearly demonstrates the problem.
Add the `-v` flag to your command line you run youtube-dl with (`youtube-dl -v <your command line>`), copy the WHOLE output and insert it below. It should look similar to this:
[debug] System config: []
[debug] User config: []
[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] youtube-dl version 2021.12.17
[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] Proxy map: {}
<more lines>
-->
```
PASTE VERBOSE LOG HERE
```
## Description
<!--
Provide an explanation of your issue in an arbitrary form. Please make sure the description is worded well enough to be understood, see https://github.com/ytdl-org/youtube-dl#is-the-description-of-the-issue-itself-sufficient. Provide any additional information, suggested solution and as much context and examples as possible.
If work on your issue requires account credentials please provide them or explain how one can obtain them.
-->
WRITE DESCRIPTION HERE
@@ -1,38 +0,0 @@
---
name: Feature request
about: Request a new functionality unrelated to any particular site or extractor
title: ''
labels: 'request'
---
<!--
######################################################################
WARNING!
IGNORING THE FOLLOWING TEMPLATE WILL RESULT IN ISSUE CLOSED AS INCOMPLETE
######################################################################
-->
## Checklist
<!--
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of youtube-dl:
- First of, make sure you are using the latest version of youtube-dl. Run `youtube-dl --version` and ensure your version is 2021.12.17. If it's not, see https://yt-dl.org/update on how to update. Issues with outdated version will be REJECTED.
- Search the bugtracker for similar feature requests: http://yt-dl.org/search-issues. DO NOT post duplicates.
- Finally, put x into all relevant boxes (like this [x])
-->
- [ ] I'm reporting a feature request
- [ ] I've verified that I'm running youtube-dl version **2021.12.17**
- [ ] I've searched the bugtracker for similar feature requests including closed ones
## Description
<!--
Provide an explanation of your issue in an arbitrary form. Please make sure the description is worded well enough to be understood, see https://github.com/ytdl-org/youtube-dl#is-the-description-of-the-issue-itself-sufficient. Provide any additional information, suggested solution and as much context and examples as possible.
-->
WRITE DESCRIPTION HERE
-38
View File
@@ -1,38 +0,0 @@
---
name: Ask question
about: Ask youtube-dl related question
title: ''
labels: 'question'
---
<!--
######################################################################
WARNING!
IGNORING THE FOLLOWING TEMPLATE WILL RESULT IN ISSUE CLOSED AS INCOMPLETE
######################################################################
-->
## Checklist
<!--
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 (http://yt-dl.org/readme) and FAQ (http://yt-dl.org/faq) for similar questions
- Search the bugtracker for similar questions: http://yt-dl.org/search-issues
- Finally, put x into all relevant boxes (like this [x])
-->
- [ ] I'm asking a question
- [ ] I've looked through the README and FAQ for similar questions
- [ ] I've searched the bugtracker for similar questions including closed ones
## Question
<!--
Ask your question in an arbitrary form. Please make sure it's worded well enough to be understood, see https://github.com/ytdl-org/youtube-dl#is-the-description-of-the-issue-itself-sufficient.
-->
WRITE QUESTION HERE
-1
View File
@@ -1 +0,0 @@
blank_issues_enabled: false
@@ -1,63 +0,0 @@
---
name: Broken site support
about: Report broken or misfunctioning site
title: ''
---
<!--
######################################################################
WARNING!
IGNORING THE FOLLOWING TEMPLATE WILL RESULT IN ISSUE CLOSED AS INCOMPLETE
######################################################################
-->
## Checklist
<!--
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of youtube-dl:
- First of, make sure you are using the latest version of youtube-dl. Run `youtube-dl --version` and ensure your version is %(version)s. If it's not, see https://yt-dl.org/update 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 URLs and arguments with special characters are properly quoted or escaped as explained in http://yt-dl.org/escape.
- Search the bugtracker for similar issues: http://yt-dl.org/search-issues. DO NOT post duplicates.
- Finally, put x into all relevant boxes (like this [x])
-->
- [ ] I'm reporting a broken site support
- [ ] I've verified that I'm running youtube-dl version **%(version)s**
- [ ] 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 searched the bugtracker for similar issues including closed ones
## Verbose log
<!--
Provide the complete verbose output of youtube-dl that clearly demonstrates the problem.
Add the `-v` flag to your command line you run youtube-dl with (`youtube-dl -v <your command line>`), copy the WHOLE output and insert it below. It should look similar to this:
[debug] System config: []
[debug] User config: []
[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] youtube-dl version %(version)s
[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] Proxy map: {}
<more lines>
-->
```
PASTE VERBOSE LOG HERE
```
## Description
<!--
Provide an explanation of your issue in an arbitrary form. Provide any additional information, suggested solution and as much context and examples as possible.
If work on your issue requires account credentials please provide them or explain how one can obtain them.
-->
WRITE DESCRIPTION HERE
@@ -1,54 +0,0 @@
---
name: Site support request
about: Request support for a new site
title: ''
labels: 'site-support-request'
---
<!--
######################################################################
WARNING!
IGNORING THE FOLLOWING TEMPLATE WILL RESULT IN ISSUE CLOSED AS INCOMPLETE
######################################################################
-->
## Checklist
<!--
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of youtube-dl:
- First of, make sure you are using the latest version of youtube-dl. Run `youtube-dl --version` and ensure your version is %(version)s. If it's not, see https://yt-dl.org/update 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 site you are requesting is not dedicated to copyright infringement, see https://yt-dl.org/copyright-infringement. youtube-dl 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: http://yt-dl.org/search-issues. DO NOT post duplicates.
- Finally, put x into all relevant boxes (like this [x])
-->
- [ ] I'm reporting a new site support request
- [ ] I've verified that I'm running youtube-dl version **%(version)s**
- [ ] 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 searched the bugtracker for similar site support requests including closed ones
## Example URLs
<!--
Provide all kinds of example URLs support for which should be included. Replace following example URLs by yours.
-->
- Single video: https://www.youtube.com/watch?v=BaW_jenozKc
- Single video: https://youtu.be/BaW_jenozKc
- Playlist: https://www.youtube.com/playlist?list=PL4lCao7KL_QFVb7Iudeipvc2BCavECqzc
## Description
<!--
Provide any additional information.
If work on your issue requires account credentials please provide them or explain how one can obtain them.
-->
WRITE DESCRIPTION HERE
@@ -1,37 +0,0 @@
---
name: Site feature request
about: Request a new functionality for a site
title: ''
---
<!--
######################################################################
WARNING!
IGNORING THE FOLLOWING TEMPLATE WILL RESULT IN ISSUE CLOSED AS INCOMPLETE
######################################################################
-->
## Checklist
<!--
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of youtube-dl:
- First of, make sure you are using the latest version of youtube-dl. Run `youtube-dl --version` and ensure your version is %(version)s. If it's not, see https://yt-dl.org/update on how to update. Issues with outdated version will be REJECTED.
- Search the bugtracker for similar site feature requests: http://yt-dl.org/search-issues. DO NOT post duplicates.
- Finally, put x into all relevant boxes (like this [x])
-->
- [ ] I'm reporting a site feature request
- [ ] I've verified that I'm running youtube-dl version **%(version)s**
- [ ] I've searched the bugtracker for similar site feature requests including closed ones
## Description
<!--
Provide an explanation of your site feature request in an arbitrary form. Please make sure the description is worded well enough to be understood, see https://github.com/ytdl-org/youtube-dl#is-the-description-of-the-issue-itself-sufficient. Provide any additional information, suggested solution and as much context and examples as possible.
-->
WRITE DESCRIPTION HERE
@@ -1,65 +0,0 @@
---
name: Bug report
about: Report a bug unrelated to any particular site or extractor
title: ''
---
<!--
######################################################################
WARNING!
IGNORING THE FOLLOWING TEMPLATE WILL RESULT IN ISSUE CLOSED AS INCOMPLETE
######################################################################
-->
## Checklist
<!--
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of youtube-dl:
- First of, make sure you are using the latest version of youtube-dl. Run `youtube-dl --version` and ensure your version is %(version)s. If it's not, see https://yt-dl.org/update 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 URLs and arguments with special characters are properly quoted or escaped as explained in http://yt-dl.org/escape.
- Search the bugtracker for similar issues: http://yt-dl.org/search-issues. DO NOT post duplicates.
- Read bugs section in FAQ: http://yt-dl.org/reporting
- Finally, put x into all relevant boxes (like this [x])
-->
- [ ] I'm reporting a broken site support issue
- [ ] I've verified that I'm running youtube-dl version **%(version)s**
- [ ] 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 searched the bugtracker for similar bug reports including closed ones
- [ ] I've read bugs section in FAQ
## Verbose log
<!--
Provide the complete verbose output of youtube-dl that clearly demonstrates the problem.
Add the `-v` flag to your command line you run youtube-dl with (`youtube-dl -v <your command line>`), copy the WHOLE output and insert it below. It should look similar to this:
[debug] System config: []
[debug] User config: []
[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] youtube-dl version %(version)s
[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] Proxy map: {}
<more lines>
-->
```
PASTE VERBOSE LOG HERE
```
## Description
<!--
Provide an explanation of your issue in an arbitrary form. Please make sure the description is worded well enough to be understood, see https://github.com/ytdl-org/youtube-dl#is-the-description-of-the-issue-itself-sufficient. Provide any additional information, suggested solution and as much context and examples as possible.
If work on your issue requires account credentials please provide them or explain how one can obtain them.
-->
WRITE DESCRIPTION HERE
@@ -1,38 +0,0 @@
---
name: Feature request
about: Request a new functionality unrelated to any particular site or extractor
title: ''
labels: 'request'
---
<!--
######################################################################
WARNING!
IGNORING THE FOLLOWING TEMPLATE WILL RESULT IN ISSUE CLOSED AS INCOMPLETE
######################################################################
-->
## Checklist
<!--
Carefully read and work through this check list in order to prevent the most common mistakes and misuse of youtube-dl:
- First of, make sure you are using the latest version of youtube-dl. Run `youtube-dl --version` and ensure your version is %(version)s. If it's not, see https://yt-dl.org/update on how to update. Issues with outdated version will be REJECTED.
- Search the bugtracker for similar feature requests: http://yt-dl.org/search-issues. DO NOT post duplicates.
- Finally, put x into all relevant boxes (like this [x])
-->
- [ ] I'm reporting a feature request
- [ ] I've verified that I'm running youtube-dl version **%(version)s**
- [ ] I've searched the bugtracker for similar feature requests including closed ones
## Description
<!--
Provide an explanation of your issue in an arbitrary form. Please make sure the description is worded well enough to be understood, see https://github.com/ytdl-org/youtube-dl#is-the-description-of-the-issue-itself-sufficient. Provide any additional information, suggested solution and as much context and examples as possible.
-->
WRITE DESCRIPTION HERE
-30
View File
@@ -1,30 +0,0 @@
## Please follow the guide below
- You will be asked some questions, please read them **carefully** and answer honestly
- Put an `x` into all the boxes [ ] relevant to your *pull request* (like that [x])
- Use *Preview* tab to see how your *pull request* will actually look like
---
### Before submitting a *pull request* make sure you have:
- [ ] [Searched](https://github.com/ytdl-org/youtube-dl/search?q=is%3Apr&type=Issues) the bugtracker for similar pull requests
- [ ] Read [adding new extractor tutorial](https://github.com/ytdl-org/youtube-dl#adding-support-for-a-new-site)
- [ ] Read [youtube-dl coding conventions](https://github.com/ytdl-org/youtube-dl#youtube-dl-coding-conventions) and adjusted the code to meet them
- [ ] Covered the code with tests (note that PRs without tests will be REJECTED)
- [ ] Checked the code with [flake8](https://pypi.python.org/pypi/flake8)
### 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 not the original author of this code but it is in public domain or released under [Unlicense](http://unlicense.org/) (provide reliable evidence)
### What is the purpose of your *pull request*?
- [ ] Bug fix
- [ ] Improvement
- [ ] New extractor
- [ ] New feature
---
### Description of your *pull request* and other information
Explanation of your *pull request* in arbitrary form goes here. Please make sure the description explains the purpose and effect of your *pull request* and is worded well enough to be understood. Provide as much context and examples as possible.
-482
View File
@@ -1,482 +0,0 @@
name: CI
env:
all-cpython-versions: 2.6, 2.7, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 3.10, 3.11, 3.12
main-cpython-versions: 2.7, 3.2, 3.5, 3.9, 3.11
pypy-versions: pypy-2.7, pypy-3.6, pypy-3.7
cpython-versions: main
test-set: core
# Python beta version to be built using pyenv before setup-python support
# Must also be included in all-cpython-versions
next: 3.13
on:
push:
# push inputs aren't known to GitHub
inputs:
cpython-versions:
type: string
default: all
test-set:
type: string
default: core
pull_request:
# pull_request inputs aren't known to GitHub
inputs:
cpython-versions:
type: string
default: main
test-set:
type: string
default: both
workflow_dispatch:
inputs:
cpython-versions:
type: choice
description: CPython versions (main = 2.7, 3.2, 3.5, 3.9, 3.11)
options:
- all
- main
required: true
default: main
test-set:
type: choice
description: core, download
options:
- both
- core
- download
required: true
default: both
permissions:
contents: read
jobs:
select:
name: Select tests from inputs
runs-on: ubuntu-latest
outputs:
cpython-versions: ${{ steps.run.outputs.cpython-versions }}
test-set: ${{ steps.run.outputs.test-set }}
own-pip-versions: ${{ steps.run.outputs.own-pip-versions }}
steps:
# push and pull_request inputs aren't known to GitHub (pt3)
- name: Set push defaults
if: ${{ github.event_name == 'push' }}
env:
cpython-versions: all
test-set: core
run: |
echo "cpython-versions=${{env.cpython-versions}}" >> "$GITHUB_ENV"
echo "test_set=${{env.test_set}}" >> "$GITHUB_ENV"
- name: Get pull_request inputs
if: ${{ github.event_name == 'pull_request' }}
env:
cpython-versions: main
test-set: both
run: |
echo "cpython-versions=${{env.cpython-versions}}" >> "$GITHUB_ENV"
echo "test_set=${{env.test_set}}" >> "$GITHUB_ENV"
- name: Make version array
id: run
run: |
# Make a JSON Array from comma/space-separated string (no extra escaping)
json_list() { \
ret=""; IFS="${IFS},"; set -- $*; \
for a in "$@"; do \
ret=$(printf '%s"%s"' "${ret}${ret:+, }" "$a"); \
done; \
printf '[%s]' "$ret"; }
tests="${{ inputs.test-set || env.test-set }}"
[ $tests = both ] && tests="core download"
printf 'test-set=%s\n' "$(json_list $tests)" >> "$GITHUB_OUTPUT"
versions="${{ inputs.cpython-versions || env.cpython-versions }}"
if [ "$versions" = all ]; then \
versions="${{ env.all-cpython-versions }}"; else \
versions="${{ env.main-cpython-versions }}"; \
fi
printf 'cpython-versions=%s\n' \
"$(json_list ${versions}${versions:+, }${{ env.pypy-versions }})" >> "$GITHUB_OUTPUT"
# versions with a special get-pip.py in a per-version subdirectory
printf 'own-pip-versions=%s\n' \
"$(json_list 2.6, 2.7, 3.2, 3.3, 3.4, 3.5, 3.6)" >> "$GITHUB_OUTPUT"
tests:
name: Run tests
needs: select
permissions:
contents: read
packages: write
runs-on: ${{ matrix.os }}
env:
PIP: python -m pip
PIP_DISABLE_PIP_VERSION_CHECK: true
PIP_NO_PYTHON_VERSION_WARNING: true
strategy:
fail-fast: true
matrix:
os: [ubuntu-22.04]
python-version: ${{ fromJSON(needs.select.outputs.cpython-versions) }}
python-impl: [cpython]
ytdl-test-set: ${{ fromJSON(needs.select.outputs.test-set) }}
run-tests-ext: [sh]
include:
- os: windows-2022
python-version: 3.4
python-impl: cpython
ytdl-test-set: ${{ contains(needs.select.outputs.test-set, 'core') && 'core' || 'nocore' }}
run-tests-ext: bat
- os: windows-2022
python-version: 3.4
python-impl: cpython
ytdl-test-set: ${{ contains(needs.select.outputs.test-set, 'download') && 'download' || 'nodownload' }}
run-tests-ext: bat
# jython
- os: ubuntu-22.04
python-version: 2.7
python-impl: jython
ytdl-test-set: ${{ contains(needs.select.outputs.test-set, 'core') && 'core' || 'nocore' }}
run-tests-ext: sh
- os: ubuntu-22.04
python-version: 2.7
python-impl: jython
ytdl-test-set: ${{ contains(needs.select.outputs.test-set, 'download') && 'download' || 'nodownload' }}
run-tests-ext: sh
steps:
- name: Prepare Linux
if: ${{ startswith(matrix.os, 'ubuntu') }}
shell: bash
run: |
# apt in runner, if needed, may not be up-to-date
sudo apt-get update
- name: Checkout
uses: actions/checkout@v3
#-------- Python 3 -----
- name: Set up supported Python ${{ matrix.python-version }}
id: setup-python
if: ${{ matrix.python-impl == 'cpython' && matrix.python-version != '2.6' && matrix.python-version != '2.7' && matrix.python-version != env.next }}
# wrap broken actions/setup-python@v4
# NB may run apt-get install in Linux
uses: ytdl-org/setup-python@v1
env:
# Temporary (?) workaround for Python 3.5 failures - May 2024
PIP_TRUSTED_HOST: "pypi.python.org pypi.org files.pythonhosted.org"
with:
python-version: ${{ matrix.python-version }}
cache-build: true
allow-build: info
- name: Locate supported Python ${{ matrix.python-version }}
if: ${{ env.pythonLocation }}
shell: bash
run: |
echo "PYTHONHOME=${pythonLocation}" >> "$GITHUB_ENV"
export expected="${{ steps.setup-python.outputs.python-path }}"
dirname() { printf '%s\n' \
'import os, sys' \
'print(os.path.dirname(sys.argv[1]))' \
| ${expected} - "$1"; }
expd="$(dirname "$expected")"
export python="$(command -v python)"
[ "$expd" = "$(dirname "$python")" ] || echo "PATH=$expd:${PATH}" >> "$GITHUB_ENV"
[ -x "$python" ] || printf '%s\n' \
'import os' \
'exp = os.environ["expected"]' \
'python = os.environ["python"]' \
'exps = os.path.split(exp)' \
'if python and (os.path.dirname(python) == exp[0]):' \
' exit(0)' \
'exps[1] = "python" + os.path.splitext(exps[1])[1]' \
'python = os.path.join(*exps)' \
'try:' \
' os.symlink(exp, python)' \
'except AttributeError:' \
' os.rename(exp, python)' \
| ${expected} -
printf '%s\n' \
'import sys' \
'print(sys.path)' \
| ${expected} -
#-------- Python next (was 3.12) -
- name: Set up CPython 3.next environment
if: ${{ matrix.python-impl == 'cpython' && matrix.python-version == env.next }}
shell: bash
run: |
PYENV_ROOT=$HOME/.local/share/pyenv
echo "PYENV_ROOT=${PYENV_ROOT}" >> "$GITHUB_ENV"
- name: Cache Python 3.next
id: cachenext
if: ${{ matrix.python-impl == 'cpython' && matrix.python-version == env.next }}
uses: actions/cache@v3
with:
key: python-${{ env.next }}
path: |
${{ env.PYENV_ROOT }}
- name: Build and set up Python 3.next
if: ${{ matrix.python-impl == 'cpython' && matrix.python-version == env.next && ! steps.cachenext.outputs.cache-hit }}
# dl and build locally
shell: bash
run: |
# Install build environment
sudo apt-get install -y build-essential llvm libssl-dev tk-dev \
libncursesw5-dev libreadline-dev libsqlite3-dev \
libffi-dev xz-utils zlib1g-dev libbz2-dev liblzma-dev
# Download PyEnv from its GitHub repository.
export PYENV_ROOT=${{ env.PYENV_ROOT }}
export PATH=$PYENV_ROOT/bin:$PATH
git clone "https://github.com/pyenv/pyenv.git" "$PYENV_ROOT"
pyenv install ${{ env.next }}
- name: Locate Python 3.next
if: ${{ matrix.python-impl == 'cpython' && matrix.python-version == env.next }}
shell: bash
run: |
PYTHONHOME="$(echo "${{ env.PYENV_ROOT }}/versions/${{ env.next }}."*)"
test -n "$PYTHONHOME"
echo "PYTHONHOME=$PYTHONHOME" >> "$GITHUB_ENV"
echo "PATH=${PYTHONHOME}/bin:$PATH" >> "$GITHUB_ENV"
#-------- Python 2.7 --
- name: Set up Python 2.7
if: ${{ matrix.python-impl == 'cpython' && matrix.python-version == '2.7' }}
# install 2.7
shell: bash
run: |
# Ubuntu 22.04 no longer has python-is-python2: fetch it
curl -L "http://launchpadlibrarian.net/474693132/python-is-python2_2.7.17-4_all.deb" -o python-is-python2.deb
sudo apt-get install -y python2
sudo dpkg --force-breaks -i python-is-python2.deb
echo "PYTHONHOME=/usr" >> "$GITHUB_ENV"
#-------- Python 2.6 --
- name: Set up Python 2.6 environment
if: ${{ matrix.python-impl == 'cpython' && matrix.python-version == '2.6' }}
shell: bash
run: |
openssl_name=openssl-1.0.2u
echo "openssl_name=${openssl_name}" >> "$GITHUB_ENV"
openssl_dir=$HOME/.local/opt/$openssl_name
echo "openssl_dir=${openssl_dir}" >> "$GITHUB_ENV"
PYENV_ROOT=$HOME/.local/share/pyenv
echo "PYENV_ROOT=${PYENV_ROOT}" >> "$GITHUB_ENV"
sudo apt-get install -y openssl ca-certificates
- name: Cache Python 2.6
id: cache26
if: ${{ matrix.python-version == '2.6' }}
uses: actions/cache@v3
with:
key: python-2.6.9
path: |
${{ env.openssl_dir }}
${{ env.PYENV_ROOT }}
- name: Build and set up Python 2.6
if: ${{ matrix.python-impl == 'cpython' && matrix.python-version == '2.6' && ! steps.cache26.outputs.cache-hit }}
# dl and build locally
shell: bash
run: |
# Install build environment
sudo apt-get install -y build-essential llvm libssl-dev tk-dev \
libncursesw5-dev libreadline-dev libsqlite3-dev \
libffi-dev xz-utils zlib1g-dev libbz2-dev liblzma-dev
# Download and install OpenSSL 1.0.2, back in time
openssl_name=${{ env.openssl_name }}
openssl_targz=${openssl_name}.tar.gz
openssl_dir=${{ env.openssl_dir }}
openssl_inc=$openssl_dir/include
openssl_lib=$openssl_dir/lib
openssl_ssl=$openssl_dir/ssl
curl -L "https://www.openssl.org/source/$openssl_targz" -o $openssl_targz
tar -xf $openssl_targz
( cd $openssl_name; \
./config --prefix=$openssl_dir --openssldir=${openssl_dir}/ssl \
--libdir=lib -Wl,-rpath=${openssl_dir}/lib shared zlib-dynamic && \
make && \
make install )
rm -rf $openssl_name
rmdir $openssl_ssl/certs && ln -s /etc/ssl/certs $openssl_ssl/certs
# Download PyEnv from its GitHub repository.
export PYENV_ROOT=${{ env.PYENV_ROOT }}
export PATH=$PYENV_ROOT/bin:$PATH
git clone "https://github.com/pyenv/pyenv.git" "$PYENV_ROOT"
# Prevent pyenv build trying (and failing) to update pip
export GET_PIP=get-pip-2.6.py
echo 'import sys; sys.exit(0)' > ${GET_PIP}
GET_PIP=$(realpath $GET_PIP)
# Build and install Python
export CFLAGS="-I$openssl_inc"
export LDFLAGS="-L$openssl_lib"
export LD_LIBRARY_PATH="$openssl_lib"
pyenv install 2.6.9
- name: Locate Python 2.6
if: ${{ matrix.python-impl == 'cpython' && matrix.python-version == '2.6' }}
shell: bash
run: |
PYTHONHOME="${{ env.PYENV_ROOT }}/versions/2.6.9"
echo "PYTHONHOME=$PYTHONHOME" >> "$GITHUB_ENV"
echo "PATH=${PYTHONHOME}/bin:$PATH" >> "$GITHUB_ENV"
echo "LD_LIBRARY_PATH=${{ env.openssl_dir }}/lib${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}" >> "$GITHUB_ENV"
#-------- Jython ------
- name: Set up Java 8
if: ${{ matrix.python-impl == 'jython' }}
uses: actions/setup-java@v3
with:
java-version: 8
distribution: 'zulu'
- name: Setup Jython environment
if: ${{ matrix.python-impl == 'jython' }}
shell: bash
run: |
echo "JYTHON_ROOT=${HOME}/jython" >> "$GITHUB_ENV"
echo "PIP=pip" >> "$GITHUB_ENV"
- name: Cache Jython
id: cachejy
if: ${{ matrix.python-impl == 'jython' && matrix.python-version == '2.7' }}
uses: actions/cache@v3
with:
# 2.7.3 now available, may solve SNI issue
key: jython-2.7.1
path: |
${{ env.JYTHON_ROOT }}
- name: Install Jython
if: ${{ matrix.python-impl == 'jython' && matrix.python-version == '2.7' && ! steps.cachejy.outputs.cache-hit }}
shell: bash
run: |
JYTHON_ROOT="${{ env.JYTHON_ROOT }}"
curl -L "https://repo1.maven.org/maven2/org/python/jython-installer/2.7.1/jython-installer-2.7.1.jar" -o jython-installer.jar
java -jar jython-installer.jar -s -d "${JYTHON_ROOT}"
echo "${JYTHON_ROOT}/bin" >> "$GITHUB_PATH"
- name: Set up cached Jython
if: ${{ steps.cachejy.outputs.cache-hit }}
shell: bash
run: |
JYTHON_ROOT="${{ env.JYTHON_ROOT }}"
echo "${JYTHON_ROOT}/bin" >> $GITHUB_PATH
- name: Install supporting Python 2.7 if possible
if: ${{ steps.cachejy.outputs.cache-hit }}
shell: bash
run: |
sudo apt-get install -y python2.7 || true
#-------- pip ---------
- name: Set up supported Python ${{ matrix.python-version }} pip
if: ${{ (matrix.python-version != '3.2' && steps.setup-python.outputs.python-path) || matrix.python-version == '2.7' }}
# This step may run in either Linux or Windows
shell: bash
run: |
echo "$PATH"
echo "$PYTHONHOME"
# curl is available on both Windows and Linux, -L follows redirects, -O gets name
python -m ensurepip || python -m pip --version || { \
get_pip="${{ contains(needs.select.outputs.own-pip-versions, matrix.python-version) && format('{0}/', matrix.python-version) || '' }}"; \
curl -L -O "https://bootstrap.pypa.io/pip/${get_pip}get-pip.py"; \
python get-pip.py --no-setuptools --no-wheel; }
- name: Set up Python 2.6 pip
if: ${{ matrix.python-version == '2.6' }}
shell: bash
run: |
python -m pip --version || { \
curl -L -O "https://bootstrap.pypa.io/pip/2.6/get-pip.py"; \
curl -L -O "https://files.pythonhosted.org/packages/ac/95/a05b56bb975efa78d3557efa36acaf9cf5d2fd0ee0062060493687432e03/pip-9.0.3-py2.py3-none-any.whl"; \
python get-pip.py --no-setuptools --no-wheel pip-9.0.3-py2.py3-none-any.whl; }
# work-around to invoke pip module on 2.6: https://bugs.python.org/issue2751
echo "PIP=python -m pip.__main__" >> "$GITHUB_ENV"
- name: Set up other Python ${{ matrix.python-version }} pip
if: ${{ matrix.python-version == '3.2' && steps.setup-python.outputs.python-path }}
shell: bash
run: |
python -m pip --version || { \
curl -L -O "https://bootstrap.pypa.io/pip/3.2/get-pip.py"; \
curl -L -O "https://files.pythonhosted.org/packages/b2/d0/cd115fe345dd6f07ec1c780020a7dfe74966fceeb171e0f20d1d4905b0b7/pip-7.1.2-py2.py3-none-any.whl"; \
python get-pip.py --no-setuptools --no-wheel pip-7.1.2-py2.py3-none-any.whl; }
#-------- unittest ----
- name: Upgrade Unittest for Python 2.6
if: ${{ matrix.python-version == '2.6' }}
shell: bash
run: |
# Work around deprecation of support for non-SNI clients at PyPI CDN (see https://status.python.org/incidents/hzmjhqsdjqgb)
$PIP -qq show unittest2 || { \
for u in "65/26/32b8464df2a97e6dd1b656ed26b2c194606c16fe163c695a992b36c11cdf/six-1.13.0-py2.py3-none-any.whl" \
"f2/94/3af39d34be01a24a6e65433d19e107099374224905f1e0cc6bbe1fd22a2f/argparse-1.4.0-py2.py3-none-any.whl" \
"c7/a3/c5da2a44c85bfbb6eebcfc1dde24933f8704441b98fdde6528f4831757a6/linecache2-1.0.0-py2.py3-none-any.whl" \
"17/0a/6ac05a3723017a967193456a2efa0aa9ac4b51456891af1e2353bb9de21e/traceback2-1.4.0-py2.py3-none-any.whl" \
"72/20/7f0f433060a962200b7272b8c12ba90ef5b903e218174301d0abfd523813/unittest2-1.1.0-py2.py3-none-any.whl"; do \
curl -L -O "https://files.pythonhosted.org/packages/${u}"; \
$PIP install ${u##*/}; \
done; }
# make tests use unittest2
for test in ./test/test_*.py ./test/helper.py; do
sed -r -i -e '/^import unittest$/s/test/test2 as unittest/' "$test"
done
#-------- nose --------
- name: Install nose for Python ${{ matrix.python-version }}
if: ${{ (matrix.python-version != '3.2' && steps.setup-python.outputs.python-path) || (matrix.python-impl == 'cpython' && (matrix.python-version == '2.7' || matrix.python-version == env.next)) }}
shell: bash
run: |
echo "$PATH"
echo "$PYTHONHOME"
# Use PyNose for recent Pythons instead of Nose
py3ver="${{ matrix.python-version }}"
py3ver=${py3ver#3.}
[ "$py3ver" != "${{ matrix.python-version }}" ] && py3ver=${py3ver%.*} || py3ver=0
[ "$py3ver" -ge 9 ] && nose=pynose || nose=nose
$PIP -qq show $nose || $PIP install $nose
- name: Install nose for other Python 2
if: ${{ matrix.python-impl == 'jython' || (matrix.python-impl == 'cpython' && matrix.python-version == '2.6') }}
shell: bash
run: |
# Work around deprecation of support for non-SNI clients at PyPI CDN (see https://status.python.org/incidents/hzmjhqsdjqgb)
$PIP -qq show nose || { \
curl -L -O "https://files.pythonhosted.org/packages/99/4f/13fb671119e65c4dce97c60e67d3fd9e6f7f809f2b307e2611f4701205cb/nose-1.3.7-py2-none-any.whl"; \
$PIP install nose-1.3.7-py2-none-any.whl; }
- name: Install nose for other Python 3
if: ${{ matrix.python-version == '3.2' && steps.setup-python.outputs.python-path }}
shell: bash
run: |
$PIP -qq show nose || { \
curl -L -O "https://files.pythonhosted.org/packages/15/d8/dd071918c040f50fa1cf80da16423af51ff8ce4a0f2399b7bf8de45ac3d9/nose-1.3.7-py3-none-any.whl"; \
$PIP install nose-1.3.7-py3-none-any.whl; }
- name: Set up nosetest test
if: ${{ contains(needs.select.outputs.test-set, matrix.ytdl-test-set ) }}
shell: bash
run: |
# set PYTHON_VER
PYTHON_VER=${{ matrix.python-version }}
[ "${PYTHON_VER#*-}" != "$PYTHON_VER" ] || PYTHON_VER="${{ matrix.python-impl }}-${PYTHON_VER}"
echo "PYTHON_VER=$PYTHON_VER" >> "$GITHUB_ENV"
echo "PYTHON_IMPL=${{ matrix.python-impl }}" >> "$GITHUB_ENV"
# define a test to validate the Python version used by nosetests
printf '%s\n' \
'from __future__ import unicode_literals' \
'import sys, os, platform' \
'try:' \
' import unittest2 as unittest' \
'except ImportError:' \
' import unittest' \
'class TestPython(unittest.TestCase):' \
' def setUp(self):' \
' self.ver = os.environ["PYTHON_VER"].split("-")' \
' def test_python_ver(self):' \
' self.assertEqual(["%d" % v for v in sys.version_info[:2]], self.ver[-1].split(".")[:2])' \
' self.assertTrue(sys.version.startswith(self.ver[-1]))' \
' self.assertIn(self.ver[0], ",".join((sys.version, platform.python_implementation())).lower())' \
' def test_python_impl(self):' \
' self.assertIn(platform.python_implementation().lower(), (os.environ["PYTHON_IMPL"], self.ver[0]))' \
> test/test_python.py
#-------- TESTS -------
- name: Run tests
if: ${{ contains(needs.select.outputs.test-set, matrix.ytdl-test-set ) }}
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@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: 3.9
- name: Install flake8
run: pip install flake8
- name: Run flake8
run: flake8 .
+3 -36
View File
@@ -1,7 +1,7 @@
updates_key.pem
*~
*.pyc
*.pyo
*.class
*~
*.DS_Store
wine-py2exe/
py2exe.log
@@ -12,42 +12,9 @@ MANIFEST
README.txt
youtube-dl.1
youtube-dl.bash-completion
youtube-dl.fish
youtube_dl/extractor/lazy_extractors.py
youtube-dl
youtube-dl.exe
youtube-dl.tar.gz
.coverage
cover/
updates_key.pem
*.egg-info
*.srt
*.ttml
*.sbv
*.vtt
*.flv
*.mp4
*.m4a
*.m4v
*.mp3
*.3gp
*.wav
*.ape
*.mkv
*.swf
*.part
*.ytdl
*.swp
test/local_parameters.json
.tox
youtube-dl.zsh
# IntelliJ related files
.idea
*.iml
tmp/
venv/
# VS Code related files
.vscode
youtube_dl.egg-info/
-249
View File
@@ -1,249 +0,0 @@
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
Adrian Heine
-434
View File
@@ -1,434 +0,0 @@
**Please include the full output of youtube-dl when run with `-v`**, i.e. **add** `-v` flag to **your command line**, copy the **whole** output and post it in the issue body wrapped in \`\`\` for better formatting. It should look similar to this:
```
$ youtube-dl -v <your command line>
[debug] System config: []
[debug] User config: []
[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] youtube-dl version 2015.12.06
[debug] Git HEAD: 135392e
[debug] Python version 2.6.6 - Windows-2003Server-5.2.3790-SP2
[debug] exe versions: ffmpeg N-75573-g1d0487f, ffprobe N-75573-g1d0487f, rtmpdump 2.4
[debug] Proxy map: {}
...
```
**Do not post screenshots of verbose logs; only plain text is acceptable.**
The output (including the first lines) contains important debugging information. Issues without the full output are often not reproducible and therefore do not get solved in short order, if ever.
Please re-read your issue once again to avoid a couple of common mistakes (you can and should use this as a checklist):
### Is the description of the issue itself sufficient?
We often get issue reports that we cannot really decipher. While in most cases we eventually get the required information after asking back multiple times, this poses an unnecessary drain on our resources. Many contributors, including myself, are also not native speakers, so we may misread some parts.
So please elaborate on what feature you are requesting, or what bug you want to be fixed. Make sure that it's obvious
- What the problem is
- How it could be fixed
- How your proposed solution would look like
If your report is shorter than two lines, it is almost certainly missing some of these, which makes it hard for us to respond to it. We're often too polite to close the issue outright, but the missing info makes misinterpretation likely. As a committer myself, I often get frustrated by these issues, since the only possible way for me to move forward on them is to ask for clarification over and over.
For bug reports, this means that your report should contain the *complete* output of youtube-dl when called with the `-v` flag. The error message you get for (most) bugs even says so, but you would not believe how many of our bug reports do not contain this information.
If your server has multiple IPs or you suspect censorship, adding `--call-home` may be a good idea to get more diagnostics. If the error is `ERROR: Unable to extract ...` and you cannot reproduce it from multiple countries, add `--dump-pages` (warning: this will yield a rather large output, redirect it to the file `log.txt` by adding `>log.txt 2>&1` to your command-line) or upload the `.dump` files you get when you add `--write-pages` [somewhere](https://gist.github.com/).
**Site support requests must contain an example URL**. An example URL is a URL you might want to download, like `https://www.youtube.com/watch?v=BaW_jenozKc`. There should be an obvious video present. Except under very special circumstances, the main page of a video service (e.g. `https://www.youtube.com/`) is *not* an example URL.
### Are you using the latest version?
Before reporting any issue, type `youtube-dl -U`. This should report that you're up-to-date. About 20% of the reports we receive are already fixed, but people are using outdated versions. This goes for feature requests as well.
### Is the issue already documented?
Make sure that someone has not already opened the issue you're trying to open. Search at the top of the window or browse the [GitHub Issues](https://github.com/ytdl-org/youtube-dl/search?type=Issues) of this repository. If there is an issue, feel free to write something along the lines of "This affects me as well, with version 2015.01.01. Here is some more information on the issue: ...". While some issues may be old, a new post into them often spurs rapid activity.
### Why are existing options not enough?
Before requesting a new feature, please have a quick peek at [the list of supported options](https://github.com/ytdl-org/youtube-dl/blob/master/README.md#options). Many feature requests are for features that actually exist already! Please, absolutely do show off your work in the issue report and detail how the existing similar options do *not* solve your problem.
### Is there enough context in your bug report?
People want to solve problems, and often think they do us a favor by breaking down their larger problems (e.g. wanting to skip already downloaded files) to a specific request (e.g. requesting us to look whether the file exists before downloading the info page). However, what often happens is that they break down the problem into two steps: One simple, and one impossible (or extremely complicated one).
We are then presented with a very complicated request when the original problem could be solved far easier, e.g. by recording the downloaded video IDs in a separate file. To avoid this, you must include the greater context where it is non-obvious. In particular, every feature request that does not consist of adding support for a new site should contain a use case scenario that explains in what situation the missing feature would be useful.
### Does the issue involve one problem, and one problem only?
Some of our users seem to think there is a limit of issues they can or should open. There is no limit of issues they can or should open. While it may seem appealing to be able to dump all your issues into one ticket, that means that someone who solves one of your issues cannot mark the issue as closed. Typically, reporting a bunch of issues leads to the ticket lingering since nobody wants to attack that behemoth, until someone mercifully splits the issue into multiple ones.
In particular, every site support request issue should only pertain to services at one site (generally under a common domain, but always using the same backend technology). Do not request support for vimeo user videos, White house podcasts, and Google Plus pages in the same issue. Also, make sure that you don't post bug reports alongside feature requests. As a rule of thumb, a feature request does not include outputs of youtube-dl that are not immediately related to the feature at hand. Do not post reports of a network error alongside the request for a new video service.
### Is anyone going to need the feature?
Only post features that you (or an incapacitated friend you can personally talk to) require. Do not post features because they seem like a good idea. If they are really useful, they will be requested by someone who requires them.
### Is your question about youtube-dl?
It may sound strange, but some bug reports we receive are completely unrelated to youtube-dl and relate to a different, or even the reporter's own, application. Please make sure that you are actually using youtube-dl. If you are using a UI for youtube-dl, report the bug to the maintainer of the actual application providing the UI. On the other hand, if your UI for youtube-dl fails in some way you believe is related to youtube-dl, by all means, go ahead and report the bug.
# DEVELOPER INSTRUCTIONS
Most users do not need to build youtube-dl and can [download the builds](https://ytdl-org.github.io/youtube-dl/download.html) or get them from their distribution.
To run youtube-dl as a developer, you don't need to build anything either. Simply execute
python -m youtube_dl
To run the test, simply invoke your favorite test runner, or execute a test file directly; any of the following work:
python -m unittest discover
python test/test_download.py
nosetests
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
* python
* make (only GNU make is supported)
* pandoc
* zip
* nosetests
### Adding support for a new site
If you want to add support for a new site, first of all **make sure** this site is **not dedicated to [copyright infringement](README.md#can-you-add-support-for-this-anime-video-site-or-site-which-shows-current-movies-for-free)**. youtube-dl does **not support** such sites thus pull requests adding support for them **will be rejected**.
After you have ensured this site is distributing its content legally, you can follow this quick list (assuming your service is called `yourextractor`):
1. [Fork this repository](https://github.com/ytdl-org/youtube-dl/fork)
2. Check out the source code with:
git clone git@github.com:YOUR_GITHUB_USERNAME/youtube-dl.git
3. Start a new git branch with
cd youtube-dl
git checkout -b yourextractor
4. Start with this simple template and save it to `youtube_dl/extractor/yourextractor.py`:
```python
# coding: utf-8
from __future__ import unicode_literals
from .common import InfoExtractor
class YourExtractorIE(InfoExtractor):
_VALID_URL = r'https?://(?:www\.)?yourextractor\.com/watch/(?P<id>[0-9]+)'
_TEST = {
'url': 'https://yourextractor.com/watch/42',
'md5': 'TODO: md5 sum of the first 10241 bytes of the video file (use --test)',
'info_dict': {
'id': '42',
'ext': 'mp4',
'title': 'Video title goes here',
'thumbnail': r're:^https?://.*\.jpg$',
# TODO more properties, either as:
# * A value
# * MD5 checksum; start the string with md5:
# * A regular expression; start the string with re:
# * Any Python type (for example int or float)
}
}
def _real_extract(self, url):
video_id = self._match_id(url)
webpage = self._download_webpage(url, video_id)
# TODO more code goes here, for example ...
title = self._html_search_regex(r'<h1>(.+?)</h1>', webpage, 'title')
return {
'id': video_id,
'title': title,
'description': self._og_search_description(webpage),
'uploader': self._search_regex(r'<div[^>]+id="uploader"[^>]*>([^<]+)<', webpage, 'uploader', fatal=False),
# TODO more properties (see youtube_dl/extractor/common.py)
}
```
5. Add an import in [`youtube_dl/extractor/extractors.py`](https://github.com/ytdl-org/youtube-dl/blob/master/youtube_dl/extractor/extractors.py). This makes the extractor available for use, as long as the class ends with `IE`.
6. Run `python test/test_download.py TestDownload.test_YourExtractor`. This *should fail* at first, but you can continually re-run it until you're done. If you decide to add more than one test, then rename ``_TEST`` to ``_TESTS`` and make it into a list of dictionaries. The tests will then be named `TestDownload.test_YourExtractor`, `TestDownload.test_YourExtractor_1`, `TestDownload.test_YourExtractor_2`, etc. Note that tests with `only_matching` key in test's dict are not counted in.
7. Have a look at [`youtube_dl/extractor/common.py`](https://github.com/ytdl-org/youtube-dl/blob/master/youtube_dl/extractor/common.py) for possible helper methods and a [detailed description of what your extractor should and may return](https://github.com/ytdl-org/youtube-dl/blob/7f41a598b3fba1bcab2817de64a08941200aa3c8/youtube_dl/extractor/common.py#L94-L303). Add tests and code for as many as you want.
8. Make sure your code follows [youtube-dl coding conventions](#youtube-dl-coding-conventions) and check the code with [flake8](https://flake8.pycqa.org/en/latest/index.html#quickstart):
$ flake8 youtube_dl/extractor/yourextractor.py
9. Make sure your code works under all [Python](https://www.python.org/) versions claimed supported by youtube-dl, namely 2.6, 2.7, and 3.2+.
10. When the tests pass, [add](https://git-scm.com/docs/git-add) the new files and [commit](https://git-scm.com/docs/git-commit) them and [push](https://git-scm.com/docs/git-push) the result, like this:
$ git add youtube_dl/extractor/extractors.py
$ git add youtube_dl/extractor/yourextractor.py
$ git commit -m '[yourextractor] Add new extractor'
$ git push origin yourextractor
11. Finally, [create a pull request](https://help.github.com/articles/creating-a-pull-request). We'll then review and merge it.
In any case, thank you very much for your contributions!
## youtube-dl coding conventions
This section introduces a guide lines for writing idiomatic, robust and future-proof extractor code.
Extractors are very fragile by nature since they depend on the layout of the source data provided by 3rd party media hosters out of your control and this layout tends to change. As an extractor implementer your task is not only to write code that will extract media links and metadata correctly but also to minimize dependency on the source's layout and even to make the code foresee potential future changes and be ready for that. This is important because it will allow the extractor not to break on minor layout changes thus keeping old youtube-dl versions working. Even though this breakage issue is easily fixed by emitting a new version of youtube-dl with a fix incorporated, all the previous versions become broken in all repositories and distros' packages that may not be so prompt in fetching the update from us. Needless to say, some non rolling release distros may never receive an update at all.
### Mandatory and optional metafields
For extraction to work youtube-dl relies on metadata your extractor extracts and provides to youtube-dl expressed by an [information dictionary](https://github.com/ytdl-org/youtube-dl/blob/7f41a598b3fba1bcab2817de64a08941200aa3c8/youtube_dl/extractor/common.py#L94-L303) or simply *info dict*. Only the following meta fields in the *info dict* are considered mandatory for a successful extraction process by youtube-dl:
- `id` (media identifier)
- `title` (media title)
- `url` (media download URL) or `formats`
In fact only the last option is technically mandatory (i.e. if you can't figure out the download location of the media the extraction does not make any sense). But by convention youtube-dl also treats `id` and `title` as mandatory. Thus the aforementioned metafields are the critical data that the extraction does not make any sense without and if any of them fail to be extracted then the extractor is considered completely broken.
[Any field](https://github.com/ytdl-org/youtube-dl/blob/7f41a598b3fba1bcab2817de64a08941200aa3c8/youtube_dl/extractor/common.py#L188-L303) apart from the aforementioned ones are considered **optional**. That means that extraction should be **tolerant** to situations when sources for these fields can potentially be unavailable (even if they are always available at the moment) and **future-proof** in order not to break the extraction of general purpose mandatory fields.
#### Example
Say you have some source dictionary `meta` that you've fetched as JSON with HTTP request and it has a key `summary`:
```python
meta = self._download_json(url, video_id)
```
Assume at this point `meta`'s layout is:
```python
{
...
"summary": "some fancy summary text",
...
}
```
Assume you want to extract `summary` and put it into the resulting info dict as `description`. Since `description` is an optional meta field you should be ready that this key may be missing from the `meta` dict, so that you should extract it like:
```python
description = meta.get('summary') # correct
```
and not like:
```python
description = meta['summary'] # incorrect
```
The latter will break extraction process with `KeyError` if `summary` disappears from `meta` at some later time but with the former approach extraction will just go ahead with `description` set to `None` which is perfectly fine (remember `None` is equivalent to the absence of data).
Similarly, you should pass `fatal=False` when extracting optional data from a webpage with `_search_regex`, `_html_search_regex` or similar methods, for instance:
```python
description = self._search_regex(
r'<span[^>]+id="title"[^>]*>([^<]+)<',
webpage, 'description', fatal=False)
```
With `fatal` set to `False` if `_search_regex` fails to extract `description` it will emit a warning and continue extraction.
You can also pass `default=<some fallback value>`, for example:
```python
description = self._search_regex(
r'<span[^>]+id="title"[^>]*>([^<]+)<',
webpage, 'description', default=None)
```
On failure this code will silently continue the extraction with `description` set to `None`. That is useful for metafields that may or may not be present.
### Provide fallbacks
When extracting metadata try to do so from multiple sources. For example if `title` is present in several places, try extracting from at least some of them. This makes it more future-proof in case some of the sources become unavailable.
#### Example
Say `meta` from the previous example has a `title` and you are about to extract it. Since `title` is a mandatory meta field you should end up with something like:
```python
title = meta['title']
```
If `title` disappears from `meta` in future due to some changes on the hoster's side the extraction would fail since `title` is mandatory. That's expected.
Assume that you have some another source you can extract `title` from, for example `og:title` HTML meta of a `webpage`. In this case you can provide a fallback scenario:
```python
title = meta.get('title') or self._og_search_title(webpage)
```
This code will try to extract from `meta` first and if it fails it will try extracting `og:title` from a `webpage`.
### Regular expressions
#### Don't capture groups you don't use
Capturing group must be an indication that it's used somewhere in the code. Any group that is not used must be non capturing.
##### Example
Don't capture id attribute name here since you can't use it for anything anyway.
Correct:
```python
r'(?:id|ID)=(?P<id>\d+)'
```
Incorrect:
```python
r'(id|ID)=(?P<id>\d+)'
```
#### Make regular expressions relaxed and flexible
When using regular expressions try to write them fuzzy, relaxed and flexible, skipping insignificant parts that are more likely to change, allowing both single and double quotes for quoted values and so on.
##### Example
Say you need to extract `title` from the following HTML code:
```html
<span style="position: absolute; left: 910px; width: 90px; float: right; z-index: 9999;" class="title">some fancy title</span>
```
The code for that task should look similar to:
```python
title = self._search_regex(
r'<span[^>]+class="title"[^>]*>([^<]+)', webpage, 'title')
```
Or even better:
```python
title = self._search_regex(
r'<span[^>]+class=(["\'])title\1[^>]*>(?P<title>[^<]+)',
webpage, 'title', group='title')
```
Note how you tolerate potential changes in the `style` attribute's value or switch from using double quotes to single for `class` attribute:
The code definitely should not look like:
```python
title = self._search_regex(
r'<span style="position: absolute; left: 910px; width: 90px; float: right; z-index: 9999;" class="title">(.*?)</span>',
webpage, 'title', group='title')
```
### Long lines policy
There is a soft limit to keep lines of code under 80 characters long. This means it should be respected if possible and if it does not make readability and code maintenance worse.
For example, you should **never** split long string literals like URLs or some other often copied entities over multiple lines to fit this limit:
Correct:
```python
'https://www.youtube.com/watch?v=FqZTN594JQw&list=PLMYEtVRpaqY00V9W81Cwmzp6N6vZqfUKD4'
```
Incorrect:
```python
'https://www.youtube.com/watch?v=FqZTN594JQw&list='
'PLMYEtVRpaqY00V9W81Cwmzp6N6vZqfUKD4'
```
### Inline values
Extracting variables is acceptable for reducing code duplication and improving readability of complex expressions. However, you should avoid extracting variables used only once and moving them to opposite parts of the extractor file, which makes reading the linear flow difficult.
#### Example
Correct:
```python
title = self._html_search_regex(r'<title>([^<]+)</title>', webpage, 'title')
```
Incorrect:
```python
TITLE_RE = r'<title>([^<]+)</title>'
# ...some lines of code...
title = self._html_search_regex(TITLE_RE, webpage, 'title')
```
### Collapse fallbacks
Multiple fallback values can quickly become unwieldy. Collapse multiple fallback values into a single expression via a list of patterns.
#### Example
Good:
```python
description = self._html_search_meta(
['og:description', 'description', 'twitter:description'],
webpage, 'description', default=None)
```
Unwieldy:
```python
description = (
self._og_search_description(webpage, default=None)
or self._html_search_meta('description', webpage, default=None)
or self._html_search_meta('twitter:description', webpage, default=None))
```
Methods supporting list of patterns are: `_search_regex`, `_html_search_regex`, `_og_search_property`, `_html_search_meta`.
### Trailing parentheses
Always move trailing parentheses after the last argument.
#### Example
Correct:
```python
lambda x: x['ResultSet']['Result'][0]['VideoUrlSet']['VideoUrl'],
list)
```
Incorrect:
```python
lambda x: x['ResultSet']['Result'][0]['VideoUrlSet']['VideoUrl'],
list,
)
```
### Use convenience conversion and parsing functions
Wrap all extracted numeric data into safe functions from [`youtube_dl/utils.py`](https://github.com/ytdl-org/youtube-dl/blob/master/youtube_dl/utils.py): `int_or_none`, `float_or_none`. Use them for string to number conversions as well.
Use `url_or_none` for safe URL processing.
Use `try_get` for safe metadata extraction from parsed JSON.
Use `unified_strdate` for uniform `upload_date` or any `YYYYMMDD` meta field extraction, `unified_timestamp` for uniform `timestamp` extraction, `parse_filesize` for `filesize` extraction, `parse_count` for count meta fields extraction, `parse_resolution`, `parse_duration` for `duration` extraction, `parse_age_limit` for `age_limit` extraction.
Explore [`youtube_dl/utils.py`](https://github.com/ytdl-org/youtube-dl/blob/master/youtube_dl/utils.py) for more useful convenience functions.
#### More examples
##### Safely extract optional description from parsed JSON
```python
description = try_get(response, lambda x: x['result']['video'][0]['summary'], compat_str)
```
##### Safely extract more optional metadata
```python
video = try_get(response, lambda x: x['result']['video'][0], dict) or {}
description = video.get('summary')
duration = float_or_none(video.get('durationMs'), scale=1000)
view_count = int_or_none(video.get('views'))
```
-6167
View File
File diff suppressed because it is too large Load Diff
-24
View File
@@ -1,24 +0,0 @@
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <http://unlicense.org/>
-9
View File
@@ -1,9 +0,0 @@
include README.md
include LICENSE
include AUTHORS
include ChangeLog
include youtube-dl.bash-completion
include youtube-dl.fish
include youtube-dl.1
recursive-include docs Makefile conf.py *.rst
recursive-include test *
-135
View File
@@ -1,135 +0,0 @@
all: youtube-dl README.md CONTRIBUTING.md README.txt youtube-dl.1 youtube-dl.bash-completion youtube-dl.zsh youtube-dl.fish supportedsites
clean:
rm -rf youtube-dl.1.temp.md youtube-dl.1 youtube-dl.bash-completion README.txt MANIFEST build/ dist/ .coverage cover/ youtube-dl.tar.gz youtube-dl.zsh youtube-dl.fish youtube_dl/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-dl youtube-dl.exe
find . -name "*.pyc" -delete
find . -name "*.class" -delete
PREFIX ?= /usr/local
BINDIR ?= $(PREFIX)/bin
MANDIR ?= $(PREFIX)/man
SHAREDIR ?= $(PREFIX)/share
PYTHON ?= /usr/bin/env python
# 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)
# 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)
install: youtube-dl youtube-dl.1 youtube-dl.bash-completion youtube-dl.zsh youtube-dl.fish
install -d $(DESTDIR)$(BINDIR)
install -m 755 youtube-dl $(DESTDIR)$(BINDIR)
install -d $(DESTDIR)$(MANDIR)/man1
install -m 644 youtube-dl.1 $(DESTDIR)$(MANDIR)/man1
install -d $(DESTDIR)$(SYSCONFDIR)/bash_completion.d
install -m 644 youtube-dl.bash-completion $(DESTDIR)$(SYSCONFDIR)/bash_completion.d/youtube-dl
install -d $(DESTDIR)$(SHAREDIR)/zsh/site-functions
install -m 644 youtube-dl.zsh $(DESTDIR)$(SHAREDIR)/zsh/site-functions/_youtube-dl
install -d $(DESTDIR)$(SYSCONFDIR)/fish/completions
install -m 644 youtube-dl.fish $(DESTDIR)$(SYSCONFDIR)/fish/completions/youtube-dl.fish
codetest:
flake8 .
test:
#nosetests --with-coverage --cover-package=youtube_dl --cover-html --verbose --processes 4 test
nosetests --verbose test
$(MAKE) codetest
ot: offlinetest
# 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-dl.tar.gz
.PHONY: all clean install test tar bash-completion pypi-files zsh-completion fish-completion ot offlinetest codetest supportedsites
pypi-files: youtube-dl.bash-completion README.txt youtube-dl.1 youtube-dl.fish
youtube-dl: youtube_dl/*.py youtube_dl/*/*.py
mkdir -p zip
for d in youtube_dl youtube_dl/downloader youtube_dl/extractor youtube_dl/postprocessor ; do \
mkdir -p zip/$$d ;\
cp -pPR $$d/*.py zip/$$d/ ;\
done
touch -t 200001010101 zip/youtube_dl/*.py zip/youtube_dl/*/*.py
mv zip/youtube_dl/__main__.py zip/
cd zip ; zip -q ../youtube-dl youtube_dl/*.py youtube_dl/*/*.py __main__.py
rm -rf zip
echo '#!$(PYTHON)' > youtube-dl
cat youtube-dl.zip >> youtube-dl
rm youtube-dl.zip
chmod a+x youtube-dl
README.md: youtube_dl/*.py youtube_dl/*/*.py
COLUMNS=80 $(PYTHON) youtube_dl/__main__.py --help | $(PYTHON) devscripts/make_readme.py
CONTRIBUTING.md: README.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 youtube_dl/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/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/4_bug_report.md .github/ISSUE_TEMPLATE/4_bug_report.md
$(PYTHON) devscripts/make_issue_template.py .github/ISSUE_TEMPLATE_tmpl/5_feature_request.md .github/ISSUE_TEMPLATE/5_feature_request.md
supportedsites:
$(PYTHON) devscripts/make_supportedsites.py docs/supportedsites.md
README.txt: README.md
pandoc -f $(MARKDOWN) -t plain README.md -o README.txt
youtube-dl.1: README.md
$(PYTHON) devscripts/prepare_manpage.py youtube-dl.1.temp.md
pandoc -s -f $(MARKDOWN) -t man youtube-dl.1.temp.md -o youtube-dl.1
rm -f youtube-dl.1.temp.md
youtube-dl.bash-completion: youtube_dl/*.py youtube_dl/*/*.py devscripts/bash-completion.in
$(PYTHON) devscripts/bash-completion.py
bash-completion: youtube-dl.bash-completion
youtube-dl.zsh: youtube_dl/*.py youtube_dl/*/*.py devscripts/zsh-completion.in
$(PYTHON) devscripts/zsh-completion.py
zsh-completion: youtube-dl.zsh
youtube-dl.fish: youtube_dl/*.py youtube_dl/*/*.py devscripts/fish-completion.in
$(PYTHON) devscripts/fish-completion.py
fish-completion: youtube-dl.fish
lazy-extractors: youtube_dl/extractor/lazy_extractors.py
_EXTRACTOR_FILES = $(shell find youtube_dl/extractor -iname '*.py' -and -not -iname 'lazy_extractors.py')
youtube_dl/extractor/lazy_extractors.py: devscripts/make_lazy_extractors.py devscripts/lazy_load_template.py $(_EXTRACTOR_FILES)
$(PYTHON) devscripts/make_lazy_extractors.py $@
youtube-dl.tar.gz: youtube-dl README.md README.txt youtube-dl.1 youtube-dl.bash-completion youtube-dl.zsh youtube-dl.fish ChangeLog AUTHORS
@tar -czf youtube-dl.tar.gz --transform "s|^|youtube-dl/|" --owner 0 --group 0 \
--exclude '*.DS_Store' \
--exclude '*.kate-swp' \
--exclude '*.pyc' \
--exclude '*.pyo' \
--exclude '*~' \
--exclude '__pycache__' \
--exclude '.git' \
--exclude 'docs/_build' \
-- \
bin devscripts test youtube_dl docs \
ChangeLog AUTHORS LICENSE README.md README.txt \
Makefile MANIFEST.in youtube-dl.1 youtube-dl.bash-completion \
youtube-dl.zsh youtube-dl.fish setup.py setup.cfg \
youtube-dl
-1580
View File
File diff suppressed because it is too large Load Diff
+50
View File
@@ -0,0 +1,50 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<title>About youtube-dl</title>
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body>
<table class="heading"><tr>
<td class="title"><a href="index.html">youtube-dl</a></td>
<td class="subtitle">About the program</td>
</tr></table>
<h1>What is it?</h1>
<p><em>youtube-dl</em> is a command-line program to download videos from YouTube.com and a few <a href="supportedsites.html" style="color: blue; text-decoration: underline;">more sites</a>. It requires the <a href="http://www.python.org/">Python interpreter</a>, version 2.6, 2.7, or 3.2+, and it is not platform specific. It should work in your Unix box, in Windows or in Mac OS X. It is released to the public domain, which means you can modify it, redistribute it or use it however you like. The project is currently being developed at <a href="https://github.com/ytdl-org/youtube-dl/"><strong>GitHub</strong></a>.</p>
<h1>Authors</h1>
<p>Core team:</p>
<ul>
<li><a href="https://github.com/remitamine">Remita Amine</a>: core developer.</li>
</ul>
<p>Core team (inactive):</p>
<ul>
<li><a href="https://github.com/rg3">Ricardo Garcia Gonzalez</a>: original author, program core.</li>
<li><a href="https://github.com/phihag">Philipp Hagemeister</a>: core developer, maintainer 2011-2016.</li>
<li><a href="https://github.com/FiloSottile">Filippo Valsorda</a>: core developer, Windows build, testing.</li>
<li><a href="https://github.com/jaimeMF">Jaime Marquínez Ferrándiz</a>: core developer.</li>
<li><a href="https://github.com/yan12125">Yen Chi Hsuan</a>: core developer.</li>
<li><a href="https://github.com/naglis">Naglis Jonaitis</a>: core developer.</li>
<li><a href="https://github.com/pulpe">pulpe</a>: core developer.</li>
<li><a href="https://github.com/dstftw">Sergey M.</a>: core developer, maintainer 2016-2021.</li>
</ul>
<p>Many <a href="https://github.com/ytdl-org/youtube-dl/blob/master/AUTHORS">other people</a> contributing patches, code, ideas and kind messages. <a href="https://github.com/ytdl-org/youtube-dl/graphs/contributors">Too many</a> to be listed here. You know who you are. Thank you very much.</p>
<div class="note">
<a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/deed.en_US">
<img alt="Creative Commons License" style="border-width:0"
src="https://i.creativecommons.org/l/by-sa/3.0/80x15.png" /></a><br />
Copyright © 2006-2011 Ricardo Garcia Gonzalez<br />
Copyright © 2011-2021 youtube-dl developers
</div>
</body>
</html>
-6
View File
@@ -1,6 +0,0 @@
#!/usr/bin/env python
import youtube_dl
if __name__ == '__main__':
youtube_dl.main()
Binary file not shown.
Binary file not shown.
-1
View File
@@ -1 +0,0 @@
# Empty file needed to make devscripts.utils properly importable from outside
-29
View File
@@ -1,29 +0,0 @@
__youtube_dl()
{
local cur prev opts fileopts diropts keywords
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts="{{flags}}"
keywords=":ytfavorites :ytrecommended :ytsubscriptions :ytwatchlater :ythistory"
fileopts="-a|--batch-file|--download-archive|--cookies|--load-info"
diropts="--cache-dir"
if [[ ${prev} =~ ${fileopts} ]]; then
COMPREPLY=( $(compgen -f -- ${cur}) )
return 0
elif [[ ${prev} =~ ${diropts} ]]; then
COMPREPLY=( $(compgen -d -- ${cur}) )
return 0
fi
if [[ ${cur} =~ : ]]; then
COMPREPLY=( $(compgen -W "${keywords}" -- ${cur}) )
return 0
elif [[ ${cur} == * ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
fi
}
complete -F __youtube_dl youtube-dl
-33
View File
@@ -1,33 +0,0 @@
#!/usr/bin/env python
from __future__ import unicode_literals
import os
from os.path import dirname as dirn
import sys
sys.path.insert(0, dirn(dirn(os.path.abspath(__file__))))
import youtube_dl
from youtube_dl.compat import compat_open as open
from utils import read_file
BASH_COMPLETION_FILE = "youtube-dl.bash-completion"
BASH_COMPLETION_TEMPLATE = "devscripts/bash-completion.in"
def build_completion(opt_parser):
opts_flag = []
for group in opt_parser.option_groups:
for option in group.option_list:
# for every long flag
opts_flag.append(option.get_opt_string())
template = read_file(BASH_COMPLETION_TEMPLATE)
with open(BASH_COMPLETION_FILE, "w", encoding='utf-8') as f:
# just using the special char
filled_template = template.replace("{{flags}}", " ".join(opts_flag))
f.write(filled_template)
parser = youtube_dl.parseOpts()[0]
build_completion(parser)
-433
View File
@@ -1,433 +0,0 @@
#!/usr/bin/python3
import argparse
import ctypes
import functools
import shutil
import subprocess
import sys
import tempfile
import threading
import traceback
import os.path
sys.path.insert(0, os.path.dirname(os.path.dirname((os.path.abspath(__file__)))))
from youtube_dl.compat import (
compat_input,
compat_http_server,
compat_str,
compat_urlparse,
)
# These are not used outside of buildserver.py thus not in compat.py
try:
import winreg as compat_winreg
except ImportError: # Python 2
import _winreg as compat_winreg
try:
import socketserver as compat_socketserver
except ImportError: # Python 2
import SocketServer as compat_socketserver
class BuildHTTPServer(compat_socketserver.ThreadingMixIn, compat_http_server.HTTPServer):
allow_reuse_address = True
advapi32 = ctypes.windll.advapi32
SC_MANAGER_ALL_ACCESS = 0xf003f
SC_MANAGER_CREATE_SERVICE = 0x02
SERVICE_WIN32_OWN_PROCESS = 0x10
SERVICE_AUTO_START = 0x2
SERVICE_ERROR_NORMAL = 0x1
DELETE = 0x00010000
SERVICE_STATUS_START_PENDING = 0x00000002
SERVICE_STATUS_RUNNING = 0x00000004
SERVICE_ACCEPT_STOP = 0x1
SVCNAME = 'youtubedl_builder'
LPTSTR = ctypes.c_wchar_p
START_CALLBACK = ctypes.WINFUNCTYPE(None, ctypes.c_int, ctypes.POINTER(LPTSTR))
class SERVICE_TABLE_ENTRY(ctypes.Structure):
_fields_ = [
('lpServiceName', LPTSTR),
('lpServiceProc', START_CALLBACK)
]
HandlerEx = ctypes.WINFUNCTYPE(
ctypes.c_int, # return
ctypes.c_int, # dwControl
ctypes.c_int, # dwEventType
ctypes.c_void_p, # lpEventData,
ctypes.c_void_p, # lpContext,
)
def _ctypes_array(c_type, py_array):
ar = (c_type * len(py_array))()
ar[:] = py_array
return ar
def win_OpenSCManager():
res = advapi32.OpenSCManagerW(None, None, SC_MANAGER_ALL_ACCESS)
if not res:
raise Exception('Opening service manager failed - '
'are you running this as administrator?')
return res
def win_install_service(service_name, cmdline):
manager = win_OpenSCManager()
try:
h = advapi32.CreateServiceW(
manager, service_name, None,
SC_MANAGER_CREATE_SERVICE, SERVICE_WIN32_OWN_PROCESS,
SERVICE_AUTO_START, SERVICE_ERROR_NORMAL,
cmdline, None, None, None, None, None)
if not h:
raise OSError('Service creation failed: %s' % ctypes.FormatError())
advapi32.CloseServiceHandle(h)
finally:
advapi32.CloseServiceHandle(manager)
def win_uninstall_service(service_name):
manager = win_OpenSCManager()
try:
h = advapi32.OpenServiceW(manager, service_name, DELETE)
if not h:
raise OSError('Could not find service %s: %s' % (
service_name, ctypes.FormatError()))
try:
if not advapi32.DeleteService(h):
raise OSError('Deletion failed: %s' % ctypes.FormatError())
finally:
advapi32.CloseServiceHandle(h)
finally:
advapi32.CloseServiceHandle(manager)
def win_service_report_event(service_name, msg, is_error=True):
with open('C:/sshkeys/log', 'a', encoding='utf-8') as f:
f.write(msg + '\n')
event_log = advapi32.RegisterEventSourceW(None, service_name)
if not event_log:
raise OSError('Could not report event: %s' % ctypes.FormatError())
try:
type_id = 0x0001 if is_error else 0x0004
event_id = 0xc0000000 if is_error else 0x40000000
lines = _ctypes_array(LPTSTR, [msg])
if not advapi32.ReportEventW(
event_log, type_id, 0, event_id, None, len(lines), 0,
lines, None):
raise OSError('Event reporting failed: %s' % ctypes.FormatError())
finally:
advapi32.DeregisterEventSource(event_log)
def win_service_handler(stop_event, *args):
try:
raise ValueError('Handler called with args ' + repr(args))
TODO
except Exception as e:
tb = traceback.format_exc()
msg = str(e) + '\n' + tb
win_service_report_event(service_name, msg, is_error=True)
raise
def win_service_set_status(handle, status_code):
svcStatus = SERVICE_STATUS()
svcStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS
svcStatus.dwCurrentState = status_code
svcStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP
svcStatus.dwServiceSpecificExitCode = 0
if not advapi32.SetServiceStatus(handle, ctypes.byref(svcStatus)):
raise OSError('SetServiceStatus failed: %r' % ctypes.FormatError())
def win_service_main(service_name, real_main, argc, argv_raw):
try:
# args = [argv_raw[i].value for i in range(argc)]
stop_event = threading.Event()
handler = HandlerEx(functools.partial(stop_event, win_service_handler))
h = advapi32.RegisterServiceCtrlHandlerExW(service_name, handler, None)
if not h:
raise OSError('Handler registration failed: %s' %
ctypes.FormatError())
TODO
except Exception as e:
tb = traceback.format_exc()
msg = str(e) + '\n' + tb
win_service_report_event(service_name, msg, is_error=True)
raise
def win_service_start(service_name, real_main):
try:
cb = START_CALLBACK(
functools.partial(win_service_main, service_name, real_main))
dispatch_table = _ctypes_array(SERVICE_TABLE_ENTRY, [
SERVICE_TABLE_ENTRY(
service_name,
cb
),
SERVICE_TABLE_ENTRY(None, ctypes.cast(None, START_CALLBACK))
])
if not advapi32.StartServiceCtrlDispatcherW(dispatch_table):
raise OSError('ctypes start failed: %s' % ctypes.FormatError())
except Exception as e:
tb = traceback.format_exc()
msg = str(e) + '\n' + tb
win_service_report_event(service_name, msg, is_error=True)
raise
def main(args=None):
parser = argparse.ArgumentParser()
parser.add_argument('-i', '--install',
action='store_const', dest='action', const='install',
help='Launch at Windows startup')
parser.add_argument('-u', '--uninstall',
action='store_const', dest='action', const='uninstall',
help='Remove Windows service')
parser.add_argument('-s', '--service',
action='store_const', dest='action', const='service',
help='Run as a Windows service')
parser.add_argument('-b', '--bind', metavar='<host:port>',
action='store', default='0.0.0.0:8142',
help='Bind to host:port (default %default)')
options = parser.parse_args(args=args)
if options.action == 'install':
fn = os.path.abspath(__file__).replace('v:', '\\\\vboxsrv\\vbox')
cmdline = '%s %s -s -b %s' % (sys.executable, fn, options.bind)
win_install_service(SVCNAME, cmdline)
return
if options.action == 'uninstall':
win_uninstall_service(SVCNAME)
return
if options.action == 'service':
win_service_start(SVCNAME, main)
return
host, port_str = options.bind.split(':')
port = int(port_str)
print('Listening on %s:%d' % (host, port))
srv = BuildHTTPServer((host, port), BuildHTTPRequestHandler)
thr = threading.Thread(target=srv.serve_forever)
thr.start()
compat_input('Press ENTER to shut down')
srv.shutdown()
thr.join()
def rmtree(path):
for name in os.listdir(path):
fname = os.path.join(path, name)
if os.path.isdir(fname):
rmtree(fname)
else:
os.chmod(fname, 0o666)
os.remove(fname)
os.rmdir(path)
class BuildError(Exception):
def __init__(self, output, code=500):
self.output = output
self.code = code
def __str__(self):
return self.output
class HTTPError(BuildError):
pass
class PythonBuilder(object):
def __init__(self, **kwargs):
python_version = kwargs.pop('python', '3.4')
python_path = None
for node in ('Wow6432Node\\', ''):
try:
key = compat_winreg.OpenKey(
compat_winreg.HKEY_LOCAL_MACHINE,
r'SOFTWARE\%sPython\PythonCore\%s\InstallPath' % (node, python_version))
try:
python_path, _ = compat_winreg.QueryValueEx(key, '')
finally:
compat_winreg.CloseKey(key)
break
except Exception:
pass
if not python_path:
raise BuildError('No such Python version: %s' % python_version)
self.pythonPath = python_path
super(PythonBuilder, self).__init__(**kwargs)
class GITInfoBuilder(object):
def __init__(self, **kwargs):
try:
self.user, self.repoName = kwargs['path'][:2]
self.rev = kwargs.pop('rev')
except ValueError:
raise BuildError('Invalid path')
except KeyError as e:
raise BuildError('Missing mandatory parameter "%s"' % e.args[0])
path = os.path.join(os.environ['APPDATA'], 'Build archive', self.repoName, self.user)
if not os.path.exists(path):
os.makedirs(path)
self.basePath = tempfile.mkdtemp(dir=path)
self.buildPath = os.path.join(self.basePath, 'build')
super(GITInfoBuilder, self).__init__(**kwargs)
class GITBuilder(GITInfoBuilder):
def build(self):
try:
subprocess.check_output(['git', 'clone', 'git://github.com/%s/%s.git' % (self.user, self.repoName), self.buildPath])
subprocess.check_output(['git', 'checkout', self.rev], cwd=self.buildPath)
except subprocess.CalledProcessError as e:
raise BuildError(e.output)
super(GITBuilder, self).build()
class YoutubeDLBuilder(object):
authorizedUsers = ['fraca7', 'phihag', 'rg3', 'FiloSottile', 'ytdl-org']
def __init__(self, **kwargs):
if self.repoName != 'youtube-dl':
raise BuildError('Invalid repository "%s"' % self.repoName)
if self.user not in self.authorizedUsers:
raise HTTPError('Unauthorized user "%s"' % self.user, 401)
super(YoutubeDLBuilder, self).__init__(**kwargs)
def build(self):
try:
proc = subprocess.Popen([os.path.join(self.pythonPath, 'python.exe'), 'setup.py', 'py2exe'], stdin=subprocess.PIPE, cwd=self.buildPath)
proc.wait()
#subprocess.check_output([os.path.join(self.pythonPath, 'python.exe'), 'setup.py', 'py2exe'],
# cwd=self.buildPath)
except subprocess.CalledProcessError as e:
raise BuildError(e.output)
super(YoutubeDLBuilder, self).build()
class DownloadBuilder(object):
def __init__(self, **kwargs):
self.handler = kwargs.pop('handler')
self.srcPath = os.path.join(self.buildPath, *tuple(kwargs['path'][2:]))
self.srcPath = os.path.abspath(os.path.normpath(self.srcPath))
if not self.srcPath.startswith(self.buildPath):
raise HTTPError(self.srcPath, 401)
super(DownloadBuilder, self).__init__(**kwargs)
def build(self):
if not os.path.exists(self.srcPath):
raise HTTPError('No such file', 404)
if os.path.isdir(self.srcPath):
raise HTTPError('Is a directory: %s' % self.srcPath, 401)
self.handler.send_response(200)
self.handler.send_header('Content-Type', 'application/octet-stream')
self.handler.send_header('Content-Disposition', 'attachment; filename=%s' % os.path.split(self.srcPath)[-1])
self.handler.send_header('Content-Length', str(os.stat(self.srcPath).st_size))
self.handler.end_headers()
with open(self.srcPath, 'rb') as src:
shutil.copyfileobj(src, self.handler.wfile)
super(DownloadBuilder, self).build()
class CleanupTempDir(object):
def build(self):
try:
rmtree(self.basePath)
except Exception as e:
print('WARNING deleting "%s": %s' % (self.basePath, e))
super(CleanupTempDir, self).build()
class Null(object):
def __init__(self, **kwargs):
pass
def start(self):
pass
def close(self):
pass
def build(self):
pass
class Builder(PythonBuilder, GITBuilder, YoutubeDLBuilder, DownloadBuilder, CleanupTempDir, Null):
pass
class BuildHTTPRequestHandler(compat_http_server.BaseHTTPRequestHandler):
actionDict = {'build': Builder, 'download': Builder} # They're the same, no more caching.
def do_GET(self):
path = compat_urlparse.urlparse(self.path)
paramDict = dict([(key, value[0]) for key, value in compat_urlparse.parse_qs(path.query).items()])
action, _, path = path.path.strip('/').partition('/')
if path:
path = path.split('/')
if action in self.actionDict:
try:
builder = self.actionDict[action](path=path, handler=self, **paramDict)
builder.start()
try:
builder.build()
finally:
builder.close()
except BuildError as e:
self.send_response(e.code)
msg = compat_str(e).encode('UTF-8')
self.send_header('Content-Type', 'text/plain; charset=UTF-8')
self.send_header('Content-Length', len(msg))
self.end_headers()
self.wfile.write(msg)
else:
self.send_response(500, 'Unknown build method "%s"' % action)
else:
self.send_response(500, 'Malformed URL')
if __name__ == '__main__':
main()
-60
View File
@@ -1,60 +0,0 @@
#!/usr/bin/env python
from __future__ import unicode_literals
"""
This script employs a VERY basic heuristic ('porn' in webpage.lower()) to check
if we are not 'age_limit' tagging some porn site
A second approach implemented relies on a list of porn domains, to activate it
pass the list filename as the only argument
"""
# Allow direct execution
import os
import sys
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from test.helper import gettestcases
from youtube_dl.utils import compat_urllib_parse_urlparse
from youtube_dl.utils import compat_urllib_request
if len(sys.argv) > 1:
METHOD = 'LIST'
LIST = open(sys.argv[1]).read().decode('utf8').strip()
else:
METHOD = 'EURISTIC'
for test in gettestcases():
if METHOD == 'EURISTIC':
try:
webpage = compat_urllib_request.urlopen(test['url'], timeout=10).read()
except Exception:
print('\nFail: {0}'.format(test['name']))
continue
webpage = webpage.decode('utf8', 'replace')
RESULT = 'porn' in webpage.lower()
elif METHOD == 'LIST':
domain = compat_urllib_parse_urlparse(test['url']).netloc
if not domain:
print('\nFail: {0}'.format(test['name']))
continue
domain = '.'.join(domain.split('.')[-2:])
RESULT = ('.' + domain + '\n' in LIST or '\n' + domain + '\n' in LIST)
if RESULT and ('info_dict' not in test or 'age_limit' not in test['info_dict']
or test['info_dict']['age_limit'] != 18):
print('\nPotential missing age_limit check: {0}'.format(test['name']))
elif not RESULT and ('info_dict' in test and 'age_limit' in test['info_dict']
and test['info_dict']['age_limit'] == 18):
print('\nPotential false negative: {0}'.format(test['name']))
else:
sys.stdout.write('.')
sys.stdout.flush()
print()
-83
View File
@@ -1,83 +0,0 @@
#!/usr/bin/env python
# coding: utf-8
from __future__ import unicode_literals
"""
This script displays the API parameters corresponding to a yt-dl command line
Example:
$ ./cli_to_api.py -f best
{u'format': 'best'}
$
"""
# Allow direct execution
import os
import sys
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
import youtube_dl
from types import MethodType
def cli_to_api(*opts):
YDL = youtube_dl.YoutubeDL
# to extract the parsed options, break out of YoutubeDL instantiation
# return options via this Exception
class ParseYTDLResult(Exception):
def __init__(self, result):
super(ParseYTDLResult, self).__init__('result')
self.opts = result
# replacement constructor that raises ParseYTDLResult
def ytdl_init(ydl, ydl_opts):
super(YDL, ydl).__init__(ydl_opts)
raise ParseYTDLResult(ydl_opts)
# patch in the constructor
YDL.__init__ = MethodType(ytdl_init, YDL)
# core parser
def parsed_options(argv):
try:
youtube_dl._real_main(list(argv))
except ParseYTDLResult as result:
return result.opts
# from https://github.com/yt-dlp/yt-dlp/issues/5859#issuecomment-1363938900
default = parsed_options([])
def neq_opt(a, b):
if a == b:
return False
if a is None and repr(type(object)).endswith(".utils.DateRange'>"):
return '0001-01-01 - 9999-12-31' != '{0}'.format(b)
return a != b
diff = dict((k, v) for k, v in parsed_options(opts).items() if neq_opt(default[k], v))
if 'postprocessors' in diff:
diff['postprocessors'] = [pp for pp in diff['postprocessors'] if pp not in default['postprocessors']]
return diff
def main():
from pprint import PrettyPrinter
pprint = PrettyPrinter()
super_format = pprint.format
def format(object, context, maxlevels, level):
if repr(type(object)).endswith(".utils.DateRange'>"):
return '{0}: {1}>'.format(repr(object)[:-2], object), True, False
return super_format(object, context, maxlevels, level)
pprint.format = format
pprint.pprint(cli_to_api(*sys.argv))
if __name__ == '__main__':
main()
-111
View File
@@ -1,111 +0,0 @@
#!/usr/bin/env python
from __future__ import unicode_literals
import json
import mimetypes
import netrc
import optparse
import os
import re
import sys
dirn = os.path.dirname
sys.path.insert(0, dirn(dirn(os.path.abspath(__file__))))
from youtube_dl.compat import (
compat_basestring,
compat_getpass,
compat_print,
compat_urllib_request,
)
from youtube_dl.utils import (
make_HTTPS_handler,
sanitized_Request,
)
from utils import read_file
class GitHubReleaser(object):
_API_URL = 'https://api.github.com/repos/ytdl-org/youtube-dl/releases'
_UPLOADS_URL = 'https://uploads.github.com/repos/ytdl-org/youtube-dl/releases/%s/assets?name=%s'
_NETRC_MACHINE = 'github.com'
def __init__(self, debuglevel=0):
self._init_github_account()
https_handler = make_HTTPS_handler({}, debuglevel=debuglevel)
self._opener = compat_urllib_request.build_opener(https_handler)
def _init_github_account(self):
try:
info = netrc.netrc().authenticators(self._NETRC_MACHINE)
if info is not None:
self._token = info[2]
compat_print('Using GitHub credentials found in .netrc...')
return
else:
compat_print('No GitHub credentials found in .netrc')
except (IOError, netrc.NetrcParseError):
compat_print('Unable to parse .netrc')
self._token = compat_getpass(
'Type your GitHub PAT (personal access token) and press [Return]: ')
def _call(self, req):
if isinstance(req, compat_basestring):
req = sanitized_Request(req)
req.add_header('Authorization', 'token %s' % self._token)
response = self._opener.open(req).read().decode('utf-8')
return json.loads(response)
def list_releases(self):
return self._call(self._API_URL)
def create_release(self, tag_name, name=None, body='', draft=False, prerelease=False):
data = {
'tag_name': tag_name,
'target_commitish': 'master',
'name': name,
'body': body,
'draft': draft,
'prerelease': prerelease,
}
req = sanitized_Request(self._API_URL, json.dumps(data).encode('utf-8'))
return self._call(req)
def create_asset(self, release_id, asset):
asset_name = os.path.basename(asset)
url = self._UPLOADS_URL % (release_id, asset_name)
# Our files are small enough to be loaded directly into memory.
data = open(asset, 'rb').read()
req = sanitized_Request(url, data)
mime_type, _ = mimetypes.guess_type(asset_name)
req.add_header('Content-Type', mime_type or 'application/octet-stream')
return self._call(req)
def main():
parser = optparse.OptionParser(usage='%prog CHANGELOG VERSION BUILDPATH')
options, args = parser.parse_args()
if len(args) != 3:
parser.error('Expected a version and a build directory')
changelog_file, version, build_path = args
changelog = read_file(changelog_file)
mobj = re.search(r'(?s)version %s\n{2}(.+?)\n{3}' % version, changelog)
body = mobj.group(1) if mobj else ''
releaser = GitHubReleaser()
new_release = releaser.create_release(
version, name='youtube-dl %s' % version, body=body)
release_id = new_release['id']
for asset in os.listdir(build_path):
compat_print('Uploading %s...' % asset)
releaser.create_asset(release_id, os.path.join(build_path, asset))
if __name__ == '__main__':
main()
-5
View File
@@ -1,5 +0,0 @@
{{commands}}
complete --command youtube-dl --arguments ":ytfavorites :ytrecommended :ytsubscriptions :ytwatchlater :ythistory"
-50
View File
@@ -1,50 +0,0 @@
#!/usr/bin/env python
from __future__ import unicode_literals
import optparse
import os
from os.path import dirname as dirn
import sys
sys.path.insert(0, dirn(dirn(os.path.abspath(__file__))))
import youtube_dl
from youtube_dl.utils import shell_quote
from utils import read_file, write_file
FISH_COMPLETION_FILE = 'youtube-dl.fish'
FISH_COMPLETION_TEMPLATE = 'devscripts/fish-completion.in'
EXTRA_ARGS = {
'recode-video': ['--arguments', 'mp4 flv ogg webm mkv', '--exclusive'],
# Options that need a file parameter
'download-archive': ['--require-parameter'],
'cookies': ['--require-parameter'],
'load-info': ['--require-parameter'],
'batch-file': ['--require-parameter'],
}
def build_completion(opt_parser):
commands = []
for group in opt_parser.option_groups:
for option in group.option_list:
long_option = option.get_opt_string().strip('-')
complete_cmd = ['complete', '--command', 'youtube-dl', '--long-option', long_option]
if option._short_opts:
complete_cmd += ['--short-option', option._short_opts[0].strip('-')]
if option.help != optparse.SUPPRESS_HELP:
complete_cmd += ['--description', option.help]
complete_cmd.extend(EXTRA_ARGS.get(long_option, []))
commands.append(shell_quote(complete_cmd))
template = read_file(FISH_COMPLETION_TEMPLATE)
filled_template = template.replace('{{commands}}', '\n'.join(commands))
write_file(FISH_COMPLETION_FILE, filled_template)
parser = youtube_dl.parseOpts()[0]
build_completion(parser)
-43
View File
@@ -1,43 +0,0 @@
from __future__ import unicode_literals
import codecs
import subprocess
import os
import sys
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from youtube_dl.utils import intlist_to_bytes
from youtube_dl.aes import aes_encrypt, key_expansion
secret_msg = b'Secret message goes here'
def hex_str(int_list):
return codecs.encode(intlist_to_bytes(int_list), 'hex')
def openssl_encode(algo, key, iv):
cmd = ['openssl', 'enc', '-e', '-' + algo, '-K', hex_str(key), '-iv', hex_str(iv)]
prog = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
out, _ = prog.communicate(secret_msg)
return out
iv = key = [0x20, 0x15] + 14 * [0]
r = openssl_encode('aes-128-cbc', key, iv)
print('aes_cbc_decrypt')
print(repr(r))
password = key
new_key = aes_encrypt(password, key_expansion(password))
r = openssl_encode('aes-128-ctr', new_key, iv)
print('aes_decrypt_text 16')
print(repr(r))
password = key + 16 * [0]
new_key = aes_encrypt(password, key_expansion(password)) * (32 // 16)
r = openssl_encode('aes-256-ctr', new_key, iv)
print('aes_decrypt_text 32')
print(repr(r))
-48
View File
@@ -1,48 +0,0 @@
#!/usr/bin/env python3
from __future__ import unicode_literals
import json
import sys
import hashlib
import os.path
dirn = os.path.dirname
sys.path.insert(0, dirn(dirn(dirn(os.path.abspath(__file__)))))
from devscripts.utils import read_file, write_file
from youtube_dl.compat import compat_open as open
if len(sys.argv) <= 1:
print('Specify the version number as parameter')
sys.exit()
version = sys.argv[1]
write_file('update/LATEST_VERSION', version)
versions_info = json.loads(read_file('update/versions.json'))
if 'signature' in versions_info:
del versions_info['signature']
new_version = {}
filenames = {
'bin': 'youtube-dl',
'exe': 'youtube-dl.exe',
'tar': 'youtube-dl-%s.tar.gz' % version}
build_dir = os.path.join('..', '..', 'build', version)
for key, filename in filenames.items():
url = 'https://yt-dl.org/downloads/%s/%s' % (version, filename)
fn = os.path.join(build_dir, filename)
with open(fn, 'rb') as f:
data = f.read()
if not data:
raise ValueError('File %s is empty!' % fn)
sha256sum = hashlib.sha256(data).hexdigest()
new_version[key] = (url, sha256sum)
versions_info['versions'][version] = new_version
versions_info['latest'] = version
with open('update/versions.json', 'w', encoding='utf-8') as jsonf:
json.dumps(versions_info, jsonf, indent=4, sort_keys=True)
-29
View File
@@ -1,29 +0,0 @@
#!/usr/bin/env python3
from __future__ import unicode_literals
import json
import os.path
import sys
dirn = os.path.dirname
sys.path.insert(0, dirn(dirn((os.path.abspath(__file__)))))
from utils import read_file, write_file
versions_info = json.loads(read_file('update/versions.json'))
version = versions_info['latest']
version_dict = versions_info['versions'][version]
# Read template page
template = read_file('download.html.in')
template = template.replace('@PROGRAM_VERSION@', version)
template = template.replace('@PROGRAM_URL@', version_dict['bin'][0])
template = template.replace('@PROGRAM_SHA256SUM@', version_dict['bin'][1])
template = template.replace('@EXE_URL@', version_dict['exe'][0])
template = template.replace('@EXE_SHA256SUM@', version_dict['exe'][1])
template = template.replace('@TAR_URL@', version_dict['tar'][0])
template = template.replace('@TAR_SHA256SUM@', version_dict['tar'][1])
write_file('download.html', template)
-34
View File
@@ -1,34 +0,0 @@
#!/usr/bin/env python3
from __future__ import unicode_literals, with_statement
import rsa
import json
from binascii import hexlify
try:
input = raw_input
except NameError:
pass
versions_info = json.load(open('update/versions.json'))
if 'signature' in versions_info:
del versions_info['signature']
print('Enter the PKCS1 private key, followed by a blank line:')
privkey = b''
while True:
try:
line = input()
except EOFError:
break
if line == '':
break
privkey += line.encode('ascii') + b'\n'
privkey = rsa.PrivateKey.load_pkcs1(privkey)
signature = hexlify(rsa.pkcs1.sign(json.dumps(versions_info, sort_keys=True).encode('utf-8'), privkey, 'SHA-256')).decode()
print('signature: ' + signature)
versions_info['signature'] = signature
with open('update/versions.json', 'w') as versionsf:
json.dump(versions_info, versionsf, indent=4, sort_keys=True)
-26
View File
@@ -1,26 +0,0 @@
#!/usr/bin/env python
# coding: utf-8
from __future__ import with_statement, unicode_literals
import datetime
import glob
import os
import re
import sys
dirn = os.path.dirname
sys.path.insert(0, dirn(dirn(dirn(os.path.abspath(__file__)))))
from devscripts.utils import read_file, write_file
from youtube_dl import compat_str
year = compat_str(datetime.datetime.now().year)
for fn in glob.glob('*.html*'):
content = read_file(fn)
newc = re.sub(r'(?P<copyright>Copyright © 2011-)(?P<year>[0-9]{4})', 'Copyright © 2011-' + year, content)
if content != newc:
tmpFn = fn + '.part'
write_file(tmpFn, newc)
os.rename(tmpFn, fn)
-81
View File
@@ -1,81 +0,0 @@
#!/usr/bin/env python3
from __future__ import unicode_literals
import datetime
import json
import os.path
import textwrap
import sys
dirn = os.path.dirname
sys.path.insert(0, dirn(dirn(os.path.abspath(__file__))))
from utils import write_file
atom_template = textwrap.dedent("""\
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<link rel="self" href="http://ytdl-org.github.io/youtube-dl/update/releases.atom" />
<title>youtube-dl releases</title>
<id>https://yt-dl.org/feed/youtube-dl-updates-feed</id>
<updated>@TIMESTAMP@</updated>
@ENTRIES@
</feed>""")
entry_template = textwrap.dedent("""
<entry>
<id>https://yt-dl.org/feed/youtube-dl-updates-feed/youtube-dl-@VERSION@</id>
<title>New version @VERSION@</title>
<link href="http://ytdl-org.github.io/youtube-dl" />
<content type="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>
</div>
</content>
<author>
<name>The youtube-dl maintainers</name>
</author>
<updated>@TIMESTAMP@</updated>
</entry>
""")
now = datetime.datetime.now()
now_iso = now.isoformat() + 'Z'
atom_template = atom_template.replace('@TIMESTAMP@', now_iso)
versions_info = json.load(open('update/versions.json'))
versions = list(versions_info['versions'].keys())
versions.sort()
entries = []
for v in versions:
fields = v.split('.')
year, month, day = map(int, fields[:3])
faked = 0
patchlevel = 0
while True:
try:
datetime.date(year, month, day)
except ValueError:
day -= 1
faked += 1
assert day > 0
continue
break
if len(fields) >= 4:
try:
patchlevel = int(fields[3])
except ValueError:
patchlevel = 1
timestamp = '%04d-%02d-%02dT00:%02d:%02dZ' % (year, month, day, faked, patchlevel)
entry = entry_template.replace('@TIMESTAMP@', timestamp)
entry = entry.replace('@VERSION@', v)
entries.append(entry)
entries_str = textwrap.indent(''.join(entries), '\t')
atom_template = atom_template.replace('@ENTRIES@', entries_str)
write_file('update/releases.atom', atom_template)
-38
View File
@@ -1,38 +0,0 @@
#!/usr/bin/env python3
from __future__ import unicode_literals
import sys
import os
import textwrap
dirn = os.path.dirname
# We must be able to import youtube_dl
sys.path.insert(0, dirn(dirn(dirn(os.path.abspath(__file__)))))
import youtube_dl
from devscripts.utils import read_file, write_file
def main():
template = read_file('supportedsites.html.in')
ie_htmls = []
for ie in youtube_dl.list_extractors(age_limit=None):
ie_html = '<b>{}</b>'.format(ie.IE_NAME)
ie_desc = getattr(ie, 'IE_DESC', None)
if ie_desc is False:
continue
elif ie_desc is not None:
ie_html += ': {}'.format(ie.IE_DESC)
if not ie.working():
ie_html += ' (Currently broken)'
ie_htmls.append('<li>{}</li>'.format(ie_html))
template = template.replace('@SITES@', textwrap.indent('\n'.join(ie_htmls), '\t'))
write_file('supportedsites.html', template)
if __name__ == '__main__':
main()
-19
View File
@@ -1,19 +0,0 @@
# coding: utf-8
from __future__ import unicode_literals
import re
class LazyLoadExtractor(object):
_module = None
@classmethod
def ie_key(cls):
return cls.__name__[:-2]
def __new__(cls, *args, **kwargs):
mod = __import__(cls._module, fromlist=(cls.__name__,))
real_cls = getattr(mod, cls.__name__)
instance = real_cls.__new__(real_cls)
instance.__init__(*args, **kwargs)
return instance
-32
View File
@@ -1,32 +0,0 @@
#!/usr/bin/env python
from __future__ import unicode_literals
import optparse
import re
from utils import read_file, write_file
def main():
parser = optparse.OptionParser(usage='%prog INFILE OUTFILE')
options, args = parser.parse_args()
if len(args) != 2:
parser.error('Expected an input and an output filename')
infile, outfile = args
readme = read_file(infile)
bug_text = re.search(
r'(?s)#\s*BUGS\s*[^\n]*\s*(.*?)#\s*COPYRIGHT', readme).group(1)
dev_text = re.search(
r'(?s)(#\s*DEVELOPER INSTRUCTIONS.*?)#\s*EMBEDDING YOUTUBE-DL',
readme).group(1)
out = bug_text + dev_text
write_file(outfile, out)
if __name__ == '__main__':
main()
-26
View File
@@ -1,26 +0,0 @@
#!/usr/bin/env python
from __future__ import unicode_literals
import optparse
import os.path
import sys
from utils import read_file, read_version, write_file
def main():
parser = optparse.OptionParser(usage='%prog INFILE OUTFILE')
options, args = parser.parse_args()
if len(args) != 2:
parser.error('Expected an input and an output filename')
infile, outfile = args
issue_template_tmpl = read_file(infile)
out = issue_template_tmpl % {'version': read_version()}
write_file(outfile, out)
if __name__ == '__main__':
main()
-131
View File
@@ -1,131 +0,0 @@
from __future__ import unicode_literals, print_function
from inspect import getsource
import os
from os.path import dirname as dirn
import re
import sys
print('WARNING: Lazy loading extractors is an experimental feature that may not always work', file=sys.stderr)
sys.path.insert(0, dirn(dirn(os.path.abspath(__file__))))
lazy_extractors_filename = sys.argv[1]
if os.path.exists(lazy_extractors_filename):
os.remove(lazy_extractors_filename)
# Py2: may be confused by leftover lazy_extractors.pyc
if sys.version_info[0] < 3:
for c in ('c', 'o'):
try:
os.remove(lazy_extractors_filename + 'c')
except OSError:
pass
from devscripts.utils import read_file, write_file
from youtube_dl.compat import compat_register_utf8
compat_register_utf8()
from youtube_dl.extractor import _ALL_CLASSES
from youtube_dl.extractor.common import InfoExtractor, SearchInfoExtractor
module_template = read_file('devscripts/lazy_load_template.py')
def get_source(m):
return re.sub(r'(?m)^\s*#.*\n', '', getsource(m))
module_contents = [
module_template,
get_source(InfoExtractor.suitable),
get_source(InfoExtractor._match_valid_url) + '\n',
'class LazyLoadSearchExtractor(LazyLoadExtractor):\n pass\n',
# needed for suitable() methods of Youtube extractor (see #28780)
'from youtube_dl.utils import parse_qs, variadic\n',
]
ie_template = '''
class {name}({bases}):
_VALID_URL = {valid_url!r}
_module = '{module}'
'''
make_valid_template = '''
@classmethod
def _make_valid_url(cls):
return {valid_url!r}
'''
def get_base_name(base):
if base is InfoExtractor:
return 'LazyLoadExtractor'
elif base is SearchInfoExtractor:
return 'LazyLoadSearchExtractor'
else:
return base.__name__
def build_lazy_ie(ie, name):
valid_url = getattr(ie, '_VALID_URL', None)
s = ie_template.format(
name=name,
bases=', '.join(map(get_base_name, ie.__bases__)),
valid_url=valid_url,
module=ie.__module__)
if ie.suitable.__func__ is not InfoExtractor.suitable.__func__:
s += '\n' + get_source(ie.suitable)
if hasattr(ie, '_make_valid_url'):
# search extractors
s += make_valid_template.format(valid_url=ie._make_valid_url())
return s
# find the correct sorting and add the required base classes so that subclasses
# can be correctly created
classes = _ALL_CLASSES[:-1]
ordered_cls = []
while classes:
for c in classes[:]:
bases = set(c.__bases__) - set((object, InfoExtractor, SearchInfoExtractor))
stop = False
for b in bases:
if b not in classes and b not in ordered_cls:
if b.__name__ == 'GenericIE':
exit()
classes.insert(0, b)
stop = True
if stop:
break
if all(b in ordered_cls for b in bases):
ordered_cls.append(c)
classes.remove(c)
break
ordered_cls.append(_ALL_CLASSES[-1])
names = []
for ie in ordered_cls:
name = ie.__name__
src = build_lazy_ie(ie, name)
module_contents.append(src)
if ie in _ALL_CLASSES:
names.append(name)
module_contents.append(
'_ALL_CLASSES = [{0}]'.format(', '.join(names)))
module_src = '\n'.join(module_contents)
write_file(lazy_extractors_filename, module_src + '\n')
# work around JVM byte code module limit in Jython
if sys.platform.startswith('java') and sys.version_info[:2] == (2, 7):
import subprocess
from youtube_dl.compat import compat_subprocess_get_DEVNULL
# if Python 2.7 is available, use it to compile the module for Jython
try:
# if Python 2.7 is available, use it to compile the module for Jython
subprocess.check_call(['python2.7', '-m', 'py_compile', lazy_extractors_filename], stdout=compat_subprocess_get_DEVNULL())
except Exception:
pass
-31
View File
@@ -1,31 +0,0 @@
from __future__ import unicode_literals
import os.path
import re
import sys
dirn = os.path.dirname
sys.path.insert(0, dirn(dirn(os.path.abspath(__file__))))
from utils import read_file
from youtube_dl.compat import compat_open as open
README_FILE = 'README.md'
helptext = sys.stdin.read()
if isinstance(helptext, bytes):
helptext = helptext.decode('utf-8')
oldreadme = read_file(README_FILE)
header = oldreadme[:oldreadme.index('# OPTIONS')]
footer = oldreadme[oldreadme.index('# CONFIGURATION'):]
options = helptext[helptext.index(' General Options:') + 19:]
options = re.sub(r'(?m)^ (\w.+)$', r'## \1', options)
options = '# OPTIONS\n' + options + '\n'
with open(README_FILE, 'w', encoding='utf-8') as f:
f.write(header)
f.write(options)
f.write(footer)
-47
View File
@@ -1,47 +0,0 @@
#!/usr/bin/env python
from __future__ import unicode_literals
import optparse
import os.path
import sys
# Import youtube_dl
dirn = os.path.dirname
sys.path.insert(0, dirn(dirn(os.path.abspath(__file__))))
import youtube_dl
from utils import write_file
def main():
parser = optparse.OptionParser(usage='%prog OUTFILE.md')
options, args = parser.parse_args()
if len(args) != 1:
parser.error('Expected an output filename')
outfile, = args
def gen_ies_md(ies):
for ie in ies:
ie_md = '**{0}**'.format(ie.IE_NAME)
ie_desc = getattr(ie, 'IE_DESC', None)
if ie_desc is False:
continue
if ie_desc is not None:
ie_md += ': {0}'.format(ie.IE_DESC)
if not ie.working():
ie_md += ' (Currently broken)'
yield ie_md
ies = sorted(youtube_dl.gen_extractors(), key=lambda i: i.IE_NAME.lower())
out = '# Supported sites\n' + ''.join(
' - ' + md + '\n'
for md in gen_ies_md(ies))
write_file(outfile, out)
if __name__ == '__main__':
main()
-6
View File
@@ -1,6 +0,0 @@
# source this file in your shell to get a POSIX locale (which will break many programs, but that's kind of the point)
export LC_ALL=POSIX
export LANG=POSIX
export LANGUAGE=POSIX
-77
View File
@@ -1,77 +0,0 @@
from __future__ import unicode_literals
import optparse
import os.path
import re
from utils import read_file, write_file
ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
README_FILE = os.path.join(ROOT_DIR, 'README.md')
PREFIX = r'''%YOUTUBE-DL(1)
# NAME
youtube\-dl \- download videos from youtube.com or other video platforms
# SYNOPSIS
**youtube-dl** \[OPTIONS\] URL [URL...]
'''
def main():
parser = optparse.OptionParser(usage='%prog OUTFILE.md')
options, args = parser.parse_args()
if len(args) != 1:
parser.error('Expected an output filename')
outfile, = args
readme = read_file(README_FILE)
readme = re.sub(r'(?s)^.*?(?=# DESCRIPTION)', '', readme)
readme = re.sub(r'\s+youtube-dl \[OPTIONS\] URL \[URL\.\.\.\]', '', readme)
readme = PREFIX + readme
readme = filter_options(readme)
write_file(outfile, readme)
def filter_options(readme):
ret = ''
in_options = False
for line in readme.split('\n'):
if line.startswith('# '):
if line[2:].startswith('OPTIONS'):
in_options = True
else:
in_options = False
if in_options:
if line.lstrip().startswith('-'):
split = re.split(r'\s{2,}', line.lstrip())
# Description string may start with `-` as well. If there is
# only one piece then it's a description bit not an option.
if len(split) > 1:
option, description = split
split_option = option.split(' ')
if not split_option[-1].startswith('-'): # metavar
option = ' '.join(split_option[:-1] + ['*%s*' % split_option[-1]])
# Pandoc's definition_lists. See http://pandoc.org/README.html
# for more information.
ret += '\n%s\n: %s\n' % (option, description)
continue
ret += line.lstrip() + '\n'
else:
ret += line + '\n'
return ret
if __name__ == '__main__':
main()
-141
View File
@@ -1,141 +0,0 @@
#!/bin/bash
# IMPORTANT: the following assumptions are made
# * the GH repo is on the origin remote
# * the gh-pages branch is named so locally
# * the git config user.signingkey is properly set
# You will need
# pip install coverage nose rsa wheel
# TODO
# release notes
# make hash on local files
set -e
skip_tests=true
gpg_sign_commits=""
buildserver='localhost:8142'
while true
do
case "$1" in
--run-tests)
skip_tests=false
shift
;;
--gpg-sign-commits|-S)
gpg_sign_commits="-S"
shift
;;
--buildserver)
buildserver="$2"
shift 2
;;
--*)
echo "ERROR: unknown option $1"
exit 1
;;
*)
break
;;
esac
done
if [ -z "$1" ]; then echo "ERROR: specify version number like this: $0 1994.09.06"; exit 1; fi
version="$1"
major_version=$(echo "$version" | sed -n 's#^\([0-9]*\.[0-9]*\.[0-9]*\).*#\1#p')
if test "$major_version" '!=' "$(date '+%Y.%m.%d')"; then
echo "$version does not start with today's date!"
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
useless_files=$(find youtube_dl -type f -not -name '*.py')
if [ ! -z "$useless_files" ]; then echo "ERROR: Non-.py files in youtube_dl: $useless_files"; 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 ! 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
read -p "Is ChangeLog up to date? (y/n) " -n 1
if [[ ! $REPLY =~ ^[Yy]$ ]]; then exit 1; fi
/bin/echo -e "\n### First of all, testing..."
make clean
if $skip_tests ; then
echo 'SKIPPING TESTS'
else
nosetests --verbose --with-coverage --cover-package=youtube_dl --cover-html test --stop || exit 1
fi
/bin/echo -e "\n### Changing version in version.py..."
sed -i "s/__version__ = '.*'/__version__ = '$version'/" youtube_dl/version.py
/bin/echo -e "\n### Changing version in ChangeLog..."
sed -i "s/<unreleased>/$version/" ChangeLog
/bin/echo -e "\n### Committing documentation, templates and youtube_dl/version.py..."
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 youtube_dl/version.py ChangeLog
git commit $gpg_sign_commits -m "release $version"
/bin/echo -e "\n### Now tagging, signing and pushing..."
git tag -s -m "Release $version" "$version"
git show "$version"
read -p "Is it good, can I push? (y/n) " -n 1
if [[ ! $REPLY =~ ^[Yy]$ ]]; then exit 1; fi
echo
MASTER=$(git rev-parse --abbrev-ref HEAD)
git push origin $MASTER:master
git push origin "$version"
/bin/echo -e "\n### OK, now it is time to build the binaries..."
REV=$(git rev-parse HEAD)
make youtube-dl youtube-dl.tar.gz
read -p "VM running? (y/n) " -n 1
wget "http://$buildserver/build/ytdl-org/youtube-dl/youtube-dl.exe?rev=$REV" -O youtube-dl.exe
mkdir -p "build/$version"
mv youtube-dl youtube-dl.exe "build/$version"
mv youtube-dl.tar.gz "build/$version/youtube-dl-$version.tar.gz"
RELEASE_FILES="youtube-dl youtube-dl.exe youtube-dl-$version.tar.gz"
(cd build/$version/ && md5sum $RELEASE_FILES > MD5SUMS)
(cd build/$version/ && sha1sum $RELEASE_FILES > SHA1SUMS)
(cd build/$version/ && sha256sum $RELEASE_FILES > SHA2-256SUMS)
(cd build/$version/ && sha512sum $RELEASE_FILES > SHA2-512SUMS)
/bin/echo -e "\n### Signing and uploading the new binaries to GitHub..."
for f in $RELEASE_FILES; do gpg --passphrase-repeat 5 --detach-sig "build/$version/$f"; done
ROOT=$(pwd)
python devscripts/create-github-release.py ChangeLog $version "$ROOT/build/$version"
ssh ytdl@yt-dl.org "sh html/update_latest.sh $version"
/bin/echo -e "\n### Now switching to gh-pages..."
git clone --branch gh-pages --single-branch . build/gh-pages
(
set -e
ORIGIN_URL=$(git config --get remote.origin.url)
cd build/gh-pages
"$ROOT/devscripts/gh-pages/add-version.py" $version
"$ROOT/devscripts/gh-pages/update-feed.py"
"$ROOT/devscripts/gh-pages/sign-versions.py" < "$ROOT/updates_key.pem"
"$ROOT/devscripts/gh-pages/generate-download.py"
"$ROOT/devscripts/gh-pages/update-copyright.py"
"$ROOT/devscripts/gh-pages/update-sites.py"
git add *.html *.html.in update
git commit $gpg_sign_commits -m "release $version"
git push "$ROOT" gh-pages
git push "$ORIGIN_URL" gh-pages
)
rm -rf build
make pypi-files
echo "Uploading to PyPi ..."
python setup.py sdist bdist_wheel upload
make clean
/bin/echo -e "\n### DONE!"
-17
View File
@@ -1,17 +0,0 @@
@echo off
rem Keep this list in sync with the `offlinetest` target in Makefile
set DOWNLOAD_TESTS="age_restriction^|download^|iqiyi_sdk_interpreter^|socks^|subtitles^|write_annotations^|youtube_lists^|youtube_signature"
if "%YTDL_TEST_SET%" == "core" (
set test_set="-I test_("%DOWNLOAD_TESTS%")\.py"
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 (
echo YTDL_TEST_SET is not set or invalid
exit /b 1
)
nosetests test --verbose %test_set:"=% %multiprocess_args:"=%
-22
View File
@@ -1,22 +0,0 @@
#!/bin/bash
# Keep this list in sync with the `offlinetest` target in Makefile
DOWNLOAD_TESTS="age_restriction|download|iqiyi_sdk_interpreter|socks|subtitles|write_annotations|youtube_lists|youtube_signature"
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
-47
View File
@@ -1,47 +0,0 @@
#!/usr/bin/env python
from __future__ import unicode_literals
import itertools
import json
import os
import re
import sys
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from youtube_dl.compat import (
compat_print,
compat_urllib_request,
)
from youtube_dl.utils import format_bytes
def format_size(bytes):
return '%s (%d bytes)' % (format_bytes(bytes), bytes)
total_bytes = 0
for page in itertools.count(1):
releases = json.loads(compat_urllib_request.urlopen(
'https://api.github.com/repos/ytdl-org/youtube-dl/releases?page=%s' % page
).read().decode('utf-8'))
if not releases:
break
for release in releases:
compat_print(release['name'])
for asset in release['assets']:
asset_name = asset['name']
total_bytes += asset['download_count'] * asset['size']
if all(not re.match(p, asset_name) for p in (
r'^youtube-dl$',
r'^youtube-dl-\d{4}\.\d{2}\.\d{2}(?:\.\d+)?\.tar\.gz$',
r'^youtube-dl\.exe$')):
continue
compat_print(
' %s size: %s downloads: %d'
% (asset_name, format_size(asset['size']), asset['download_count']))
compat_print('total downloads traffic: %s' % format_size(total_bytes))
-62
View File
@@ -1,62 +0,0 @@
# coding: utf-8
from __future__ import unicode_literals
import argparse
import functools
import os.path
import subprocess
import sys
dirn = os.path.dirname
sys.path.insert(0, dirn(dirn(os.path.abspath(__file__))))
from youtube_dl.compat import (
compat_kwargs,
compat_open as open,
)
def read_file(fname):
with open(fname, encoding='utf-8') as f:
return f.read()
def write_file(fname, content, mode='w'):
with open(fname, mode, encoding='utf-8') as f:
return f.write(content)
def read_version(fname='youtube_dl/version.py'):
"""Get the version without importing the package"""
exec(compile(read_file(fname), fname, 'exec'))
return locals()['__version__']
def get_filename_args(has_infile=False, default_outfile=None):
parser = argparse.ArgumentParser()
if has_infile:
parser.add_argument('infile', help='Input file')
kwargs = {'nargs': '?', 'default': default_outfile} if default_outfile else {}
kwargs['help'] = 'Output file'
parser.add_argument('outfile', **compat_kwargs(kwargs))
opts = parser.parse_args()
if has_infile:
return opts.infile, opts.outfile
return opts.outfile
def compose_functions(*functions):
return lambda x: functools.reduce(lambda y, f: f(y), functions, x)
def run_process(*args, **kwargs):
kwargs.setdefault('text', True)
kwargs.setdefault('check', True)
kwargs.setdefault('capture_output', True)
if kwargs['text']:
kwargs.setdefault('encoding', 'utf-8')
kwargs.setdefault('errors', 'replace')
kwargs = compat_kwargs(kwargs)
return subprocess.run(args, **kwargs)
-56
View File
@@ -1,56 +0,0 @@
#!/bin/bash
# Run with as parameter a setup.py that works in the current directory
# e.g. no os.chdir()
# It will run twice, the first time will crash
set -e
SCRIPT_DIR="$( cd "$( dirname "$0" )" && pwd )"
if [ ! -d wine-py2exe ]; then
sudo apt-get install wine1.3 axel bsdiff
mkdir wine-py2exe
cd wine-py2exe
export WINEPREFIX=`pwd`
axel -a "http://www.python.org/ftp/python/2.7/python-2.7.msi"
axel -a "http://downloads.sourceforge.net/project/py2exe/py2exe/0.6.9/py2exe-0.6.9.win32-py2.7.exe"
#axel -a "http://winetricks.org/winetricks"
# http://appdb.winehq.org/objectManager.php?sClass=version&iId=21957
echo "Follow python setup on screen"
wine msiexec /i python-2.7.msi
echo "Follow py2exe setup on screen"
wine py2exe-0.6.9.win32-py2.7.exe
#echo "Follow Microsoft Visual C++ 2008 Redistributable Package setup on screen"
#bash winetricks vcrun2008
rm py2exe-0.6.9.win32-py2.7.exe
rm python-2.7.msi
#rm winetricks
# http://bugs.winehq.org/show_bug.cgi?id=3591
mv drive_c/Python27/Lib/site-packages/py2exe/run.exe drive_c/Python27/Lib/site-packages/py2exe/run.exe.backup
bspatch drive_c/Python27/Lib/site-packages/py2exe/run.exe.backup drive_c/Python27/Lib/site-packages/py2exe/run.exe "$SCRIPT_DIR/SizeOfImage.patch"
mv drive_c/Python27/Lib/site-packages/py2exe/run_w.exe drive_c/Python27/Lib/site-packages/py2exe/run_w.exe.backup
bspatch drive_c/Python27/Lib/site-packages/py2exe/run_w.exe.backup drive_c/Python27/Lib/site-packages/py2exe/run_w.exe "$SCRIPT_DIR/SizeOfImage_w.patch"
cd -
else
export WINEPREFIX="$( cd wine-py2exe && pwd )"
fi
wine "C:\\Python27\\python.exe" "$1" py2exe > "py2exe.log" 2>&1 || true
echo '# Copying python27.dll' >> "py2exe.log"
cp "$WINEPREFIX/drive_c/windows/system32/python27.dll" build/bdist.win32/winexe/bundle-2.7/
wine "C:\\Python27\\python.exe" "$1" py2exe >> "py2exe.log" 2>&1
-28
View File
@@ -1,28 +0,0 @@
#compdef youtube-dl
__youtube_dl() {
local curcontext="$curcontext" fileopts diropts cur prev
typeset -A opt_args
fileopts="{{fileopts}}"
diropts="{{diropts}}"
cur=$words[CURRENT]
case $cur in
:)
_arguments '*: :(::ytfavorites ::ytrecommended ::ytsubscriptions ::ytwatchlater ::ythistory)'
;;
*)
prev=$words[CURRENT-1]
if [[ ${prev} =~ ${fileopts} ]]; then
_path_files
elif [[ ${prev} =~ ${diropts} ]]; then
_path_files -/
elif [[ ${prev} == "--recode-video" ]]; then
_arguments '*: :(mp4 flv ogg webm mkv)'
else
_arguments '*: :({{flags}})'
fi
;;
esac
}
__youtube_dl
-49
View File
@@ -1,49 +0,0 @@
#!/usr/bin/env python
from __future__ import unicode_literals
import os
from os.path import dirname as dirn
import sys
sys.path.insert(0, dirn(dirn((os.path.abspath(__file__)))))
import youtube_dl
from utils import read_file, write_file
ZSH_COMPLETION_FILE = "youtube-dl.zsh"
ZSH_COMPLETION_TEMPLATE = "devscripts/zsh-completion.in"
def build_completion(opt_parser):
opts = [opt for group in opt_parser.option_groups
for opt in group.option_list]
opts_file = [opt for opt in opts if opt.metavar == "FILE"]
opts_dir = [opt for opt in opts if opt.metavar == "DIR"]
fileopts = []
for opt in opts_file:
if opt._short_opts:
fileopts.extend(opt._short_opts)
if opt._long_opts:
fileopts.extend(opt._long_opts)
diropts = []
for opt in opts_dir:
if opt._short_opts:
diropts.extend(opt._short_opts)
if opt._long_opts:
diropts.extend(opt._long_opts)
flags = [opt.get_opt_string() for opt in opts]
template = read_file(ZSH_COMPLETION_TEMPLATE)
template = template.replace("{{fileopts}}", "|".join(fileopts))
template = template.replace("{{diropts}}", "|".join(diropts))
template = template.replace("{{flags}}", " ".join(flags))
write_file(ZSH_COMPLETION_FILE, template)
parser = youtube_dl.parseOpts()[0]
build_completion(parser)
-1
View File
@@ -1 +0,0 @@
_build/
-177
View File
@@ -1,177 +0,0 @@
# Makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
PAPER =
BUILDDIR = _build
# User-friendly check for sphinx-build
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
endif
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
# the i18n builder cannot share the environment and doctrees with the others
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
help:
@echo "Please use \`make <target>' where <target> is one of"
@echo " html to make standalone HTML files"
@echo " dirhtml to make HTML files named index.html in directories"
@echo " singlehtml to make a single large HTML file"
@echo " pickle to make pickle files"
@echo " json to make JSON files"
@echo " htmlhelp to make HTML files and a HTML help project"
@echo " qthelp to make HTML files and a qthelp project"
@echo " devhelp to make HTML files and a Devhelp project"
@echo " epub to make an epub"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " latexpdf to make LaTeX files and run them through pdflatex"
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
@echo " text to make text files"
@echo " man to make manual pages"
@echo " texinfo to make Texinfo files"
@echo " info to make Texinfo files and run them through makeinfo"
@echo " gettext to make PO message catalogs"
@echo " changes to make an overview of all changed/added/deprecated items"
@echo " xml to make Docutils-native XML files"
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
clean:
rm -rf $(BUILDDIR)/*
html:
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
dirhtml:
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
singlehtml:
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
@echo
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
pickle:
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
@echo
@echo "Build finished; now you can process the pickle files."
json:
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
@echo
@echo "Build finished; now you can process the JSON files."
htmlhelp:
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
@echo
@echo "Build finished; now you can run HTML Help Workshop with the" \
".hhp project file in $(BUILDDIR)/htmlhelp."
qthelp:
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
@echo
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/youtube-dl.qhcp"
@echo "To view the help file:"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/youtube-dl.qhc"
devhelp:
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
@echo
@echo "Build finished."
@echo "To view the help file:"
@echo "# mkdir -p $$HOME/.local/share/devhelp/youtube-dl"
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/youtube-dl"
@echo "# devhelp"
epub:
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
@echo
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
latex:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
@echo "Run \`make' in that directory to run these through (pdf)latex" \
"(use \`make latexpdf' here to do that automatically)."
latexpdf:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through pdflatex..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
latexpdfja:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through platex and dvipdfmx..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
text:
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
@echo
@echo "Build finished. The text files are in $(BUILDDIR)/text."
man:
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
@echo
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
texinfo:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
@echo "Run \`make' in that directory to run these through makeinfo" \
"(use \`make info' here to do that automatically)."
info:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo "Running Texinfo files through makeinfo..."
make -C $(BUILDDIR)/texinfo info
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
gettext:
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
@echo
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
changes:
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
@echo
@echo "The overview file is in $(BUILDDIR)/changes."
linkcheck:
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
@echo
@echo "Link check complete; look for any errors in the above output " \
"or in $(BUILDDIR)/linkcheck/output.txt."
doctest:
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
@echo "Testing of doctests in the sources finished, look at the " \
"results in $(BUILDDIR)/doctest/output.txt."
xml:
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
@echo
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
pseudoxml:
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
@echo
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
-71
View File
@@ -1,71 +0,0 @@
# coding: utf-8
#
# youtube-dl 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 os
# Allows to import youtube_dl
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
# -- General configuration ------------------------------------------------
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
'sphinx.ext.autodoc',
]
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
# The suffix of source filenames.
source_suffix = '.rst'
# The master toctree document.
master_doc = 'index'
# General information about the project.
project = u'youtube-dl'
copyright = u'2014, Ricardo Garcia Gonzalez'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
from youtube_dl.version import __version__
version = __version__
# The full version, including alpha/beta/rc tags.
release = version
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
exclude_patterns = ['_build']
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'
# -- Options for HTML output ----------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
html_theme = 'default'
# 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,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
# Output file base name for HTML help builder.
htmlhelp_basename = 'youtube-dldoc'
-23
View File
@@ -1,23 +0,0 @@
Welcome to youtube-dl's documentation!
======================================
*youtube-dl* 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-dl* from Python programs.
.. toctree::
:maxdepth: 2
module_guide
Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
-67
View File
@@ -1,67 +0,0 @@
Using the ``youtube_dl`` module
===============================
When using the ``youtube_dl`` module, you start by creating an instance of :class:`YoutubeDL` and adding all the available extractors:
.. code-block:: python
>>> from youtube_dl 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-dl 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
File diff suppressed because it is too large Load Diff
+7
View File
@@ -0,0 +1,7 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<meta http-equiv="refresh" content="0; url=https://github.com/ytdl-org/youtube-dl/blob/master/README.md#readme">
</head>
</html>
+77
View File
@@ -0,0 +1,77 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<title>youtube-dl: Download Page</title>
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body>
<table class="heading"><tr>
<td class="title"><a href="index.html">youtube-dl</a></td>
<td class="subtitle">Download Page</td>
</tr></table>
<p>Remember <em>youtube-dl</em> requires <a href="http://www.python.org/">Python</a> version 2.6, 2.7, or 3.2+ to work except for Windows exe.</p>
<p><a href="https://yt-dl.org/downloads/2021.12.17/youtube-dl.exe">Windows exe</a> requires <a href="https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe">Microsoft Visual C++ 2010 Service Pack 1 Redistributable Package (x86)</a> and does not require Python that is already embedded into the binary.</p>
<h2><a href="https://yt-dl.org/downloads/2021.12.17/youtube-dl">2021.12.17</a> (<a href="https://yt-dl.org/downloads/2021.12.17/youtube-dl.sig">sig</a>)</h2>
<p><strong>SHA256</strong>: 7880e01abe282c7fd596f429c35189851180d6177302bb215be1cdec78d6d06d</p>
<p>
<a href="https://yt-dl.org/downloads/2021.12.17/youtube-dl.exe">Windows exe</a> (<a href="https://yt-dl.org/downloads/2021.12.17/youtube-dl.exe.sig">sig</a> - SHA256 26e5c00c35c5c3edc86dfc0a720aed109a13b1b7c67ac654a0ce8ff82a1f2c16)<br>
<a href="https://yt-dl.org/downloads/2021.12.17/youtube-dl-2021.12.17.tar.gz">Full source + docs + binary tarball</a> (<a href="https://yt-dl.org/downloads/2021.12.17/youtube-dl-2021.12.17.tar.gz.sig">sig</a> - SHA256 9f3b99c8b778455165b4525f21505e86c7ff565f3ac319e19733d810194135df)
</p>
<p>To install it right away for all UNIX users (Linux, OS X, etc.), type:
<code class="commands">sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl<br/>
sudo chmod a+rx /usr/local/bin/youtube-dl</code>
</p>
<p>If you do not have curl, you can alternatively use a recent wget:
<code class="commands">sudo wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl<br/>
sudo chmod a+rx /usr/local/bin/youtube-dl</code>
</p>
<p>You can also use pip:
<code class="commands">sudo pip install --upgrade youtube_dl</code>
</p>
<p>
This command will update youtube-dl if you have already installed it.
See the <a href="https://pypi.python.org/pypi/youtube_dl">pypi page</a> for more information.
</p>
<p>You can use Homebrew if you have it:
<code class="commands">brew install youtube-dl</code>
</p>
<p>To check the signature, type:
<code class="commands">sudo wget https://yt-dl.org/downloads/latest/youtube-dl.sig -O youtube-dl.sig<br/>gpg --verify youtube-dl.sig /usr/local/bin/youtube-dl<br/>rm youtube-dl.sig</code>
</p>
<p>The following GPG keys will be used to sign the binaries and the git tags:</p>
<ul>
<li>Sergey M. <code class="fingerprint"><a href="https://dstftw.github.io/keys/18A9236D.asc">ED7F 5BF4 6B3B BED8 1C87 368E 2C39 3E0F 18A9 236D</a></code></li>
</ul>
<p>Older releases are also signed with one of:
<ul>
<li>Philipp Hagemeister <code class="fingerprint"><a href="https://phihag.de/keys/A4826A18.asc">7D33 D762 FD6C 3513 0481 347F DB4B 54CB A482 6A18</a></code> (until 2016-05-30)</li>
<li>Philipp Hagemeister <code class="fingerprint">0600 E1DB 6FB5 3A5D 95D8 FC0D F5EA B582 FAFB 085C</code> (until 2013-06-01)</li>
</li>
<li>Filippo Valsorda <code class="fingerprint">428D F5D6 3EF0 7494 BB45 5AC0 EBF0 1804 BCF0 5F6B</code> (until 2014)</li>
</p>
<div class="note">
<a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/deed.en_US">
<img alt="Creative Commons License" style="border-width:0"
src="https://i.creativecommons.org/l/by-sa/3.0/80x15.png" /></a><br />
Copyright © 2006-2011 Ricardo Garcia Gonzalez<br />
Copyright © 2011-2021 youtube-dl developers
</div>
</body>
</html>
+77
View File
@@ -0,0 +1,77 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<title>youtube-dl: Download Page</title>
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body>
<table class="heading"><tr>
<td class="title"><a href="index.html">youtube-dl</a></td>
<td class="subtitle">Download Page</td>
</tr></table>
<p>Remember <em>youtube-dl</em> requires <a href="http://www.python.org/">Python</a> version 2.6, 2.7, or 3.2+ to work except for Windows exe.</p>
<p><a href="@EXE_URL@">Windows exe</a> requires <a href="https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe">Microsoft Visual C++ 2010 Service Pack 1 Redistributable Package (x86)</a> and does not require Python that is already embedded into the binary.</p>
<h2><a href="@PROGRAM_URL@">@PROGRAM_VERSION@</a> (<a href="@PROGRAM_URL@.sig">sig</a>)</h2>
<p><strong>SHA256</strong>: @PROGRAM_SHA256SUM@</p>
<p>
<a href="@EXE_URL@">Windows exe</a> (<a href="@EXE_URL@.sig">sig</a> - SHA256 @EXE_SHA256SUM@)<br>
<a href="@TAR_URL@">Full source + docs + binary tarball</a> (<a href="@TAR_URL@.sig">sig</a> - SHA256 @TAR_SHA256SUM@)
</p>
<p>To install it right away for all UNIX users (Linux, OS X, etc.), type:
<code class="commands">sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl<br/>
sudo chmod a+rx /usr/local/bin/youtube-dl</code>
</p>
<p>If you do not have curl, you can alternatively use a recent wget:
<code class="commands">sudo wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl<br/>
sudo chmod a+rx /usr/local/bin/youtube-dl</code>
</p>
<p>You can also use pip:
<code class="commands">sudo pip install --upgrade youtube_dl</code>
</p>
<p>
This command will update youtube-dl if you have already installed it.
See the <a href="https://pypi.python.org/pypi/youtube_dl">pypi page</a> for more information.
</p>
<p>You can use Homebrew if you have it:
<code class="commands">brew install youtube-dl</code>
</p>
<p>To check the signature, type:
<code class="commands">sudo wget https://yt-dl.org/downloads/latest/youtube-dl.sig -O youtube-dl.sig<br/>gpg --verify youtube-dl.sig /usr/local/bin/youtube-dl<br/>rm youtube-dl.sig</code>
</p>
<p>The following GPG keys will be used to sign the binaries and the git tags:</p>
<ul>
<li>Sergey M. <code class="fingerprint"><a href="https://dstftw.github.io/keys/18A9236D.asc">ED7F 5BF4 6B3B BED8 1C87 368E 2C39 3E0F 18A9 236D</a></code></li>
</ul>
<p>Older releases are also signed with one of:
<ul>
<li>Philipp Hagemeister <code class="fingerprint"><a href="https://phihag.de/keys/A4826A18.asc">7D33 D762 FD6C 3513 0481 347F DB4B 54CB A482 6A18</a></code> (until 2016-05-30)</li>
<li>Philipp Hagemeister <code class="fingerprint">0600 E1DB 6FB5 3A5D 95D8 FC0D F5EA B582 FAFB 085C</code> (until 2013-06-01)</li>
</li>
<li>Filippo Valsorda <code class="fingerprint">428D F5D6 3EF0 7494 BB45 5AC0 EBF0 1804 BCF0 5F6B</code> (until 2014)</li>
</p>
<div class="note">
<a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/deed.en_US">
<img alt="Creative Commons License" style="border-width:0"
src="https://i.creativecommons.org/l/by-sa/3.0/80x15.png" /></a><br />
Copyright © 2006-2011 Ricardo Garcia Gonzalez<br />
Copyright © 2011-2021 youtube-dl developers
</div>
</body>
</html>
+7
View File
@@ -0,0 +1,7 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<meta http-equiv="refresh" content="0; url=https://github.com/ytdl-org/youtube-dl/blob/master/README.md#faq">
</head>
</html>
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 435 B

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 356 B

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 425 B

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 349 B

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 331 B

+37
View File
@@ -0,0 +1,37 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
<title>youtube-dl</title>
<link rel="stylesheet" href="style.css" type="text/css" />
<link rel="alternate" type="application/atom+xml" title="youtube-dl releases" href="update/releases.atom" />
</head>
<body>
<table class="heading"><tr>
<td class="title"><a href="index.html">youtube-dl</a></td>
<td class="subtitle">Download videos from YouTube
(and <a href="supportedsites.html" style="color: blue; text-decoration: underline;">more sites</a>)</td>
</tr></table>
<p><em>youtube-dl</em> is a command-line program to download videos from YouTube.com and a few <a href="supportedsites.html" style="color: blue; text-decoration: underline;">more sites</a>. It requires the <a href="http://www.python.org/">Python interpreter</a> (2.6, 2.7, or 3.2+), and it is not platform specific. We also provide a <a href="https://yt-dl.org/latest/youtube-dl.exe">Windows executable</a> that includes Python. youtube-dl should work in your Unix box, in Windows or in Mac OS X. It is released to the public domain, which means you can modify it, redistribute it or use it however you like.</p>
<table border="0" id="rgb">
<tr><td><a class="button" id="r" href="https://github.com/ytdl-org/youtube-dl/blob/master/README.md#readme">Documentation</a></td></tr>
<tr><td><a class="button" id="g" href="download.html">Download</a></td></tr>
<tr><td><a class="button" id="main-support" href="https://github.com/ytdl-org/youtube-dl/issues/new/choose">Support</a></td></tr>
<tr><td><a class="button" id="y" href="https://github.com/ytdl-org/youtube-dl/">Develop</a></td></tr>
<tr><td><a class="button" id="b" href="about.html">About</a></td></tr>
</table>
<p>You can also contact us on the irc channel <a href="irc://chat.freenode.net/#youtube-dl">#youtube-dl</a> (<a href="http://webchat.freenode.net/?randomnick=1&amp;channels=youtube-dl">webchat</a>) on freenode.</p>
<div class="note">
<a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/deed.en_US">
<img alt="Creative Commons License" style="border-width:0"
src="https://i.creativecommons.org/l/by-sa/3.0/80x15.png" /></a><br />
Copyright © 2006-2011 Ricardo Garcia Gonzalez<br />
Copyright © 2011-2021 youtube-dl developers
</div>
</body>
</html>
+1
View File
@@ -0,0 +1 @@
../update/LATEST_VERSION
-6
View File
@@ -1,6 +0,0 @@
[wheel]
universal = True
[flake8]
exclude = youtube_dl/extractor/__init__.py,devscripts/buildserver.py,devscripts/lazy_load_template.py,devscripts/make_issue_template.py,setup.py,build,.git,venv
ignore = E402,E501,E731,E741,W503
-148
View File
@@ -1,148 +0,0 @@
#!/usr/bin/env python
# coding: utf-8
from __future__ import print_function
import os.path
import warnings
import sys
try:
from setuptools import setup, Command
setuptools_available = True
except ImportError:
from distutils.core import setup, Command
setuptools_available = False
from distutils.spawn import spawn
try:
# This will create an exe that needs Microsoft Visual C++ 2008
# Redistributable Package
import py2exe
except ImportError:
if len(sys.argv) >= 2 and sys.argv[1] == 'py2exe':
print('Cannot import py2exe', file=sys.stderr)
exit(1)
py2exe_options = {
'bundle_files': 1,
'compressed': 1,
'optimize': 2,
'dist_dir': '.',
'dll_excludes': ['w9xpopen.exe', 'crypt32.dll'],
}
# Get the version from youtube_dl/version.py without importing the package
exec(compile(open('youtube_dl/version.py').read(),
'youtube_dl/version.py', 'exec'))
DESCRIPTION = 'YouTube video downloader'
LONG_DESCRIPTION = 'Command-line program to download videos from YouTube.com and other video sites'
py2exe_console = [{
'script': './youtube_dl/__main__.py',
'dest_base': 'youtube-dl',
'version': __version__,
'description': DESCRIPTION,
'comments': LONG_DESCRIPTION,
'product_name': 'youtube-dl',
'product_version': __version__,
}]
py2exe_params = {
'console': py2exe_console,
'options': {'py2exe': py2exe_options},
'zipfile': None
}
if len(sys.argv) >= 2 and sys.argv[1] == 'py2exe':
params = py2exe_params
else:
files_spec = [
('etc/bash_completion.d', ['youtube-dl.bash-completion']),
('etc/fish/completions', ['youtube-dl.fish']),
('share/doc/youtube_dl', ['README.txt']),
('share/man/man1', ['youtube-dl.1'])
]
root = os.path.dirname(os.path.abspath(__file__))
data_files = []
for dirname, files in files_spec:
resfiles = []
for fn in files:
if not os.path.exists(fn):
warnings.warn('Skipping file %s since it is not present. Type make to build all automatically generated files.' % fn)
else:
resfiles.append(fn)
data_files.append((dirname, resfiles))
params = {
'data_files': data_files,
}
if setuptools_available:
params['entry_points'] = {'console_scripts': ['youtube-dl = youtube_dl:main']}
else:
params['scripts'] = ['bin/youtube-dl']
class build_lazy_extractors(Command):
description = 'Build the extractor lazy loading module'
user_options = []
def initialize_options(self):
pass
def finalize_options(self):
pass
def run(self):
spawn(
[sys.executable, 'devscripts/make_lazy_extractors.py', 'youtube_dl/extractor/lazy_extractors.py'],
dry_run=self.dry_run,
)
setup(
name='youtube_dl',
version=__version__,
description=DESCRIPTION,
long_description=LONG_DESCRIPTION,
url='https://github.com/ytdl-org/youtube-dl',
author='Ricardo Garcia',
author_email='ytdl@yt-dl.org',
maintainer='Sergey M.',
maintainer_email='dstftw@gmail.com',
license='Unlicense',
packages=[
'youtube_dl',
'youtube_dl.extractor', 'youtube_dl.downloader',
'youtube_dl.postprocessor'],
# Provokes warning on most systems (why?!)
# test_suite = 'nose.collector',
# test_requires = ['nosetest'],
classifiers=[
'Topic :: Multimedia :: Video',
'Development Status :: 5 - Production/Stable',
'Environment :: Console',
'License :: Public Domain',
'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.6',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.2',
'Programming Language :: Python :: 3.3',
'Programming Language :: Python :: 3.4',
'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',
],
cmdclass={'build_lazy_extractors': build_lazy_extractors},
**params
)
+156
View File
@@ -0,0 +1,156 @@
body {
font-family: sans-serif;
margin-left: 10%;
margin-right: 10%;
margin-top: 2ex;
margin-bottom: 3ex;
background-color: white;
color: black;
/*background-color: #fff1db;*/
background-color: white;
/*
background-image: url("gradient.png");
background-repeat: repeat-x;
*/
/*
background-image: url("gradient2.png");
background-repeat: repeat-y;
*/
/*
background-image: url("gradient3.png");
background-repeat: repeat-x;
*/
/*
background-image: url("gradient4.png");
background-repeat: repeat-y;
*/
background-image: url("gradient5.png");
background-repeat: repeat-x;
}
.heading {
border: 0;
color: black;
font-size: xx-large;
font-weight: bold;
padding-bottom: 1ex;
border-bottom: 1px solid black;
margin-bottom: 2ex;
width: 100%;
}
.heading tr {
border: 0;
}
.heading td {
border: 0;
}
.heading a {
text-decoration: none;
color: black;
}
.title {
text-align: left;
}
.subtitle {
text-align: right;
}
.toc {
padding-left: 2ex;
border: 1px solid #aaaaaa;
background-color: white;
padding-bottom: 1ex;
border-radius: 10px;
-moz-border-radius: 10px;
}
.toc ul {
margin: 0; list-style-type: none;
}
hr {
margin-top: 3ex;
margin-bottom: 3ex;
width: 50%;
}
.note {
margin-top: 10ex;
text-align: center;
font-size: x-small;
}
h1 {
font-size: x-large;
margin-top: 2ex;
color: black;
margin-left: 2%;
margin-right: 2%;
}
h2 {
font-size: large;
margin-left: 5%;
margin-right: 5%;
}
p {
margin-left: 5%;
margin-right: 5%;
}
ul {
margin-left: 5%;
margin-right: 5%;
}
li {
margin-left: 3%;
margin-top: 0.5ex;
margin-bottom: 0.5ex;
}
tt {
padding-left: 0.5ex;
padding-right: 0.5ex;
background: #dddddd;
}
#rgb {
width: 33%;
margin: 3ex auto;
}
.button {
color: white;
font-weight: bold;
font-size: x-large;
text-decoration: none;
text-align: center;
display: block;
padding: 2ex;
border-radius: 10px;
-moz-border-radius: 10px;
}
#r {
background-color: #884444;
border: 2px solid #880000;
}
#g {
background-color: #448844;
border: 2px solid #006600;
}
#b {
background-color: #444488;
border: 2px solid #000088;
}
#y {
background-color: #888844;
border: 2px solid #666600;
}
#main-support {
background-color: #448888;
border: 2px solid #008888;
}
code.commands {
display:block;
margin-top: 0.4em;
padding: 0.7em;
background: #ccc;
background: rgba(200, 200, 200, 0.4);
white-space: pre;
}
code.fingerprint {
font-weight: bold;
font-size: 140%;
}
+1252
View File
File diff suppressed because it is too large Load Diff
+28
View File
@@ -0,0 +1,28 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<title>youtube-dl: Supported sites</title>
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body>
<table class="heading"><tr>
<td class="title"><a href="index.html">youtube-dl</a></td>
<td class="subtitle">Supported sites</td>
</tr></table>
<p>Here's is the list of all the supported sites, ordered alphabetically:</p>
<ul>
@SITES@
</ul>
<div class="note">
<a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/deed.en_US">
<img alt="Creative Commons License" style="border-width:0"
src="https://i.creativecommons.org/l/by-sa/3.0/80x15.png" /></a><br />
Copyright © 2006-2011 Ricardo Garcia Gonzalez<br />
Copyright © 2011-2021 youtube-dl developers
</div>
</body>
</html>
View File
-285
View File
@@ -1,285 +0,0 @@
from __future__ import unicode_literals
import errno
import hashlib
import json
import os.path
import re
import ssl
import sys
import types
import unittest
import youtube_dl.extractor
from youtube_dl import YoutubeDL
from youtube_dl.compat import (
compat_open as open,
compat_os_name,
compat_str,
)
from youtube_dl.utils import (
IDENTITY,
preferredencoding,
write_string,
)
def get_params(override=None):
PARAMETERS_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)),
"parameters.json")
LOCAL_PARAMETERS_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)),
"local_parameters.json")
with open(PARAMETERS_FILE, encoding='utf-8') as pf:
parameters = json.load(pf)
if os.path.exists(LOCAL_PARAMETERS_FILE):
with open(LOCAL_PARAMETERS_FILE, encoding='utf-8') as pf:
parameters.update(json.load(pf))
if override:
parameters.update(override)
return parameters
def try_rm(filename):
""" Remove a file if it exists """
try:
os.remove(filename)
except OSError as ose:
if ose.errno != errno.ENOENT:
raise
def report_warning(message):
'''
Print the message to stderr, it will be prefixed with 'WARNING:'
If stderr is a tty file the 'WARNING:' will be colored
'''
if sys.stderr.isatty() and compat_os_name != 'nt':
_msg_header = '\033[0;33mWARNING:\033[0m'
else:
_msg_header = 'WARNING:'
output = '%s %s\n' % (_msg_header, message)
if 'b' in getattr(sys.stderr, 'mode', '') or sys.version_info[0] < 3:
output = output.encode(preferredencoding())
sys.stderr.write(output)
class FakeYDL(YoutubeDL):
def __init__(self, override=None):
# Different instances of the downloader can't share the same dictionary
# some test set the "sublang" parameter, which would break the md5 checks.
params = get_params(override=override)
super(FakeYDL, self).__init__(params, auto_init=False)
self.result = []
def to_screen(self, s, skip_eol=None):
print(s)
def trouble(self, *args, **kwargs):
s = args[0] if len(args) > 0 else kwargs.get('message', 'Missing message')
raise Exception(s)
def download(self, x):
self.result.append(x)
def expect_warning(self, regex):
# Silence an expected warning matching a regex
old_report_warning = self.report_warning
def report_warning(self, message, *args, **kwargs):
if re.match(regex, message):
return
old_report_warning(message, *args, **kwargs)
self.report_warning = types.MethodType(report_warning, self)
class FakeLogger(object):
def debug(self, msg):
pass
def warning(self, msg):
pass
def error(self, msg):
pass
def gettestcases(include_onlymatching=False):
for ie in youtube_dl.extractor.gen_extractors():
for tc in ie.get_testcases(include_onlymatching):
yield tc
md5 = lambda s: hashlib.md5(s.encode('utf-8')).hexdigest()
def expect_value(self, got, expected, field):
if isinstance(expected, compat_str) and expected.startswith('re:'):
match_str = expected[len('re:'):]
match_rex = re.compile(match_str)
self.assertTrue(
isinstance(got, compat_str),
'Expected a %s object, but got %s for field %s' % (
compat_str.__name__, type(got).__name__, field))
self.assertTrue(
match_rex.match(got),
'field %s (value: %r) should match %r' % (field, got, match_str))
elif isinstance(expected, compat_str) and expected.startswith('startswith:'):
start_str = expected[len('startswith:'):]
self.assertTrue(
isinstance(got, compat_str),
'Expected a %s object, but got %s for field %s' % (
compat_str.__name__, type(got).__name__, field))
self.assertTrue(
got.startswith(start_str),
'field %s (value: %r) should start with %r' % (field, got, start_str))
elif isinstance(expected, compat_str) and expected.startswith('contains:'):
contains_str = expected[len('contains:'):]
self.assertTrue(
isinstance(got, compat_str),
'Expected a %s object, but got %s for field %s' % (
compat_str.__name__, type(got).__name__, field))
self.assertTrue(
contains_str in got,
'field %s (value: %r) should contain %r' % (field, got, contains_str))
elif isinstance(expected, compat_str) and re.match(r'lambda \w+:', expected):
fn = eval(expected)
suite = expected.split(':', 1)[1].strip()
self.assertTrue(
fn(got),
'Expected field %s to meet condition %s, but value %r failed ' % (field, suite, got))
elif isinstance(expected, type):
self.assertTrue(
isinstance(got, expected),
'Expected type %r for field %s, but got value %r of type %r' % (expected, field, got, type(got)))
elif isinstance(expected, dict) and isinstance(got, dict):
expect_dict(self, got, expected)
elif isinstance(expected, list) and isinstance(got, list):
self.assertEqual(
len(expected), len(got),
'Expected a list of length %d, but got a list of length %d for field %s' % (
len(expected), len(got), field))
for index, (item_got, item_expected) in enumerate(zip(got, expected)):
type_got = type(item_got)
type_expected = type(item_expected)
self.assertEqual(
type_expected, type_got,
'Type mismatch for list item at index %d for field %s, expected %r, got %r' % (
index, field, type_expected, type_got))
expect_value(self, item_got, item_expected, field)
else:
if isinstance(expected, compat_str) and expected.startswith('md5:'):
self.assertTrue(
isinstance(got, compat_str),
'Expected field %s to be a unicode object, but got value %r of type %r' % (field, got, type(got)))
got = 'md5:' + md5(got)
elif isinstance(expected, compat_str) and re.match(r'^(?:min|max)?count:\d+', expected):
self.assertTrue(
isinstance(got, (list, dict)),
'Expected field %s to be a list or a dict, but it is of type %s' % (
field, type(got).__name__))
op, _, expected_num = expected.partition(':')
expected_num = int(expected_num)
if op == 'mincount':
assert_func = self.assertGreaterEqual
msg_tmpl = 'Expected %d items in field %s, but only got %d'
elif op == 'maxcount':
assert_func = self.assertLessEqual
msg_tmpl = 'Expected maximum %d items in field %s, but got %d'
elif op == 'count':
assert_func = self.assertEqual
msg_tmpl = 'Expected exactly %d items in field %s, but got %d'
else:
assert False
assert_func(
len(got), expected_num,
msg_tmpl % (expected_num, field, len(got)))
return
self.assertEqual(
expected, got,
'Invalid value for field %s, expected %r, got %r' % (field, expected, got))
def expect_dict(self, got_dict, expected_dict):
for info_field, expected in expected_dict.items():
got = got_dict.get(info_field)
expect_value(self, got, expected, info_field)
def expect_info_dict(self, got_dict, expected_dict):
expect_dict(self, got_dict, expected_dict)
# Check for the presence of mandatory fields
if got_dict.get('_type') not in ('playlist', 'multi_video'):
for key in ('id', 'url', 'title', 'ext'):
self.assertTrue(got_dict.get(key), 'Missing mandatory field %s' % key)
# Check for mandatory fields that are automatically set by YoutubeDL
for key in ['webpage_url', 'extractor', 'extractor_key']:
self.assertTrue(got_dict.get(key), 'Missing field: %s' % key)
# Are checkable fields missing from the test case definition?
test_info_dict = dict((key, value if not isinstance(value, compat_str) or len(value) < 250 else 'md5:' + md5(value))
for key, value in got_dict.items()
if value and key in ('id', 'title', 'description', 'uploader', 'upload_date', 'timestamp', 'uploader_id', 'location', 'age_limit'))
missing_keys = set(test_info_dict.keys()) - set(expected_dict.keys())
if missing_keys:
def _repr(v):
if isinstance(v, compat_str):
return "'%s'" % v.replace('\\', '\\\\').replace("'", "\\'").replace('\n', '\\n')
else:
return repr(v)
info_dict_str = ''
if len(missing_keys) != len(expected_dict):
info_dict_str += ''.join(
' %s: %s,\n' % (_repr(k), _repr(v))
for k, v in test_info_dict.items() if k not in missing_keys)
if info_dict_str:
info_dict_str += '\n'
info_dict_str += ''.join(
' %s: %s,\n' % (_repr(k), _repr(test_info_dict[k]))
for k in missing_keys)
write_string(
'\n\'info_dict\': {\n' + info_dict_str + '},\n', out=sys.stderr)
self.assertFalse(
missing_keys,
'Missing keys in test definition: %s' % (
', '.join(sorted(missing_keys))))
def assertRegexpMatches(self, text, regexp, msg=None):
if hasattr(self, 'assertRegexp'):
return self.assertRegexp(text, regexp, msg)
else:
m = re.match(regexp, text)
if not m:
note = 'Regexp didn\'t match: %r not found' % (regexp)
if len(text) < 1000:
note += ' in %r' % text
if msg is None:
msg = note
else:
msg = note + ', ' + msg
self.assertTrue(m, msg)
def expect_warnings(ydl, warnings_re):
real_warning = ydl.report_warning
def _report_warning(self, w, *args, **kwargs):
if not any(re.search(w_re, w) for w_re in warnings_re):
real_warning(w)
ydl.report_warning = types.MethodType(_report_warning, ydl)
def http_server_port(httpd):
if os.name == 'java' and isinstance(httpd.socket, ssl.SSLSocket):
# In Jython SSLSocket is not a subclass of socket.socket
sock = httpd.socket.sock
else:
sock = httpd.socket
return sock.getsockname()[1]
def expectedFailureIf(cond):
return unittest.expectedFailure if cond else IDENTITY
-42
View File
@@ -1,42 +0,0 @@
{
"consoletitle": false,
"continuedl": true,
"forcedescription": false,
"forcefilename": false,
"forceformat": false,
"forcethumbnail": false,
"forcetitle": false,
"forceurl": false,
"format": "best",
"ignoreerrors": false,
"listformats": null,
"logtostderr": false,
"matchtitle": null,
"max_downloads": null,
"nooverwrites": false,
"nopart": false,
"noprogress": false,
"outtmpl": "%(id)s.%(ext)s",
"password": null,
"playliststart": 1,
"prefer_free_formats": false,
"quiet": false,
"ratelimit": null,
"rejecttitle": null,
"retries": 10,
"simulate": false,
"subtitleslang": null,
"subtitlesformat": "best",
"test": true,
"updatetime": true,
"usenetrc": false,
"username": null,
"verbose": true,
"writedescription": false,
"writeinfojson": true,
"writesubtitles": false,
"allsubtitles": false,
"listsubtitles": false,
"socket_timeout": 20,
"fixup": "never"
}
-1
View File
@@ -1 +0,0 @@
*.swf
-19
View File
@@ -1,19 +0,0 @@
// input: [["a", "b", "c", "d"]]
// output: ["c", "b", "a", "d"]
package {
public class ArrayAccess {
public static function main(ar:Array):Array {
var aa:ArrayAccess = new ArrayAccess();
return aa.f(ar, 2);
}
private function f(ar:Array, num:Number):Array{
var x:String = ar[0];
var y:String = ar[num % ar.length];
ar[0] = y;
ar[num] = x;
return ar;
}
}
}
-17
View File
@@ -1,17 +0,0 @@
// input: []
// output: 121
package {
public class ClassCall {
public static function main():int{
var f:OtherClass = new OtherClass();
return f.func(100,20);
}
}
}
class OtherClass {
public function func(x: int, y: int):int {
return x+y+1;
}
}
-15
View File
@@ -1,15 +0,0 @@
// input: []
// output: 0
package {
public class ClassConstruction {
public static function main():int{
var f:Foo = new Foo();
return 0;
}
}
}
class Foo {
}
-18
View File
@@ -1,18 +0,0 @@
// input: []
// output: 4
package {
public class ConstArrayAccess {
private static const x:int = 2;
private static const ar:Array = ["42", "3411"];
public static function main():int{
var c:ConstArrayAccess = new ConstArrayAccess();
return c.f();
}
public function f(): int {
return ar[1].length;
}
}
}
-12
View File
@@ -1,12 +0,0 @@
// input: []
// output: 2
package {
public class ConstantInt {
private static const x:int = 2;
public static function main():int{
return x;
}
}
}
-10
View File
@@ -1,10 +0,0 @@
// input: [{"x": 1, "y": 2}]
// output: 3
package {
public class DictCall {
public static function main(d:Object):int{
return d.x + d.y;
}
}
}
-10
View File
@@ -1,10 +0,0 @@
// input: []
// output: false
package {
public class EqualsOperator {
public static function main():Boolean{
return 1 == 2;
}
}
}
-13
View File
@@ -1,13 +0,0 @@
// input: [1, 2]
// output: 3
package {
public class LocalVars {
public static function main(a:int, b:int):int{
var c:int = a + b + b;
var d:int = c - b;
var e:int = d;
return e;
}
}
}
-22
View File
@@ -1,22 +0,0 @@
// input: [1]
// output: 2
package {
public class MemberAssignment {
public var v:int;
public function g():int {
return this.v;
}
public function f(a:int):int{
this.v = a;
return this.v + this.g();
}
public static function main(a:int): int {
var v:MemberAssignment = new MemberAssignment();
return v.f(a);
}
}
}
-24
View File
@@ -1,24 +0,0 @@
// input: []
// output: 123
package {
public class NeOperator {
public static function main(): int {
var res:int = 0;
if (1 != 2) {
res += 3;
} else {
res += 4;
}
if (2 != 2) {
res += 10;
} else {
res += 20;
}
if (9 == 9) {
res += 100;
}
return res;
}
}
}
-21
View File
@@ -1,21 +0,0 @@
// input: []
// output: 9
package {
public class PrivateCall {
public static function main():int{
var f:OtherClass = new OtherClass();
return f.func();
}
}
}
class OtherClass {
private function pf():int {
return 9;
}
public function func():int {
return this.pf();
}
}
-22
View File
@@ -1,22 +0,0 @@
// input: []
// output: 9
package {
public class PrivateVoidCall {
public static function main():int{
var f:OtherClass = new OtherClass();
f.func();
return 9;
}
}
}
class OtherClass {
private function pf():void {
;
}
public function func():void {
this.pf();
}
}
-13
View File
@@ -1,13 +0,0 @@
// input: [1]
// output: 1
package {
public class StaticAssignment {
public static var v:int;
public static function main(a:int):int{
v = a;
return v;
}
}
}
-16
View File
@@ -1,16 +0,0 @@
// input: []
// output: 1
package {
public class StaticRetrieval {
public static var v:int;
public static function main():int{
if (v) {
return 0;
} else {
return 1;
}
}
}
}
-11
View File
@@ -1,11 +0,0 @@
// input: []
// output: 3
package {
public class StringBasics {
public static function main():int{
var s:String = "abc";
return s.length;
}
}
}
-11
View File
@@ -1,11 +0,0 @@
// input: []
// output: 9897
package {
public class StringCharCodeAt {
public static function main():int{
var s:String = "abc";
return s.charCodeAt(1) * 100 + s.charCodeAt();
}
}
}

Some files were not shown because too many files have changed in this diff Show More