]> Raphaƫl G. Git Repositories - youtubedl/blobdiff - README.txt
Merge tag 'upstream/2014.07.15'
[youtubedl] / README.txt
index 4b400fd9fe5ad8bba8e112190f34ee7f3d050a93..5555b2a72b8d6b228e606a862e5e2a13b6698db9 100644 (file)
@@ -1,6 +1,3 @@
-NAME
-====
-
 youtube-dl - download videos from youtube.com or other video platforms
 
 SYNOPSIS
 youtube-dl - download videos from youtube.com or other video platforms
 
 SYNOPSIS
@@ -8,6 +5,27 @@ SYNOPSIS
 
 youtube-dl OPTIONS URL [URL...]
 
 
 youtube-dl OPTIONS URL [URL...]
 
+INSTALLATION
+============
+
+To install it right away for all UNIX users (Linux, OS X, etc.), type:
+
+    sudo curl https://yt-dl.org/latest/youtube-dl -o /usr/local/bin/youtube-dl
+    sudo chmod a+x /usr/local/bin/youtube-dl
+
+If you do not have curl, you can alternatively use a recent wget:
+
+    sudo wget https://yt-dl.org/downloads/2014.05.13/youtube-dl -O /usr/local/bin/youtube-dl
+    sudo chmod a+x /usr/local/bin/youtube-dl
+
+Windows users can download a .exe file and place it in their home
+directory or any other location on their PATH.
+
+Alternatively, refer to the developer instructions below for how to
+check out and work with the git repository. For further options,
+including PGP signatures, see
+https://rg3.github.io/youtube-dl/download.html .
+
 DESCRIPTION
 ===========
 
 DESCRIPTION
 ===========
 
@@ -21,193 +39,276 @@ however you like.
 OPTIONS
 =======
 
 OPTIONS
 =======
 
-    -h, --help                 print this help text and exit
-    --version                  print program version and exit
-    -U, --update               update this program to latest version. Make sure
-                               that you have sufficient permissions (run with
-                               sudo if needed)
-    -i, --ignore-errors        continue on download errors, for example to to
-                               skip unavailable videos in a playlist
-    --abort-on-error           Abort downloading of further videos (in the
-                               playlist or the command line) if an error occurs
-    --dump-user-agent          display the current browser identification
-    --user-agent UA            specify a custom user agent
-    --referer REF              specify a custom referer, use if the video access
-                               is restricted to one domain
-    --list-extractors          List all supported extractors and the URLs they
-                               would handle
-    --extractor-descriptions   Output descriptions of all supported extractors
-    --proxy URL                Use the specified HTTP/HTTPS proxy
-    --no-check-certificate     Suppress HTTPS certificate validation.
-    --cache-dir DIR            Location in the filesystem where youtube-dl can
-                               store downloaded information permanently. By
-                               default $XDG_CACHE_HOME/youtube-dl or ~/.cache
-                               /youtube-dl .
-    --no-cache-dir             Disable filesystem caching
+    -h, --help                       print this help text and exit
+    --version                        print program version and exit
+    -U, --update                     update this program to latest version. Make
+                                     sure that you have sufficient permissions
+                                     (run with sudo if needed)
+    -i, --ignore-errors              continue on download errors, for example to
+                                     skip unavailable videos in a playlist
+    --abort-on-error                 Abort downloading of further videos (in the
+                                     playlist or the command line) if an error
+                                     occurs
+    --dump-user-agent                display the current browser identification
+    --user-agent UA                  specify a custom user agent
+    --referer REF                    specify a custom referer, use if the video
+                                     access is restricted to one domain
+    --add-header FIELD:VALUE         specify a custom HTTP header and its value,
+                                     separated by a colon ':'. You can use this
+                                     option multiple times
+    --list-extractors                List all supported extractors and the URLs
+                                     they would handle
+    --extractor-descriptions         Output descriptions of all supported
+                                     extractors
+    --proxy URL                      Use the specified HTTP/HTTPS proxy. Pass in
+                                     an empty string (--proxy "") for direct
+                                     connection
+    --no-check-certificate           Suppress HTTPS certificate validation.
+    --prefer-insecure                Use an unencrypted connection to retrieve
+                                     information about the video. (Currently
+                                     supported only for YouTube)
+    --cache-dir DIR                  Location in the filesystem where youtube-dl
+                                     can store some downloaded information
+                                     permanently. By default $XDG_CACHE_HOME
+                                     /youtube-dl or ~/.cache/youtube-dl . At the
+                                     moment, only YouTube player files (for
+                                     videos with obfuscated signatures) are
+                                     cached, but that may change.
+    --no-cache-dir                   Disable filesystem caching
+    --socket-timeout None            Time to wait before giving up, in seconds
+    --bidi-workaround                Work around terminals that lack
+                                     bidirectional text support. Requires bidiv
+                                     or fribidi executable in PATH
+    --default-search PREFIX          Use this prefix for unqualified URLs. For
+                                     example "gvsearch2:" downloads two videos
+                                     from google videos for  youtube-dl "large
+                                     apple". Use the value "auto" to let
+                                     youtube-dl guess. The default value "error"
+                                     just throws an error.
+    --ignore-config                  Do not read configuration files. When given
+                                     in the global configuration file /etc
+                                     /youtube-dl.conf: do not read the user
+                                     configuration in ~/.config/youtube-dl.conf
+                                     (%APPDATA%/youtube-dl/config.txt on
+                                     Windows)
+    --encoding ENCODING              Force the specified encoding (experimental)
 
 Video Selection:
 ----------------
 
 
 Video Selection:
 ----------------
 
-    --playlist-start NUMBER    playlist video to start at (default is 1)
-    --playlist-end NUMBER      playlist video to end at (default is last)
-    --match-title REGEX        download only matching titles (regex or caseless
-                               sub-string)
-    --reject-title REGEX       skip download for matching titles (regex or
-                               caseless sub-string)
-    --max-downloads NUMBER     Abort after downloading NUMBER files
-    --min-filesize SIZE        Do not download any videos smaller than SIZE
-                               (e.g. 50k or 44.6m)
-    --max-filesize SIZE        Do not download any videos larger than SIZE (e.g.
-                               50k or 44.6m)
-    --date DATE                download only videos uploaded in this date
-    --datebefore DATE          download only videos uploaded before this date
-    --dateafter DATE           download only videos uploaded after this date
-    --no-playlist              download only the currently playing video
-    --age-limit YEARS          download only videos suitable for the given age
-    --download-archive FILE    Download only videos not present in the archive
-                               file. Record all downloaded videos in it.
+    --playlist-start NUMBER          playlist video to start at (default is 1)
+    --playlist-end NUMBER            playlist video to end at (default is last)
+    --match-title REGEX              download only matching titles (regex or
+                                     caseless sub-string)
+    --reject-title REGEX             skip download for matching titles (regex or
+                                     caseless sub-string)
+    --max-downloads NUMBER           Abort after downloading NUMBER files
+    --min-filesize SIZE              Do not download any videos smaller than
+                                     SIZE (e.g. 50k or 44.6m)
+    --max-filesize SIZE              Do not download any videos larger than SIZE
+                                     (e.g. 50k or 44.6m)
+    --date DATE                      download only videos uploaded in this date
+    --datebefore DATE                download only videos uploaded on or before
+                                     this date (i.e. inclusive)
+    --dateafter DATE                 download only videos uploaded on or after
+                                     this date (i.e. inclusive)
+    --min-views COUNT                Do not download any videos with less than
+                                     COUNT views
+    --max-views COUNT                Do not download any videos with more than
+                                     COUNT views
+    --no-playlist                    download only the currently playing video
+    --age-limit YEARS                download only videos suitable for the given
+                                     age
+    --download-archive FILE          Download only videos not listed in the
+                                     archive file. Record the IDs of all
+                                     downloaded videos in it.
+    --include-ads                    Download advertisements as well
+                                     (experimental)
+    --youtube-include-dash-manifest  Try to download the DASH manifest on
+                                     YouTube videos (experimental)
 
 Download Options:
 -----------------
 
 
 Download Options:
 -----------------
 
-    -r, --rate-limit LIMIT     maximum download rate in bytes per second (e.g.
-                               50K or 4.2M)
-    -R, --retries RETRIES      number of retries (default is 10)
-    --buffer-size SIZE         size of download buffer (e.g. 1024 or 16K)
-                               (default is 1024)
-    --no-resize-buffer         do not automatically adjust the buffer size. By
-                               default, the buffer size is automatically resized
-                               from an initial value of SIZE.
+    -r, --rate-limit LIMIT           maximum download rate in bytes per second
+                                     (e.g. 50K or 4.2M)
+    -R, --retries RETRIES            number of retries (default is 10)
+    --buffer-size SIZE               size of download buffer (e.g. 1024 or 16K)
+                                     (default is 1024)
+    --no-resize-buffer               do not automatically adjust the buffer
+                                     size. By default, the buffer size is
+                                     automatically resized from an initial value
+                                     of SIZE.
 
 Filesystem Options:
 -------------------
 
 
 Filesystem Options:
 -------------------
 
-    -t, --title                use title in file name (default)
-    --id                       use only video ID in file name
-    -l, --literal              [deprecated] alias of --title
-    -A, --auto-number          number downloaded files starting from 00000
-    -o, --output TEMPLATE      output filename template. Use %(title)s to get
-                               the title, %(uploader)s for the uploader name,
-                               %(uploader_id)s for the uploader nickname if
-                               different, %(autonumber)s to get an automatically
-                               incremented number, %(ext)s for the filename
-                               extension, %(format)s for the format description
-                               (like "22 - 1280x720" or "HD"),%(format_id)s for
-                               the unique id of the format (like Youtube's
-                               itags: "137"),%(upload_date)s for the upload date
-                               (YYYYMMDD), %(extractor)s for the provider
-                               (youtube, metacafe, etc), %(id)s for the video id
-                               , %(playlist)s for the playlist the video is in,
-                               %(playlist_index)s for the position in the
-                               playlist and %% for a literal percent. Use - to
-                               output to stdout. Can also be used to download to
-                               a different directory, for example with -o '/my/d
-                               ownloads/%(uploader)s/%(title)s-%(id)s.%(ext)s' .
-    --autonumber-size NUMBER   Specifies the number of digits in %(autonumber)s
-                               when it is present in output filename template or
-                               --auto-number option is given
-    --restrict-filenames       Restrict filenames to only ASCII characters, and
-                               avoid "&" and spaces in filenames
-    -a, --batch-file FILE      file containing URLs to download ('-' for stdin)
-    -w, --no-overwrites        do not overwrite files
-    -c, --continue             force resume of partially downloaded files. By
-                               default, youtube-dl will resume downloads if
-                               possible.
-    --no-continue              do not resume partially downloaded files (restart
-                               from beginning)
-    --cookies FILE             file to read cookies from and dump cookie jar in
-    --no-part                  do not use .part files
-    --no-mtime                 do not use the Last-modified header to set the
-                               file modification time
-    --write-description        write video description to a .description file
-    --write-info-json          write video metadata to a .info.json file
-    --write-annotations        write video annotations to a .annotation file
-    --write-thumbnail          write thumbnail image to disk
+    -t, --title                      use title in file name (default)
+    --id                             use only video ID in file name
+    -l, --literal                    [deprecated] alias of --title
+    -A, --auto-number                number downloaded files starting from 00000
+    -o, --output TEMPLATE            output filename template. Use %(title)s to
+                                     get the title, %(uploader)s for the
+                                     uploader name, %(uploader_id)s for the
+                                     uploader nickname if different,
+                                     %(autonumber)s to get an automatically
+                                     incremented number, %(ext)s for the
+                                     filename extension, %(format)s for the
+                                     format description (like "22 - 1280x720" or
+                                     "HD"), %(format_id)s for the unique id of
+                                     the format (like Youtube's itags: "137"),
+                                     %(upload_date)s for the upload date
+                                     (YYYYMMDD), %(extractor)s for the provider
+                                     (youtube, metacafe, etc), %(id)s for the
+                                     video id, %(playlist)s for the playlist the
+                                     video is in, %(playlist_index)s for the
+                                     position in the playlist and %% for a
+                                     literal percent. %(height)s and %(width)s
+                                     for the width and height of the video
+                                     format. %(resolution)s for a textual
+                                     description of the resolution of the video
+                                     format. Use - to output to stdout. Can also
+                                     be used to download to a different
+                                     directory, for example with -o '/my/downloa
+                                     ds/%(uploader)s/%(title)s-%(id)s.%(ext)s' .
+    --autonumber-size NUMBER         Specifies the number of digits in
+                                     %(autonumber)s when it is present in output
+                                     filename template or --auto-number option
+                                     is given
+    --restrict-filenames             Restrict filenames to only ASCII
+                                     characters, and avoid "&" and spaces in
+                                     filenames
+    -a, --batch-file FILE            file containing URLs to download ('-' for
+                                     stdin)
+    --load-info FILE                 json file containing the video information
+                                     (created with the "--write-json" option)
+    -w, --no-overwrites              do not overwrite files
+    -c, --continue                   force resume of partially downloaded files.
+                                     By default, youtube-dl will resume
+                                     downloads if possible.
+    --no-continue                    do not resume partially downloaded files
+                                     (restart from beginning)
+    --cookies FILE                   file to read cookies from and dump cookie
+                                     jar in
+    --no-part                        do not use .part files
+    --no-mtime                       do not use the Last-modified header to set
+                                     the file modification time
+    --write-description              write video description to a .description
+                                     file
+    --write-info-json                write video metadata to a .info.json file
+    --write-annotations              write video annotations to a .annotation
+                                     file
+    --write-thumbnail                write thumbnail image to disk
 
 Verbosity / Simulation Options:
 -------------------------------
 
 
 Verbosity / Simulation Options:
 -------------------------------
 
-    -q, --quiet                activates quiet mode
-    -s, --simulate             do not download the video and do not write
-                               anything to disk
-    --skip-download            do not download the video
-    -g, --get-url              simulate, quiet but print URL
-    -e, --get-title            simulate, quiet but print title
-    --get-id                   simulate, quiet but print id
-    --get-thumbnail            simulate, quiet but print thumbnail URL
-    --get-description          simulate, quiet but print video description
-    --get-filename             simulate, quiet but print output filename
-    --get-format               simulate, quiet but print output format
-    --newline                  output progress bar as new lines
-    --no-progress              do not print progress bar
-    --console-title            display progress in console titlebar
-    -v, --verbose              print various debugging information
-    --dump-intermediate-pages  print downloaded pages to debug problems(very
-                               verbose)
-    --write-pages              Write downloaded pages to files in the current
-                               directory
+    -q, --quiet                      activates quiet mode
+    --no-warnings                    Ignore warnings
+    -s, --simulate                   do not download the video and do not write
+                                     anything to disk
+    --skip-download                  do not download the video
+    -g, --get-url                    simulate, quiet but print URL
+    -e, --get-title                  simulate, quiet but print title
+    --get-id                         simulate, quiet but print id
+    --get-thumbnail                  simulate, quiet but print thumbnail URL
+    --get-description                simulate, quiet but print video description
+    --get-duration                   simulate, quiet but print video length
+    --get-filename                   simulate, quiet but print output filename
+    --get-format                     simulate, quiet but print output format
+    -j, --dump-json                  simulate, quiet but print JSON information.
+                                     See --output for a description of available
+                                     keys.
+    --newline                        output progress bar as new lines
+    --no-progress                    do not print progress bar
+    --console-title                  display progress in console titlebar
+    -v, --verbose                    print various debugging information
+    --dump-intermediate-pages        print downloaded pages to debug problems
+                                     (very verbose)
+    --write-pages                    Write downloaded intermediary pages to
+                                     files in the current directory to debug
+                                     problems
+    --print-traffic                  Display sent and read HTTP traffic
 
 Video Format Options:
 ---------------------
 
 
 Video Format Options:
 ---------------------
 
-    -f, --format FORMAT        video format code, specifiy the order of
-                               preference using slashes: "-f 22/17/18". "-f mp4"
-                               and "-f flv" are also supported
-    --all-formats              download all available video formats
-    --prefer-free-formats      prefer free video formats unless a specific one
-                               is requested
-    --max-quality FORMAT       highest quality format to download
-    -F, --list-formats         list all available formats (currently youtube
-                               only)
+    -f, --format FORMAT              video format code, specify the order of
+                                     preference using slashes: "-f 22/17/18".
+                                     "-f mp4" and "-f flv" are also supported.
+                                     You can also use the special names "best",
+                                     "bestvideo", "bestaudio", "worst",
+                                     "worstvideo" and "worstaudio". By default,
+                                     youtube-dl will pick the best quality.
+    --all-formats                    download all available video formats
+    --prefer-free-formats            prefer free video formats unless a specific
+                                     one is requested
+    --max-quality FORMAT             highest quality format to download
+    -F, --list-formats               list all available formats
 
 Subtitle Options:
 -----------------
 
 
 Subtitle Options:
 -----------------
 
-    --write-sub                write subtitle file
-    --write-auto-sub           write automatic subtitle file (youtube only)
-    --all-subs                 downloads all the available subtitles of the
-                               video
-    --list-subs                lists all available subtitles for the video
-    --sub-format FORMAT        subtitle format (default=srt) ([sbv/vtt] youtube
-                               only)
-    --sub-lang LANGS           languages of the subtitles to download (optional)
-                               separated by commas, use IETF language tags like
-                               'en,pt'
+    --write-sub                      write subtitle file
+    --write-auto-sub                 write automatic subtitle file (youtube
+                                     only)
+    --all-subs                       downloads all the available subtitles of
+                                     the video
+    --list-subs                      lists all available subtitles for the video
+    --sub-format FORMAT              subtitle format (default=srt) ([sbv/vtt]
+                                     youtube only)
+    --sub-lang LANGS                 languages of the subtitles to download
+                                     (optional) separated by commas, use IETF
+                                     language tags like 'en,pt'
 
 Authentication Options:
 -----------------------
 
 
 Authentication Options:
 -----------------------
 
-    -u, --username USERNAME    account username
-    -p, --password PASSWORD    account password
-    -n, --netrc                use .netrc authentication data
-    --video-password PASSWORD  video password (vimeo only)
+    -u, --username USERNAME          account username
+    -p, --password PASSWORD          account password
+    -n, --netrc                      use .netrc authentication data
+    --video-password PASSWORD        video password (vimeo, smotri)
 
 Post-processing Options:
 ------------------------
 
 
 Post-processing Options:
 ------------------------
 
-    -x, --extract-audio        convert video files to audio-only files (requires
-                               ffmpeg or avconv and ffprobe or avprobe)
-    --audio-format FORMAT      "best", "aac", "vorbis", "mp3", "m4a", "opus", or
-                               "wav"; best by default
-    --audio-quality QUALITY    ffmpeg/avconv audio quality specification, insert
-                               a value between 0 (better) and 9 (worse) for VBR
-                               or a specific bitrate like 128K (default 5)
-    --recode-video FORMAT      Encode the video to another format if necessary
-                               (currently supported: mp4|flv|ogg|webm)
-    -k, --keep-video           keeps the video file on disk after the post-
-                               processing; the video is erased by default
-    --no-post-overwrites       do not overwrite post-processed files; the post-
-                               processed files are overwritten by default
-    --embed-subs               embed subtitles in the video (only for mp4
-                               videos)
-    --add-metadata             add metadata to the files
+    -x, --extract-audio              convert video files to audio-only files
+                                     (requires ffmpeg or avconv and ffprobe or
+                                     avprobe)
+    --audio-format FORMAT            "best", "aac", "vorbis", "mp3", "m4a",
+                                     "opus", or "wav"; best by default
+    --audio-quality QUALITY          ffmpeg/avconv audio quality specification,
+                                     insert a value between 0 (better) and 9
+                                     (worse) for VBR or a specific bitrate like
+                                     128K (default 5)
+    --recode-video FORMAT            Encode the video to another format if
+                                     necessary (currently supported:
+                                     mp4|flv|ogg|webm|mkv)
+    -k, --keep-video                 keeps the video file on disk after the
+                                     post-processing; the video is erased by
+                                     default
+    --no-post-overwrites             do not overwrite post-processed files; the
+                                     post-processed files are overwritten by
+                                     default
+    --embed-subs                     embed subtitles in the video (only for mp4
+                                     videos)
+    --embed-thumbnail                embed thumbnail in the audio as cover art
+    --add-metadata                   write metadata to the video file
+    --xattrs                         write metadata to the video file's xattrs
+                                     (using dublin core and xdg standards)
+    --prefer-avconv                  Prefer avconv over ffmpeg for running the
+                                     postprocessors (default)
+    --prefer-ffmpeg                  Prefer ffmpeg over avconv for running the
+                                     postprocessors
 
 CONFIGURATION
 =============
 
 You can configure youtube-dl by placing default arguments (such as
 --extract-audio --no-mtime to always extract the audio and not copy the
 
 CONFIGURATION
 =============
 
 You can configure youtube-dl by placing default arguments (such as
 --extract-audio --no-mtime to always extract the audio and not copy the
-mtime) into /etc/youtube-dl.conf and/or ~/.config/youtube-dl.conf.
+mtime) into /etc/youtube-dl.conf and/or ~/.config/youtube-dl/config. On
+Windows, the configuration file locations are
+%APPDATA%\youtube-dl\config.txt and C:\Users\<Yourname>\youtube-dl.conf.
 
 OUTPUT TEMPLATE
 ===============
 
 OUTPUT TEMPLATE
 ===============
@@ -263,9 +364,14 @@ Videos can be filtered by their upload date using the options --date,
 
 Examples:
 
 
 Examples:
 
-    $ youtube-dl --dateafter now-6months #will only download the videos uploaded in the last 6 months
-    $ youtube-dl --date 19700101 #will only download the videos uploaded in January 1, 1970
-    $ youtube-dl --dateafter 20000101 --datebefore 20100101 #will only download the videos uploaded between 2000 and 2010
+    # Download only the videos uploaded in the last 6 months
+    $ youtube-dl --dateafter now-6months
+
+    # Download only the videos uploaded on January 1, 1970
+    $ youtube-dl --date 19700101
+
+    $ # will only download the videos uploaded in the 200x decade
+    $ youtube-dl --dateafter 20000101 --datebefore 20091231
 
 FAQ
 ===
 
 FAQ
 ===
@@ -336,6 +442,235 @@ The exe throws a Runtime error from Visual C++
 To run the exe you need to install first the Microsoft Visual C++ 2008
 Redistributable Package.
 
 To run the exe you need to install first the Microsoft Visual C++ 2008
 Redistributable Package.
 
+DEVELOPER INSTRUCTIONS
+======================
+
+Most users do not need to build youtube-dl and can download the builds
+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
+
+If you want to create a build of youtube-dl yourself, you'll need
+
+-   python
+-   make
+-   pandoc
+-   zip
+-   nosetests
+
+Adding support for a new site
+
+If you want to add support for a new site, you can follow this quick
+list (assuming your service is called yourextractor):
+
+1.  Fork this repository
+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:
+
+        # coding: utf-8
+        from __future__ import unicode_literals
+
+        import re
+
+        from .common import InfoExtractor
+
+
+        class YourExtractorIE(InfoExtractor):
+            _VALID_URL = r'https?://(?:www\.)?yourextractor\.com/watch/(?P<id>[0-9]+)'
+            _TEST = {
+                'url': 'http://yourextractor.com/watch/42',
+                'md5': 'TODO: md5 sum of the first 10KiB of the video file',
+                'info_dict': {
+                    'id': '42',
+                    'ext': 'mp4',
+                    'title': 'Video title goes here',
+                    # 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):
+                mobj = re.match(self._VALID_URL, url)
+                video_id = mobj.group('id')
+
+                # TODO more code goes here, for example ...
+                webpage = self._download_webpage(url, video_id)
+                title = self._html_search_regex(r'<h1>(.*?)</h1>', webpage, 'title')
+
+                return {
+                    'id': video_id,
+                    'title': title,
+                    # TODO more properties (see youtube_dl/extractor/common.py)
+                }
+
+5.  Add an import in youtube_dl/extractor/__init__.py.
+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.
+7.  Have a look at youtube_dl/common/extractor/common.py for possible
+    helper methods and a detailed description of what your extractor
+    should return. Add tests and code for as many as you want.
+8.  If you can, check the code with pyflakes (a good idea) and pep8
+    (optional, ignore E501).
+9.  When the tests pass, add the new files and commit them and push the
+    result, like this:
+
+        $ git add youtube_dl/extractor/__init__.py
+        $ git add youtube_dl/extractor/yourextractor.py
+        $ git commit -m '[yourextractor] Add new extractor'
+        $ git push origin yourextractor
+
+10. Finally, create a pull request. We'll then review and merge it.
+
+In any case, thank you very much for your contributions!
+
+BUGS
+====
+
+Bugs and suggestions should be reported at:
+https://github.com/rg3/youtube-dl/issues . Unless you were prompted so
+or there is another pertinent reason (e.g. GitHub fails to accept the
+bug report), please do not send bug reports via personal email.
+
+Please include the full output of the command when run with --verbose.
+The output (including the first lines) contain important debugging
+information. Issues without the full output are often not reproducible
+and therefore do not get solved in short order, if ever.
+
+For discussions, join us in the irc channel #youtube-dl on freenode.
+
+When you submit a request, please re-read it once to avoid a couple of
+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 commiter 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.
+
+Site support requests must contain an example URL. An example URL is a
+URL you might want to download, like
+http://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. http://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 at
+https://github.com/rg3/youtube-dl/search?type=Issues . 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. 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, Whitehouse 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 incapicated 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.
+
 COPYRIGHT
 =========
 
 COPYRIGHT
 =========
 
@@ -345,23 +680,3 @@ This README file was originally written by Daniel Bolton
 (https://github.com/dbbolton) and is likewise released into the public
 domain.
 
 (https://github.com/dbbolton) and is likewise released into the public
 domain.
 
-BUGS
-====
-
-Bugs and suggestions should be reported at:
-https://github.com/rg3/youtube-dl/issues
-
-Please include:
-
--   Your exact command line, like
-    youtube-dl -t "http://www.youtube.com/watch?v=uHlDtZ6Oc3s&feature=channel_video_title".
-    A common mistake is not to escape the &. Putting URLs in quotes
-    should solve this problem.
--   If possible re-run the command with --verbose, and include the full
-    output, it is really helpful to us.
--   The output of youtube-dl --version
--   The output of python --version
--   The name and version of your Operating System ("Ubuntu 11.04 x64" or
-    "Windows 7 x64" is usually enough).
-
-For discussions, join us in the irc channel #youtube-dl on freenode.