diff --git a/.gitignore b/.gitignore index 6e31ba6c..30edddcb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ /build/ /dist/ +/*.egg-info/ _*/ *.py[cod] diff --git a/CHANGELOG.txt b/CHANGELOG.txt index a5693d97..6c8a5030 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,2 +1,20 @@ Changelog ========= + +0.1 +--- + +*Date: 2012-09-01* + +* First PyPI release. +* Fix issue `#1 `_. + +0.0.1 +----- + +*Date: 2012-08-21* + +* Initial release, forked from `iambus/youku-lixian `_; add: + - YouTube support. + - Pausing and resuming of downloads. + - HTTP proxy settings. diff --git a/Makefile b/Makefile index e31e637a..faabf80c 100644 --- a/Makefile +++ b/Makefile @@ -1,18 +1,21 @@ -default: install sdist bdist +default: sdist bdist bdist_egg install clean: - rm -fr build/ dist/ + rm -fr build/ dist/ *.egg-info/ build: python3 setup.py build -install: build - sudo python3 setup.py install - sdist: python3 setup.py sdist bdist: python3 setup.py bdist -.PHONY: default clean build install sdist bdist +bdist_egg: + python3 setup.py bdist_egg + +install: bdist_egg + sudo python3 setup.py install + +.PHONY: default clean build sdist bdist bdist_egg install diff --git a/README.md b/README.md index 45ea187d..0df85856 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,176 @@ # You-Get -一个Python 3的YouTube/优酷视频下载脚本。 +[You-Get](https://github.com/soimort/you-get) is a video downloader runs on Python 3. It aims at easing the download of videos on [YouTube](http://www.youtube.com), [Youku](http://www.youku.com)/[Tudou](http://www.tudou.com) (biggest online video providers in China), etc., in one tool. -### Python版本 +See the project homepage for further documentation. -Python 3.x +Fork me on GitHub: + +## Features + +### Supported Sites (UPDATING!) + +* YouTube +* Youku +* Tudou +* YinYueTai + +### Supported Video Formats + +* WebM (*.webm) +* MP4 (*.mp4) +* FLV (*.flv) +* 3GP (*.3gp) + +## Installation + +### 1. Install via [Pip](http://www.pip-installer.org/): + + $ pip install you_get + + Check if the installation was successful: + + $ you-get -V + +### 2. Install via [EasyInstall](http://pypi.python.org/pypi/setuptools): + + $ easy_install you_get + + Check if the installation was successful: + + $ you-get -V + +### 3. Direct download (from ): + + $ wget -O you-get.zip https://github.com/soimort/you-get/zipball/master + $ unzip you-get.zip + + Use the raw script without installation: + + $ cd soimort-you-get-*/ + $ ./you-get -V + + To install the package into the system path, execute: + + $ make install + + Or: + + > setup.py install + + on Windows. + + Check if the installation was successful: + + $ you-get -V + +### 4. Clone the Git repository (RECOMMENDED!): + + $ git clone git://github.com/soimort/you-get.git + + Use the raw script without installation: + + $ cd you-get/ + $ ./you-get -V + + To install the package into the system path, execute: + + $ make install + + Or: + + > setup.py install + + on Windows. + + Check if the installation was successful: + + $ you-get -V + +## Examples (For End-Users) + +Display the information of the video without downloading: + + $ you-get -i http://www.youtube.com/watch?v=sGwy8DsUJ4M + +Download the video: + + $ you-get http://www.youtube.com/watch?v=sGwy8DsUJ4M + +Download multiple videos: + + $ you-get http://www.youtube.com/watch?v=sGwy8DsUJ4M http://www.youtube.com/watch?v=8bQlxQJEzLk + +By default, program will skip any video that already exists in the local directory when downloading. If a temporary file (ends with a filename extension ".download") exists, program will resume this download. + +To enforce the re-downloading of videos, use '-f' option (this will overwrite any existing video or temporary file, rather than skipping or resuming them): + + $ you-get -f http://www.youtube.com/watch?v=sGwy8DsUJ4M + +Set the output directory of downloaded files: + + $ you-get -o ~/Downloads http://www.youtube.com/watch?v=sGwy8DsUJ4M + +Use a specific HTTP proxy for downloading: + + $ you-get -x 127.0.0.1:8087 http://www.youtube.com/watch?v=sGwy8DsUJ4M + +By default, Python will apply the system proxy settings (i.e. environment variable $http_proxy). To cancel the use of proxy, use '--no-proxy' option: + + $ you-get --no-proxy http://www.youtube.com/watch?v=sGwy8DsUJ4M + +## Command-Line Options + +For a complete list of all available options, see: + + $ you-get --help + +## Examples (For Developers) + +In Python 3.2 (interactive): + + >>> import you_get + + >>> you_get.__version__ + '0.1' + + >>> you_get.youtube_download("http://www.youtube.com/watch?v=8bQlxQJEzLk", info_only = True) + Video Site: YouTube.com + Title: If you're good at something, never do it for free! + Type: WebM video (video/webm) + Size: 0.13 MB (133176 Bytes) + + >>> you_get.any_download("http://www.youtube.com/watch?v=sGwy8DsUJ4M") + Video Site: YouTube.com + Title: Mort from Madagascar LIKES + Type: WebM video (video/webm) + Size: 1.78 MB (1867072 Bytes) + Downloading Mort from Madagascar LIKES.webm ... + 100.0% ( 1.8/1.8 MB) [========================================] 1/1 + +## API Reference + +See source code. + +## License + +You-Get is licensed under the [MIT license](https://raw.github.com/soimort/you-get/master/LICENSE.txt). + + + +*** + + + +# You-Get - 中文说明 + +[You-Get](https://github.com/soimort/you-get)是一个基于Python 3的视频下载工具。之所以写它的主要原因是,我找不到一个现成的下载工具能够同时支持[YouTube](http://www.youtube.com/)和[优酷](http://www.youku.com/);而且,几乎所有以前的视频下载程序都是基于Python 2的。 + +## 特点 ### 说明 -基于优酷下载脚本[iambus/youku-lixian](https://github.com/iambus/youku-lixian)用Python 3改写而成,增加了以下功能: +You-Get基于优酷下载脚本[iambus/youku-lixian](https://github.com/iambus/youku-lixian)用Python 3改写而成,增加了以下功能: * 支持YouTube * 支持断点续传 @@ -19,9 +181,9 @@ Python 3.x 目前根据本人需求,仅实现了对有限几个视频站点的支持,以后会继续增加(・∀・) * YouTube -* 音悦台 * 优酷 * 土豆 +* 音悦台 ### 输出视频格式 @@ -32,38 +194,101 @@ Python 3.x 对于YouTube,程序将下载画质最高的[编码格式](http://en.wikipedia.org/wiki/Youtube#Quality_and_codecs)。 -### 如何下载视频 +## 安装方法 -(以下命令均以Linux shell为例……Windows用户请自行脑补正确的命令格式) +(以下命令均以Linux shell为例) + +### 1. 通过[Pip](http://www.pip-installer.org/)安装: + + $ pip install you_get + + 检查安装是否成功: + + $ you-get -V + +### 2. 通过[EasyInstall](http://pypi.python.org/pypi/setuptools)安装: + + $ easy_install you_get + + 检查安装是否成功: + + $ you-get -V + +### 3. 直接下载(从): + + $ wget -O you-get.zip https://github.com/soimort/you-get/zipball/master + $ unzip you-get.zip + + 在不安装的情况下直接使用脚本: + + $ cd soimort-you-get-*/ + $ ./you-get -V + + 若要将Python package安装到系统默认路径,执行: + + $ make install + + 或:(适用于Windows) + + > setup.py install + + 检查安装是否成功: + + $ you-get -V + +### 4. 从Git安装(推荐): + + $ git clone git://github.com/soimort/you-get.git + + 在不安装的情况下直接使用脚本: + + $ cd you-get/ + $ ./you-get -V + + 若要将Python package安装到系统默认路径,执行: + + $ make install + + 或:(适用于Windows) + + > setup.py install + + 检查安装是否成功: + + $ you-get -V + +## 使用方法示例 + +### 如何下载视频 显示视频信息,但不进行下载(`-i`或`--info`选项): - $ ./you-get -i http://www.yinyuetai.com/video/463772 + $ you-get -i http://www.yinyuetai.com/video/463772 下载视频: - $ ./you-get http://www.yinyuetai.com/video/463772 + $ you-get http://www.yinyuetai.com/video/463772 下载多个视频: - $ ./you-get http://www.yinyuetai.com/video/463772 http://www.yinyuetai.com/video/471500 + $ you-get http://www.yinyuetai.com/video/463772 http://www.yinyuetai.com/video/471500 若当前目录下已有与视频标题同名的文件,下载时会自动跳过。若有同名的`.download`临时文件,程序会从上次中断处开始下载。 如要强制重新下载该视频,可使用`-f`(`--force`)选项: - $ ./you-get -f http://www.yinyuetai.com/video/463772 + $ you-get -f http://www.yinyuetai.com/video/463772 `-l`(`--playlist`)选项用于下载播放列表(只对某些网站适用): - $ ./you-get -l http://www.youku.com/playlist_show/id_5344313.html + $ you-get -l http://www.youku.com/playlist_show/id_5344313.html 指定视频文件的下载目录: - $ ./you-get -o ~/Downloads http://www.yinyuetai.com/video/463772 + $ you-get -o ~/Downloads http://www.yinyuetai.com/video/463772 显示详细帮助: - $ ./you-get -h + $ you-get -h ### 如何设置代理 @@ -71,15 +296,15 @@ Python 3.x `-x`(`--http-proxy`)选项用于手动指定You-Get所使用的HTTP代理。例如:GoAgent的代理服务器是`http://127.0.0.1:8087`,则使用该代理下载某YouTube视频的命令是: - $ ./you-get -x 127.0.0.1:8087 http://www.youtube.com/watch?v=KbtO_Ayjw0M + $ you-get -x 127.0.0.1:8087 http://www.youtube.com/watch?v=KbtO_Ayjw0M Windows下的自由门等翻墙软件会自动设置系统全局代理,因此无需指定HTTP代理即可下载YouTube视频: - $ ./you-get http://www.youtube.com/watch?v=KbtO_Ayjw0M + $ you-get http://www.youtube.com/watch?v=KbtO_Ayjw0M 如果不希望程序在下载过程中使用任何代理(包括系统的代理配置),可以显式地指定`--no-proxy`选项: - $ ./you-get --no-proxy http://v.youku.com/v_show/id_XMjI0ODc1NTc2.html + $ you-get --no-proxy http://v.youku.com/v_show/id_XMjI0ODc1NTc2.html ### 断点续传 @@ -87,12 +312,12 @@ Windows下的自由门等翻墙软件会自动设置系统全局代理,因此 下次运行只要在目标路径中找到相应的`.download`临时文件,程序会自动从中断处继续下载。(除非指定了`-f`选项) -### 使用Python 2? +## 使用Python 2? 优酷等国内视频网站的下载,请移步:[iambus/youku-lixian](https://github.com/iambus/youku-lixian) YouTube等国外视频网站的下载,请移步:[rg3/youtube-dl](https://github.com/rg3/youtube-dl) -### 许可证 +## 许可证 -源码在MIT License下发布。 +You-Get在[MIT License](https://raw.github.com/soimort/you-get/master/LICENSE.txt)下发布。 diff --git a/README.txt b/README.txt index f7c714bb..b1c00e41 100644 --- a/README.txt +++ b/README.txt @@ -1,2 +1,167 @@ You-Get ======= + +`You-Get `_ is a video downloader runs on Python 3. It aims at easing the download of videos on `YouTube `_, `Youku `_/`Tudou `_ (biggest online video providers in China), etc., in one tool. + +See the project homepage http://www.soimort.org/you-get for further documentation. + +Fork me on GitHub: https://github.com/soimort/you-get + +Features +-------- + +Supported Sites (UPDATING!) +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +* YouTube http://www.youtube.com +* Youku http://www.youku.com +* Tudou http://www.tudou.com +* YinYueTai http://www.yinyuetai.com + +Supported Video Formats +~~~~~~~~~~~~~~~~~~~~~~~ + +* WebM (\*.webm) +* MP4 (\*.mp4) +* FLV (\*.flv) +* 3GP (\*.3gp) + +Installation +------------ + +#) Install via `Pip `_:: + + $ pip install you_get + + Check if the installation was successful:: + + $ you-get -V + +#) Install via `EasyInstall `_:: + + $ easy_install you_get + + Check if the installation was successful:: + + $ you-get -V + +#) Direct download (from https://github.com/soimort/you-get/zipball/master):: + + $ wget -O you-get.zip https://github.com/soimort/you-get/zipball/master + $ unzip you-get.zip + + Use the raw script without installation:: + + $ cd soimort-you-get-*/ + $ ./you-get -V + + To install the package into the system path, execute:: + + $ make install + + Or:: + + > setup.py install + + on Windows. + + Check if the installation was successful:: + + $ you-get -V + +#) Clone the Git repository (RECOMMENDED!):: + + $ git clone git://github.com/soimort/you-get.git + + Use the raw script without installation:: + + $ cd you-get/ + $ ./you-get -V + + To install the package into the system path, execute:: + + $ make install + + Or:: + + > setup.py install + + on Windows. + + Check if the installation was successful:: + + $ you-get -V + +Examples (For End-Users) +------------------------ + +Display the information of the video without downloading:: + + $ you-get -i http://www.youtube.com/watch?v=sGwy8DsUJ4M + +Download the video:: + + $ you-get http://www.youtube.com/watch?v=sGwy8DsUJ4M + +Download multiple videos:: + + $ you-get http://www.youtube.com/watch?v=sGwy8DsUJ4M http://www.youtube.com/watch?v=8bQlxQJEzLk + +By default, program will skip any video that already exists in the local directory when downloading. If a temporary file (ends with a filename extension ".download") exists, program will resume this download. + +To enforce the re-downloading of videos, use '-f' option (this will overwrite any existing video or temporary file, rather than skipping or resuming them):: + + $ you-get -f http://www.youtube.com/watch?v=sGwy8DsUJ4M + +Set the output directory of downloaded files:: + + $ you-get -o ~/Downloads http://www.youtube.com/watch?v=sGwy8DsUJ4M + +Use a specific HTTP proxy for downloading:: + + $ you-get -x 127.0.0.1:8087 http://www.youtube.com/watch?v=sGwy8DsUJ4M + +By default, Python will apply the system proxy settings (i.e. environment variable $http_proxy). To cancel the use of proxy, use '--no-proxy' option:: + + $ you-get --no-proxy http://www.youtube.com/watch?v=sGwy8DsUJ4M + +Command-Line Options +-------------------- + +For a complete list of all available options, see:: + + $ you-get --help + +Examples (For Developers) +------------------------- + +In Python 3.2 (interactive):: + + >>> import you_get + + >>> you_get.__version__ + '0.1' + + >>> you_get.youtube_download("http://www.youtube.com/watch?v=8bQlxQJEzLk", info_only = True) + Video Site: YouTube.com + Title: If you're good at something, never do it for free! + Type: WebM video (video/webm) + Size: 0.13 MB (133176 Bytes) + + >>> you_get.any_download("http://www.youtube.com/watch?v=sGwy8DsUJ4M") + Video Site: YouTube.com + Title: Mort from Madagascar LIKES + Type: WebM video (video/webm) + Size: 1.78 MB (1867072 Bytes) + Downloading Mort from Madagascar LIKES.webm ... + 100.0% ( 1.8/1.8 MB) [========================================] 1/1 + +API Reference +------------- + +See source code. + +License +------- + +You-Get is licensed under the `MIT license `_. diff --git a/setup.cfg b/setup.cfg index cd83a406..6dce5d9e 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,10 @@ [build] -force=0 +force = 0 [global] -verbose=0 +verbose = 0 + +[egg_info] +tag_build = +tag_date = 0 +tag_svn_revision = 0 diff --git a/setup.py b/setup.py index 8c34e382..37d0babf 100755 --- a/setup.py +++ b/setup.py @@ -9,7 +9,7 @@ proj_info = json.loads(open(os.path.join(here, PROJ_METADATA)).read()) README = open(os.path.join(here, 'README.txt')).read() CHANGELOG = open(os.path.join(here, 'CHANGELOG.txt')).read() -from distutils.core import setup +from setuptools import setup, find_packages setup( name = proj_info['name'], version = proj_info['version'], @@ -22,9 +22,16 @@ setup( description = proj_info['description'], keywords = proj_info['keywords'], + long_description = README + '\n\n' + CHANGELOG, - packages = proj_info['packages'], + packages = find_packages(), - classifiers = proj_info['classifiers'] + platforms = 'any', + zip_safe = False, + include_package_data = True, + + classifiers = proj_info['classifiers'], + + entry_points = {'console_scripts': proj_info['console_scripts']} ) diff --git a/you-get b/you-get index 7edfee89..f6f5cb5b 100755 --- a/you-get +++ b/you-get @@ -3,4 +3,4 @@ from you_get import * if __name__ == "__main__": - script_main('you-get', any_download, any_download_playlist) + main() diff --git a/you-get.json b/you-get.json index 1894c555..d3692e30 100644 --- a/you-get.json +++ b/you-get.json @@ -1,7 +1,7 @@ { "name": "you-get", - "version": "0.0.1", - "date": "2012-08-20", + "version": "0.1", + "date": "2012-09-01", "author": "Mort Yao", "author_email": "mort.yao@gmail.com", @@ -12,14 +12,8 @@ "description": "A YouTube/Youku video downloader written in Python 3.", "keywords": "video download youtube youku", - "packages": [ - "you_get", - "you_get.downloader", - "you_get.processor" - ], - "classifiers": [ - "Development Status :: 1 - Planning", + "Development Status :: 2 - Pre-Alpha", "Environment :: Console", "Environment :: Web Environment", "Intended Audience :: End Users/Desktop", @@ -35,5 +29,9 @@ "Topic :: Multimedia", "Topic :: Multimedia :: Video", "Topic :: Utilities" + ], + + "console_scripts": [ + "you-get = you_get.main:main" ] } diff --git a/you_get/__init__.py b/you_get/__init__.py index 73b11c29..8f2ebdd7 100644 --- a/you_get/__init__.py +++ b/you_get/__init__.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python from .processor import * from .downloader import * diff --git a/you_get/common.py b/you_get/common.py index 8d12b184..9cd2d277 100644 --- a/you_get/common.py +++ b/you_get/common.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python import getopt import json @@ -361,7 +362,7 @@ def set_http_proxy(proxy): def script_main(script_name, download, download_playlist = None): version = 'You-Get %s, a video downloader.' % proj_info['version'] - help = 'Usage: [python3] %s [OPTION]... [URL]...\n' % script_name + help = 'Usage: %s [OPTION]... [URL]...\n' % script_name help += '''\nStartup options: -V | --version Display the version and exit. -h | --help Print this help and exit. diff --git a/you_get/downloader/__init__.py b/you_get/downloader/__init__.py index 259bcc18..9e82c601 100644 --- a/you_get/downloader/__init__.py +++ b/you_get/downloader/__init__.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python from .tudou import * from .yinyuetai import * diff --git a/you_get/downloader/tudou.py b/you_get/downloader/tudou.py old mode 100755 new mode 100644 index e8ce5c29..8bc91b3c --- a/you_get/downloader/tudou.py +++ b/you_get/downloader/tudou.py @@ -71,6 +71,3 @@ def tudou_download_playlist(url, output_dir = '.', merge = True, info_only = Fal site_info = "Tudou.com" download = tudou_download download_playlist = tudou_download_playlist - -if __name__ == '__main__': - script_main('tudou.py', tudou_download, tudou_download_playlist) diff --git a/you_get/downloader/yinyuetai.py b/you_get/downloader/yinyuetai.py old mode 100755 new mode 100644 index 10c3f776..ec891e80 --- a/you_get/downloader/yinyuetai.py +++ b/you_get/downloader/yinyuetai.py @@ -31,6 +31,3 @@ def yinyuetai_download(url, output_dir = '.', merge = True, info_only = False): site_info = "YinYueTai.com" download = yinyuetai_download download_playlist = playlist_not_supported('yinyuetai') - -if __name__ == '__main__': - script_main('yinyuetai.py', yinyuetai_download) diff --git a/you_get/downloader/youku.py b/you_get/downloader/youku.py old mode 100755 new mode 100644 index 98324b3c..46f7316e --- a/you_get/downloader/youku.py +++ b/you_get/downloader/youku.py @@ -196,6 +196,3 @@ def youku_download_playlist(url, output_dir = '.', merge = True, info_only = Fal site_info = "Youku.com" download = youku_download download_playlist = youku_download_playlist - -if __name__ == '__main__': - script_main('youku.py', youku_download, youku_download_playlist) diff --git a/you_get/downloader/youtube.py b/you_get/downloader/youtube.py old mode 100755 new mode 100644 index ef6d5983..4b12f165 --- a/you_get/downloader/youtube.py +++ b/you_get/downloader/youtube.py @@ -31,6 +31,3 @@ def youtube_download(url, output_dir = '.', merge = True, info_only = False): site_info = "YouTube.com" download = youtube_download download_playlist = playlist_not_supported('youtube') - -if __name__ == '__main__': - script_main('youtube.py', youtube_download) diff --git a/you_get/main.py b/you_get/main.py old mode 100755 new mode 100644 index 315c9e19..0fd21879 --- a/you_get/main.py +++ b/you_get/main.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -__all__ = ['any_download', 'any_download_playlist'] +__all__ = ['main', 'any_download', 'any_download_playlist'] from .downloader import * from .common import * @@ -46,5 +46,5 @@ def any_download_playlist(url, output_dir = '.', merge = True, info_only = False m = url_to_module(url) m.download_playlist(url, output_dir = output_dir, merge = merge, info_only = info_only) -if __name__ == '__main__': - script_main('main.py', any_download, any_download_playlist) +def main(): + script_main('you-get', any_download, any_download_playlist) diff --git a/you_get/processor/__init__.py b/you_get/processor/__init__.py index 6f0b2aed..cda0ad1f 100644 --- a/you_get/processor/__init__.py +++ b/you_get/processor/__init__.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python __all__ = ['concat_flvs', 'concat_mp4s']