pytube / README.rst
Jose Diaz-Gonzalez
Combine README.nd and README.rst
3c3f846
raw
history blame
4.69 kB
======
pytube
======
A lightweight, dependency-free Python library for downloading YouTube Videos.
Description
===========
Downloading videos from YouTube shouldn't require some bloatware application,
it's usually a niche condition you want to do so in the first place. So I
present to you, PyTube!
Installation
============
If you are on Mac OS X or Linux, chances are that one of the following two commands will work for you:
Installation
============
Using PIP via PyPI
.. code:: bash
pip install pytube==0.1.16
Using PIP via Github
.. code:: bash
pip install git+git://github.com/NFicano/pytube.git@0.1.16#egg=pytube
Adding to your ``requirements.txt`` file (run ``pip install -r requirements.txt`` afterwards)
.. code:: bash
git+ssh://git@github.com/NFicano/pytube.git@0.1.16#egg=pytube
Manually via GIT
.. code:: bash
git clone git://github.com/NFicano/pytube.git pytube
cd pytube
python setup.py install
Roadmap
=======
The only features I see implementing in the near future are:
- refactor console printing into separate command-line utility.
- Add nosetests
- Add Sphinx documentation
Usage Example
=============
... code:: python
from pytube import YouTube
# not necessary, just for demo purposes
from pprint import pprint
yt = YouTube()
# Set the video URL.
yt.url = "http://www.youtube.com/watch?v=Ik-RsDGPI5Y"
# Once set, you can see all the codec and quality options YouTube has made
# available for the perticular video by printing videos.
pprint(yt.videos)
#[<Video: MPEG-4 Visual (.3gp) - 144p>,
# <Video: MPEG-4 Visual (.3gp) - 240p>,
# <Video: Sorenson H.263 (.flv) - 240p>,
# <Video: H.264 (.flv) - 360p>,
# <Video: H.264 (.flv) - 480p>,
# <Video: H.264 (.mp4) - 360p>,
# <Video: H.264 (.mp4) - 720p>,
# <Video: VP8 (.webm) - 360p>,
# <Video: VP8 (.webm) - 480p>]
# The filename is automatically generated based on the video title.
# You can override this by manually setting the filename.
# view the auto generated filename:
print yt.filename
#Pulp Fiction - Dancing Scene [HD]
# set the filename:
yt.filename = 'Dancing Scene from Pulp Fiction'
# You can also filter the criteria by filetype.
pprint(yt.filter('flv'))
#[<Video: Sorenson H.263 (.flv) - 240p>,
# <Video: H.264 (.flv) - 360p>,
# <Video: H.264 (.flv) - 480p>]
# notice that the list is ordered by lowest resolution to highest. If you
# wanted the highest resolution available for a specific file type, you
# can simply do:
print yt.filter('mp4')[-1]
#<Video: H.264 (.mp4) - 720p>
# you can also get all videos for a given resolution
pprint(yt.filter(res='480p'))
#[<Video: H.264 (.flv) - 480p>,
#<Video: VP8 (.webm) - 480p>]
# to select a video by a specific resolution and filetype you can use the get
# method.
video = yt.get('mp4', '720p')
# NOTE: get() can only be used if and only if one object matches your criteria.
# for example:
pprint(yt.videos)
#[<Video: MPEG-4 Visual (.3gp) - 144p>,
# <Video: MPEG-4 Visual (.3gp) - 240p>,
# <Video: Sorenson H.263 (.flv) - 240p>,
# <Video: H.264 (.flv) - 360p>,
# <Video: H.264 (.flv) - 480p>,
# <Video: H.264 (.mp4) - 360p>,
# <Video: H.264 (.mp4) - 720p>,
# <Video: VP8 (.webm) - 360p>,
# <Video: VP8 (.webm) - 480p>]
# Notice we have two H.264 (.mp4) available to us.. now if we try to call get()
# on mp4..
video = yt.get('mp4')
# MultipleObjectsReturned: get() returned more than one object -- it returned 2!
# In this case, we'll need to specify both the codec (mp4) and resolution
# (either 360p or 720p).
# Okay, let's download it!
video.download()
# Downloading: Pulp Fiction - Dancing Scene.mp4 Bytes: 37561829
# 37561829 [100.00%]
# Note: If you wanted to choose the output directory, simply pass it as an
# argument to the download method.
video.download('/tmp/')
Background
==========
After missing the deadline to register for PyCon 2012, I decided to write what
became PyTube and crawler to collect all the YouTube links for the talks
on PyVideos.
To avoid having to encode them to mp4 (so I could watch them on my iPhone)
I wrote it so you could specify an encoding format.
In recently weeks interest has picked up in the project, so I decided to
dedicate more time to further its development and actively maintain it.
Philosophy
==========
My only real goal for this is to never require any third party dependancies,
to keep it simple and make it reliable.
.. _PyVideos: http://pyvideo.org/