Showing preview only (7,086K chars total). Download the full file or copy to clipboard to get everything.
Repository: ytdl-org/youtube-dl
Branch: master
Commit: 956b8c585591
Files: 980
Total size: 6.6 MB
Directory structure:
gitextract_gmvmbzf8/
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── 1_broken_site.md
│ │ ├── 2_site_support_request.md
│ │ ├── 3_site_feature_request.md
│ │ ├── 4_bug_report.md
│ │ ├── 5_feature_request.md
│ │ ├── 6_question.md
│ │ └── config.yml
│ ├── ISSUE_TEMPLATE_tmpl/
│ │ ├── 1_broken_site.md
│ │ ├── 2_site_support_request.md
│ │ ├── 3_site_feature_request.md
│ │ ├── 4_bug_report.md
│ │ └── 5_feature_request.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ └── workflows/
│ └── ci.yml
├── .gitignore
├── AUTHORS
├── CONTRIBUTING.md
├── ChangeLog
├── LICENSE
├── MANIFEST.in
├── Makefile
├── README.md
├── devscripts/
│ ├── SizeOfImage.patch
│ ├── SizeOfImage_w.patch
│ ├── __init__.py
│ ├── bash-completion.in
│ ├── bash-completion.py
│ ├── buildserver.py
│ ├── check-porn.py
│ ├── cli_to_api.py
│ ├── create-github-release.py
│ ├── fish-completion.in
│ ├── fish-completion.py
│ ├── generate_aes_testdata.py
│ ├── gh-pages/
│ │ ├── add-version.py
│ │ ├── generate-download.py
│ │ ├── sign-versions.py
│ │ ├── update-copyright.py
│ │ ├── update-feed.py
│ │ └── update-sites.py
│ ├── lazy_load_template.py
│ ├── make_contributing.py
│ ├── make_issue_template.py
│ ├── make_lazy_extractors.py
│ ├── make_readme.py
│ ├── make_supportedsites.py
│ ├── posix-locale.sh
│ ├── prepare_manpage.py
│ ├── release.sh
│ ├── run_tests.bat
│ ├── run_tests.sh
│ ├── show-downloads-statistics.py
│ ├── utils.py
│ ├── wine-py2exe.sh
│ ├── zsh-completion.in
│ └── zsh-completion.py
├── docs/
│ ├── .gitignore
│ ├── Makefile
│ ├── conf.py
│ ├── index.rst
│ ├── module_guide.rst
│ └── supportedsites.md
├── setup.cfg
├── setup.py
├── test/
│ ├── __init__.py
│ ├── helper.py
│ ├── parameters.json
│ ├── swftests/
│ │ ├── .gitignore
│ │ ├── ArrayAccess.as
│ │ ├── ClassCall.as
│ │ ├── ClassConstruction.as
│ │ ├── ConstArrayAccess.as
│ │ ├── ConstantInt.as
│ │ ├── DictCall.as
│ │ ├── EqualsOperator.as
│ │ ├── LocalVars.as
│ │ ├── MemberAssignment.as
│ │ ├── NeOperator.as
│ │ ├── PrivateCall.as
│ │ ├── PrivateVoidCall.as
│ │ ├── StaticAssignment.as
│ │ ├── StaticRetrieval.as
│ │ ├── StringBasics.as
│ │ ├── StringCharCodeAt.as
│ │ └── StringConversion.as
│ ├── test_InfoExtractor.py
│ ├── test_YoutubeDL.py
│ ├── test_YoutubeDLCookieJar.py
│ ├── test_aes.py
│ ├── test_age_restriction.py
│ ├── test_all_urls.py
│ ├── test_cache.py
│ ├── test_compat.py
│ ├── test_download.py
│ ├── test_downloader_external.py
│ ├── test_downloader_http.py
│ ├── test_execution.py
│ ├── test_http.py
│ ├── test_iqiyi_sdk_interpreter.py
│ ├── test_jsinterp.py
│ ├── test_netrc.py
│ ├── test_options.py
│ ├── test_postprocessors.py
│ ├── test_socks.py
│ ├── test_subtitles.py
│ ├── test_swfinterp.py
│ ├── test_traversal.py
│ ├── test_unicode_literals.py
│ ├── test_update.py
│ ├── test_utils.py
│ ├── test_verbose_output.py
│ ├── test_write_annotations.py
│ ├── test_youtube_lists.py
│ ├── test_youtube_misc.py
│ ├── test_youtube_signature.py
│ ├── testcert.pem
│ ├── testdata/
│ │ ├── cookies/
│ │ │ ├── httponly_cookies.txt
│ │ │ ├── malformed_cookies.txt
│ │ │ └── session_cookies.txt
│ │ ├── f4m/
│ │ │ └── custom_base_url.f4m
│ │ ├── m3u8/
│ │ │ ├── pluzz_francetv_11507.m3u8
│ │ │ ├── teamcoco_11995.m3u8
│ │ │ ├── ted_18923.m3u8
│ │ │ ├── toggle_mobile_12211.m3u8
│ │ │ ├── twitch_vod.m3u8
│ │ │ └── vidio.m3u8
│ │ ├── mpd/
│ │ │ ├── float_duration.mpd
│ │ │ ├── range_only.mpd
│ │ │ ├── subtitles.mpd
│ │ │ ├── unfragmented.mpd
│ │ │ ├── url_and_range.mpd
│ │ │ └── urls_only.mpd
│ │ └── xspf/
│ │ └── foo_xspf.xspf
│ └── versions.json
├── tox.ini
├── youtube-dl.plugin.zsh
└── youtube_dl/
├── YoutubeDL.py
├── __init__.py
├── __main__.py
├── aes.py
├── cache.py
├── casefold.py
├── compat.py
├── downloader/
│ ├── __init__.py
│ ├── common.py
│ ├── dash.py
│ ├── external.py
│ ├── f4m.py
│ ├── fragment.py
│ ├── hls.py
│ ├── http.py
│ ├── ism.py
│ ├── niconico.py
│ ├── rtmp.py
│ └── rtsp.py
├── extractor/
│ ├── __init__.py
│ ├── abc.py
│ ├── abcnews.py
│ ├── abcotvs.py
│ ├── academicearth.py
│ ├── acast.py
│ ├── adn.py
│ ├── adobeconnect.py
│ ├── adobepass.py
│ ├── adobetv.py
│ ├── adultswim.py
│ ├── aenetworks.py
│ ├── afreecatv.py
│ ├── airmozilla.py
│ ├── aliexpress.py
│ ├── aljazeera.py
│ ├── allocine.py
│ ├── alphaporno.py
│ ├── alsace20tv.py
│ ├── amara.py
│ ├── amcnetworks.py
│ ├── americastestkitchen.py
│ ├── amp.py
│ ├── animeondemand.py
│ ├── anvato.py
│ ├── aol.py
│ ├── apa.py
│ ├── aparat.py
│ ├── appleconnect.py
│ ├── applepodcasts.py
│ ├── appletrailers.py
│ ├── archiveorg.py
│ ├── arcpublishing.py
│ ├── ard.py
│ ├── arkena.py
│ ├── arnes.py
│ ├── arte.py
│ ├── asiancrush.py
│ ├── atresplayer.py
│ ├── atttechchannel.py
│ ├── atvat.py
│ ├── audimedia.py
│ ├── audioboom.py
│ ├── audiomack.py
│ ├── awaan.py
│ ├── aws.py
│ ├── azmedien.py
│ ├── baidu.py
│ ├── bandaichannel.py
│ ├── bandcamp.py
│ ├── bbc.py
│ ├── beatport.py
│ ├── beeg.py
│ ├── behindkink.py
│ ├── bellmedia.py
│ ├── bet.py
│ ├── bfi.py
│ ├── bfmtv.py
│ ├── bibeltv.py
│ ├── bigflix.py
│ ├── bigo.py
│ ├── bild.py
│ ├── bilibili.py
│ ├── biobiochiletv.py
│ ├── biqle.py
│ ├── bitchute.py
│ ├── bleacherreport.py
│ ├── blerp.py
│ ├── bloomberg.py
│ ├── bokecc.py
│ ├── bongacams.py
│ ├── bostonglobe.py
│ ├── box.py
│ ├── bpb.py
│ ├── br.py
│ ├── bravotv.py
│ ├── breakcom.py
│ ├── brightcove.py
│ ├── businessinsider.py
│ ├── buzzfeed.py
│ ├── byutv.py
│ ├── c56.py
│ ├── caffeine.py
│ ├── callin.py
│ ├── camdemy.py
│ ├── cammodels.py
│ ├── camtube.py
│ ├── camwithher.py
│ ├── canalc2.py
│ ├── canalplus.py
│ ├── canvas.py
│ ├── carambatv.py
│ ├── cartoonnetwork.py
│ ├── cbc.py
│ ├── cbs.py
│ ├── cbsinteractive.py
│ ├── cbslocal.py
│ ├── cbsnews.py
│ ├── cbssports.py
│ ├── ccc.py
│ ├── ccma.py
│ ├── cctv.py
│ ├── cda.py
│ ├── ceskatelevize.py
│ ├── channel9.py
│ ├── charlierose.py
│ ├── chaturbate.py
│ ├── chilloutzone.py
│ ├── chirbit.py
│ ├── cinchcast.py
│ ├── cinemax.py
│ ├── ciscolive.py
│ ├── cjsw.py
│ ├── clipchamp.py
│ ├── cliphunter.py
│ ├── clippit.py
│ ├── cliprs.py
│ ├── clipsyndicate.py
│ ├── closertotruth.py
│ ├── cloudflarestream.py
│ ├── cloudy.py
│ ├── clubic.py
│ ├── clyp.py
│ ├── cmt.py
│ ├── cnbc.py
│ ├── cnn.py
│ ├── comedycentral.py
│ ├── common.py
│ ├── commonmistakes.py
│ ├── commonprotocols.py
│ ├── condenast.py
│ ├── contv.py
│ ├── corus.py
│ ├── coub.py
│ ├── cpac.py
│ ├── cracked.py
│ ├── crackle.py
│ ├── crooksandliars.py
│ ├── crunchyroll.py
│ ├── cspan.py
│ ├── ctsnews.py
│ ├── ctv.py
│ ├── ctvnews.py
│ ├── cultureunplugged.py
│ ├── curiositystream.py
│ ├── cwtv.py
│ ├── dailymail.py
│ ├── dailymotion.py
│ ├── daum.py
│ ├── dbtv.py
│ ├── dctp.py
│ ├── deezer.py
│ ├── defense.py
│ ├── democracynow.py
│ ├── dfb.py
│ ├── dhm.py
│ ├── digg.py
│ ├── digiteka.py
│ ├── discovery.py
│ ├── discoverygo.py
│ ├── discoverynetworks.py
│ ├── discoveryvr.py
│ ├── disney.py
│ ├── dispeak.py
│ ├── dlf.py
│ ├── dlive.py
│ ├── dotsub.py
│ ├── douyutv.py
│ ├── dplay.py
│ ├── drbonanza.py
│ ├── dreisat.py
│ ├── dropbox.py
│ ├── drtuber.py
│ ├── drtv.py
│ ├── dtube.py
│ ├── dumpert.py
│ ├── dvtv.py
│ ├── dw.py
│ ├── eagleplatform.py
│ ├── ebaumsworld.py
│ ├── echomsk.py
│ ├── egghead.py
│ ├── ehow.py
│ ├── eighttracks.py
│ ├── einthusan.py
│ ├── eitb.py
│ ├── ellentube.py
│ ├── elpais.py
│ ├── embedly.py
│ ├── engadget.py
│ ├── epidemicsound.py
│ ├── eporner.py
│ ├── eroprofile.py
│ ├── escapist.py
│ ├── espn.py
│ ├── esri.py
│ ├── europa.py
│ ├── expotv.py
│ ├── expressen.py
│ ├── extractors.py
│ ├── extremetube.py
│ ├── eyedotv.py
│ ├── facebook.py
│ ├── faz.py
│ ├── fc2.py
│ ├── fczenit.py
│ ├── fifa.py
│ ├── filmon.py
│ ├── filmweb.py
│ ├── firsttv.py
│ ├── fivemin.py
│ ├── fivetv.py
│ ├── flickr.py
│ ├── folketinget.py
│ ├── footyroom.py
│ ├── formula1.py
│ ├── fourtube.py
│ ├── fox.py
│ ├── fox9.py
│ ├── foxgay.py
│ ├── foxnews.py
│ ├── foxsports.py
│ ├── franceculture.py
│ ├── franceinter.py
│ ├── francetv.py
│ ├── freesound.py
│ ├── freespeech.py
│ ├── freshlive.py
│ ├── frontendmasters.py
│ ├── fujitv.py
│ ├── funimation.py
│ ├── funk.py
│ ├── fusion.py
│ ├── gaia.py
│ ├── gameinformer.py
│ ├── gamespot.py
│ ├── gamestar.py
│ ├── gaskrank.py
│ ├── gazeta.py
│ ├── gbnews.py
│ ├── gdcvault.py
│ ├── gedidigital.py
│ ├── generic.py
│ ├── gfycat.py
│ ├── giantbomb.py
│ ├── giga.py
│ ├── gigya.py
│ ├── glide.py
│ ├── globalplayer.py
│ ├── globo.py
│ ├── go.py
│ ├── godtube.py
│ ├── golem.py
│ ├── googledrive.py
│ ├── googlepodcasts.py
│ ├── googlesearch.py
│ ├── goshgay.py
│ ├── gputechconf.py
│ ├── groupon.py
│ ├── hbo.py
│ ├── hearthisat.py
│ ├── heise.py
│ ├── hellporno.py
│ ├── helsinki.py
│ ├── hentaistigma.py
│ ├── hgtv.py
│ ├── hidive.py
│ ├── historicfilms.py
│ ├── hitbox.py
│ ├── hitrecord.py
│ ├── hketv.py
│ ├── hornbunny.py
│ ├── hotnewhiphop.py
│ ├── hotstar.py
│ ├── howcast.py
│ ├── howstuffworks.py
│ ├── hrfernsehen.py
│ ├── hrti.py
│ ├── huajiao.py
│ ├── huffpost.py
│ ├── hungama.py
│ ├── hypem.py
│ ├── ign.py
│ ├── iheart.py
│ ├── imdb.py
│ ├── imggaming.py
│ ├── imgur.py
│ ├── ina.py
│ ├── inc.py
│ ├── indavideo.py
│ ├── infoq.py
│ ├── instagram.py
│ ├── internazionale.py
│ ├── internetvideoarchive.py
│ ├── iprima.py
│ ├── iqiyi.py
│ ├── ir90tv.py
│ ├── itv.py
│ ├── ivi.py
│ ├── ivideon.py
│ ├── iwara.py
│ ├── izlesene.py
│ ├── jamendo.py
│ ├── jeuxvideo.py
│ ├── joj.py
│ ├── jove.py
│ ├── jwplatform.py
│ ├── kakao.py
│ ├── kaltura.py
│ ├── kankan.py
│ ├── karaoketv.py
│ ├── karrierevideos.py
│ ├── keezmovies.py
│ ├── ketnet.py
│ ├── khanacademy.py
│ ├── kickstarter.py
│ ├── kinja.py
│ ├── kinopoisk.py
│ ├── kommunetv.py
│ ├── konserthusetplay.py
│ ├── krasview.py
│ ├── kth.py
│ ├── ku6.py
│ ├── kusi.py
│ ├── kuwo.py
│ ├── la7.py
│ ├── laola1tv.py
│ ├── lbry.py
│ ├── lci.py
│ ├── lcp.py
│ ├── lecture2go.py
│ ├── lecturio.py
│ ├── leeco.py
│ ├── lego.py
│ ├── lemonde.py
│ ├── lenta.py
│ ├── libraryofcongress.py
│ ├── libsyn.py
│ ├── lifenews.py
│ ├── limelight.py
│ ├── line.py
│ ├── linkedin.py
│ ├── linuxacademy.py
│ ├── litv.py
│ ├── livejournal.py
│ ├── livestream.py
│ ├── lnkgo.py
│ ├── localnews8.py
│ ├── lovehomeporn.py
│ ├── lrt.py
│ ├── lynda.py
│ ├── m6.py
│ ├── mailru.py
│ ├── malltv.py
│ ├── mangomolo.py
│ ├── manyvids.py
│ ├── maoritv.py
│ ├── markiza.py
│ ├── massengeschmacktv.py
│ ├── matchtv.py
│ ├── mdr.py
│ ├── medaltv.py
│ ├── medialaan.py
│ ├── mediaset.py
│ ├── mediasite.py
│ ├── medici.py
│ ├── megaphone.py
│ ├── meipai.py
│ ├── melonvod.py
│ ├── meta.py
│ ├── metacafe.py
│ ├── metacritic.py
│ ├── mgoon.py
│ ├── mgtv.py
│ ├── miaopai.py
│ ├── microsoftvirtualacademy.py
│ ├── minds.py
│ ├── ministrygrid.py
│ ├── minoto.py
│ ├── miomio.py
│ ├── mit.py
│ ├── mitele.py
│ ├── mixcloud.py
│ ├── mlb.py
│ ├── mnet.py
│ ├── moevideo.py
│ ├── mofosex.py
│ ├── mojvideo.py
│ ├── morningstar.py
│ ├── motherless.py
│ ├── motorsport.py
│ ├── movieclips.py
│ ├── moviezine.py
│ ├── movingimage.py
│ ├── msn.py
│ ├── mtv.py
│ ├── muenchentv.py
│ ├── mwave.py
│ ├── mychannels.py
│ ├── myspace.py
│ ├── myspass.py
│ ├── myvi.py
│ ├── myvideoge.py
│ ├── myvidster.py
│ ├── nationalgeographic.py
│ ├── naver.py
│ ├── nba.py
│ ├── nbc.py
│ ├── ndr.py
│ ├── ndtv.py
│ ├── nerdcubed.py
│ ├── neteasemusic.py
│ ├── netzkino.py
│ ├── newgrounds.py
│ ├── newstube.py
│ ├── nextmedia.py
│ ├── nexx.py
│ ├── nfl.py
│ ├── nhk.py
│ ├── nhl.py
│ ├── nick.py
│ ├── niconico.py
│ ├── ninecninemedia.py
│ ├── ninegag.py
│ ├── ninenow.py
│ ├── nintendo.py
│ ├── njpwworld.py
│ ├── nobelprize.py
│ ├── nonktube.py
│ ├── noovo.py
│ ├── normalboots.py
│ ├── nosvideo.py
│ ├── nova.py
│ ├── nowness.py
│ ├── noz.py
│ ├── npo.py
│ ├── npr.py
│ ├── nrk.py
│ ├── nrl.py
│ ├── ntvcojp.py
│ ├── ntvde.py
│ ├── ntvru.py
│ ├── nuevo.py
│ ├── nuvid.py
│ ├── nytimes.py
│ ├── nzz.py
│ ├── odatv.py
│ ├── odnoklassniki.py
│ ├── oktoberfesttv.py
│ ├── once.py
│ ├── ondemandkorea.py
│ ├── onet.py
│ ├── onionstudios.py
│ ├── ooyala.py
│ ├── openload.py
│ ├── ora.py
│ ├── orf.py
│ ├── outsidetv.py
│ ├── packtpub.py
│ ├── palcomp3.py
│ ├── pandoratv.py
│ ├── parliamentliveuk.py
│ ├── patreon.py
│ ├── pbs.py
│ ├── pearvideo.py
│ ├── peekvids.py
│ ├── peertube.py
│ ├── people.py
│ ├── performgroup.py
│ ├── periscope.py
│ ├── philharmoniedeparis.py
│ ├── phoenix.py
│ ├── photobucket.py
│ ├── picarto.py
│ ├── piksel.py
│ ├── pinkbike.py
│ ├── pinterest.py
│ ├── pladform.py
│ ├── platzi.py
│ ├── playfm.py
│ ├── playplustv.py
│ ├── plays.py
│ ├── playstuff.py
│ ├── playtvak.py
│ ├── playvid.py
│ ├── playwire.py
│ ├── pluralsight.py
│ ├── podomatic.py
│ ├── pokemon.py
│ ├── polskieradio.py
│ ├── popcorntimes.py
│ ├── popcorntv.py
│ ├── porn91.py
│ ├── porncom.py
│ ├── pornhd.py
│ ├── pornhub.py
│ ├── pornotube.py
│ ├── pornovoisines.py
│ ├── pornoxo.py
│ ├── pr0gramm.py
│ ├── presstv.py
│ ├── prosiebensat1.py
│ ├── puhutv.py
│ ├── puls4.py
│ ├── pyvideo.py
│ ├── qqmusic.py
│ ├── r7.py
│ ├── radiobremen.py
│ ├── radiocanada.py
│ ├── radiode.py
│ ├── radiofrance.py
│ ├── radiojavan.py
│ ├── rai.py
│ ├── raywenderlich.py
│ ├── rbgtum.py
│ ├── rbmaradio.py
│ ├── rds.py
│ ├── redbulltv.py
│ ├── reddit.py
│ ├── redtube.py
│ ├── regiotv.py
│ ├── rentv.py
│ ├── restudy.py
│ ├── reuters.py
│ ├── reverbnation.py
│ ├── rice.py
│ ├── rmcdecouverte.py
│ ├── ro220.py
│ ├── rockstargames.py
│ ├── roosterteeth.py
│ ├── rottentomatoes.py
│ ├── roxwel.py
│ ├── rozhlas.py
│ ├── rtbf.py
│ ├── rte.py
│ ├── rtl2.py
│ ├── rtlnl.py
│ ├── rtp.py
│ ├── rts.py
│ ├── rtve.py
│ ├── rtvnh.py
│ ├── rtvs.py
│ ├── ruhd.py
│ ├── rumble.py
│ ├── rutube.py
│ ├── rutv.py
│ ├── ruutu.py
│ ├── ruv.py
│ ├── s4c.py
│ ├── safari.py
│ ├── samplefocus.py
│ ├── sapo.py
│ ├── savefrom.py
│ ├── sbs.py
│ ├── screencast.py
│ ├── screencastomatic.py
│ ├── scrippsnetworks.py
│ ├── scte.py
│ ├── seeker.py
│ ├── senateisvp.py
│ ├── sendtonews.py
│ ├── servus.py
│ ├── sevenplus.py
│ ├── sexu.py
│ ├── seznamzpravy.py
│ ├── shahid.py
│ ├── shared.py
│ ├── showroomlive.py
│ ├── simplecast.py
│ ├── sina.py
│ ├── sixplay.py
│ ├── sky.py
│ ├── skyit.py
│ ├── skylinewebcams.py
│ ├── skynewsarabia.py
│ ├── slideshare.py
│ ├── slideslive.py
│ ├── slutload.py
│ ├── snotr.py
│ ├── sohu.py
│ ├── sonyliv.py
│ ├── soundcloud.py
│ ├── soundgasm.py
│ ├── southpark.py
│ ├── spankbang.py
│ ├── spankwire.py
│ ├── spiegel.py
│ ├── spike.py
│ ├── sport5.py
│ ├── sportbox.py
│ ├── sportdeutschland.py
│ ├── spotify.py
│ ├── spreaker.py
│ ├── springboardplatform.py
│ ├── sprout.py
│ ├── srgssr.py
│ ├── srmediathek.py
│ ├── stanfordoc.py
│ ├── steam.py
│ ├── stitcher.py
│ ├── storyfire.py
│ ├── streamable.py
│ ├── streamcloud.py
│ ├── streamcz.py
│ ├── streamsb.py
│ ├── streetvoice.py
│ ├── stretchinternet.py
│ ├── stv.py
│ ├── sunporno.py
│ ├── sverigesradio.py
│ ├── svt.py
│ ├── swrmediathek.py
│ ├── syfy.py
│ ├── sztvhu.py
│ ├── tagesschau.py
│ ├── tass.py
│ ├── tbs.py
│ ├── tdslifeway.py
│ ├── teachable.py
│ ├── teachertube.py
│ ├── teachingchannel.py
│ ├── teamcoco.py
│ ├── teamtreehouse.py
│ ├── techtalks.py
│ ├── ted.py
│ ├── tele13.py
│ ├── tele5.py
│ ├── telebruxelles.py
│ ├── telecinco.py
│ ├── telegraaf.py
│ ├── telemb.py
│ ├── telequebec.py
│ ├── teletask.py
│ ├── telewebion.py
│ ├── tennistv.py
│ ├── tenplay.py
│ ├── testurl.py
│ ├── tf1.py
│ ├── tfo.py
│ ├── theintercept.py
│ ├── theplatform.py
│ ├── thescene.py
│ ├── thestar.py
│ ├── thesun.py
│ ├── theweatherchannel.py
│ ├── thisamericanlife.py
│ ├── thisav.py
│ ├── thisoldhouse.py
│ ├── thisvid.py
│ ├── threeqsdn.py
│ ├── tiktok.py
│ ├── tinypic.py
│ ├── tmz.py
│ ├── tnaflix.py
│ ├── toggle.py
│ ├── tonline.py
│ ├── toongoggles.py
│ ├── toutv.py
│ ├── toypics.py
│ ├── traileraddict.py
│ ├── trilulilu.py
│ ├── trovo.py
│ ├── trunews.py
│ ├── trutv.py
│ ├── tube8.py
│ ├── tubitv.py
│ ├── tudou.py
│ ├── tumblr.py
│ ├── tunein.py
│ ├── tunepk.py
│ ├── turbo.py
│ ├── turner.py
│ ├── tv2.py
│ ├── tv2dk.py
│ ├── tv2hu.py
│ ├── tv4.py
│ ├── tv5mondeplus.py
│ ├── tv5unis.py
│ ├── tva.py
│ ├── tvanouvelles.py
│ ├── tvc.py
│ ├── tver.py
│ ├── tvigle.py
│ ├── tvland.py
│ ├── tvn24.py
│ ├── tvnet.py
│ ├── tvnoe.py
│ ├── tvnow.py
│ ├── tvp.py
│ ├── tvplay.py
│ ├── tvplayer.py
│ ├── tweakers.py
│ ├── twentyfourvideo.py
│ ├── twentymin.py
│ ├── twentythreevideo.py
│ ├── twitcasting.py
│ ├── twitch.py
│ ├── twitter.py
│ ├── udemy.py
│ ├── udn.py
│ ├── ufctv.py
│ ├── uktvplay.py
│ ├── umg.py
│ ├── unistra.py
│ ├── unity.py
│ ├── uol.py
│ ├── uplynk.py
│ ├── urort.py
│ ├── urplay.py
│ ├── usanetwork.py
│ ├── usatoday.py
│ ├── ustream.py
│ ├── ustudio.py
│ ├── varzesh3.py
│ ├── vbox7.py
│ ├── veehd.py
│ ├── veoh.py
│ ├── vesti.py
│ ├── vevo.py
│ ├── vgtv.py
│ ├── vh1.py
│ ├── vice.py
│ ├── vidbit.py
│ ├── viddler.py
│ ├── videa.py
│ ├── videodetective.py
│ ├── videofyme.py
│ ├── videomore.py
│ ├── videopress.py
│ ├── vidio.py
│ ├── vidlii.py
│ ├── vidme.py
│ ├── vier.py
│ ├── viewlift.py
│ ├── viidea.py
│ ├── viki.py
│ ├── vimeo.py
│ ├── vimple.py
│ ├── vine.py
│ ├── viqeo.py
│ ├── viu.py
│ ├── vk.py
│ ├── vlive.py
│ ├── vodlocker.py
│ ├── vodpl.py
│ ├── vodplatform.py
│ ├── voicerepublic.py
│ ├── voot.py
│ ├── voxmedia.py
│ ├── vrak.py
│ ├── vrt.py
│ ├── vrv.py
│ ├── vshare.py
│ ├── vtm.py
│ ├── vube.py
│ ├── vuclip.py
│ ├── vvvvid.py
│ ├── vyborymos.py
│ ├── vzaar.py
│ ├── wakanim.py
│ ├── walla.py
│ ├── washingtonpost.py
│ ├── wat.py
│ ├── watchbox.py
│ ├── watchindianporn.py
│ ├── wdr.py
│ ├── webcaster.py
│ ├── webofstories.py
│ ├── weibo.py
│ ├── weiqitv.py
│ ├── whyp.py
│ ├── wistia.py
│ ├── worldstarhiphop.py
│ ├── wsj.py
│ ├── wwe.py
│ ├── xbef.py
│ ├── xboxclips.py
│ ├── xfileshare.py
│ ├── xhamster.py
│ ├── xiami.py
│ ├── ximalaya.py
│ ├── xminus.py
│ ├── xnxx.py
│ ├── xstream.py
│ ├── xtube.py
│ ├── xuite.py
│ ├── xvideos.py
│ ├── xxxymovies.py
│ ├── yahoo.py
│ ├── yandexdisk.py
│ ├── yandexmusic.py
│ ├── yandexvideo.py
│ ├── yapfiles.py
│ ├── yesjapan.py
│ ├── yinyuetai.py
│ ├── ynet.py
│ ├── youjizz.py
│ ├── youku.py
│ ├── younow.py
│ ├── youporn.py
│ ├── yourporn.py
│ ├── yourupload.py
│ ├── youtube.py
│ ├── zapiks.py
│ ├── zattoo.py
│ ├── zdf.py
│ ├── zhihu.py
│ ├── zingmp3.py
│ ├── zoom.py
│ └── zype.py
├── jsinterp.py
├── options.py
├── postprocessor/
│ ├── __init__.py
│ ├── common.py
│ ├── embedthumbnail.py
│ ├── execafterdownload.py
│ ├── ffmpeg.py
│ ├── metadatafromtitle.py
│ └── xattrpp.py
├── socks.py
├── swfinterp.py
├── traversal.py
├── update.py
├── utils.py
└── version.py
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/ISSUE_TEMPLATE/1_broken_site.md
================================================
---
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
================================================
FILE: .github/ISSUE_TEMPLATE/2_site_support_request.md
================================================
---
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
================================================
FILE: .github/ISSUE_TEMPLATE/3_site_feature_request.md
================================================
---
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
================================================
FILE: .github/ISSUE_TEMPLATE/4_bug_report.md
================================================
---
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
================================================
FILE: .github/ISSUE_TEMPLATE/5_feature_request.md
================================================
---
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
================================================
FILE: .github/ISSUE_TEMPLATE/6_question.md
================================================
---
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
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
================================================
FILE: .github/ISSUE_TEMPLATE_tmpl/1_broken_site.md
================================================
---
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
================================================
FILE: .github/ISSUE_TEMPLATE_tmpl/2_site_support_request.md
================================================
---
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
================================================
FILE: .github/ISSUE_TEMPLATE_tmpl/3_site_feature_request.md
================================================
---
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
================================================
FILE: .github/ISSUE_TEMPLATE_tmpl/4_bug_report.md
================================================
---
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
================================================
FILE: .github/ISSUE_TEMPLATE_tmpl/5_feature_request.md
================================================
---
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
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
## 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.
================================================
FILE: .github/workflows/ci.yml
================================================
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 .
================================================
FILE: .gitignore
================================================
*.pyc
*.pyo
*.class
*~
*.DS_Store
wine-py2exe/
py2exe.log
*.kate-swp
build/
dist/
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
================================================
FILE: AUTHORS
================================================
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
================================================
FILE: CONTRIBUTING.md
================================================
**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'))
```
================================================
FILE: ChangeLog
================================================
version 2021.12.17
Core
* [postprocessor/ffmpeg] Show ffmpeg output on error (#22680, #29336)
Extractors
* [youtube] Update signature function patterns (#30363, #30366)
* [peertube] Only call description endpoint if necessary (#29383)
* [periscope] Pass referer to HLS requests (#29419)
- [liveleak] Remove extractor (#17625, #24222, #29331)
+ [pornhub] Add support for pornhubthbh7ap3u.onion
* [pornhub] Detect geo restriction
* [pornhub] Dismiss tbr extracted from download URLs (#28927)
* [curiositystream:collection] Extend _VALID_URL (#26326, #29117)
* [youtube] Make get_video_info processing more robust (#29333)
* [youtube] Workaround for get_video_info request (#29333)
* [bilibili] Strip uploader name (#29202)
* [youtube] Update invidious instance list (#29281)
* [umg:de] Update GraphQL API URL (#29304)
* [nrk] Switch psapi URL to https (#29344)
+ [egghead] Add support for app.egghead.io (#28404, #29303)
* [appleconnect] Fix extraction (#29208)
+ [orf:tvthek] Add support for MPD formats (#28672, #29236)
version 2021.06.06
Extractors
* [facebook] Improve login required detection
* [youporn] Fix formats and view count extraction (#29216)
* [orf:tvthek] Fix thumbnails extraction (#29217)
* [formula1] Fix extraction (#29206)
* [ard] Relax URL regular expression and fix video ids (#22724, #29091)
+ [ustream] Detect https embeds (#29133)
* [ted] Prefer own formats over external sources (#29142)
* [twitch:clips] Improve extraction (#29149)
+ [twitch:clips] Add access token query to download URLs (#29136)
* [youtube] Fix get_video_info request (#29086, #29165)
* [vimeo] Fix vimeo pro embed extraction (#29126)
* [redbulltv] Fix embed data extraction (#28770)
* [shahid] Relax URL regular expression (#28772, #28930)
version 2021.05.16
Core
* [options] Fix thumbnail option group name (#29042)
* [YoutubeDL] Improve extract_info doc (#28946)
Extractors
+ [playstuff] Add support for play.stuff.co.nz (#28901, #28931)
* [eroprofile] Fix extraction (#23200, #23626, #29008)
+ [vivo] Add support for vivo.st (#29009)
+ [generic] Add support for og:audio (#28311, #29015)
* [phoenix] Fix extraction (#29057)
+ [generic] Add support for sibnet embeds
+ [vk] Add support for sibnet embeds (#9500)
+ [generic] Add Referer header for direct videojs download URLs (#2879,
#20217, #29053)
* [orf:radio] Switch download URLs to HTTPS (#29012, #29046)
- [blinkx] Remove extractor (#28941)
* [medaltv] Relax URL regular expression (#28884)
+ [funimation] Add support for optional lang code in URLs (#28950)
+ [gdcvault] Add support for HTML5 videos
* [dispeak] Improve FLV extraction (#13513, #28970)
* [kaltura] Improve iframe extraction (#28969)
* [kaltura] Make embed code alternatives actually work
* [cda] Improve extraction (#28709, #28937)
* [twitter] Improve formats extraction from vmap URL (#28909)
* [xtube] Fix formats extraction (#28870)
* [svtplay] Improve extraction (#28507, #28876)
* [tv2dk] Fix extraction (#28888)
version 2021.04.26
Extractors
+ [xfileshare] Add support for wolfstream.tv (#28858)
* [francetvinfo] Improve video id extraction (#28792)
* [medaltv] Fix extraction (#28807)
* [tver] Redirect all downloads to Brightcove (#28849)
* [go] Improve video id extraction (#25207, #25216, #26058)
* [youtube] Fix lazy extractors (#28780)
+ [bbc] Extract description and timestamp from __INITIAL_DATA__ (#28774)
* [cbsnews] Fix extraction for python <3.6 (#23359)
version 2021.04.17
Core
+ [utils] Add support for experimental HTTP response status code
308 Permanent Redirect (#27877, #28768)
Extractors
+ [lbry] Add support for HLS videos (#27877, #28768)
* [youtube] Fix stretched ratio calculation
* [youtube] Improve stretch extraction (#28769)
* [youtube:tab] Improve grid extraction (#28725)
+ [youtube:tab] Detect series playlist on playlists page (#28723)
+ [youtube] Add more invidious instances (#28706)
* [pluralsight] Extend anti-throttling timeout (#28712)
* [youtube] Improve URL to extractor routing (#27572, #28335, #28742)
+ [maoritv] Add support for maoritelevision.com (#24552)
+ [youtube:tab] Pass innertube context and x-goog-visitor-id header along with
continuation requests (#28702)
* [mtv] Fix Viacom A/B Testing Video Player extraction (#28703)
+ [pornhub] Extract DASH and HLS formats from get_media end point (#28698)
* [cbssports] Fix extraction (#28682)
* [jamendo] Fix track extraction (#28686)
* [curiositystream] Fix format extraction (#26845, #28668)
version 2021.04.07
Core
* [extractor/common] Use compat_cookies_SimpleCookie for _get_cookies
+ [compat] Introduce compat_cookies_SimpleCookie
* [extractor/common] Improve JSON-LD author extraction
* [extractor/common] Fix _get_cookies on python 2 (#20673, #23256, #20326,
#28640)
Extractors
* [youtube] Fix extraction of videos with restricted location (#28685)
+ [line] Add support for live.line.me (#17205, #28658)
* [vimeo] Improve extraction (#28591)
* [youku] Update ccode (#17852, #28447, #28460, #28648)
* [youtube] Prefer direct entry metadata over entry metadata from playlist
(#28619, #28636)
* [screencastomatic] Fix extraction (#11976, #24489)
+ [palcomp3] Add support for palcomp3.com (#13120)
+ [arnes] Add support for video.arnes.si (#28483)
+ [youtube:tab] Add support for hashtags (#28308)
version 2021.04.01
Extractors
* [youtube] Setup CONSENT cookie when needed (#28604)
* [vimeo] Fix password protected review extraction (#27591)
* [youtube] Improve age-restricted video extraction (#28578)
version 2021.03.31
Extractors
* [vlive] Fix inkey request (#28589)
* [francetvinfo] Improve video id extraction (#28584)
+ [instagram] Extract duration (#28469)
* [instagram] Improve title extraction (#28469)
+ [sbs] Add support for ondemand watch URLs (#28566)
* [youtube] Fix video's channel extraction (#28562)
* [picarto] Fix live stream extraction (#28532)
* [vimeo] Fix unlisted video extraction (#28414)
* [youtube:tab] Fix playlist/community continuation items extraction (#28266)
* [ard] Improve clip id extraction (#22724, #28528)
version 2021.03.25
Extractors
+ [zoom] Add support for zoom.us (#16597, #27002, #28531)
* [bbc] Fix BBC IPlayer Episodes/Group extraction (#28360)
* [youtube] Fix default value for youtube_include_dash_manifest (#28523)
* [zingmp3] Fix extraction (#11589, #16409, #16968, #27205)
+ [vgtv] Add support for new tv.aftonbladet.se URL schema (#28514)
+ [tiktok] Detect private videos (#28453)
* [vimeo:album] Fix extraction for albums with number of videos multiple
to page size (#28486)
* [vvvvid] Fix kenc format extraction (#28473)
* [mlb] Fix video extraction (#21241)
* [svtplay] Improve extraction (#28448)
* [applepodcasts] Fix extraction (#28445)
* [rtve] Improve extraction
+ Extract all formats
* Fix RTVE Infantil extraction (#24851)
+ Extract is_live and series
version 2021.03.14
Core
+ Introduce release_timestamp meta field (#28386)
Extractors
+ [southpark] Add support for southparkstudios.com (#28413)
* [southpark] Fix extraction (#26763, #28413)
* [sportdeutschland] Fix extraction (#21856, #28425)
* [pinterest] Reduce the number of HLS format requests
* [peertube] Improve thumbnail extraction (#28419)
* [tver] Improve title extraction (#28418)
* [fujitv] Fix HLS formats extension (#28416)
* [shahid] Fix format extraction (#28383)
+ [lbry] Add support for channel filters (#28385)
+ [bandcamp] Extract release timestamp
+ [lbry] Extract release timestamp (#28386)
* [pornhub] Detect flagged videos
+ [pornhub] Extract formats from get_media end point (#28395)
* [bilibili] Fix video info extraction (#28341)
+ [cbs] Add support for Paramount+ (#28342)
+ [trovo] Add Origin header to VOD formats (#28346)
* [voxmedia] Fix volume embed extraction (#28338)
version 2021.03.03
Extractors
* [youtube:tab] Switch continuation to browse API (#28289, #28327)
* [9c9media] Fix extraction for videos with multiple ContentPackages (#28309)
+ [bbc] Add support for BBC Reel videos (#21870, #23660, #28268)
version 2021.03.02
Extractors
* [zdf] Rework extractors (#11606, #13473, #17354, #21185, #26711, #27068,
#27930, #28198, #28199, #28274)
* Generalize cross-extractor video ids for zdf based extractors
* Improve extraction
* Fix 3sat and phoenix
* [stretchinternet] Fix extraction (#28297)
* [urplay] Fix episode data extraction (#28292)
+ [bandaichannel] Add support for b-ch.com (#21404)
* [srgssr] Improve extraction (#14717, #14725, #27231, #28238)
+ Extract subtitle
* Fix extraction for new videos
* Update srf download domains
* [vvvvid] Reduce season request payload size
+ [vvvvid] Extract series sublists playlist title (#27601, #27618)
+ [dplay] Extract Ad-Free uplynk URLs (#28160)
+ [wat] Detect DRM protected videos (#27958)
* [tf1] Improve extraction (#27980, #28040)
* [tmz] Fix and improve extraction (#24603, #24687, 28211)
+ [gedidigital] Add support for Gedi group sites (#7347, #26946)
* [youtube] Fix get_video_info request
version 2021.02.22
Core
+ [postprocessor/embedthumbnail] Recognize atomicparsley binary in lowercase
(#28112)
Extractors
* [apa] Fix and improve extraction (#27750)
+ [youporn] Extract duration (#28019)
+ [peertube] Add support for canard.tube (#28190)
* [youtube] Fixup m4a_dash formats (#28165)
+ [samplefocus] Add support for samplefocus.com (#27763)
+ [vimeo] Add support for unlisted video source format extraction
* [viki] Improve extraction (#26522, #28203)
* Extract uploader URL and episode number
* Report login required error
+ Extract 480p formats
* Fix API v4 calls
* [ninegag] Unescape title (#28201)
* [youtube] Improve URL regular expression (#28193)
+ [youtube] Add support for redirect.invidious.io (#28193)
+ [dplay] Add support for de.hgtv.com (#28182)
+ [dplay] Add support for discoveryplus.com (#24698)
+ [simplecast] Add support for simplecast.com (#24107)
* [youtube] Fix uploader extraction in flat playlist mode (#28045)
* [yandexmusic:playlist] Request missing tracks in chunks (#27355, #28184)
+ [storyfire] Add support for storyfire.com (#25628, #26349)
+ [zhihu] Add support for zhihu.com (#28177)
* [youtube] Fix controversial videos when authenticated with cookies (#28174)
* [ccma] Fix timestamp parsing in python 2
+ [videopress] Add support for video.wordpress.com
* [kakao] Improve info extraction and detect geo restriction (#26577)
* [xboxclips] Fix extraction (#27151)
* [ard] Improve formats extraction (#28155)
+ [canvas] Add support for dagelijksekost.een.be (#28119)
version 2021.02.10
Extractors
* [youtube:tab] Improve grid continuation extraction (#28130)
* [ign] Fix extraction (#24771)
+ [xhamster] Extract format filesize
+ [xhamster] Extract formats from xplayer settings (#28114)
+ [youtube] Add support phone/tablet JS player (#26424)
* [archiveorg] Fix and improve extraction (#21330, #23586, #25277, #26780,
#27109, #27236, #28063)
+ [cda] Detect geo restricted videos (#28106)
* [urplay] Fix extraction (#28073, #28074)
* [youtube] Fix release date extraction (#28094)
+ [youtube] Extract abr and vbr (#28100)
* [youtube] Skip OTF formats (#28070)
version 2021.02.04.1
Extractors
* [youtube] Prefer DASH formats (#28070)
* [azmedien] Fix extraction (#28064)
version 2021.02.04
Extractors
* [pornhub] Implement lazy playlist extraction
* [svtplay] Fix video id extraction (#28058)
+ [pornhub] Add support for authentication (#18797, #21416, #24294)
* [pornhub:user] Improve paging
+ [pornhub:user] Add support for URLs unavailable via /videos page (#27853)
+ [bravotv] Add support for oxygen.com (#13357, #22500)
+ [youtube] Pass embed URL to get_video_info request
* [ccma] Improve metadata extraction (#27994)
+ Extract age limit, alt title, categories, series and episode number
* Fix timestamp multiple subtitles extraction
* [egghead] Update API domain (#28038)
- [vidzi] Remove extractor (#12629)
* [vidio] Improve metadata extraction
* [youtube] Improve subtitles extraction
* [youtube] Fix chapter extraction fallback
* [youtube] Rewrite extractor
* Improve format sorting
* Remove unused code
* Fix series metadata extraction
* Fix trailer video extraction
* Improve error reporting
+ Extract video location
+ [vvvvid] Add support for youtube embeds (#27825)
* [googledrive] Report download page errors (#28005)
* [vlive] Fix error message decoding for python 2 (#28004)
* [youtube] Improve DASH formats file size extraction
* [cda] Improve birth validation detection (#14022, #27929)
+ [awaan] Extract uploader id (#27963)
+ [medialaan] Add support DPG Media MyChannels based websites (#14871, #15597,
#16106, #16489)
* [abcnews] Fix extraction (#12394, #27920)
* [AMP] Fix upload date and timestamp extraction (#27970)
* [tv4] Relax URL regular expression (#27964)
+ [tv2] Add support for mtvuutiset.fi (#27744)
* [adn] Improve login warning reporting
* [zype] Fix uplynk id extraction (#27956)
+ [adn] Add support for authentication (#17091, #27841, #27937)
version 2021.01.24.1
Core
* Introduce --output-na-placeholder (#27896)
Extractors
* [franceculture] Make thumbnail optional (#18807)
* [franceculture] Fix extraction (#27891, #27903)
* [njpwworld] Fix extraction (#27890)
* [comedycentral] Fix extraction (#27905)
* [wat] Fix format extraction (#27901)
+ [americastestkitchen:season] Add support for seasons (#27861)
+ [trovo] Add support for trovo.live (#26125)
+ [aol] Add support for yahoo videos (#26650)
* [yahoo] Fix single video extraction
* [lbry] Unescape lbry URI (#27872)
* [9gag] Fix and improve extraction (#23022)
* [americastestkitchen] Improve metadata extraction for ATK episodes (#27860)
* [aljazeera] Fix extraction (#20911, #27779)
+ [minds] Add support for minds.com (#17934)
* [ard] Fix title and description extraction (#27761)
+ [spotify] Add support for Spotify Podcasts (#27443)
version 2021.01.16
Core
* [YoutubeDL] Protect from infinite recursion due to recursively nested
playlists (#27833)
* [YoutubeDL] Ignore failure to create existing directory (#27811)
* [YoutubeDL] Raise syntax error for format selection expressions with multiple
+ operators (#27803)
Extractors
+ [animeondemand] Add support for lazy playlist extraction (#27829)
* [youporn] Restrict fallback download URL (#27822)
* [youporn] Improve height and tbr extraction (#20425, #23659)
* [youporn] Fix extraction (#27822)
+ [twitter] Add support for unified cards (#27826)
+ [twitch] Add Authorization header with OAuth token for GraphQL requests
(#27790)
* [mixcloud:playlist:base] Extract video id in flat playlist mode (#27787)
* [cspan] Improve info extraction (#27791)
* [adn] Improve info extraction
* [adn] Fix extraction (#26963, #27732)
* [youtube:search] Extract from all sections (#27604)
* [youtube:search] fix viewcount and try to extract all video sections (#27604)
* [twitch] Improve login error extraction
* [twitch] Fix authentication (#27743)
* [3qsdn] Improve extraction (#21058)
* [peertube] Extract formats from streamingPlaylists (#26002, #27586, #27728)
* [khanacademy] Fix extraction (#2887, #26803)
* [spike] Update Paramount Network feed URL (#27715)
version 2021.01.08
Core
* [downloader/hls] Disable decryption in tests (#27660)
+ [utils] Add a function to clean podcast URLs
Extractors
* [rai] Improve subtitles extraction (#27698, #27705)
* [canvas] Match only supported VRT NU URLs (#27707)
+ [bibeltv] Add support for bibeltv.de (#14361)
+ [bfmtv] Add support for bfmtv.com (#16053, #26615)
+ [sbs] Add support for ondemand play and news embed URLs (#17650, #27629)
* [twitch] Drop legacy kraken API v5 code altogether and refactor
* [twitch:vod] Switch to GraphQL for video metadata
* [canvas] Fix VRT NU extraction (#26957, #27053)
* [twitch] Switch access token to GraphQL and refactor (#27646)
+ [rai] Detect ContentItem in iframe (#12652, #27673)
* [ketnet] Fix extraction (#27662)
+ [dplay] Add suport Discovery+ domains (#27680)
* [motherless] Improve extraction (#26495, #27450)
* [motherless] Fix recent videos upload date extraction (#27661)
* [nrk] Fix extraction for videos without a legalAge rating
- [googleplus] Remove extractor (#4955, #7400)
+ [applepodcasts] Add support for podcasts.apple.com (#25918)
+ [googlepodcasts] Add support for podcasts.google.com
+ [iheart] Add support for iheart.com (#27037)
* [acast] Clean podcast URLs
* [stitcher] Clean podcast URLs
+ [xfileshare] Add support for aparat.cam (#27651)
+ [twitter] Add support for summary card (#25121)
* [twitter] Try to use a Generic fallback for unknown twitter cards (#25982)
+ [stitcher] Add support for shows and show metadata extraction (#20510)
* [stv] Improve episode id extraction (#23083)
version 2021.01.03
Extractors
* [nrk] Improve series metadata extraction (#27473)
+ [nrk] Extract subtitles
* [nrk] Fix age limit extraction
* [nrk] Improve video id extraction
+ [nrk] Add support for podcasts (#27634, #27635)
* [nrk] Generalize and delegate all item extractors to nrk
+ [nrk] Add support for mp3 formats
* [nrktv] Switch to playback endpoint
* [vvvvid] Fix season metadata extraction (#18130)
* [stitcher] Fix extraction (#20811, #27606)
* [acast] Fix extraction (#21444, #27612, #27613)
+ [arcpublishing] Add support for arcpublishing.com (#2298, #9340, #17200)
+ [sky] Add support for Sports News articles and Brighcove videos (#13054)
+ [vvvvid] Extract akamai formats
* [vvvvid] Skip unplayable episodes (#27599)
* [yandexvideo] Fix extraction for Python 3.4
version 2020.12.31
Core
* [utils] Accept only supported protocols in url_or_none
* [YoutubeDL] Allow format filtering using audio language (#16209)
Extractors
+ [redditr] Extract all thumbnails (#27503)
* [vvvvid] Improve info extraction
+ [vvvvid] Add support for playlists (#18130, #27574)
+ [yandexdisk] Extract info from webpage
* [yandexdisk] Fix extraction (#17861, #27131)
* [yandexvideo] Use old API call as fallback
* [yandexvideo] Fix extraction (#25000)
- [nbc] Remove CSNNE extractor
* [nbc] Fix NBCSport VPlayer URL extraction (#16640)
+ [aenetworks] Add support for biography.com (#3863)
* [uktvplay] Match new video URLs (#17909)
* [sevenplay] Detect API errors
* [tenplay] Fix format extraction (#26653)
* [brightcove] Raise error for DRM protected videos (#23467, #27568)
version 2020.12.29
Extractors
* [youtube] Improve yt initial data extraction (#27524)
* [youtube:tab] Improve URL matching #27559)
* [youtube:tab] Restore retry on browse requests (#27313, #27564)
* [aparat] Fix extraction (#22285, #22611, #23348, #24354, #24591, #24904,
#25418, #26070, #26350, #26738, #27563)
- [brightcove] Remove sonyliv specific code
* [piksel] Improve format extraction
+ [zype] Add support for uplynk videos
+ [toggle] Add support for live.mewatch.sg (#27555)
+ [go] Add support for fxnow.fxnetworks.com (#13972, #22467, #23754, #26826)
* [teachable] Improve embed detection (#26923)
* [mitele] Fix free video extraction (#24624, #25827, #26757)
* [telecinco] Fix extraction
* [youtube] Update invidious.snopyta.org (#22667)
* [amcnetworks] Improve auth only video detection (#27548)
+ [generic] Add support for VHX Embeds (#27546)
version 2020.12.26
Extractors
* [instagram] Fix comment count extraction
+ [instagram] Add support for reel URLs (#26234, #26250)
* [bbc] Switch to media selector v6 (#23232, #23933, #26303, #26432, #26821,
#27538)
* [instagram] Improve thumbnail extraction
* [instagram] Fix extraction when authenticated (#22880, #26377, #26981,
#27422)
* [spankbang:playlist] Fix extraction (#24087)
+ [spankbang] Add support for playlist videos
* [pornhub] Improve like and dislike count extraction (#27356)
* [pornhub] Fix lq formats extraction (#27386, #27393)
+ [bongacams] Add support for bongacams.com (#27440)
* [youtube:tab] Extend URL regular expression (#27501)
* [theweatherchannel] Fix extraction (#25930, #26051)
+ [sprout] Add support for Universal Kids (#22518)
* [theplatform] Allow passing geo bypass countries from other extractors
+ [wistia] Add support for playlists (#27533)
+ [ctv] Add support for ctv.ca (#27525)
* [9c9media] Improve info extraction
* [youtube] Fix automatic captions extraction (#27162, #27388)
* [sonyliv] Fix title for movies
* [sonyliv] Fix extraction (#25667)
* [streetvoice] Fix extraction (#27455, #27492)
+ [facebook] Add support for watchparty pages (#27507)
* [cbslocal] Fix video extraction
+ [brightcove] Add another method to extract policyKey
* [mewatch] Relax URL regular expression (#27506)
version 2020.12.22
Core
* [common] Remove unwanted query params from unsigned akamai manifest URLs
Extractors
- [tastytrade] Remove extractor (#25716)
* [niconico] Fix playlist extraction (#27428)
- [everyonesmixtape] Remove extractor
- [kanalplay] Remove extractor
* [arkena] Fix extraction
* [nba] Rewrite extractor
* [turner] Improve info extraction
* [youtube] Improve xsrf token extraction (#27442)
* [generic] Improve RSS age limit extraction
* [generic] Fix RSS itunes thumbnail extraction (#27405)
+ [redditr] Extract duration (#27426)
- [zaq1] Remove extractor
+ [asiancrush] Add support for retrocrush.tv
* [asiancrush] Fix extraction
- [noco] Remove extractor (#10864)
* [nfl] Fix extraction (#22245)
* [skysports] Relax URL regular expression (#27435)
+ [tv5unis] Add support for tv5unis.ca (#22399, #24890)
+ [videomore] Add support for more.tv (#27088)
+ [yandexmusic] Add support for music.yandex.com (#27425)
+ [nhk:program] Add support for audio programs and program clips
+ [nhk] Add support for NHK video programs (#27230)
version 2020.12.14
Core
* [extractor/common] Improve JSON-LD interaction statistic extraction (#23306)
* [downloader/hls] Delegate manifests with media initialization to ffmpeg
+ [extractor/common] Document duration meta field for playlists
Extractors
* [mdr] Bypass geo restriction
* [mdr] Improve extraction (#24346, #26873)
* [yandexmusic:album] Improve album title extraction (#27418)
* [eporner] Fix view count extraction and make optional (#23306)
+ [eporner] Extend URL regular expression
* [eporner] Fix hash extraction and extend _VALID_URL (#27396)
* [slideslive] Use m3u8 entry protocol for m3u8 formats (#27400)
* [twitcasting] Fix format extraction and improve info extraction (#24868)
* [linuxacademy] Fix authentication and extraction (#21129, #26223, #27402)
* [itv] Clean description from HTML tags (#27399)
* [vlive] Sort live formats (#27404)
* [hotstart] Fix and improve extraction
* Fix format extraction (#26690)
+ Extract thumbnail URL (#16079, #20412)
+ Add support for country specific playlist URLs (#23496)
* Select the last id in video URL (#26412)
+ [youtube] Add some invidious instances (#27373)
version 2020.12.12
Core
* [YoutubeDL] Improve thumbnail filename deducing (#26010, #27244)
Extractors
+ [ruutu] Extract more metadata
+ [ruutu] Detect non-free videos (#21154)
* [ruutu] Authenticate format URLs (#21031, #26782)
+ [ruutu] Add support for static.nelonenmedia.fi (#25412)
+ [ruutu] Extend URL regular expression (#24839)
+ [facebook] Add support archived live video URLs (#15859)
* [wdr] Improve overall extraction
+ [wdr] Extend subtitles extraction (#22672, #22723)
+ [facebook] Add support for videos attached to Relay based story pages
(#10795)
+ [wdr:page] Add support for kinder.wdr.de (#27350)
+ [facebook] Add another regular expression for handleServerJS
* [facebook] Fix embed page extraction
+ [facebook] Add support for Relay post pages (#26935)
+ [facebook] Add support for watch videos (#22795, #27062)
+ [facebook] Add support for group posts with multiple videos (#19131)
* [itv] Fix series metadata extraction (#26897)
- [itv] Remove old extraction method (#23177)
* [facebook] Redirect mobile URLs to desktop URLs (#24831, #25624)
+ [facebook] Add support for Relay based pages (#26823)
* [facebook] Try to reduce unnecessary tahoe requests
- [facebook] Remove hardcoded Chrome User-Agent (#18974, #25411, #26958,
#27329)
- [smotri] Remove extractor (#27358)
- [beampro] Remove extractor (#17290, #22871, #23020, #23061, #26099)
version 2020.12.09
Core
* [extractor/common] Fix inline HTML5 media tags processing (#27345)
Extractors
* [youtube:tab] Improve identity token extraction (#27197)
* [youtube:tab] Make click tracking params on continuation optional
* [youtube:tab] Delegate inline playlists to tab-based playlists (27298)
+ [tubitv] Extract release year (#27317)
* [amcnetworks] Fix free content extraction (#20354)
+ [lbry:channel] Add support for channels (#25584)
+ [lbry] Add support for short and embed URLs
* [lbry] Fix channel metadata extraction
+ [telequebec] Add support for video.telequebec.tv (#27339)
* [telequebec] Fix extraction (#25733, #26883)
+ [youtube:tab] Capture and output alerts (#27340)
* [tvplay:home] Fix extraction (#21153)
* [americastestkitchen] Fix Extraction and add support
for Cook's Country and Cook's Illustrated (#17234, #27322)
+ [slideslive] Add support for yoda service videos and extract subtitles
(#27323)
version 2020.12.07
Core
* [extractor/common] Extract timestamp from Last-Modified header
+ [extractor/common] Add support for dl8-* media tags (#27283)
* [extractor/common] Fix media type extraction for HTML5 media tags
in start/end form
Extractors
* [aenetworks] Fix extraction (#23363, #23390, #26795, #26985)
* Fix Fastly format extraction
+ Add support for play and watch subdomains
+ Extract series metadata
* [youtube] Improve youtu.be extraction in non-existing playlists (#27324)
+ [generic] Extract RSS video description, timestamp and itunes metadata
(#27177)
* [nrk] Reduce the number of instalments and episodes requests
* [nrk] Improve extraction
* Improve format extraction for old akamai formats
+ Add is_live value to entry info dict
* Request instalments only when available
* Fix skole extraction
+ [peertube] Extract fps
+ [peertube] Recognize audio-only formats (#27295)
version 2020.12.05
Core
* [extractor/common] Improve Akamai HTTP format extraction
* Allow m3u8 manifest without an additional audio format
* Fix extraction for qualities starting with a number
Extractors
* [teachable:course] Improve extraction (#24507, #27286)
* [nrk] Improve error extraction
* [nrktv:series] Improve extraction (#21926)
* [nrktv:season] Improve extraction
* [nrk] Improve format extraction and geo-restriction detection (#24221)
* [pornhub] Handle HTTP errors gracefully (#26414)
* [nrktv] Relax URL regular expression (#27299, #26185)
+ [zdf] Extract webm formats (#26659)
+ [gamespot] Extract DASH and HTTP formats
+ [tver] Add support for tver.jp (#26662, #27284)
+ [pornhub] Add support for pornhub.org (#27276)
version 2020.12.02
Extractors
+ [tva] Add support for qub.ca (#27235)
+ [toggle] Detect DRM protected videos (#16479, #20805)
+ [toggle] Add support for new MeWatch URLs (#27256)
* [youtube:tab] Extract channels only from channels tab (#27266)
+ [cspan] Extract info from jwplayer data (#3672, #3734, #10638, #13030,
#18806, #23148, #24461, #26171, #26800, #27263)
* [cspan] Pass Referer header with format's video URL (#26032, #25729)
* [youtube] Improve age-gated videos extraction (#27259)
+ [mediaset] Add support for movie URLs (#27240)
* [yandexmusic] Refactor
+ [yandexmusic] Add support for artist's tracks and albums (#11887, #22284)
* [yandexmusic:track] Fix extraction (#26449, #26669, #26747, #26748, #26762)
version 2020.11.29
Core
* [YoutubeDL] Write static debug to stderr and respect quiet for dynamic debug
(#14579, #22593)
Extractors
* [drtv] Extend URL regular expression (#27243)
* [tiktok] Fix extraction (#20809, #22838, #22850, #25987, #26281, #26411,
#26639, #26776, #27237)
+ [ina] Add support for mobile URLs (#27229)
* [pornhub] Fix like and dislike count extraction (#27227, #27234)
* [youtube] Improve yt initial player response extraction (#27216)
* [videa] Fix extraction (#25650, #25973, #26301)
version 2020.11.26
Core
* [downloader/fragment] Set final file's mtime according to last fragment's
Last-Modified header (#11718, #18384, #27138)
Extractors
+ [spreaker] Add support for spreaker.com (#13480, #13877)
* [vlive] Improve extraction for geo-restricted videos
+ [vlive] Add support for post URLs (#27122, #27123)
* [viki] Fix video API request (#27184)
* [bbc] Fix BBC Three clip extraction
* [bbc] Fix BBC News videos extraction
+ [medaltv] Add support for medal.tv (#27149)
* [youtube] Improve music metadata and license extraction (#26013)
* [nrk] Fix extraction
* [cda] Fix extraction (#17803, #24458, #24518, #26381)
version 2020.11.24
Core
+ [extractor/common] Add generic support for akamai HTTP format extraction
Extractors
* [youtube:tab] Fix feeds extraction (#25695, #26452)
* [youtube:favorites] Restore extractor
* [youtube:tab] Fix some weird typo (#27157)
+ [pinterest] Add support for large collections (more than 25 pins)
+ [franceinter] Extract thumbnail (#27153)
+ [box] Add support for box.com (#5949)
+ [nytimes] Add support for cooking.nytimes.com (#27112, #27143)
* [lbry] Relax URL regular expression (#27144)
+ [rumble] Add support for embed pages (#10785)
+ [skyit] Add support for multiple Sky Italia websites (#26629)
+ [pinterest] Add support for pinterest.com (#25747)
version 2020.11.21.1
Core
* [downloader/http] Fix crash during urlopen caused by missing reason
of URLError
* [YoutubeDL] Fix --ignore-errors for playlists with generator-based entries
of url_transparent (#27064)
Extractors
+ [svtplay] Add support for svt.se/barnkanalen (#24817)
+ [svt] Extract timestamp (#27130)
* [svtplay] Improve thumbnail extraction (#27130)
* [youtube] Fix error reason extraction (#27081)
* [youtube] Fix like and dislike count extraction (#25977)
+ [youtube:tab] Add support for current video and fix lives extraction (#27126)
* [infoq] Fix format extraction (#25984)
* [francetv] Update to fix thumbnail URL issue (#27120)
* [youtube] Improve yt initial data extraction (#27093)
+ [discoverynetworks] Add support new TLC/DMAX URLs (#27100)
* [rai] Fix protocol relative relinker URLs (#22766)
* [rai] Fix unavailable video format detection
* [rai] Improve extraction
* [rai] Fix extraction (#27077)
* [viki] Improve format extraction
* [viki] Fix stream extraction from MPD (#27092)
* [googledrive] Fix format extraction (#26979)
+ [amara] Add support for amara.org (#20618)
* [vimeo:album] Fix extraction (#27079)
* [mtv] Fix mgid extraction (#26841)
version 2020.11.19
Core
* [extractor/common] Output error for invalid URLs in _is_valid_url (#21400,
#24151, #25617, #25618, #25586, #26068, #27072)
Extractors
* [youporn] Fix upload date extraction
* [youporn] Make comment count optional (#26986)
* [arte] Rework extractors
* Reimplement embed and playlist extractors to delegate to the single
entrypoint artetv extractor
* Improve embeds detection (#27057)
+ [arte] Extract m3u8 formats (#27061)
* [mgtv] Fix format extraction (#26415)
+ [lbry] Add support for odysee.com (#26806)
* [francetv] Improve info extraction
+ [francetv] Add fallback video URL extraction (#27047)
version 2020.11.18
Extractors
* [spiegel] Fix extraction (#24206, #24767)
* [youtube] Improve extraction
+ Add support for --no-playlist (#27009)
* Improve playlist and mix extraction (#26390, #26509, #26534, #27011)
+ Extract playlist uploader data
* [youtube:tab] Fix view count extraction (#27051)
* [malltv] Fix extraction (#27035)
+ [bandcamp] Extract playlist description (#22684)
* [urplay] Fix extraction (#26828)
* [youtube:tab] Fix playlist title extraction (#27015)
* [youtube] Fix chapters extraction (#26005)
version 2020.11.17
Core
* [utils] Skip ! prefixed code in js_to_json
Extractors
* [youtube:tab] Fix extraction with cookies provided (#27005)
* [lrt] Fix extraction with empty tags (#20264)
+ [ndr:embed:base] Extract subtitles (#25447, #26106)
+ [servus] Add support for pm-wissen.com (#25869)
* [servus] Fix extraction (#26872, #26967, #26983, #27000)
* [xtube] Fix extraction (#26996)
* [lrt] Fix extraction
+ [lbry] Add support for lbry.tv
+ [condenast] Extract subtitles
* [condenast] Fix extraction
* [bandcamp] Fix extraction (#26681, #26684)
* [rai] Fix RaiPlay extraction (#26064, #26096)
* [vlive] Fix extraction
* [usanetwork] Fix extraction
* [nbc] Fix NBCNews/Today/MSNBC extraction
* [cnbc] Fix extraction
version 2020.11.12
Extractors
* [youtube] Rework extractors
version 2020.11.01
Core
* [utils] Don't attempt to coerce JS strings to numbers in js_to_json (#26851)
* [downloader/http] Properly handle missing message in SSLError (#26646)
* [downloader/http] Fix access to not yet opened stream in retry
Extractors
* [youtube] Fix JS player URL extraction
* [ytsearch] Fix extraction (#26920)
* [afreecatv] Fix typo (#26970)
* [23video] Relax URL regular expression (#26870)
+ [ustream] Add support for video.ibm.com (#26894)
* [iqiyi] Fix typo (#26884)
+ [expressen] Add support for di.se (#26670)
* [iprima] Improve video id extraction (#26507, #26494)
version 2020.09.20
Core
* [extractor/common] Relax interaction count extraction in _json_ld
+ [extractor/common] Extract author as uploader for VideoObject in _json_ld
* [downloader/hls] Fix incorrect end byte in Range HTTP header for
media segments with EXT-X-BYTERANGE (#14748, #24512)
* [extractor/common] Handle ssl.CertificateError in _request_webpage (#26601)
* [downloader/http] Improve timeout detection when reading block of data
(#10935)
* [downloader/http] Retry download when urlopen times out (#10935, #26603)
Extractors
* [redtube] Extend URL regular expression (#26506)
* [twitch] Refactor
* [twitch:stream] Switch to GraphQL and fix reruns (#26535)
+ [telequebec] Add support for brightcove videos (#25833)
* [pornhub] Extract metadata from JSON-LD (#26614)
* [pornhub] Fix view count extraction (#26621, #26614)
version 2020.09.14
Core
+ [postprocessor/embedthumbnail] Add support for non jpg/png thumbnails
(#25687, #25717)
Extractors
* [rtlnl] Extend URL regular expression (#26549, #25821)
* [youtube] Fix empty description extraction (#26575, #26006)
* [srgssr] Extend URL regular expression (#26555, #26556, #26578)
* [googledrive] Use redirect URLs for source format (#18877, #23919, #24689,
#26565)
* [svtplay] Fix id extraction (#26576)
* [redbulltv] Improve support for rebull.com TV localized URLs (#22063)
+ [redbulltv] Add support for new redbull.com TV URLs (#22037, #22063)
* [soundcloud:pagedplaylist] Reduce pagination limit (#26557)
version 2020.09.06
Core
+ [utils] Recognize wav mimetype (#26463)
Extractors
* [nrktv:episode] Improve video id extraction (#25594, #26369, #26409)
* [youtube] Fix age gate content detection (#26100, #26152, #26311, #26384)
* [youtube:user] Extend URL regular expression (#26443)
* [xhamster] Improve initials regular expression (#26526, #26353)
* [svtplay] Fix video id extraction (#26425, #26428, #26438)
* [twitch] Rework extractors (#12297, #20414, #20604, #21811, #21812, #22979,
#24263, #25010, #25553, #25606)
* Switch to GraphQL
+ Add support for collections
+ Add support for clips and collections playlists
* [biqle] Improve video ext extraction
* [xhamster] Fix extraction (#26157, #26254)
* [xhamster] Extend URL regular expression (#25789, #25804, #25927))
version 2020.07.28
Extractors
* [youtube] Fix sigfunc name extraction (#26134, #26135, #26136, #26137)
* [youtube] Improve description extraction (#25937, #25980)
* [wistia] Restrict embed regular expression (#25969)
* [youtube] Prevent excess HTTP 301 (#25786)
+ [youtube:playlists] Extend URL regular expression (#25810)
+ [bellmedia] Add support for cp24.com clip URLs (#25764)
* [brightcove] Improve embed detection (#25674)
version 2020.06.16.1
Extractors
* [youtube] Force old layout (#25682, #25683, #25680, #25686)
* [youtube] Fix categories and improve tags extraction
version 2020.06.16
Extractors
* [youtube] Fix uploader id and uploader URL extraction
* [youtube] Improve view count extraction
* [youtube] Fix upload date extraction (#25677)
* [youtube] Fix thumbnails extraction (#25676)
* [youtube] Fix playlist and feed extraction (#25675)
+ [facebook] Add support for single-video ID links
+ [youtube] Extract chapters from JSON (#24819)
+ [kaltura] Add support for multiple embeds on a webpage (#25523)
version 2020.06.06
Extractors
* [tele5] Bypass geo restriction
+ [jwplatform] Add support for bypass geo restriction
* [tele5] Prefer jwplatform over nexx (#25533)
* [twitch:stream] Expect 400 and 410 HTTP errors from API
* [twitch:stream] Fix extraction (#25528)
* [twitch] Fix thumbnails extraction (#25531)
+ [twitch] Pass v5 Accept HTTP header (#25531)
* [brightcove] Fix subtitles extraction (#25540)
+ [malltv] Add support for sk.mall.tv (#25445)
* [periscope] Fix untitled broadcasts (#25482)
* [jwplatform] Improve embeds extraction (#25467)
version 2020.05.29
Core
* [postprocessor/ffmpeg] Embed series metadata with --add-metadata
* [utils] Fix file permissions in write_json_file (#12471, #25122)
Extractors
* [ard:beta] Extend URL regular expression (#25405)
+ [youtube] Add support for more invidious instances (#25417)
* [giantbomb] Extend URL regular expression (#25222)
* [ard] Improve URL regular expression (#25134, #25198)
* [redtube] Improve formats extraction and extract m3u8 formats (#25311,
#25321)
* [indavideo] Switch to HTTPS for API request (#25191)
* [redtube] Improve title extraction (#25208)
* [vimeo] Improve format extraction and sorting (#25285)
* [soundcloud] Reduce API playlist page limit (#25274)
+ [youtube] Add support for yewtu.be (#25226)
* [mailru] Fix extraction (#24530, #25239)
* [bellator] Fix mgid extraction (#25195)
version 2020.05.08
Core
* [downloader/http] Request last data block of exact remaining size
* [downloader/http] Finish downloading once received data length matches
expected
* [extractor/common] Use compat_cookiejar_Cookie for _set_cookie to always
ensure cookie name and value are bytestrings on python 2 (#23256, #24776)
+ [compat] Introduce compat_cookiejar_Cookie
* [utils] Improve cookie files support
+ Add support for UTF-8 in cookie files
* Skip malformed cookie file entries instead of crashing (invalid entry
length, invalid expires at)
Extractors
* [youtube] Improve signature cipher extraction (#25187, #25188)
* [iprima] Improve extraction (#25138)
* [uol] Fix extraction (#22007)
+ [orf] Add support for more radio stations (#24938, #24968)
* [dailymotion] Fix typo
- [puhutv] Remove no longer available HTTP formats (#25124)
version 2020.05.03
Core
+ [extractor/common] Extract multiple JSON-LD entries
* [options] Clarify doc on --exec command (#19087, #24883)
* [extractor/common] Skip malformed ISM manifest XMLs while extracting
ISM formats (#24667)
Extractors
* [crunchyroll] Fix and improve extraction (#25096, #25060)
* [youtube] Improve player id extraction
* [youtube] Use redirected video id if any (#25063)
* [yahoo] Fix GYAO Player extraction and relax URL regular expression
(#24178, #24778)
* [tvplay] Fix Viafree extraction (#15189, #24473, #24789)
* [tenplay] Relax URL regular expression (#25001)
+ [prosiebensat1] Extract series metadata
* [prosiebensat1] Improve extraction and remove 7tv.de support (#24948)
- [prosiebensat1] Remove 7tv.de support (#24948)
* [youtube] Fix DRM videos detection (#24736)
* [thisoldhouse] Fix video id extraction (#24548, #24549)
+ [soundcloud] Extract AAC format (#19173, #24708)
* [youtube] Skip broken multifeed videos (#24711)
* [nova:embed] Fix extraction (#24700)
* [motherless] Fix extraction (#24699)
* [twitch:clips] Extend URL regular expression (#24290, #24642)
* [tv4] Fix ISM formats extraction (#24667)
* [tele5] Fix extraction (#24553)
+ [mofosex] Add support for generic embeds (#24633)
+ [youporn] Add support for generic embeds
+ [spankwire] Add support for generic embeds (#24633)
* [spankwire] Fix extraction (#18924, #20648)
version 2020.03.24
Core
- [utils] Revert support for cookie files with spaces used instead of tabs
Extractors
* [teachable] Update upskillcourses and gns3 domains
* [generic] Look for teachable embeds before wistia
+ [teachable] Extract chapter metadata (#24421)
+ [bilibili] Add support for player.bilibili.com (#24402)
+ [bilibili] Add support for new URL schema with BV ids (#24439, #24442)
* [limelight] Remove disabled API requests (#24255)
* [soundcloud] Fix download URL extraction (#24394)
+ [cbc:watch] Add support for authentication (#19160)
* [hellporno] Fix extraction (#24399)
* [xtube] Fix formats extraction (#24348)
* [ndr] Fix extraction (#24326)
* [nhk] Update m3u8 URL and use native HLS downloader (#24329)
- [nhk] Remove obsolete rtmp formats (#24329)
* [nhk] Relax URL regular expression (#24329)
- [vimeo] Revert fix showcase password protected video extraction (#24224)
version 2020.03.08
Core
+ [utils] Add support for cookie files with spaces used instead of tabs
Extractors
+ [pornhub] Add support for pornhubpremium.com (#24288)
- [youtube] Remove outdated code and unnecessary requests
* [youtube] Improve extraction in 429 HTTP error conditions (#24283)
* [nhk] Update API version (#24270)
version 2020.03.06
Extractors
* [youtube] Fix age-gated videos support without login (#24248)
* [vimeo] Fix showcase password protected video extraction (#24224)
* [pornhub] Improve title extraction (#24184)
* [peertube] Improve extraction (#23657)
+ [servus] Add support for new URL schema (#23475, #23583, #24142)
* [vimeo] Fix subtitles URLs (#24209)
version 2020.03.01
Core
* [YoutubeDL] Force redirect URL to unicode on python 2
- [options] Remove duplicate short option -v for --version (#24162)
Extractors
* [xhamster] Fix extraction (#24205)
* [franceculture] Fix extraction (#24204)
+ [telecinco] Add support for article opening videos
* [telecinco] Fix extraction (#24195)
* [xtube] Fix metadata extraction (#21073, #22455)
* [youjizz] Fix extraction (#24181)
- Remove no longer needed compat_str around geturl
* [pornhd] Fix extraction (#24128)
+ [teachable] Add support for multiple videos per lecture (#24101)
+ [wistia] Add support for multiple generic embeds (#8347, 11385)
* [imdb] Fix extraction (#23443)
* [tv2dk:bornholm:play] Fix extraction (#24076)
version 2020.02.16
Core
* [YoutubeDL] Fix playlist entry indexing with --playlist-items (#10591,
#10622)
* [update] Fix updating via symlinks (#23991)
+ [compat] Introduce compat_realpath (#23991)
Extractors
+ [npr] Add support for streams (#24042)
+ [24video] Add support for porn.24video.net (#23779, #23784)
- [jpopsuki] Remove extractor (#23858)
* [nova] Improve extraction (#23690)
* [nova:embed] Improve (#23690)
* [nova:embed] Fix extraction (#23672)
+ [abc:iview] Add support for 720p (#22907, #22921)
* [nytimes] Improve format sorting (#24010)
+ [toggle] Add support for mewatch.sg (#23895, #23930)
* [thisoldhouse] Fix extraction (#23951)
+ [popcorntimes] Add support for popcorntimes.tv (#23949)
* [sportdeutschland] Update to new API
* [twitch:stream] Lowercase channel id for stream request (#23917)
* [tv5mondeplus] Fix extraction (#23907, #23911)
* [tva] Relax URL regular expression (#23903)
* [vimeo] Fix album extraction (#23864)
* [viewlift] Improve extraction
* Fix extraction (#23851)
+ Add support for authentication
+ Add support for more domains
* [svt] Fix series extraction (#22297)
* [svt] Fix article extraction (#22897, #22919)
* [soundcloud] Improve private playlist/set tracks extraction (#3707)
version 2020.01.24
Extractors
* [youtube] Fix sigfunc name extraction (#23819)
* [stretchinternet] Fix extraction (#4319)
* [voicerepublic] Fix extraction
* [azmedien] Fix extraction (#23783)
* [businessinsider] Fix jwplatform id extraction (#22929, #22954)
+ [24video] Add support for 24video.vip (#23753)
* [ivi:compilation] Fix entries extraction (#23770)
* [ard] Improve extraction (#23761)
* Simplify extraction
+ Extract age limit and series
* Bypass geo-restriction
+ [nbc] Add support for nbc multi network URLs (#23049)
* [americastestkitchen] Fix extraction
* [zype] Improve extraction
+ Extract subtitles (#21258)
+ Support URLs with alternative keys/tokens (#21258)
+ Extract more metadata
* [orf:tvthek] Improve geo restricted videos detection (#23741)
* [soundcloud] Restore previews extraction (#23739)
version 2020.01.15
Extractors
* [yourporn] Fix extraction (#21645, #22255, #23459)
+ [canvas] Add support for new API endpoint (#17680, #18629)
* [ndr:base:embed] Improve thumbnails extraction (#23731)
+ [vodplatform] Add support for embed.kwikmotion.com domain
+ [twitter] Add support for promo_video_website cards (#23711)
* [orf:radio] Clean description and improve extraction
* [orf:fm4] Fix extraction (#23599)
* [safari] Fix kaltura session extraction (#23679, #23670)
* [lego] Fix extraction and extract subtitle (#23687)
* [cloudflarestream] Improve extraction
+ Add support for bytehighway.net domain
+ Add support for signed URLs
+ Extract thumbnail
* [naver] Improve extraction
* Improve geo-restriction handling
+ Extract automatic captions
+ Extract uploader metadata
+ Extract VLive HLS formats
* Improve metadata extraction
- [pandatv] Remove extractor (#23630)
* [dctp] Fix format extraction (#23656)
+ [scrippsnetworks] Add support for www.discovery.com videos
* [discovery] Fix anonymous token extraction (#23650)
* [nrktv:seriebase] Fix extraction (#23625, #23537)
* [wistia] Improve format extraction and extract subtitles (#22590)
* [vice] Improve extraction (#23631)
* [redtube] Detect private videos (#23518)
version 2020.01.01
Extractors
* [brightcove] Invalidate policy key cache on failing requests
* [pornhub] Improve locked videos detection (#22449, #22780)
+ [pornhub] Add support for m3u8 formats
* [pornhub] Fix extraction (#22749, #23082)
* [brightcove] Update policy key on failing requests
* [spankbang] Improve removed video detection (#23423)
* [spankbang] Fix extraction (#23307, #23423, #23444)
* [soundcloud] Automatically update client id on failing requests
* [prosiebensat1] Improve geo restriction handling (#23571)
* [brightcove] Cache brightcove player policy keys
* [teachable] Fail with error message if no video URL found
* [teachable] Improve locked lessons detection (#23528)
+ [scrippsnetworks] Add support for Scripps Networks sites (#19857, #22981)
* [mitele] Fix extraction (#21354, #23456)
* [soundcloud] Update client id (#23516)
* [mailru] Relax URL regular expressions (#23509)
version 2019.12.25
Core
* [utils] Improve str_to_int
+ [downloader/hls] Add ability to override AES decryption key URL (#17521)
Extractors
* [mediaset] Fix parse formats (#23508)
+ [tv2dk:bornholm:play] Add support for play.tv2bornholm.dk (#23291)
+ [slideslive] Add support for url and vimeo service names (#23414)
* [slideslive] Fix extraction (#23413)
* [twitch:clips] Fix extraction (#23375)
+ [soundcloud] Add support for token protected embeds (#18954)
* [vk] Improve extraction
* Fix User Videos extraction (#23356)
* Extract all videos for lists with more than 1000 videos (#23356)
+ Add support for video albums (#14327, #14492)
- [kontrtube] Remove extractor
- [videopremium] Remove extractor
- [musicplayon] Remove extractor (#9225)
+ [ufctv] Add support for ufcfightpass.imgdge.com and
ufcfightpass.imggaming.com (#23343)
+ [twitch] Extract m3u8 formats frame rate (#23333)
+ [imggaming] Add support for playlists and extract subtitles
+ [ufcarabia] Add support for UFC Arabia (#23312)
* [ufctv] Fix extraction
* [yahoo] Fix gyao brightcove player id (#23303)
* [vzaar] Override AES decryption key URL (#17521)
+ [vzaar] Add support for AES HLS manifests (#17521, #23299)
* [nrl] Fix extraction
* [teachingchannel] Fix extraction
* [nintendo] Fix extraction and partially add support for Nintendo Direct
videos (#4592)
+ [ooyala] Add better fallback values for domain and streams variables
+ [youtube] Add support youtubekids.com (#23272)
* [tv2] Detect DRM protection
+ [tv2] Add support for katsomo.fi and mtv.fi (#10543)
* [tv2] Fix tv2.no article extraction
* [msn] Improve extraction
+ Add support for YouTube and NBCSports embeds
+ Add support for articles with multiple videos
* Improve AOL embed support
* Improve format extraction
* [abcotvs] Relax URL regular expression and improve metadata extraction
(#18014)
* [channel9] Reduce response size
* [adobetv] Improve extraction
* Use OnDemandPagedList for list extractors
* Reduce show extraction requests
* Extract original video format and subtitles
+ Add support for adobe tv embeds
version 2019.11.28
Core
+ [utils] Add generic caesar cipher and rot47
* [utils] Handle rd-suffixed day parts in unified_strdate (#23199)
Extractors
* [vimeo] Improve extraction
* Fix review extraction
* Fix ondemand extraction
* Make password protected player case as an expected error (#22896)
* Simplify channel based extractors code
- [openload] Remove extractor (#11999)
- [verystream] Remove extractor
- [streamango] Remove extractor (#15406)
* [dailymotion] Improve extraction
* Extract http formats included in m3u8 manifest
* Fix user extraction (#3553, #21415)
+ Add support for User Authentication (#11491)
* Fix password protected videos extraction (#23176)
* Respect age limit option and family filter cookie value (#18437)
* Handle video url playlist query param
* Report allowed countries for geo-restricted videos
* [corus] Improve extraction
+ Add support for Series Plus, W Network, YTV, ABC Spark, disneychannel.com
and disneylachaine.ca (#20861)
+ Add support for self hosted videos (#22075)
* Detect DRM protection (#14910, #9164)
* [vivo] Fix extraction (#22328, #22279)
+ [bitchute] Extract upload date (#22990, #23193)
* [soundcloud] Update client id (#23214)
version 2019.11.22
Core
+ [extractor/common] Clean jwplayer description HTML tags
+ [extractor/common] Add data, headers and query to all major extract formats
methods
Extractors
* [chaturbate] Fix extraction (#23010, #23012)
+ [ntvru] Add support for non relative file URLs (#23140)
* [vk] Fix wall audio thumbnails extraction (#23135)
* [ivi] Fix format extraction (#21991)
- [comcarcoff] Remove extractor
+ [drtv] Add support for new URL schema (#23059)
+ [nexx] Add support for Multi Player JS Setup (#23052)
+ [teamcoco] Add support for new videos (#23054)
* [soundcloud] Check if the soundtrack has downloads left (#23045)
* [facebook] Fix posts video data extraction (#22473)
- [addanime] Remove extractor
- [minhateca] Remove extractor
- [daisuki] Remove extractor
* [seeker] Fix extraction
- [revision3] Remove extractors
* [twitch] Fix video comments URL (#18593, #15828)
* [twitter] Improve extraction
+ Add support for generic embeds (#22168)
* Always extract http formats for native videos (#14934)
+ Add support for Twitter Broadcasts (#21369)
+ Extract more metadata
* Improve VMap format extraction
* Unify extraction code for both twitter statuses and cards
+ [twitch] Add support for Clip embed URLs
* [lnkgo] Fix extraction (#16834)
* [mixcloud] Improve extraction
* Improve metadata extraction (#11721)
* Fix playlist extraction (#22378)
* Fix user mixes extraction (#15197, #17865)
+ [kinja] Add support for Kinja embeds (#5756, #11282, #22237, #22384)
* [onionstudios] Fix extraction
+ [hotstar] Pass Referer header to format requests (#22836)
* [dplay] Minimize response size
+ [patreon] Extract uploader_id and filesize
* [patreon] Minimize response size
* [roosterteeth] Fix login request (#16094, #22689)
version 2019.11.05
Extractors
+ [scte] Add support for learning.scte.org (#22975)
+ [msn] Add support for Vidible and AOL embeds (#22195, #22227)
* [myspass] Fix video URL extraction and improve metadata extraction (#22448)
* [jamendo] Improve extraction
* Fix album extraction (#18564)
* Improve metadata extraction (#18565, #21379)
* [mediaset] Relax URL guid matching (#18352)
+ [mediaset] Extract unprotected M3U and MPD manifests (#17204)
* [telegraaf] Fix extraction
+ [bellmedia] Add support for marilyn.ca videos (#22193)
* [stv] Fix extraction (#22928)
- [iconosquare] Remove extractor
- [keek] Remove extractor
- [gameone] Remove extractor (#21778)
- [flipagram] Remove extractor
- [bambuser] Remove extractor
* [wistia] Reduce embed extraction false positives
+ [wistia] Add support for inline embeds (#22931)
- [go90] Remove extractor
* [kakao] Remove raw request
+ [kakao] Extract format total bitrate
* [daum] Fix VOD and Clip extraction (#15015)
* [kakao] Improve extraction
+ Add support for embed URLs
+ Add support for Kakao Legacy vid based embed URLs
* Only extract fields used for extraction
* Strip description and extract tags
* [mixcloud] Fix cloudcast data extraction (#22821)
* [yahoo] Improve extraction
+ Add support for live streams (#3597, #3779, #22178)
* Bypass cookie consent page for european domains (#16948, #22576)
+ Add generic support for embeds (#20332)
* [tv2] Fix and improve extraction (#22787)
+ [tv2dk] Add support for TV2 DK sites
* [onet] Improve extraction …
+ Add support for onet100.vod.pl
+ Extract m3u8 formats
* Correct audio only format info
* [fox9] Fix extraction
version 2019.10.29
Core
* [utils] Actualize major IPv4 address blocks per country
Extractors
+ [go] Add support for abc.com and freeform.com (#22823, #22864)
+ [mtv] Add support for mtvjapan.com
* [mtv] Fix extraction for mtv.de (#22113)
* [videodetective] Fix extraction
* [internetvideoarchive] Fix extraction
* [nbcnews] Fix extraction (#12569, #12576, #21703, #21923)
- [hark] Remove extractor
- [tutv] Remove extractor
- [learnr] Remove extractor
- [macgamestore] Remove extractor
* [la7] Update Kaltura service URL (#22358)
* [thesun] Fix extraction (#16966)
- [makertv] Remove extractor
+ [tenplay] Add support for 10play.com.au (#21446)
* [soundcloud] Improve extraction
* Improve format extraction (#22123)
+ Extract uploader_id and uploader_url (#21916)
+ Extract all known thumbnails (#19071, #20659)
* Fix extraction for private playlists (#20976)
+ Add support for playlist embeds (#20976)
* Skip preview formats (#22806)
* [dplay] Improve extraction
+ Add support for dplay.fi, dplay.jp and es.dplay.com (#16969)
* Fix it.dplay.com extraction (#22826)
+ Extract creator, tags and thumbnails
* Handle playback API call errors
+ [discoverynetworks] Add support for dplay.co.uk
* [vk] Improve extraction
+ Add support for Odnoklassniki embeds
+ Extract more videos from user lists (#4470)
+ Fix wall post audio extraction (#18332)
* Improve error detection (#22568)
+ [odnoklassniki] Add support for embeds
* [puhutv] Improve extraction
* Fix subtitles extraction
* Transform HLS URLs to HTTP URLs
* Improve metadata extraction
* [ceskatelevize] Skip DRM media
+ [facebook] Extract subtitles (#22777)
* [globo] Handle alternative hash signing method
version 2019.10.22
Core
* [utils] Improve subtitles_filename (#22753)
Extractors
* [facebook] Bypass download rate limits (#21018)
+ [contv] Add support for contv.com
- [viewster] Remove extractor
* [xfileshare] Improve extractor (#17032, #17906, #18237, #18239)
* Update the list of domains
+ Add support for aa-encoded video data
* Improve jwplayer format extraction
+ Add support for Clappr sources
* [mangomolo] Fix video format extraction and add support for player URLs
* [audioboom] Improve metadata extraction
* [twitch] Update VOD URL matching (#22395, #22727)
- [mit] Remove support for video.mit.edu (#22403)
- [servingsys] Remove extractor (#22639)
* [dumpert] Fix extraction (#22428, #22564)
* [atresplayer] Fix extraction (#16277, #16716)
version 2019.10.16
Core
* [extractor/common] Make _is_valid_url more relaxed
Extractors
* [vimeo] Improve album videos id extraction (#22599)
+ [globo] Extract subtitles (#22713)
* [bokecc] Improve player params extraction (#22638)
* [nexx] Handle result list (#22666)
* [vimeo] Fix VHX embed extraction
* [nbc] Switch to graphql API (#18581, #22693, #22701)
- [vessel] Remove extractor
- [promptfile] Remove extractor (#6239)
* [kaltura] Fix service URL extraction (#22658)
* [kaltura] Fix embed info strip (#22658)
* [globo] Fix format extraction (#20319)
* [redtube] Improve metadata extraction (#22492, #22615)
* [pornhub:uservideos:upload] Fix extraction (#22619)
+ [telequebec:squat] Add support for squat.telequebec.tv (#18503)
- [wimp] Remove extractor (#22088, #22091)
+ [gfycat] Extend URL regular expression (#22225)
+ [chaturbate] Extend URL regular expression (#22309)
* [peertube] Update instances (#22414)
+ [telequebec] Add support for coucou.telequebec.tv (#22482)
+ [xvideos] Extend URL regular expression (#22471)
- [youtube] Remove support for invidious.enkirton.net (#22543)
+ [openload] Add support for oload.monster (#22592)
* [nrktv:seriebase] Fix extraction (#22596)
+ [youtube] Add support for yt.lelux.fi (#22597)
* [orf:tvthek] Make manifest requests non fatal (#22578)
* [teachable] Skip login when already logged in (#22572)
* [viewlift] Improve extraction (#22545)
* [nonktube] Fix extraction (#22544)
version 2019.09.28
Core
* [YoutubeDL] Honour all --get-* options with --flat-playlist (#22493)
Extractors
* [vk] Fix extraction (#22522)
* [heise] Fix kaltura embeds extraction (#22514)
* [ted] Check for resources validity and extract subtitled downloads (#22513)
+ [youtube] Add support for
owxfohz4kjyv25fvlqilyxast7inivgiktls3th44jhk3ej3i7ya.b32.i2p (#22292)
+ [nhk] Add support for clips
* [nhk] Fix video extraction (#22249, #22353)
* [byutv] Fix extraction (#22070)
+ [openload] Add support for oload.online (#22304)
+ [youtube] Add support for invidious.drycat.fr (#22451)
* [jwplatfom] Do not match video URLs (#20596, #22148)
* [youtube:playlist] Unescape playlist uploader (#22483)
+ [bilibili] Add support audio albums and songs (#21094)
+ [instagram] Add support for tv URLs
+ [mixcloud] Allow uppercase letters in format URLs (#19280)
* [brightcove] Delegate all supported legacy URLs to new extractor (#11523,
#12842, #13912, #15669, #16303)
* [hotstar] Use native HLS downloader by default
+ [hotstar] Extract more formats (#22323)
* [9now] Fix extraction (#22361)
* [zdf] Bypass geo restriction
+ [tv4] Extract series metadata
* [tv4] Fix extraction (#22443)
version 2019.09.12.1
Extractors
* [youtube] Remove quality and tbr for itag 43 (#22372)
version 2019.09.12
Extractors
* [youtube] Quick extraction tempfix (#22367, #22163)
version 2019.09.01
Core
+ [extractor/generic] Add support for squarespace embeds (#21294, #21802,
#21859)
+ [downloader/external] Respect mtime option for aria2c (#22242)
Extractors
+ [xhamster:user] Add support for user pages (#16330, #18454)
+ [xhamster] Add support for more domains
+ [verystream] Add support for woof.tube (#22217)
+ [dailymotion] Add support for lequipe.fr (#21328, #22152)
+ [openload] Add support for oload.vip (#22205)
+ [bbccouk] Extend URL regular expression (#19200)
+ [youtube] Add support for invidious.nixnet.xyz and yt.elukerio.org (#22223)
* [safari] Fix authentication (#22161, #22184)
* [usanetwork] Fix extraction (#22105)
+ [einthusan] Add support for einthusan.ca (#22171)
* [youtube] Improve unavailable message extraction (#22117)
+ [piksel] Extract subtitles (#20506)
version 2019.08.13
Core
* [downloader/fragment] Fix ETA calculation of resumed download (#21992)
* [YoutubeDL] Check annotations availability (#18582)
Extractors
* [youtube:playlist] Improve flat extraction (#21927)
* [youtube] Fix annotations extraction (#22045)
+ [discovery] Extract series meta field (#21808)
* [youtube] Improve error detection (#16445)
* [vimeo] Fix album extraction (#1933, #15704, #15855, #18967, #21986)
+ [roosterteeth] Add support for watch URLs
* [discovery] Limit video data by show slug (#21980)
version 2019.08.02
Extractors
+ [tvigle] Add support for HLS and DASH formats (#21967)
* [tvigle] Fix extraction (#21967)
+ [yandexvideo] Add support for DASH formats (#21971)
* [discovery] Use API call for video data extraction (#21808)
+ [mgtv] Extract format_note (#21881)
* [tvn24] Fix metadata extraction (#21833, #21834)
* [dlive] Relax URL regular expression (#21909)
+ [openload] Add support for oload.best (#21913)
* [youtube] Improve metadata extraction for age gate content (#21943)
version 2019.07.30
Extractors
* [youtube] Fix and improve title and description extraction (#21934)
version 2019.07.27
Extractors
+ [yahoo:japannews] Add support for yahoo.co.jp (#21698, #21265)
+ [discovery] Add support go.discovery.com URLs
* [youtube:playlist] Relax video regular expression (#21844)
* [generic] Restrict --default-search schemeless URLs detection pattern
(#21842)
* [vrv] Fix CMS signing query extraction (#21809)
version 2019.07.16
Extractors
+ [asiancrush] Add support for yuyutv.com, midnightpulp.com and cocoro.tv
(#21281, #21290)
* [kaltura] Check source format URL (#21290)
* [ctsnews] Fix YouTube embeds extraction (#21678)
+ [einthusan] Add support for einthusan.com (#21748, #21775)
+ [youtube] Add support for invidious.mastodon.host (#21777)
+ [gfycat] Extend URL regular expression (#21779, #21780)
* [youtube] Restrict is_live extraction (#21782)
version 2019.07.14
Extractors
* [porn91] Fix extraction (#21312)
+ [yandexmusic] Extract track number and disk number (#21421)
+ [yandexmusic] Add support for multi disk albums (#21420, #21421)
* [lynda] Handle missing subtitles (#20490, #20513)
+ [youtube] Add more invidious instances to URL regular expression (#21694)
* [twitter] Improve uploader id extraction (#21705)
* [spankbang] Fix and improve metadata extraction
* [spankbang] Fix extraction (#21763, #21764)
+ [dlive] Add support for dlive.tv (#18080)
+ [livejournal] Add support for livejournal.com (#21526)
* [roosterteeth] Fix free episode extraction (#16094)
* [dbtv] Fix extraction
* [bellator] Fix extraction
- [rudo] Remove extractor (#18430, #18474)
* [facebook] Fallback to twitter:image meta for thumbnail extraction (#21224)
* [bleacherreport] Fix Bleacher Report CMS extraction
* [espn] Fix fivethirtyeight.com extraction
* [5tv] Relax video URL regular expression and support https URLs
* [youtube] Fix is_live extraction (#21734)
* [youtube] Fix authentication (#11270)
version 2019.07.12
Core
+ [adobepass] Add support for AT&T U-verse (mso ATT) (#13938, #21016)
Extractors
+ [mgtv] Pass Referer HTTP header for format URLs (#21726)
+ [beeg] Add support for api/v6 v2 URLs without t argument (#21701)
* [voxmedia:volume] Improvevox embed extraction (#16846)
* [funnyordie] Move extraction to VoxMedia extractor (#16846)
* [gameinformer] Fix extraction (#8895, #15363, #17206)
* [funk] Fix extraction (#17915)
* [packtpub] Relax lesson URL regular expression (#21695)
* [packtpub] Fix extraction (#21268)
* [philharmoniedeparis] Relax URL regular expression (#21672)
* [peertube] Detect embed URLs in generic extraction (#21666)
* [mixer:vod] Relax URL regular expression (#21657, #21658)
+ [lecturio] Add support id based URLs (#21630)
+ [go] Add site info for disneynow (#21613)
* [ted] Restrict info regular expression (#21631)
* [twitch:vod] Actualize m3u8 URL (#21538, #21607)
* [vzaar] Fix videos with empty title (#21606)
* [tvland] Fix extraction (#21384)
* [arte] Clean extractor (#15583, #21614)
version 2019.07.02
Core
+ [utils] Introduce random_user_agent and use as default User-Agent (#21546)
Extractors
+ [vevo] Add support for embed.vevo.com URLs (#21565)
+ [openload] Add support for oload.biz (#21574)
* [xiami] Update API base URL (#21575)
* [yourporn] Fix extraction (#21585)
+ [acast] Add support for URLs with episode id (#21444)
+ [dailymotion] Add support for DM.player embeds
* [soundcloud] Update client id
version 2019.06.27
Extractors
+ [go] Add support for disneynow.com (#21528)
* [mixer:vod] Relax URL regular expression (#21531, #21536)
* [drtv] Relax URL regular expression
* [fusion] Fix extraction (#17775, #21269)
- [nfb] Remove extractor (#21518)
+ [beeg] Add support for api/v6 v2 URLs (#21511)
+ [brightcove:new] Add support for playlists (#21331)
+ [openload] Add support for oload.life (#21495)
* [vimeo:channel,group] Make title extraction non fatal
* [vimeo:likes] Implement extrator in terms of channel extractor (#21493)
+ [pornhub] Add support for more paged video sources
+ [pornhub] Add support for downloading single pages and search pages (#15570)
* [pornhub] Rework extractors (#11922, #16078, #17454, #17936)
+ [youtube] Add another signature function pattern
* [tf1] Fix extraction (#21365, #21372)
* [crunchyroll] Move Accept-Language workaround to video extractor since
it causes playlists not to list any videos
* [crunchyroll:playlist] Fix and relax title extraction (#21291, #21443)
version 2019.06.21
Core
* [utils] Restrict parse_codecs and add theora as known vcodec (#21381)
Extractors
* [youtube] Update signature function patterns (#21469, #21476)
* [youtube] Make --write-annotations non fatal (#21452)
+ [sixplay] Add support for rtlmost.hu (#21405)
* [youtube] Hardcode codec metadata for av01 video only formats (#21381)
* [toutv] Update client key (#21370)
+ [biqle] Add support for new embed domain
* [cbs] Improve DRM protected videos detection (#21339)
version 2019.06.08
Core
* [downloader/common] Improve rate limit (#21301)
* [utils] Improve strip_or_none
* [extractor/common] Strip src attribute for HTML5 entries code (#18485,
#21169)
Extractors
* [ted] Fix playlist extraction (#20844, #21032)
* [vlive:playlist] Fix video extraction when no playlist is found (#20590)
+ [vlive] Add CH+ support (#16887, #21209)
+ [openload] Add support for oload.website (#21329)
+ [tvnow] Extract HD formats (#21201)
+ [redbulltv] Add support for rrn:content URLs (#21297)
* [youtube] Fix average rating extraction (#21304)
+ [bitchute] Extract HTML5 formats (#21306)
* [cbsnews] Fix extraction (#9659, #15397)
* [vvvvid] Relax URL regular expression (#21299)
+ [prosiebensat1] Add support for new API (#21272)
+ [vrv] Extract adaptive_hls formats (#21243)
* [viki] Switch to HTTPS (#21001)
* [LiveLeak] Check if the original videos exist (#21206, #21208)
* [rtp] Fix extraction (#15099)
* [youtube] Improve DRM protected videos detection (#1774)
+ [srgssrplay] Add support for popupvideoplayer URLs (#21155)
+ [24video] Add support for porno.24video.net (#21194)
+ [24video] Add support for 24video.site (#21193)
- [pornflip] Remove extractor
- [criterion] Remove extractor (#21195)
* [pornhub] Use HTTPS (#21061)
* [bitchute] Fix uploader extraction (#21076)
* [streamcloud] Reduce waiting time to 6 seconds (#21092)
- [novamov] Remove extractors (#21077)
+ [openload] Add support for oload.press (#21135)
* [vivo] Fix extraction (#18906, #19217)
version 2019.05.20
Core
+ [extractor/common] Move workaround for applying first Set-Cookie header
into a separate _apply_first_set_cookie_header method
Extractors
* [safari] Fix authentication (#21090)
* [vk] Use _apply_first_set_cookie_header
* [vrt] Fix extraction (#20527)
+ [canvas] Add support for vrtnieuws and sporza site ids and extract
AES HLS formats
+ [vrv] Extract captions (#19238)
* [tele5] Improve video id extraction
* [tele5] Relax URL regular expression (#21020, #21063)
* [svtplay] Update API URL (#21075)
+ [yahoo:gyao] Add X-User-Agent header to dam proxy requests (#21071)
version 2019.05.11
Core
* [utils] Transliterate "þ" as "th" (#20897)
Extractors
+ [cloudflarestream] Add support for videodelivery.net (#21049)
+ [byutv] Add support for DVR videos (#20574, #20676)
+ [gfycat] Add support for URLs with tags (#20696, #20731)
+ [openload] Add support for verystream.com (#20701, #20967)
* [youtube] Use sp field value for signature field name (#18841, #18927,
#21028)
+ [yahoo:gyao] Extend URL regular expression (#21008)
* [youtube] Fix channel id extraction (#20982, #21003)
+ [sky] Add support for news.sky.com (#13055)
+ [youtube:entrylistbase] Retry on 5xx HTTP errors (#20965)
+ [francetvinfo] Extend video id extraction (#20619, #20740)
* [4tube] Update token hosts (#20918)
* [hotstar] Move to API v2 (#20931)
* [fox] Fix API error handling under python 2 (#20925)
+ [redbulltv] Extend URL regular expression (#20922)
version 2019.04.30
Extractors
* [openload] Use real Chrome versions (#20902)
- [youtube] Remove info el for get_video_info request
* [youtube] Improve extraction robustness
- [dramafever] Remove extractor (#20868)
* [adn] Fix subtitle extraction (#12724)
+ [ccc] Extract creator (#20355)
+ [ccc:playlist] Add support for media.ccc.de playlists (#14601, #20355)
+ [sverigesradio] Add support for sverigesradio.se (#18635)
+ [cinemax] Add support for cinemax.com
* [sixplay] Try extracting non-DRM protected manifests (#20849)
+ [youtube] Extract Youtube Music Auto-generated metadata (#20599, #20742)
- [wrzuta] Remove extractor (#20684, #20801)
* [twitch] Prefer source format (#20850)
+ [twitcasting] Add support for private videos (#20843)
* [reddit] Validate thumbnail URL (#20030)
* [yandexmusic] Fix track URL extraction (#20820)
version 2019.04.24
Extractors
* [youtube] Fix extraction (#20758, #20759, #20761, #20762, #20764, #20766,
#20767, #20769, #20771, #20768, #20770)
* [toutv] Fix extraction and extract series info (#20757)
+ [vrv] Add support for movie listings (#19229)
+ [youtube] Print error when no data is available (#20737)
+ [soundcloud] Add support for new rendition and improve extraction (#20699)
+ [ooyala] Add support for geo verification proxy
+ [nrl] Add support for nrl.com (#15991)
+ [vimeo] Extract live archive source format (#19144)
+ [vimeo] Add support for live streams and improve info extraction (#19144)
+ [ntvcojp] Add support for cu.ntv.co.jp
+ [nhk] Extract RTMPT format
+ [nhk] Add support for audio URLs
+ [udemy] Add another course id extraction pattern (#20491)
+ [openload] Add support for oload.services (#20691)
+ [openload] Add support for openloed.co (#20691, #20693)
* [bravotv] Fix extraction (#19213)
version 2019.04.17
Extractors
* [openload] Randomize User-Agent (#20688)
+ [openload] Add support for oladblock domains (#20471)
* [adn] Fix subtitle extraction (#12724)
+ [aol] Add support for localized websites
+ [yahoo] Add support GYAO episode URLs
+ [yahoo] Add support for streaming.yahoo.co.jp (#5811, #7098)
+ [yahoo] Add support for gyao.yahoo.co.jp
* [aenetworks] Fix history topic extraction and extract more formats
+ [cbs] Extract smpte and vtt subtitles
+ [streamango] Add support for streamcherry.com (#20592)
+ [yourporn] Add support for sxyprn.com (#20646)
* [mgtv] Fix extraction (#20650)
* [linkedin:learning] Use urljoin for form action URL (#20431)
+ [gdc] Add support for kaltura embeds (#20575)
* [dispeak] Improve mp4 bitrate extraction
* [kaltura] Sanitize embed URLs
* [jwplatfom] Do not match manifest URLs (#20596)
* [aol] Restrict URL regular expression and improve format extraction
+ [tiktok] Add support for new URL schema (#20573)
+ [stv:player] Add support for player.stv.tv (#20586)
version 2019.04.07
Core
+ [downloader/external] Pass rtmp_conn to ffmpeg
Extractors
+ [ruutu] Add support for audio podcasts (#20473, #20545)
+ [xvideos] Extract all thumbnails (#20432)
+ [platzi] Add support for platzi.com (#20562)
* [dvtv] Fix extraction (#18514, #19174)
+ [vrv] Add basic support for individual movie links (#19229)
+ [bfi:player] Add support for player.bfi.org.uk (#19235)
* [hbo] Fix extraction and extract subtitles (#14629, #13709)
* [youtube] Extract srv[1-3] subtitle formats (#20566)
* [adultswim] Fix extraction (#18025)
* [teamcoco] Fix extraction and add support for subdomains (#17099, #20339)
* [adn] Fix subtitle compatibility with ffmpeg
* [adn] Fix extraction and add support for positioning styles (#20549)
* [vk] Use unique video id (#17848)
* [newstube] Fix extraction
* [rtl2] Actualize extraction
+ [adobeconnect] Add support for adobeconnect.com (#20283)
+ [gaia] Add support for authentication (#14605)
+ [mediasite] Add support for dashed ids and named catalogs (#20531)
version 2019.04.01
Core
* [utils] Improve int_or_none and float_or_none (#20403)
* Check for valid --min-sleep-interval when --max-sleep-interval is specified
(#20435)
Extractors
+ [weibo] Extend URL regular expression (#20496)
+ [xhamster] Add support for xhamster.one (#20508)
+ [mediasite] Add support for catalogs (#20507)
+ [teamtreehouse] Add support for teamtreehouse.com (#9836)
+ [ina] Add support for audio URLs
* [ina] Improve extraction
* [cwtv] Fix episode number extraction (#20461)
* [npo] Improve DRM detection
+ [pornhub] Add support for DASH formats (#20403)
* [svtplay] Update API endpoint (#20430)
version 2019.03.18
Core
* [extractor/common] Improve HTML5 entries extraction
+ [utils] Introduce parse_bitrate
* [update] Hide update URLs behind redirect
* [extractor/common] Fix url meta field for unfragmented DASH formats (#20346)
Extractors
+ [yandexvideo] Add extractor
* [openload] Improve embed detection
+ [corus] Add support for bigbrothercanada.ca (#20357)
+ [orf:radio] Extract series (#20012)
+ [cbc:watch] Add support for gem.cbc.ca (#20251, #20359)
- [anysex] Remove extractor (#19279)
+ [ciscolive] Add support for new URL schema (#20320, #20351)
+ [youtube] Add support for invidiou.sh (#20309)
- [anitube] Remove extractor (#20334)
- [ruleporn] Remove extractor (#15344, #20324)
* [npr] Fix extraction (#10793, #13440)
* [biqle] Fix extraction (#11471, #15313)
* [viddler] Modernize
* [moevideo] Fix extraction
* [primesharetv] Remove extractor
* [hypem] Modernize and extract more metadata (#15320)
* [veoh] Fix extraction
* [escapist] Modernize
- [videomega] Remove extractor (#10108)
+ [beeg] Add support for beeg.porn (#20306)
* [vimeo:review] Improve config url extraction and extract original format
(#20305)
* [fox] Detect geo restriction and authentication errors (#20208)
version 2019.03.09
Core
* [extractor/common] Use compat_etree_Element
+ [compat] Introduce compat_etree_Element
* [extractor/common] Fallback url to base URL for DASH formats
* [extractor/common] Do not fail on invalid data while parsing F4M manifest
in non fatal mode
* [extractor/common] Return MPD manifest as format's url meta field (#20242)
* [utils] Strip #HttpOnly_ prefix from cookies files (#20219)
Extractors
* [francetv:site] Relax video id regular expression (#20268)
* [toutv] Detect invalid login error
* [toutv] Fix authentication (#20261)
+ [urplay] Extract timestamp (#20235)
+ [openload] Add support for oload.space (#20246)
* [facebook] Improve uploader extraction (#20250)
* [bbc] Use compat_etree_Element
* [crunchyroll] Use compat_etree_Element
* [npo] Improve ISM extraction
* [rai] Improve extraction (#20253)
* [paramountnetwork] Fix mgid extraction (#20241)
* [libsyn] Improve extraction (#20229)
+ [youtube] Add more invidious instances to URL regular expression (#20228)
* [spankbang] Fix extraction (#20023)
* [espn] Extend URL regular expression (#20013)
* [sixplay] Handle videos with empty assets (#20016)
+ [vimeo] Add support for Vimeo Pro portfolio protected videos (#20070)
version 2019.03.01
Core
+ [downloader/external] Add support for rate limit and retries for wget
* [downloader/external] Fix infinite retries for curl (#19303)
Extractors
* [npo] Fix extraction (#20084)
* [francetv:site] Extend video id regex (#20029, #20071)
+ [periscope] Extract width and height (#20015)
* [servus] Fix extraction (#19297)
* [bbccouk] Make subtitles non fatal (#19651)
* [metacafe] Fix family filter bypass (#19287)
version 2019.02.18
Extractors
* [tvp:website] Fix and improve extraction
+ [tvp] Detect unavailable videos
* [tvp] Fix description extraction and make thumbnail optional
+ [linuxacademy] Add support for linuxacademy.com (#12207)
* [bilibili] Update keys (#19233)
* [udemy] Extend URL regular expressions (#14330, #15883)
* [udemy] Update User-Agent and detect captcha (#14713, #15839, #18126)
* [noovo] Fix extraction (#19230)
* [rai] Relax URL regular expression (#19232)
+ [vshare] Pass Referer to download request (#19205, #19221)
+ [openload] Add support for oload.live (#19222)
* [imgur] Use video id as title fallback (#18590)
+ [twitch] Add new source format detection approach (#19193)
* [tvplayhome] Fix video id extraction (#19190)
* [tvplayhome] Fix episode metadata extraction (#19190)
* [rutube:embed] Fix extraction (#19163)
+ [rutube:embed] Add support private videos (#19163)
+ [soundcloud] Extract more metadata
+ [trunews] Add support for trunews.com (#19153)
+ [linkedin:learning] Extract chapter_number and chapter_id (#19162)
version 2019.02.08
Core
* [utils] Improve JSON-LD regular expression (#18058)
* [YoutubeDL] Fallback to ie_key of matching extractor while making
download archive id when no explicit ie_key is provided (#19022)
Extractors
+ [malltv] Add support for mall.tv (#18058, #17856)
+ [spankbang:playlist] Add support for playlists (#19145)
* [spankbang] Extend URL regular expression
* [trutv] Fix extraction (#17336)
* [toutv] Fix authentication (#16398, #18700)
* [pornhub] Fix tags and categories extraction (#13720, #19135)
* [pornhd] Fix formats extraction
+ [pornhd] Extract like count (#19123, #19125)
* [radiocanada] Switch to the new media requests (#19115)
+ [teachable] Add support for courses.workitdaily.com (#18871)
- [vporn] Remove extractor (#16276)
+ [soundcloud:pagedplaylist] Add ie and title to entries (#19022, #19086)
+ [drtuber] Extract duration (#19078)
* [soundcloud] Fix paged playlists extraction, add support for albums and update client id
* [soundcloud] Update client id
* [drtv] Improve preference (#19079)
+ [openload] Add support for openload.pw and oload.pw (#18930)
+ [openload] Add support for oload.info (#19073)
* [crackle] Authorize media detail request (#16931)
version 2019.01.30.1
Core
* [postprocessor/ffmpeg] Fix avconv processing broken in #19025 (#19067)
version 2019.01.30
Core
* [postprocessor/ffmpeg] Do not copy Apple TV chapter tracks while embedding
subtitles (#19024, #19042)
* [postprocessor/ffmpeg] Disable "Last message repeated" messages (#19025)
Extractors
* [yourporn] Fix extraction and extract duration (#18815, #18852, #19061)
* [drtv] Improve extraction (#19039)
+ Add support for EncryptedUri videos
+ Extract more metadata
* Fix subtitles extraction
+ [fox] Add support for locked videos using cookies (#19060)
* [fox] Fix extraction for free videos (#19060)
+ [zattoo] Add support for tv.salt.ch (#19059)
version 2019.01.27
Core
+ [extractor/common] Extract season in _json_ld
* [postprocessor/ffmpeg] Fallback to ffmpeg/avconv for audio codec detection
(#681)
Extractors
* [vice] Fix extraction for locked videos (#16248)
+ [wakanim] Detect DRM protected videos
+ [wakanim] Add support for wakanim.tv (#14374)
* [usatoday] Fix extraction for videos with custom brightcove partner id
(#18990)
* [drtv] Fix extraction (#18989)
* [nhk] Extend URL regular expression (#18968)
* [go] Fix Adobe Pass requests for Disney Now (#18901)
+ [openload] Add support for oload.club (#18969)
version 2019.01.24
Core
* [YoutubeDL] Fix negation for string operators in format selection (#18961)
version 2019.01.23
Core
* [utils] Fix urljoin for paths with non-http(s) schemes
* [extractor/common] Improve jwplayer relative URL handling (#18892)
+ [YoutubeDL] Add negation support for string comparisons in format selection
expressions (#18600, #18805)
* [extractor/common] Improve HLS video-only format detection (#18923)
Extractors
* [crunchyroll] Extend URL regular expression (#18955)
* [pornhub] Bypass scrape detection (#4822, #5930, #7074, #10175, #12722,
#17197, #18338 #18842, #18899)
+ [vrv] Add support for authentication (#14307)
* [videomore:season] Fix extraction
* [videomore] Improve extraction (#18908)
+ [tnaflix] Pass Referer in metadata request (#18925)
* [radiocanada] Relax DRM check (#18608, #18609)
* [vimeo] Fix video password verification for videos protected by
Referer HTTP header
+ [hketv] Add support for hkedcity.net (#18696)
+ [streamango] Add support for fruithosts.net (#18710)
+ [instagram] Add support for tags (#18757)
+ [odnoklassniki] Detect paid videos (#18876)
* [ted] Correct acodec for HTTP formats (#18923)
* [cartoonnetwork] Fix extraction (#15664, #17224)
* [vimeo] Fix extraction for password protected player URLs (#18889)
version 2019.01.17
Extractors
* [youtube] Extend JS player signature function name regular expressions
(#18890, #18891, #18893)
version 2019.01.16
Core
+ [test/helper] Add support for maxcount and count collection len checkers
* [downloader/hls] Fix uplynk ad skipping (#18824)
* [postprocessor/ffmpeg] Improve ffmpeg version parsing (#18813)
Extractors
* [youtube] Skip unsupported adaptive stream type (#18804)
+ [youtube] Extract DASH formats from player response (#18804)
* [funimation] Fix extraction (#14089)
* [skylinewebcams] Fix extraction (#18853)
+ [curiositystream] Add support for non app URLs
+ [bitchute] Check formats (#18833)
* [wistia] Extend URL regular expression (#18823)
+ [playplustv] Add support for playplus.com (#18789)
version 2019.01.10
Core
* [extractor/common] Use episode name as title in _json_ld
+ [extractor/common] Add support for movies in _json_ld
* [postprocessor/ffmpeg] Embed subtitles with non-standard language codes
(#18765)
+ [utils] Add language codes replaced in 1989 revision of ISO 639
to ISO639Utils (#18765)
Extractors
* [youtube] Extract live HLS URL from player response (#18799)
+ [outsidetv] Add support for outsidetv.com (#18774)
* [jwplatform] Use JW Platform Delivery API V2 and add support for more URLs
+ [fox] Add support National Geographic (#17985, #15333, #14698)
+ [playplustv] Add support for playplus.tv (#18789)
* [globo] Set GLBID cookie manually (#17346)
+ [gaia] Add support for gaia.com (#14605)
* [youporn] Fix title and description extraction (#18748)
+ [hungama] Add support for hungama.com (#17402, #18771)
* [dtube] Fix extraction (#18741)
* [tvnow] Fix and rework extractors and prepare for a switch to the new API
(#17245, #18499)
* [carambatv:page] Fix extraction (#18739)
version 2019.01.02
Extractors
* [discovery] Use geo verification headers (#17838)
+ [packtpub] Add support for subscription.packtpub.com (#18718)
* [yourporn] Fix extraction (#18583)
+ [acast:channel] Add support for play.acast.com (#18587)
+ [extractors] Add missing age limits (#18621)
+ [rmcdecouverte] Add support for live stream
* [rmcdecouverte] Bypass geo restriction
* [rmcdecouverte] Update URL regular expression (#18595, 18697)
* [manyvids] Fix extraction (#18604, #18614)
* [bitchute] Fix extraction (#18567)
version 2018.12.31
Extractors
+ [bbc] Add support for another embed pattern (#18643)
+ [npo:live] Add support for npostart.nl (#18644)
* [beeg] Fix extraction (#18610, #18626)
* [youtube] Unescape HTML for series (#18641)
+ [youtube] Extract more format metadata
* [youtube] Detect DRM protected videos (#1774)
* [youtube] Relax HTML5 player regular expressions (#18465, #18466)
* [youtube] Extend HTML5 player regular expression (#17516)
+ [liveleak] Add support for another embed type and restore original
format extraction
+ [crackle] Extract ISM and HTTP formats
+ [twitter] Pass Referer with card request (#18579)
* [mediasite] Extend URL regular expression (#18558)
+ [lecturio] Add support for lecturio.de (#18562)
+ [discovery] Add support for Scripps Networks watch domains (#17947)
version 2018.12.17
Extractors
* [ard:beta] Improve geo restricted videos extraction
* [ard:beta] Fix subtitles extraction
* [ard:beta] Improve extraction robustness
* [ard:beta] Relax URL regular expression (#18441)
* [acast] Add support for embed.acast.com and play.acast.com (#18483)
* [iprima] Relax URL regular expression (#18515, #18540)
* [vrv] Fix initial state extraction (#18553)
* [youtube] Fix mark watched (#18546)
+ [safari] Add support for learning.oreilly.com (#18510)
* [youtube] Fix multifeed extraction (#18531)
* [lecturio] Improve subtitles extraction (#18488)
* [uol] Fix format URL extraction (#18480)
+ [ard:mediathek] Add support for classic.ardmediathek.de (#18473)
version 2018.12.09
Core
* [YoutubeDL] Keep session cookies in cookie file between runs
* [YoutubeDL] Recognize session cookies with expired set to 0 (#12929)
Extractors
+ [teachable] Add support for teachable platform sites (#5451, #18150, #18272)
+ [aenetworks] Add support for historyvault.com (#18460)
* [imgur] Improve gallery and album detection and extraction (#9133, #16577,
#17223, #18404)
* [iprima] Relax URL regular expression (#18453)
* [hotstar] Fix video data extraction (#18386)
* [ard:mediathek] Fix title and description extraction (#18349, #18371)
* [xvideos] Switch to HTTPS (#18422, #18427)
+ [lecturio] Add support for lecturio.com (#18405)
+ [nrktv:series] Add support for extra materials
* [nrktv:season,series] Fix extraction (#17159, #17258)
* [nrktv] Relax URL regular expression (#18304, #18387)
* [yourporn] Fix extraction (#18424, #18425)
* [tbs] Fix info extraction (#18403)
+ [gamespot] Add support for review URLs
version 2018.12.03
Core
* [utils] Fix random_birthday to generate existing dates only (#18284)
Extractors
+ [tiktok] Add support for tiktok.com (#18108, #18135)
* [pornhub] Use actual URL host for requests (#18359)
* [lynda] Fix authentication (#18158, #18217)
* [gfycat] Update API endpoint (#18333, #18343)
+ [hotstar] Add support for alternative app state layout (#18320)
* [azmedien] Fix extraction (#18334, #18336)
+ [vimeo] Add support for VHX (Vimeo OTT) (#14835)
* [joj] Fix extraction (#18280, #18281)
+ [wistia] Add support for fast.wistia.com (#18287)
version 2018.11.23
Core
+ [setup.py] Add more relevant classifiers
Extractors
* [mixcloud] Fallback to hardcoded decryption key (#18016)
* [nbc:news] Fix article extraction (#16194)
* [foxsports] Fix extraction (#17543)
* [loc] Relax regular expression and improve formats extraction
+ [ciscolive] Add support for ciscolive.cisco.com (#17984)
* [nzz] Relax kaltura regex (#18228)
* [sixplay] Fix formats extraction
* [bitchute] Improve title extraction
* [kaltura] Limit requested MediaEntry fields
+ [americastestkitchen] Add support for zype embeds (#18225)
+ [pornhub] Add pornhub.net alias
* [nova:embed] Fix extraction (#18222)
version 2018.11.18
Extractors
+ [wwe] Extract subtitles
+ [wwe] Add support for playlists (#14781)
+ [wwe] Add support for wwe.com (#14781, #17450)
* [vk] Detect geo restriction (#17767)
* [openload] Use original host during extraction (#18211)
* [atvat] Fix extraction (#18041)
+ [rte] Add support for new API endpoint (#18206)
* [tnaflixnetwork:embed] Fix extraction (#18205)
* [picarto] Use API and add token support (#16518)
+ [zype] Add support for player.zype.com (#18143)
* [vivo] Fix extraction (#18139)
* [ruutu] Update API endpoint (#18138)
version 2018.11.07
Extractors
+ [youtube] Add another JS signature function name regex (#18091, #18093,
#18094)
* [facebook] Fix tahoe request (#17171)
* [cliphunter] Fix extraction (#18083)
+ [youtube:playlist] Add support for invidio.us (#18077)
* [zattoo] Arrange API hosts for derived extractors (#18035)
+ [youtube] Add fallback metadata extraction from videoDetails (#18052)
version 2018.11.03
Core
* [extractor/common] Ensure response handle is not prematurely closed before
it can be read if it matches expected_status (#17195, #17846, #17447)
Extractors
* [laola1tv:embed] Set correct stream access URL scheme (#16341)
+ [ehftv] Add support for ehftv.com (#15408)
* [azmedien] Adopt to major site redesign (#17745, #17746)
+ [twitcasting] Add support for twitcasting.tv (#17981)
* [orf:tvthek] Fix extraction (#17737, #17956, #18024)
+ [openload] Add support for oload.fun (#18045)
* [njpwworld] Fix authentication (#17427)
+ [linkedin:learning] Add support for linkedin.com/learning (#13545)
* [theplatform] Improve error detection (#13222)
* [cnbc] Simplify extraction (#14280, #17110)
+ [cbnc] Add support for new URL schema (#14193)
* [aparat] Improve extraction and extract more metadata (#17445, #18008)
* [aparat] Fix extraction
version 2018.10.29
Core
+ [extractor/common] Add validation for JSON-LD URLs
Extractors
+ [sportbox] Add support for matchtv.ru
* [sportbox] Fix extraction (#17978)
* [screencast] Fix extraction (#14590, #14617, #17990)
+ [openload] Add support for oload.icu
+ [ivi] Add support for ivi.tv
* [crunchyroll] Improve extraction failsafeness (#17991)
* [dailymail] Fix formats extraction (#17976)
* [viewster] Reduce format requests
* [cwtv] Handle API errors (#17905)
+ [rutube] Use geo verification headers (#17897)
+ [brightcove:legacy] Add fallbacks to brightcove:new (#13912)
- [tv3] Remove extractor (#10461, #15339)
* [ted] Fix extraction for HTTP and RTMP formats (#5941, #17572, #17894)
+ [openload] Add support for oload.cc (#17823)
+ [patreon] Extract post_file URL (#17792)
* [patreon] Fix extraction (#14502, #10471)
version 2018.10.05
Extractors
* [pluralsight] Improve authentication (#17762)
* [dailymotion] Fix extraction (#17699)
* [crunchyroll] Switch to HTTPS for RpcApi (#17749)
+ [philharmoniedeparis] Add support for pad.philharmoniedeparis.fr (#17705)
* [philharmoniedeparis] Fix extraction (#17705)
+ [jamendo] Add support for licensing.jamendo.com (#17724)
+ [openload] Add support for oload.cloud (#17710)
* [pluralsight] Fix subtitles extraction (#17726, #17728)
+ [vimeo] Add another config regular expression (#17690)
* [spike] Fix Paramount Network extraction (#17677)
* [hotstar] Fix extraction (#14694, #14931, #17637)
version 2018.09.26
Extractors
* [pluralsight] Fix subtitles extraction (#17671)
* [mediaset] Improve embed support (#17668)
+ [youtube] Add support for invidio.us (#17613)
+ [zattoo] Add support for more zattoo platform sites
* [zattoo] Fix extraction (#17175, #17542)
version 2018.09.18
Core
+ [extractor/common] Introduce channel meta fields
Extractors
* [adobepass] Don't pollute default headers dict
* [udemy] Don't pollute default headers dict
* [twitch] Don't pollute default headers dict
* [youtube] Don't pollute default query dict (#17593)
* [crunchyroll] Prefer hardsubless formats and formats in locale language
* [vrv] Make format ids deterministic
* [vimeo] Fix ondemand playlist extraction (#14591)
+ [pornhub] Extract upload date (#17574)
+ [porntube] Extract channel meta fields
+ [vimeo] Extract channel meta fields
+ [youtube] Extract channel meta fields (#9676, #12939)
* [porntube] Fix extraction (#17541)
* [asiancrush] Fix extraction (#15630)
+ [twitch:clips] Extend URL regular expression (#17559)
+ [vzaar] Add support for HLS
* [tube8] Fix metadata extraction (#17520)
* [eporner] Extract JSON-LD (#17519)
version 2018.09.10
Core
+ [utils] Properly recognize AV1 codec (#17506)
Extractors
+ [iprima] Add support for prima.iprima.cz (#17514)
+ [tele5] Add support for tele5.de (#7805, #7922, #17331, #17414)
* [nbc] Fix extraction of percent encoded URLs (#17374)
version 2018.09.08
Extractors
* [youtube] Fix extraction (#17457, #17464)
+ [pornhub:uservideos] Add support for new URLs (#17388)
* [iprima] Confirm adult check (#17437)
* [slideslive] Make check for video service name case-insensitive (#17429)
* [radiojavan] Fix extraction (#17151)
* [generic] Skip unsuccessful jwplayer extraction (#16735)
version 2018.09.01
Core
* [utils] Skip remote IP addresses non matching to source address' IP version
when creating a connection (#13422, #17362)
Extractors
+ [ard] Add support for one.ard.de (#17397)
* [niconico] Fix extraction on python3 (#17393, #17407)
* [ard] Extract f4m formats
* [crunchyroll] Parse vilos media data (#17343)
+ [ard] Add support for Beta ARD Mediathek
+ [bandcamp] Extract more metadata (#13197)
* [internazionale] Fix extraction of non-available-abroad videos (#17386)
version 2018.08.28
Extractors
+ [youtube:playlist] Add support for music album playlists (OLAK5uy_ prefix)
(#17361)
* [bitchute] Fix extraction by pass custom User-Agent (#17360)
* [webofstories:playlist] Fix extraction (#16914)
+ [tvplayhome] Add support for new tvplay URLs (#17344)
+ [generic] Allow relative src for videojs embeds (#17324)
+ [xfileshare] Add support for vidto.se (#17317)
+ [vidzi] Add support for vidzi.nu (#17316)
+ [nova:embed] Add support for media.cms.nova.cz (#17282)
version 2018.08.22
Core
* [utils] Use pure browser header for User-Agent (#17236)
Extractors
+ [kinopoisk] Add support for kinopoisk.ru (#17283)
+ [yourporn] Add support for yourporn.sexy (#17298)
+ [go] Add support for disneynow.go.com (#16299, #17264)
+ [6play] Add support for play.rtl.hr (#17249)
* [anvato] Fallback to generic API key for access-key-to-API-key lookup
(#16788, #17254)
* [lci] Fix extraction (#17274)
* [bbccouk] Extend id URL regular expression (#17270)
* [cwtv] Fix extraction (#17256)
* [nova] Fix extraction (#17241)
+ [generic] Add support for expressen embeds
* [raywenderlich] Adapt to site redesign (#17225)
+ [redbulltv] Add support redbull.com tv URLs (#17218)
+ [bitchute] Add support for bitchute.com (#14052)
+ [clyp] Add support for token protected media (#17184)
* [imdb] Fix extension extraction (#17167)
version 2018.08.04
Extractors
* [funk:channel] Improve byChannelAlias extraction (#17142)
* [twitch] Fix authentication (#17024, #17126)
* [twitch:vod] Improve URL regular expression (#17135)
* [watchbox] Fix extraction (#17107)
* [pbs] Fix extraction (#17109)
* [theplatform] Relax URL regular expression (#16181, #17097)
+ [viqeo] Add support for viqeo.tv (#17066)
version 2018.07.29
Extractors
* [crunchyroll:playlist] Restrict URL regular expression (#17069, #17076)
+ [pornhub] Add support for subtitles (#16924, #17088)
* [ceskatelevize] Use https for API call (#16997, #16999)
* [dailymotion:playlist] Fix extraction (#16894)
* [ted] Improve extraction
* [ted] Fix extraction for videos without nativeDownloads (#16756, #17085)
* [telecinco] Fix extraction (#17080)
* [mitele] Reduce number of requests
* [rai] Return non HTTP relinker URL intact (#17055)
* [vk] Fix extraction for inline only videos (#16923)
* [streamcloud] Fix extraction (#17054)
* [facebook] Fix tahoe player extraction with authentication (#16655)
+ [puhutv] Add support for puhutv.com (#12712, #16010, #16269)
version 2018.07.21
Core
+ [utils] Introduce url_or_none
* [utils] Allow JSONP without function name (#17028)
+ [extractor/common] Extract DASH and MSS formats from SMIL manifests
Extractors
+ [bbc] Add support for BBC Radio Play pages (#17022)
* [iwara] Fix download URLs (#17026)
* [vrtnu] Relax title extraction and extract JSON-LD (#17018)
+ [viu] Pass Referer and Origin headers and area id (#16992)
+ [vimeo] Add another config regular expression (#17013)
+ [facebook] Extract view count (#16942)
* [dailymotion] Improve description extraction (#16984)
* [slutload] Fix and improve extraction (#17001)
* [mediaset] Fix extraction (#16977)
+ [theplatform] Add support for theplatform TLD customization (#16977)
* [imgur] Relax URL regular expression (#16987)
* [pornhub] Improve extraction and extract all formats (#12166, #15891, #16262,
#16959)
version 2018.07.10
Core
* [utils] Share JSON-LD regular expression
* [downloader/dash] Improve error handling (#16927)
Extractors
+ [nrktv] Add support for new season and serie URL schema
+ [nrktv] Add support for new episode URL schema (#16909)
+ [frontendmasters] Add support for frontendmasters.com (#3661, #16328)
* [funk] Fix extraction (#16918)
* [watchbox] Fix extraction (#16904)
* [dplayit] Sort formats
* [dplayit] Fix extraction (#16901)
* [youtube] Improve login error handling (#13822)
version 2018.07.04
Core
* [extractor/common] Properly escape % in MPD templates (#16867)
* [extractor/common] Use source URL as Referer for HTML5 entries (16849)
* Prefer ffmpeg over avconv by default (#8622)
Extractors
* [pluralsight] Switch to graphql (#16889, #16895, #16896, #16899)
* [lynda] Simplify login and improve error capturing (#16891)
+ [go90] Add support for embed URLs (#16873)
* [go90] Detect geo restriction error and pass geo verification headers
(#16874)
* [vlive] Fix live streams extraction (#16871)
* [npo] Fix typo (#16872)
+ [mediaset] Add support for new videos and extract all formats (#16568)
* [dctptv] Restore extraction based on REST API (#16850)
* [svt] Improve extraction and add support for pages (#16802)
* [porncom] Fix extraction (#16808)
version 2018.06.25
Extractors
* [joj] Relax URL regular expression (#16771)
* [brightcove] Workaround sonyliv DRM protected videos (#16807)
* [motherless] Fix extraction (#16786)
* [itv] Make SOAP request non fatal and extract metadata from webpage (#16780)
- [foxnews:insider] Remove extractor (#15810)
+ [foxnews] Add support for iframe embeds (#15810, #16711)
version 2018.06.19
Core
+ [extractor/common] Introduce expected_status in _download_* methods
for convenient accept of HTTP requests failed with non 2xx status codes
+ [compat] Introduce compat_integer_types
Extractors
* [peertube] Improve generic support (#16733)
+ [6play] Use geo verification headers
* [rtbf] Fix extraction for python 3.2
* [vgtv] Improve HLS formats extraction
+ [vgtv] Add support for www.aftonbladet.se/tv URLs
* [bbccouk] Use expected_status
* [markiza] Expect 500 HTTP status code
* [tvnow] Try all clear manifest URLs (#15361)
version 2018.06.18
Core
* [downloader/rtmp] Fix downloading in verbose mode (#16736)
Extractors
+ [markiza] Add support for markiza.sk (#16750)
* [wat] Try all supported adaptive URLs
+ [6play] Add support for rtlplay.be and extract hd usp formats
+ [rtbf] Add support for audio and live streams (#9638, #11923)
+ [rtbf] Extract HLS, DASH and all HTTP formats
+ [rtbf] Extract subtitles
+ [rtbf] Fixup specific HTTP URLs (#16101)
+ [expressen] Add support for expressen.se
* [vidzi] Fix extraction (#16678)
* [pbs] Improve extraction (#16623, #16684)
* [bilibili] Restrict cid regular expression (#16638, #16734)
version 2018.06.14
Core
* [downloader/http] Fix retry on error when streaming to stdout (#16699)
Extractors
+ [discoverynetworks] Add support for disco-api videos (#16724)
+ [dailymotion] Add support for password protected videos (#9789)
+ [abc:iview] Add support for livestreams (#12354)
* [abc:iview] Fix extraction (#16704)
+ [crackle] Add support for sonycrackle.com (#16698)
+ [tvnet] Add support for tvnet.gov.vn (#15462)
* [nrk] Update API hosts and try all previously known ones (#16690)
* [wimp] Fix Youtube embeds extraction
version 2018.06.11
Extractors
* [npo] Extend URL regular expression and add support for npostart.nl (#16682)
+ [inc] Add support for another embed schema (#16666)
* [tv4] Fix format extraction (#16650)
+ [nexx] Add support for free cdn (#16538)
+ [pbs] Add another cove id pattern (#15373)
+ [rbmaradio] Add support for 192k format (#16631)
version 2018.06.04
Extractors
+ [camtube] Add support for camtube.co
+ [twitter:card] Extract guest token (#16609)
+ [chaturbate] Use geo verification headers
+ [bbc] Add support for bbcthree (#16612)
* [youtube] Move metadata extraction after video availability check
+ [youtube] Extract track and artist
+ [safari] Add support for new URL schema (#16614)
* [adn] Fix extraction
version 2018.06.02
Core
* [utils] Improve determine_ext
Extractors
+ [facebook] Add support for tahoe player videos (#15441, #16554)
* [cbc] Improve extraction (#16583, #16593)
* [openload] Improve ext extraction (#16595)
+ [twitter:card] Add support for another endpoint (#16586)
+ [openload] Add support for oload.win and oload.download (#16592)
* [audimedia] Fix extraction (#15309)
+ [francetv] Add support for sport.francetvinfo.fr (#15645)
* [mlb] Improve extraction (#16587)
- [nhl] Remove old extractors
* [rbmaradio] Check formats availability (#16585)
version 2018.05.30
Core
* [downloader/rtmp] Generalize download messages and report time elapsed
on finish
* [downloader/rtmp] Gracefully handle live streams interrupted by user
Extractors
* [teamcoco] Fix extraction for full episodes (#16573)
* [spiegel] Fix info extraction (#16538)
+ [apa] Add support for apa.at (#15041, #15672)
+ [bellmedia] Add support for bnnbloomberg.ca (#16560)
+ [9c9media] Extract MPD formats and subtitles
* [cammodels] Use geo verification headers
+ [ufctv] Add support for authentication (#16542)
+ [cammodels] Add support for cammodels.com (#14499)
* [utils] Fix style id extraction for namespaced id attribute in dfxp2srt
(#16551)
* [soundcloud] Detect format extension (#16549)
* [cbc] Fix playlist title extraction (#16502)
+ [tumblr] Detect and report sensitive media (#13829)
+ [tumblr] Add support for authentication (#15133)
version 2018.05.26
Core
* [utils] Improve parse_age_limit
Extractors
* [audiomack] Stringify video id (#15310)
* [izlesene] Fix extraction (#16233, #16271, #16407)
+ [indavideo] Add support for generic embeds (#11989)
* [indavideo] Fix extraction (#11221)
* [indavideo] Sign download URLs (#16174)
+ [peertube] Add support for PeerTube based sites (#16301, #16329)
* [imgur] Fix extraction (#16537)
+ [hidive] Add support for authentication (#16534)
+ [nbc] Add support for stream.nbcsports.com (#13911)
+ [viewlift] Add support for hoichoi.tv (#16536)
* [go90] Extract age limit and detect DRM protection(#10127)
* [viewlift] fix extraction for snagfilms.com (#15766)
* [globo] Improve extraction (#4189)
* Add support for authentication
* Simplify URL signing
* Extract DASH and MSS formats
* [leeco] Fix extraction (#16464)
* [teamcoco] Add fallback for format extraction (#16484)
* [teamcoco] Improve URL regular expression (#16484)
* [imdb] Improve extraction (#4085, #14557)
version 2018.05.18
Extractors
* [vimeo:likes] Relax URL regular expression and fix single page likes
extraction (#16475)
* [pluralsight] Fix clip id extraction (#16460)
+ [mychannels] Add support for mychannels.com (#15334)
- [moniker] Remove extractor (#15336)
* [pbs] Fix embed data extraction (#16474)
+ [mtv] Add support for paramountnetwork.com and bellator.com (#15418)
* [youtube] Fix hd720 format position
* [dailymotion] Remove fragment part from m3u8 URLs (#8915)
* [3sat] Improve extraction (#15350)
* Extract all formats
* Extract more format metadata
* Improve format sorting
* Use hls native downloader
* Detect and bypass geo-restriction
+ [dtube] Add support for d.tube (#15201)
* [options] Fix typo (#16450)
* [youtube] Improve format filesize extraction (#16453)
* [youtube] Make uploader extraction non fatal (#16444)
* [youtube] Fix extraction for embed restricted live streams (#16433)
* [nbc] Improve info extraction (#16440)
* [twitch:clips] Fix extraction (#16429)
* [redditr] Relax URL regular expression (#16426, #16427)
* [mixcloud] Bypass throttling for HTTP formats (#12579, #16424)
+ [nick] Add support for nickjr.de (#13230)
* [teamcoco] Fix extraction (#16374)
version 2018.05.09
Core
* [YoutubeDL] Ensure ext exists for automatic captions
* Introduce --geo-bypass-ip-block
Extractors
+ [udemy] Extract asset captions
+ [udemy] Extract stream URLs (#16372)
+ [businessinsider] Add support for businessinsider.com (#16387, #16388, #16389)
+ [cloudflarestream] Add support for cloudflarestream.com (#16375)
* [watchbox] Fix extraction (#16356)
* [discovery] Extract Affiliate/Anonymous Auth Token from cookies (#14954)
+ [itv:btcc] Add support for itv.com/btcc (#16139)
* [tunein] Use live title for live streams (#16347)
* [itv] Improve extraction (#16253)
version 2018.05.01
Core
* [downloader/fragment] Restart download if .ytdl file is corrupt (#16312)
+ [extractor/common] Extract interaction statistic
+ [utils] Add merge_dicts
+ [extractor/common] Add _download_json_handle
Extractors
* [kaltura] Improve iframe embeds detection (#16337)
+ [udemy] Extract outputs renditions (#16289, #16291, #16320, #16321, #16334,
#16335)
+ [zattoo] Add support for zattoo.com and mobiltv.quickline.com (#14668, #14676)
* [yandexmusic] Convert release_year to int
* [udemy] Override _download_webpage_handle instead of _download_webpage
* [xiami] Override _download_webpage_handle instead of _download_webpage
* [yandexmusic] Override _download_webpage_handle instead of _download_webpage
* [youtube] Correctly disable polymer on all requests (#16323, #16326)
* [generic] Prefer enclosures over links in RSS feeds (#16189)
+ [redditr] Add support for old.reddit.com URLs (#16274)
* [nrktv] Update API host (#16324)
+ [imdb] Extract all formats (#16249)
+ [vimeo] Extract JSON-LD (#16295)
* [funk:channel] Improve extraction (#16285)
version 2018.04.25
Core
* [utils] Fix match_str for boolean meta fields
+ [Makefile] Add support for pandoc 2 and disable smart extension (#16251)
* [YoutubeDL] Fix typo in media extension compatibility checker (#16215)
Extractors
+ [openload] Recognize IPv6 stream URLs (#16136, #16137, #16205, #16246,
#16250)
+ [twitch] Extract is_live according to status (#16259)
* [pornflip] Relax URL regular expression (#16258)
- [etonline] Remove extractor (#16256)
* [breakcom] Fix extraction (#16254)
+ [youtube] Add ability to authenticate with cookies
* [youtube:feed] Implement lazy playlist extraction (#10184)
+ [svt] Add support for TV channel live streams (#15279, #15809)
* [ccma] Fix video extraction (#15931)
* [rentv] Fix extraction (#15227)
+ [nick] Add support for nickjr.nl (#16230)
* [extremetube] Fix metadata extraction
+ [keezmovies] Add support for generic embeds (#16134, #16154)
* [nexx] Extract new azure URLs (#16223)
* [cbssports] Fix extraction (#16217)
* [kaltura] Improve embeds detection (#16201)
* [instagram:user] Fix extraction (#16119)
* [cbs] Skip DRM asset types (#16104)
version 2018.04.16
Extractors
* [smotri:broadcast] Fix extraction (#16180)
+ [picarto] Add support for picarto.tv (#6205, #12514, #15276, #15551)
* [vine:user] Fix extraction (#15514, #16190)
* [pornhub] Relax URL regular expression (#16165)
* [cbc:watch] Re-acquire device token when expired (#16160)
+ [fxnetworks] Add support for https theplatform URLs (#16125, #16157)
+ [instagram:user] Add request signing (#16119)
+ [twitch] Add support for mobile URLs (#16146)
version 2018.04.09
Core
* [YoutubeDL] Do not save/restore console title while simulate (#16103)
* [extractor/common] Relax JSON-LD context check (#16006)
Extractors
+ [generic] Add support for tube8 embeds
+ [generic] Add support for share-videos.se embeds (#16089, #16115)
* [odnoklassniki] Extend URL regular expression (#16081)
* [steam] Bypass mature content check (#16113)
+ [acast] Extract more metadata
* [acast] Fix extraction (#16118)
* [instagram:user] Fix extraction (#16119)
* [drtuber] Fix title extraction (#16107, #16108)
* [liveleak] Extend URL regular expression (#16117)
+ [openload] Add support for oload.xyz
* [openload] Relax stream URL regular expression
* [openload] Fix extraction (#16099)
+ [svtplay:series] Add support for season URLs
+ [svtplay:series] Add support for series (#11130, #16059)
version 2018.04.03
Extractors
+ [tvnow] Add support for shows (#15837)
* [dramafever] Fix authentication (#16067)
* [afreecatv] Use partial view only when necessary (#14450)
+ [afreecatv] Add support for authentication (#14450)
+ [nationalgeographic] Add support for new URL schema (#16001, #16054)
* [xvideos] Fix thumbnail extraction (#15978, #15979)
* [medialaan] Fix vod id (#16038)
+ [openload] Add support for oload.site (#16039)
* [naver] Fix extraction (#16029)
* [dramafever] Partially switch to API v5 (#16026)
* [abc:iview] Unescape title and series meta fields (#15994)
* [videa] Extend URL regular expression (#16003)
version 2018.03.26.1
Core
+ [downloader/external] Add elapsed time to progress hook (#10876)
* [downloader/external,fragment] Fix download finalization when writing file
to stdout (#10809, #10876, #15799)
Extractors
* [vrv] Fix extraction on python2 (#15928)
* [afreecatv] Update referrer (#15947)
+ [24video] Add support for 24video.sexy (#15973)
* [crackle] Bypass geo restriction
* [crackle] Fix extraction (#15969)
+ [lenta] Add support for lenta.ru (#15953)
+ [instagram:user] Add pagination (#15934)
* [youku] Update ccode (#15939)
* [libsyn] Adapt to new page structure
version 2018.03.20
Core
* [extractor/common] Improve thumbnail extraction for HTML5 entries
* Generalize XML manifest processing code and improve XSPF parsing
+ [extractor/common] Add _download_xml_handle
+ [extractor/common] Add support for relative URIs in _parse_xspf (#15794)
Extractors
+ [7plus] Extract series metadata (#15862, #15906)
* [9now] Bypass geo restriction (#15920)
* [cbs] Skip unavailable assets (#13490, #13506, #15776)
+ [canalc2] Add support for HTML5 videos (#15916, #15919)
+ [ceskatelevize] Add support for iframe embeds (#15918)
+ [prosiebensat1] Add support for galileo.tv (#15894)
+ [generic] Add support for xfileshare embeds (#15879)
* [bilibili] Switch to v2 playurl API
* [bilibili] Fix and improve extraction (#15048, #15430, #15622, #15863)
* [heise] Improve extraction (#15496, #15784, #15026)
* [instagram] Fix user videos extraction (#15858)
version 2018.03.14
Extractors
* [soundcloud] Update client id (#15866)
+ [tennistv] Add support for tennistv.com
+ [line] Add support for tv.line.me (#9427)
* [xnxx] Fix extraction (#15817)
* [njpwworld] Fix authentication (#15815)
version 2018.03.10
Core
* [downloader/hls] Skip uplynk ad fragments (#15748)
Extractors
* [pornhub] Don't override session cookies (#15697)
+ [raywenderlich] Add support for videos.raywenderlich.com (#15251)
* [funk] Fix extraction and rework extractors (#15792)
* [nexx] Restore reverse engineered approach
+ [heise] Add support for kaltura embeds (#14961, #15728)
+ [tvnow] Extract series metadata (#15774)
* [ruutu] Continue formats extraction on NOT-USED URLs (#15775)
* [vrtnu] Use redirect URL for building video JSON URL (#15767, #15769)
* [vimeo] Modernize login code and improve error messaging
* [archiveorg] Fix extraction (#15770, #15772)
+ [hidive] Add support for hidive.com (#15494)
* [afreecatv] Detect deleted videos
* [afreecatv] Fix extraction (#15755)
* [vice] Fix extraction and rework extractors (#11101, #13019, #13622, #13778)
+ [vidzi] Add support for vidzi.si (#15751)
* [npo] Fix typo
version 2018.03.03
Core
+ [utils] Add parse_resolution
Revert respect --prefer-insecure while updating
Extractors
+ [yapfiles] Add support for yapfiles.ru (#15726, #11085)
* [spankbang] Fix formats extraction (#15727)
* [adn] Fix extraction (#15716)
+ [toggle] Extract DASH and ISM formats (#15721)
+ [nickelodeon] Add support for nickelodeon.com.tr (#15706)
* [npo] Validate and filter format URLs (#15709)
version 2018.02.26
Extractors
* [udemy] Use custom User-Agent (#15571)
version 2018.02.25
Core
* [postprocessor/embedthumbnail] Skip embedding when there aren't any
thumbnails (#12573)
* [extractor/common] Improve jwplayer subtitles extraction (#15695)
Extractors
+ [vidlii] Add support for vidlii.com (#14472, #14512, #14779)
+ [streamango] Capture and output error messages
* [streamango] Fix extraction (#14160, #14256)
+ [telequebec] Add support for emissions (#14649, #14655)
+ [telequebec:live] Add support for live streams (#15688)
+ [mailru:music] Add support for mail.ru/music (#15618)
* [aenetworks] Switch to akamai HLS formats (#15612)
* [ytsearch] Fix flat title extraction (#11260, #15681)
version 2018.02.22
Core
+ [utils] Fixup some common URL typos in sanitize_url (#15649)
* Respect --prefer-insecure while updating (#15497)
Extractors
* [vidio] Fix HLS URL extraction (#15675)
+ [nexx] Add support for arc.nexx.cloud URLs
* [nexx] Switch to arc API (#15652)
* [redtube] Fix duration extraction (#15659)
+ [sonyliv] Respect referrer (#15648)
+ [brightcove:new] Use referrer for formats' HTTP headers
+ [cbc] Add support for olympics.cbc.ca (#15535)
+ [fusion] Add support for fusion.tv (#15628)
* [npo] Improve quality metadata extraction
* [npo] Relax URL regular expression (#14987, #14994)
+ [npo] Capture and output error message
+ [pornhub] Add support for channels (#15613)
* [youtube] Handle shared URLs with generic extractor (#14303)
version 2018.02.11
Core
+ [YoutubeDL] Add support for filesize_approx in format selector (#15550)
Extractors
+ [francetv] Add support for live streams (#13689)
+ [francetv] Add support for zouzous.fr and ludo.fr (#10454, #13087, #13103,
#15012)
* [francetv] Separate main extractor and rework others to delegate to it
* [francetv] Improve manifest URL signing (#15536)
+ [francetv] Sign m3u8 manifest URLs (#15565)
+ [veoh] Add support for embed URLs (#15561)
* [afreecatv] Fix extraction (#15556)
* [periscope] Use accessVideoPublic endpoint (#15554)
* [discovery] Fix auth request (#15542)
+ [6play] Extract subtitles (#15541)
* [newgrounds] Fix metadata extraction (#15531)
+ [nbc] Add support for stream.nbcolympics.com (#10295)
* [dvtv] Fix live streams extraction (#15442)
version 2018.02.08
Extractors
+ [myvi] Extend URL regular expression
+ [myvi:embed] Add support for myvi.tv embeds (#15521)
+ [prosiebensat1] Extend URL regular expression (#15520)
* [pokemon] Relax URL regular expression and extend title extraction (#15518)
+ [gameinformer] Use geo verification headers
* [la7] Fix extraction (#15501, #15502)
* [gameinformer] Fix brightcove id extraction (#15416)
+ [afreecatv] Pass referrer to video info request (#15507)
+ [telebruxelles] Add support for live streams
* [telebruxelles] Relax URL regular expression
* [telebruxelles] Fix extraction (#15504)
* [extractor/common] Respect secure schemes in _extract_wowza_formats
version 2018.02.04
Core
* [downloader/http] Randomize HTTP chunk size
+ [downloader/http] Add ability to pass downloader options via info dict
* [downloader/http] Fix 302 infinite loops by not reusing requests
+ Document http_chunk_size
Extractors
+ [brightcove] Pass embed page URL as referrer (#15486)
+ [youtube] Enforce using chunked HTTP downloading for DASH formats
version 2018.02.03
Core
+ Introduce --http-chunk-size for chunk-based HTTP downloading
+ Add support for IronPython
* [downloader/ism] Fix Python 3.2 support
Extractors
* [redbulltv] Fix extraction (#15481)
* [redtube] Fix metadata extraction (#15472)
* [pladform] Respect platform id and extract HLS formats (#15468)
- [rtlnl] Remove progressive formats (#15459)
* [6play] Do no modify asset URLs with a token (#15248)
* [nationalgeographic] Relax URL regular expression
* [dplay] Relax URL regular expression (#15458)
* [cbsinteractive] Fix data extraction (#15451)
+ [amcnetworks] Add support for sundancetv.com (#9260)
version 2018.01.27
Core
* [extractor/common] Improve _json_ld for articles
* Switch codebase to use compat_b64decode
+ [compat] Add compat_b64decode
Extractors
+ [seznamzpravy] Add support for seznam.cz and seznamzpravy.cz (#14102, #14616)
* [dplay] Bypass geo restriction
+ [dplay] Add support for disco-api videos (#15396)
* [youtube] Extract precise error messages (#15284)
* [teachertube] Capture and output error message
* [teachertube] Fix and relax thumbnail extraction (#15403)
+ [prosiebensat1] Add another clip id regular expression (#15378)
* [tbs] Update tokenizer url (#15395)
* [mixcloud] Use compat_b64decode (#15394)
- [thesixtyone] Remove extractor (#15341)
version 2018.01.21
Core
* [extractor/common] Improve jwplayer DASH formats extraction (#9242, #15187)
* [utils] Improve scientific notation handling in js_to_json (#14789)
Extractors
+ [southparkdk] Add support for southparkstudios.nu
+ [southpark] Add support for collections (#14803)
* [franceinter] Fix upload date extraction (#14996)
+ [rtvs] Add support for rtvs.sk (#9242, #15187)
* [restudy] Fix extraction and extend URL regular expression (#15347)
* [youtube:live] Improve live detection (#15365)
+ [springboardplatform] Add support for springboardplatform.com
* [prosiebensat1] Add another clip id regular expression (#15290)
- [ringtv] Remove extractor (#15345)
version 2018.01.18
Extractors
* [soundcloud] Update client id (#15306)
- [kamcord] Remove extractor (#15322)
+ [spiegel] Add support for nexx videos (#15285)
* [twitch] Fix authentication and error capture (#14090, #15264)
* [vk] Detect more errors due to copyright complaints (#15259)
version 2018.01.14
Extractors
* [youtube] Fix live streams extraction (#15202)
* [wdr] Bypass geo restriction
* [wdr] Rework extractors (#14598)
+ [wdr] Add support for wdrmaus.de/elefantenseite (#14598)
+ [gamestar] Add support for gamepro.de (#3384)
* [viafree] Skip rtmp formats (#15232)
+ [pandoratv] Add support for mobile URLs (#12441)
+ [pandoratv] Add support for new URL format (#15131)
+ [ximalaya] Add support for ximalaya.com (#14687)
+ [digg] Add support for digg.com (#15214)
* [limelight] Tolerate empty pc formats (#15150, #15151, #15207)
* [ndr:embed:base] Make separate formats extraction non fatal (#15203)
+ [weibo] Add extractor (#15079)
+ [ok] Add support for live streams
* [canalplus] Fix extraction (#15072)
* [bilibili] Fix extraction (#15188)
version 2018.01.07
Core
* [utils] Fix youtube-dl under PyPy3 on Windows
* [YoutubeDL] Output python implementation in debug header
Extractors
+ [jwplatform] Add support for multiple embeds (#15192)
* [mitele] Fix extraction (#15186)
+ [motherless] Add support for groups (#15124)
* [lynda] Relax URL regular expression (#15185)
* [soundcloud] Fallback to avatar picture for thumbnail (#12878)
* [youku] Fix list extraction (#15135)
* [openload] Fix extraction (#15166)
* [lynda] Skip invalid subtitles (#15159)
* [twitch] Pass video id to url_result when extracting playlist (#15139)
* [rtve.es:alacarta] Fix extraction of some new URLs
* [acast] Fix extraction (#15147)
version 2017.12.31
Core
+ [extractor/common] Add container meta field for formats extracted
in _parse_mpd_formats (#13616)
+ [downloader/hls] Use HTTP headers for key request
* [common] Use AACL as the default fourcc when AudioTag is 255
* [extractor/common] Fix extraction of DASH formats with the same
representation id (#15111)
Extractors
+ [slutload] Add support for mobile URLs (#14806)
* [abc:iview] Bypass geo restriction
* [abc:iview] Fix extraction (#14711, #14782, #14838, #14917, #14963, #14985,
#15035, #15057, #15061, #15071, #15095, #15106)
* [openload] Fix extraction (#15118)
- [sandia] Remove extractor
- [collegerama] Remove extractor
+ [mediasite] Add support for sites based on Mediasite Video Platform (#5428,
#11185, #14343)
+ [ufctv] Add support for ufc.tv (#14520)
* [pluralsight] Fix missing first line of subtitles (#11118)
* [openload] Fallback on f-page extraction (#14665, #14879)
* [vimeo] Improve password protected videos extraction (#15114)
* [aws] Fix canonical/signed headers generation on python 2 (#15102)
version 2017.12.28
Extractors
+ [internazionale] Add support for internazionale.it (#14973)
* [playtvak] Relax video regular expression and make description optional
(#15037)
+ [filmweb] Add support for filmweb.no (#8773, #10368)
+ [23video] Add support for 23video.com
+ [espn] Add support for fivethirtyeight.com (#6864)
+ [umg:de] Add support for universal-music.de (#11582, #11584)
+ [espn] Add support for espnfc and extract more formats (#8053)
* [youku] Update ccode (#14880)
+ [openload] Add support for oload.stream (#15070)
* [youku] Fix list extraction (#15065)
version 2017.12.23
Core
* [extractor/common] Move X-Forwarded-For setup code into _request_webpage
+ [YoutubeDL] Add support for playlist_uploader and playlist_uploader_id in
output template (#11427, #15018)
+ [extractor/common] Introduce uploader, uploader_id and uploader_url
meta fields for playlists (#11427, #15018)
* [downloader/fragment] Encode filename of fragment being removed (#15020)
+ [utils] Add another date format pattern (#14999)
Extractors
+ [kaltura] Add another embed pattern for entry_id
+ [7plus] Add support for 7plus.com.au (#15043)
* [animeondemand] Relax login error regular expression
+ [shahid] Add support for show pages (#7401)
+ [youtube] Extract uploader, uploader_id and uploader_url for playlists
(#11427, #15018)
* [afreecatv] Improve format extraction (#15019)
+ [cspan] Add support for audio only pages and catch page errors (#14995)
+ [mailru] Add support for embed URLs (#14904)
* [crunchyroll] Future-proof XML element checks (#15013)
* [cbslocal] Fix timestamp extraction (#14999, #15000)
* [discoverygo] Correct TTML subtitle extension
* [vk] Make view count optional (#14979)
* [disney] Skip Apple FairPlay formats (#14982)
* [voot] Fix format extraction (#14758)
version 2017.12.14
Core
* [postprocessor/xattr] Clarify NO_SPACE message (#14970)
* [downloader/http] Return actual download result from real_download (#14971)
Extractors
+ [itv] Extract more subtitles and duration
* [itv] Improve extraction (#14944)
+ [byutv] Add support for geo restricted videos
* [byutv] Fix extraction (#14966, #14967)
+ [bbccouk] Fix extraction for 320k HLS streams
+ [toutv] Add support for special video URLs (#14179)
* [discovery] Fix free videos extraction (#14157, #14954)
* [tvnow] Fix extraction (#7831)
+ [nickelodeon:br] Add support for nickelodeon brazil websites (#14893)
* [nick] Improve extraction (#14876)
* [tbs] Fix extraction (#13658)
version 2017.12.10
Core
+ [utils] Add sami mimetype to mimetype2ext
Extractors
* [culturebox] Improve video id extraction (#14947)
* [twitter] Improve extraction (#14197)
+ [udemy] Extract more HLS formats
* [udemy] Improve course id extraction (#14938)
+ [stretchinternet] Add support for portal.stretchinternet.com (#14576)
* [ellentube] Fix extraction (#14407, #14570)
+ [raiplay:playlist] Add support for playlists (#14563)
* [sonyliv] Bypass geo restriction
* [sonyliv] Extract higher quality formats (#14922)
* [fox] Extract subtitles
+ [fox] Add support for Adobe Pass authentication (#14205, #14489)
- [dailymotion:cloud] Remove extractor (#6794)
* [xhamster] Fix thumbnail extraction (#14780)
+ [xhamster] Add support for mobile URLs (#14780)
* [generic] Don't pass video id as mpd id while extracting DASH (#14902)
* [ard] Skip invalid stream URLs (#14906)
* [porncom] Fix metadata extraction (#14911)
* [pluralsight] Detect agreement request (#14913)
* [toutv] Fix login (#14614)
version 2017.12.02
Core
+ [downloader/fragment] Commit part file after each fragment
+ [extractor/common] Add durations for DASH fragments with bare SegmentURLs
+ [extractor/common] Add support for DASH manifests with SegmentLists with
bare SegmentURLs (#14844)
+ [utils] Add hvc1 codec code to parse_codecs
Extractors
* [xhamster] Fix extraction (#14884)
* [youku] Update ccode (#14872)
* [mnet] Fix format extraction (#14883)
+ [xiami] Add Referer header to API request
* [mtv] Correct scc extension in extracted subtitles (#13730)
* [vvvvid] Fix extraction for kenc videos (#13406)
+ [br] Add support for BR Mediathek videos (#14560, #14788)
+ [daisuki] Add support for motto.daisuki.com (#14681)
* [odnoklassniki] Fix API metadata request (#14862)
* [itv] Fix HLS formats extraction
+ [pbs] Add another media id regular expression
version 2017.11.26
Core
* [extractor/common] Use final URL when dumping request (#14769)
Extractors
* [fczenit] Fix extraction
- [firstpost] Remove extractor
* [freespeech] Fix extraction
* [nexx] Extract more formats
+ [openload] Add support for openload.link (#14763)
* [empflix] Relax URL regular expression
* [empflix] Fix extraction
* [tnaflix] Don't modify download URLs (#14811)
- [gamersyde] Remove extractor
* [francetv:generationwhat] Fix extraction
+ [massengeschmacktv] Add support for Massengeschmack TV
* [fox9] Fix extraction
* [faz] Fix extraction and add support for Perform Group embeds (#14714)
+ [performgroup] Add support for performgroup.com
+ [jwplatform] Add support for iframes (#14828)
* [culturebox] Fix extraction (#14827)
* [youku] Fix extraction; update ccode (#14815)
* [livestream] Make SMIL extraction non fatal (#14792)
+ [drtuber] Add support for mobile URLs (#14772)
+ [spankbang] Add support for mobile URLs (#14771)
* [instagram] Fix description, timestamp and counters extraction (#14755)
version 2017.11.15
Core
* [common] Skip Apple FairPlay m3u8 manifests (#14741)
* [YoutubeDL] Fix playlist range optimization for --playlist-items (#14740)
Extractors
* [vshare] Capture and output error message
* [vshare] Fix extraction (#14473)
* [crunchyroll] Extract old RTMP formats
* [tva] Fix extraction (#14736)
* [gamespot] Lower preference of HTTP formats (#14652)
* [instagram:user] Fix extraction (#14699)
* [ccma] Fix typo (#14730)
- Remove sensitive data from logging in messages
* [instagram:user] Fix extraction (#14699)
+ [gamespot] Add support for article URLs (#14652)
* [gamespot] Skip Brightcove Once HTTP formats (#14652)
* [cartoonnetwork] Update tokenizer_src (#14666)
+ [wsj] Recognize another URL pattern (#14704)
* [pandatv] Update API URL and sign format URLs (#14693)
* [crunchyroll] Use old login method (#11572)
version 2017.11.06
Core
+ [extractor/common] Add protocol for f4m formats
* [f4m] Prefer baseURL for relative URLs (#14660)
* [extractor/common] Respect URL query in _extract_wowza_formats (14645)
Extractors
+ [hotstar:playlist] Add support for playlists (#12465)
* [hotstar] Bypass geo restriction (#14672)
- [22tracks] Remove extractor (#11024, #14628)
+ [skysport] Sdd support ooyala videos protected with embed_token (#14641)
* [gamespot] Extract formats referenced with new data fields (#14652)
* [spankbang] Detect unavailable videos (#14644)
version 2017.10.29
Core
* [extractor/common] Prefix format id for audio only HLS formats
+ [utils] Add support for zero years and months in parse_duration
Extractors
* [egghead] Fix extraction (#14388)
+ [fxnetworks] Extract series metadata (#14603)
+ [younow] Add support for younow.com (#9255, #9432, #12436)
* [dctptv] Fix extraction (#14599)
* [
gitextract_gmvmbzf8/
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── 1_broken_site.md
│ │ ├── 2_site_support_request.md
│ │ ├── 3_site_feature_request.md
│ │ ├── 4_bug_report.md
│ │ ├── 5_feature_request.md
│ │ ├── 6_question.md
│ │ └── config.yml
│ ├── ISSUE_TEMPLATE_tmpl/
│ │ ├── 1_broken_site.md
│ │ ├── 2_site_support_request.md
│ │ ├── 3_site_feature_request.md
│ │ ├── 4_bug_report.md
│ │ └── 5_feature_request.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ └── workflows/
│ └── ci.yml
├── .gitignore
├── AUTHORS
├── CONTRIBUTING.md
├── ChangeLog
├── LICENSE
├── MANIFEST.in
├── Makefile
├── README.md
├── devscripts/
│ ├── SizeOfImage.patch
│ ├── SizeOfImage_w.patch
│ ├── __init__.py
│ ├── bash-completion.in
│ ├── bash-completion.py
│ ├── buildserver.py
│ ├── check-porn.py
│ ├── cli_to_api.py
│ ├── create-github-release.py
│ ├── fish-completion.in
│ ├── fish-completion.py
│ ├── generate_aes_testdata.py
│ ├── gh-pages/
│ │ ├── add-version.py
│ │ ├── generate-download.py
│ │ ├── sign-versions.py
│ │ ├── update-copyright.py
│ │ ├── update-feed.py
│ │ └── update-sites.py
│ ├── lazy_load_template.py
│ ├── make_contributing.py
│ ├── make_issue_template.py
│ ├── make_lazy_extractors.py
│ ├── make_readme.py
│ ├── make_supportedsites.py
│ ├── posix-locale.sh
│ ├── prepare_manpage.py
│ ├── release.sh
│ ├── run_tests.bat
│ ├── run_tests.sh
│ ├── show-downloads-statistics.py
│ ├── utils.py
│ ├── wine-py2exe.sh
│ ├── zsh-completion.in
│ └── zsh-completion.py
├── docs/
│ ├── .gitignore
│ ├── Makefile
│ ├── conf.py
│ ├── index.rst
│ ├── module_guide.rst
│ └── supportedsites.md
├── setup.cfg
├── setup.py
├── test/
│ ├── __init__.py
│ ├── helper.py
│ ├── parameters.json
│ ├── swftests/
│ │ ├── .gitignore
│ │ ├── ArrayAccess.as
│ │ ├── ClassCall.as
│ │ ├── ClassConstruction.as
│ │ ├── ConstArrayAccess.as
│ │ ├── ConstantInt.as
│ │ ├── DictCall.as
│ │ ├── EqualsOperator.as
│ │ ├── LocalVars.as
│ │ ├── MemberAssignment.as
│ │ ├── NeOperator.as
│ │ ├── PrivateCall.as
│ │ ├── PrivateVoidCall.as
│ │ ├── StaticAssignment.as
│ │ ├── StaticRetrieval.as
│ │ ├── StringBasics.as
│ │ ├── StringCharCodeAt.as
│ │ └── StringConversion.as
│ ├── test_InfoExtractor.py
│ ├── test_YoutubeDL.py
│ ├── test_YoutubeDLCookieJar.py
│ ├── test_aes.py
│ ├── test_age_restriction.py
│ ├── test_all_urls.py
│ ├── test_cache.py
│ ├── test_compat.py
│ ├── test_download.py
│ ├── test_downloader_external.py
│ ├── test_downloader_http.py
│ ├── test_execution.py
│ ├── test_http.py
│ ├── test_iqiyi_sdk_interpreter.py
│ ├── test_jsinterp.py
│ ├── test_netrc.py
│ ├── test_options.py
│ ├── test_postprocessors.py
│ ├── test_socks.py
│ ├── test_subtitles.py
│ ├── test_swfinterp.py
│ ├── test_traversal.py
│ ├── test_unicode_literals.py
│ ├── test_update.py
│ ├── test_utils.py
│ ├── test_verbose_output.py
│ ├── test_write_annotations.py
│ ├── test_youtube_lists.py
│ ├── test_youtube_misc.py
│ ├── test_youtube_signature.py
│ ├── testcert.pem
│ ├── testdata/
│ │ ├── cookies/
│ │ │ ├── httponly_cookies.txt
│ │ │ ├── malformed_cookies.txt
│ │ │ └── session_cookies.txt
│ │ ├── f4m/
│ │ │ └── custom_base_url.f4m
│ │ ├── m3u8/
│ │ │ ├── pluzz_francetv_11507.m3u8
│ │ │ ├── teamcoco_11995.m3u8
│ │ │ ├── ted_18923.m3u8
│ │ │ ├── toggle_mobile_12211.m3u8
│ │ │ ├── twitch_vod.m3u8
│ │ │ └── vidio.m3u8
│ │ ├── mpd/
│ │ │ ├── float_duration.mpd
│ │ │ ├── range_only.mpd
│ │ │ ├── subtitles.mpd
│ │ │ ├── unfragmented.mpd
│ │ │ ├── url_and_range.mpd
│ │ │ └── urls_only.mpd
│ │ └── xspf/
│ │ └── foo_xspf.xspf
│ └── versions.json
├── tox.ini
├── youtube-dl.plugin.zsh
└── youtube_dl/
├── YoutubeDL.py
├── __init__.py
├── __main__.py
├── aes.py
├── cache.py
├── casefold.py
├── compat.py
├── downloader/
│ ├── __init__.py
│ ├── common.py
│ ├── dash.py
│ ├── external.py
│ ├── f4m.py
│ ├── fragment.py
│ ├── hls.py
│ ├── http.py
│ ├── ism.py
│ ├── niconico.py
│ ├── rtmp.py
│ └── rtsp.py
├── extractor/
│ ├── __init__.py
│ ├── abc.py
│ ├── abcnews.py
│ ├── abcotvs.py
│ ├── academicearth.py
│ ├── acast.py
│ ├── adn.py
│ ├── adobeconnect.py
│ ├── adobepass.py
│ ├── adobetv.py
│ ├── adultswim.py
│ ├── aenetworks.py
│ ├── afreecatv.py
│ ├── airmozilla.py
│ ├── aliexpress.py
│ ├── aljazeera.py
│ ├── allocine.py
│ ├── alphaporno.py
│ ├── alsace20tv.py
│ ├── amara.py
│ ├── amcnetworks.py
│ ├── americastestkitchen.py
│ ├── amp.py
│ ├── animeondemand.py
│ ├── anvato.py
│ ├── aol.py
│ ├── apa.py
│ ├── aparat.py
│ ├── appleconnect.py
│ ├── applepodcasts.py
│ ├── appletrailers.py
│ ├── archiveorg.py
│ ├── arcpublishing.py
│ ├── ard.py
│ ├── arkena.py
│ ├── arnes.py
│ ├── arte.py
│ ├── asiancrush.py
│ ├── atresplayer.py
│ ├── atttechchannel.py
│ ├── atvat.py
│ ├── audimedia.py
│ ├── audioboom.py
│ ├── audiomack.py
│ ├── awaan.py
│ ├── aws.py
│ ├── azmedien.py
│ ├── baidu.py
│ ├── bandaichannel.py
│ ├── bandcamp.py
│ ├── bbc.py
│ ├── beatport.py
│ ├── beeg.py
│ ├── behindkink.py
│ ├── bellmedia.py
│ ├── bet.py
│ ├── bfi.py
│ ├── bfmtv.py
│ ├── bibeltv.py
│ ├── bigflix.py
│ ├── bigo.py
│ ├── bild.py
│ ├── bilibili.py
│ ├── biobiochiletv.py
│ ├── biqle.py
│ ├── bitchute.py
│ ├── bleacherreport.py
│ ├── blerp.py
│ ├── bloomberg.py
│ ├── bokecc.py
│ ├── bongacams.py
│ ├── bostonglobe.py
│ ├── box.py
│ ├── bpb.py
│ ├── br.py
│ ├── bravotv.py
│ ├── breakcom.py
│ ├── brightcove.py
│ ├── businessinsider.py
│ ├── buzzfeed.py
│ ├── byutv.py
│ ├── c56.py
│ ├── caffeine.py
│ ├── callin.py
│ ├── camdemy.py
│ ├── cammodels.py
│ ├── camtube.py
│ ├── camwithher.py
│ ├── canalc2.py
│ ├── canalplus.py
│ ├── canvas.py
│ ├── carambatv.py
│ ├── cartoonnetwork.py
│ ├── cbc.py
│ ├── cbs.py
│ ├── cbsinteractive.py
│ ├── cbslocal.py
│ ├── cbsnews.py
│ ├── cbssports.py
│ ├── ccc.py
│ ├── ccma.py
│ ├── cctv.py
│ ├── cda.py
│ ├── ceskatelevize.py
│ ├── channel9.py
│ ├── charlierose.py
│ ├── chaturbate.py
│ ├── chilloutzone.py
│ ├── chirbit.py
│ ├── cinchcast.py
│ ├── cinemax.py
│ ├── ciscolive.py
│ ├── cjsw.py
│ ├── clipchamp.py
│ ├── cliphunter.py
│ ├── clippit.py
│ ├── cliprs.py
│ ├── clipsyndicate.py
│ ├── closertotruth.py
│ ├── cloudflarestream.py
│ ├── cloudy.py
│ ├── clubic.py
│ ├── clyp.py
│ ├── cmt.py
│ ├── cnbc.py
│ ├── cnn.py
│ ├── comedycentral.py
│ ├── common.py
│ ├── commonmistakes.py
│ ├── commonprotocols.py
│ ├── condenast.py
│ ├── contv.py
│ ├── corus.py
│ ├── coub.py
│ ├── cpac.py
│ ├── cracked.py
│ ├── crackle.py
│ ├── crooksandliars.py
│ ├── crunchyroll.py
│ ├── cspan.py
│ ├── ctsnews.py
│ ├── ctv.py
│ ├── ctvnews.py
│ ├── cultureunplugged.py
│ ├── curiositystream.py
│ ├── cwtv.py
│ ├── dailymail.py
│ ├── dailymotion.py
│ ├── daum.py
│ ├── dbtv.py
│ ├── dctp.py
│ ├── deezer.py
│ ├── defense.py
│ ├── democracynow.py
│ ├── dfb.py
│ ├── dhm.py
│ ├── digg.py
│ ├── digiteka.py
│ ├── discovery.py
│ ├── discoverygo.py
│ ├── discoverynetworks.py
│ ├── discoveryvr.py
│ ├── disney.py
│ ├── dispeak.py
│ ├── dlf.py
│ ├── dlive.py
│ ├── dotsub.py
│ ├── douyutv.py
│ ├── dplay.py
│ ├── drbonanza.py
│ ├── dreisat.py
│ ├── dropbox.py
│ ├── drtuber.py
│ ├── drtv.py
│ ├── dtube.py
│ ├── dumpert.py
│ ├── dvtv.py
│ ├── dw.py
│ ├── eagleplatform.py
│ ├── ebaumsworld.py
│ ├── echomsk.py
│ ├── egghead.py
│ ├── ehow.py
│ ├── eighttracks.py
│ ├── einthusan.py
│ ├── eitb.py
│ ├── ellentube.py
│ ├── elpais.py
│ ├── embedly.py
│ ├── engadget.py
│ ├── epidemicsound.py
│ ├── eporner.py
│ ├── eroprofile.py
│ ├── escapist.py
│ ├── espn.py
│ ├── esri.py
│ ├── europa.py
│ ├── expotv.py
│ ├── expressen.py
│ ├── extractors.py
│ ├── extremetube.py
│ ├── eyedotv.py
│ ├── facebook.py
│ ├── faz.py
│ ├── fc2.py
│ ├── fczenit.py
│ ├── fifa.py
│ ├── filmon.py
│ ├── filmweb.py
│ ├── firsttv.py
│ ├── fivemin.py
│ ├── fivetv.py
│ ├── flickr.py
│ ├── folketinget.py
│ ├── footyroom.py
│ ├── formula1.py
│ ├── fourtube.py
│ ├── fox.py
│ ├── fox9.py
│ ├── foxgay.py
│ ├── foxnews.py
│ ├── foxsports.py
│ ├── franceculture.py
│ ├── franceinter.py
│ ├── francetv.py
│ ├── freesound.py
│ ├── freespeech.py
│ ├── freshlive.py
│ ├── frontendmasters.py
│ ├── fujitv.py
│ ├── funimation.py
│ ├── funk.py
│ ├── fusion.py
│ ├── gaia.py
│ ├── gameinformer.py
│ ├── gamespot.py
│ ├── gamestar.py
│ ├── gaskrank.py
│ ├── gazeta.py
│ ├── gbnews.py
│ ├── gdcvault.py
│ ├── gedidigital.py
│ ├── generic.py
│ ├── gfycat.py
│ ├── giantbomb.py
│ ├── giga.py
│ ├── gigya.py
│ ├── glide.py
│ ├── globalplayer.py
│ ├── globo.py
│ ├── go.py
│ ├── godtube.py
│ ├── golem.py
│ ├── googledrive.py
│ ├── googlepodcasts.py
│ ├── googlesearch.py
│ ├── goshgay.py
│ ├── gputechconf.py
│ ├── groupon.py
│ ├── hbo.py
│ ├── hearthisat.py
│ ├── heise.py
│ ├── hellporno.py
│ ├── helsinki.py
│ ├── hentaistigma.py
│ ├── hgtv.py
│ ├── hidive.py
│ ├── historicfilms.py
│ ├── hitbox.py
│ ├── hitrecord.py
│ ├── hketv.py
│ ├── hornbunny.py
│ ├── hotnewhiphop.py
│ ├── hotstar.py
│ ├── howcast.py
│ ├── howstuffworks.py
│ ├── hrfernsehen.py
│ ├── hrti.py
│ ├── huajiao.py
│ ├── huffpost.py
│ ├── hungama.py
│ ├── hypem.py
│ ├── ign.py
│ ├── iheart.py
│ ├── imdb.py
│ ├── imggaming.py
│ ├── imgur.py
│ ├── ina.py
│ ├── inc.py
│ ├── indavideo.py
│ ├── infoq.py
│ ├── instagram.py
│ ├── internazionale.py
│ ├── internetvideoarchive.py
│ ├── iprima.py
│ ├── iqiyi.py
│ ├── ir90tv.py
│ ├── itv.py
│ ├── ivi.py
│ ├── ivideon.py
│ ├── iwara.py
│ ├── izlesene.py
│ ├── jamendo.py
│ ├── jeuxvideo.py
│ ├── joj.py
│ ├── jove.py
│ ├── jwplatform.py
│ ├── kakao.py
│ ├── kaltura.py
│ ├── kankan.py
│ ├── karaoketv.py
│ ├── karrierevideos.py
│ ├── keezmovies.py
│ ├── ketnet.py
│ ├── khanacademy.py
│ ├── kickstarter.py
│ ├── kinja.py
│ ├── kinopoisk.py
│ ├── kommunetv.py
│ ├── konserthusetplay.py
│ ├── krasview.py
│ ├── kth.py
│ ├── ku6.py
│ ├── kusi.py
│ ├── kuwo.py
│ ├── la7.py
│ ├── laola1tv.py
│ ├── lbry.py
│ ├── lci.py
│ ├── lcp.py
│ ├── lecture2go.py
│ ├── lecturio.py
│ ├── leeco.py
│ ├── lego.py
│ ├── lemonde.py
│ ├── lenta.py
│ ├── libraryofcongress.py
│ ├── libsyn.py
│ ├── lifenews.py
│ ├── limelight.py
│ ├── line.py
│ ├── linkedin.py
│ ├── linuxacademy.py
│ ├── litv.py
│ ├── livejournal.py
│ ├── livestream.py
│ ├── lnkgo.py
│ ├── localnews8.py
│ ├── lovehomeporn.py
│ ├── lrt.py
│ ├── lynda.py
│ ├── m6.py
│ ├── mailru.py
│ ├── malltv.py
│ ├── mangomolo.py
│ ├── manyvids.py
│ ├── maoritv.py
│ ├── markiza.py
│ ├── massengeschmacktv.py
│ ├── matchtv.py
│ ├── mdr.py
│ ├── medaltv.py
│ ├── medialaan.py
│ ├── mediaset.py
│ ├── mediasite.py
│ ├── medici.py
│ ├── megaphone.py
│ ├── meipai.py
│ ├── melonvod.py
│ ├── meta.py
│ ├── metacafe.py
│ ├── metacritic.py
│ ├── mgoon.py
│ ├── mgtv.py
│ ├── miaopai.py
│ ├── microsoftvirtualacademy.py
│ ├── minds.py
│ ├── ministrygrid.py
│ ├── minoto.py
│ ├── miomio.py
│ ├── mit.py
│ ├── mitele.py
│ ├── mixcloud.py
│ ├── mlb.py
│ ├── mnet.py
│ ├── moevideo.py
│ ├── mofosex.py
│ ├── mojvideo.py
│ ├── morningstar.py
│ ├── motherless.py
│ ├── motorsport.py
│ ├── movieclips.py
│ ├── moviezine.py
│ ├── movingimage.py
│ ├── msn.py
│ ├── mtv.py
│ ├── muenchentv.py
│ ├── mwave.py
│ ├── mychannels.py
│ ├── myspace.py
│ ├── myspass.py
│ ├── myvi.py
│ ├── myvideoge.py
│ ├── myvidster.py
│ ├── nationalgeographic.py
│ ├── naver.py
│ ├── nba.py
│ ├── nbc.py
│ ├── ndr.py
│ ├── ndtv.py
│ ├── nerdcubed.py
│ ├── neteasemusic.py
│ ├── netzkino.py
│ ├── newgrounds.py
│ ├── newstube.py
│ ├── nextmedia.py
│ ├── nexx.py
│ ├── nfl.py
│ ├── nhk.py
│ ├── nhl.py
│ ├── nick.py
│ ├── niconico.py
│ ├── ninecninemedia.py
│ ├── ninegag.py
│ ├── ninenow.py
│ ├── nintendo.py
│ ├── njpwworld.py
│ ├── nobelprize.py
│ ├── nonktube.py
│ ├── noovo.py
│ ├── normalboots.py
│ ├── nosvideo.py
│ ├── nova.py
│ ├── nowness.py
│ ├── noz.py
│ ├── npo.py
│ ├── npr.py
│ ├── nrk.py
│ ├── nrl.py
│ ├── ntvcojp.py
│ ├── ntvde.py
│ ├── ntvru.py
│ ├── nuevo.py
│ ├── nuvid.py
│ ├── nytimes.py
│ ├── nzz.py
│ ├── odatv.py
│ ├── odnoklassniki.py
│ ├── oktoberfesttv.py
│ ├── once.py
│ ├── ondemandkorea.py
│ ├── onet.py
│ ├── onionstudios.py
│ ├── ooyala.py
│ ├── openload.py
│ ├── ora.py
│ ├── orf.py
│ ├── outsidetv.py
│ ├── packtpub.py
│ ├── palcomp3.py
│ ├── pandoratv.py
│ ├── parliamentliveuk.py
│ ├── patreon.py
│ ├── pbs.py
│ ├── pearvideo.py
│ ├── peekvids.py
│ ├── peertube.py
│ ├── people.py
│ ├── performgroup.py
│ ├── periscope.py
│ ├── philharmoniedeparis.py
│ ├── phoenix.py
│ ├── photobucket.py
│ ├── picarto.py
│ ├── piksel.py
│ ├── pinkbike.py
│ ├── pinterest.py
│ ├── pladform.py
│ ├── platzi.py
│ ├── playfm.py
│ ├── playplustv.py
│ ├── plays.py
│ ├── playstuff.py
│ ├── playtvak.py
│ ├── playvid.py
│ ├── playwire.py
│ ├── pluralsight.py
│ ├── podomatic.py
│ ├── pokemon.py
│ ├── polskieradio.py
│ ├── popcorntimes.py
│ ├── popcorntv.py
│ ├── porn91.py
│ ├── porncom.py
│ ├── pornhd.py
│ ├── pornhub.py
│ ├── pornotube.py
│ ├── pornovoisines.py
│ ├── pornoxo.py
│ ├── pr0gramm.py
│ ├── presstv.py
│ ├── prosiebensat1.py
│ ├── puhutv.py
│ ├── puls4.py
│ ├── pyvideo.py
│ ├── qqmusic.py
│ ├── r7.py
│ ├── radiobremen.py
│ ├── radiocanada.py
│ ├── radiode.py
│ ├── radiofrance.py
│ ├── radiojavan.py
│ ├── rai.py
│ ├── raywenderlich.py
│ ├── rbgtum.py
│ ├── rbmaradio.py
│ ├── rds.py
│ ├── redbulltv.py
│ ├── reddit.py
│ ├── redtube.py
│ ├── regiotv.py
│ ├── rentv.py
│ ├── restudy.py
│ ├── reuters.py
│ ├── reverbnation.py
│ ├── rice.py
│ ├── rmcdecouverte.py
│ ├── ro220.py
│ ├── rockstargames.py
│ ├── roosterteeth.py
│ ├── rottentomatoes.py
│ ├── roxwel.py
│ ├── rozhlas.py
│ ├── rtbf.py
│ ├── rte.py
│ ├── rtl2.py
│ ├── rtlnl.py
│ ├── rtp.py
│ ├── rts.py
│ ├── rtve.py
│ ├── rtvnh.py
│ ├── rtvs.py
│ ├── ruhd.py
│ ├── rumble.py
│ ├── rutube.py
│ ├── rutv.py
│ ├── ruutu.py
│ ├── ruv.py
│ ├── s4c.py
│ ├── safari.py
│ ├── samplefocus.py
│ ├── sapo.py
│ ├── savefrom.py
│ ├── sbs.py
│ ├── screencast.py
│ ├── screencastomatic.py
│ ├── scrippsnetworks.py
│ ├── scte.py
│ ├── seeker.py
│ ├── senateisvp.py
│ ├── sendtonews.py
│ ├── servus.py
│ ├── sevenplus.py
│ ├── sexu.py
│ ├── seznamzpravy.py
│ ├── shahid.py
│ ├── shared.py
│ ├── showroomlive.py
│ ├── simplecast.py
│ ├── sina.py
│ ├── sixplay.py
│ ├── sky.py
│ ├── skyit.py
│ ├── skylinewebcams.py
│ ├── skynewsarabia.py
│ ├── slideshare.py
│ ├── slideslive.py
│ ├── slutload.py
│ ├── snotr.py
│ ├── sohu.py
│ ├── sonyliv.py
│ ├── soundcloud.py
│ ├── soundgasm.py
│ ├── southpark.py
│ ├── spankbang.py
│ ├── spankwire.py
│ ├── spiegel.py
│ ├── spike.py
│ ├── sport5.py
│ ├── sportbox.py
│ ├── sportdeutschland.py
│ ├── spotify.py
│ ├── spreaker.py
│ ├── springboardplatform.py
│ ├── sprout.py
│ ├── srgssr.py
│ ├── srmediathek.py
│ ├── stanfordoc.py
│ ├── steam.py
│ ├── stitcher.py
│ ├── storyfire.py
│ ├── streamable.py
│ ├── streamcloud.py
│ ├── streamcz.py
│ ├── streamsb.py
│ ├── streetvoice.py
│ ├── stretchinternet.py
│ ├── stv.py
│ ├── sunporno.py
│ ├── sverigesradio.py
│ ├── svt.py
│ ├── swrmediathek.py
│ ├── syfy.py
│ ├── sztvhu.py
│ ├── tagesschau.py
│ ├── tass.py
│ ├── tbs.py
│ ├── tdslifeway.py
│ ├── teachable.py
│ ├── teachertube.py
│ ├── teachingchannel.py
│ ├── teamcoco.py
│ ├── teamtreehouse.py
│ ├── techtalks.py
│ ├── ted.py
│ ├── tele13.py
│ ├── tele5.py
│ ├── telebruxelles.py
│ ├── telecinco.py
│ ├── telegraaf.py
│ ├── telemb.py
│ ├── telequebec.py
│ ├── teletask.py
│ ├── telewebion.py
│ ├── tennistv.py
│ ├── tenplay.py
│ ├── testurl.py
│ ├── tf1.py
│ ├── tfo.py
│ ├── theintercept.py
│ ├── theplatform.py
│ ├── thescene.py
│ ├── thestar.py
│ ├── thesun.py
│ ├── theweatherchannel.py
│ ├── thisamericanlife.py
│ ├── thisav.py
│ ├── thisoldhouse.py
│ ├── thisvid.py
│ ├── threeqsdn.py
│ ├── tiktok.py
│ ├── tinypic.py
│ ├── tmz.py
│ ├── tnaflix.py
│ ├── toggle.py
│ ├── tonline.py
│ ├── toongoggles.py
│ ├── toutv.py
│ ├── toypics.py
│ ├── traileraddict.py
│ ├── trilulilu.py
│ ├── trovo.py
│ ├── trunews.py
│ ├── trutv.py
│ ├── tube8.py
│ ├── tubitv.py
│ ├── tudou.py
│ ├── tumblr.py
│ ├── tunein.py
│ ├── tunepk.py
│ ├── turbo.py
│ ├── turner.py
│ ├── tv2.py
│ ├── tv2dk.py
│ ├── tv2hu.py
│ ├── tv4.py
│ ├── tv5mondeplus.py
│ ├── tv5unis.py
│ ├── tva.py
│ ├── tvanouvelles.py
│ ├── tvc.py
│ ├── tver.py
│ ├── tvigle.py
│ ├── tvland.py
│ ├── tvn24.py
│ ├── tvnet.py
│ ├── tvnoe.py
│ ├── tvnow.py
│ ├── tvp.py
│ ├── tvplay.py
│ ├── tvplayer.py
│ ├── tweakers.py
│ ├── twentyfourvideo.py
│ ├── twentymin.py
│ ├── twentythreevideo.py
│ ├── twitcasting.py
│ ├── twitch.py
│ ├── twitter.py
│ ├── udemy.py
│ ├── udn.py
│ ├── ufctv.py
│ ├── uktvplay.py
│ ├── umg.py
│ ├── unistra.py
│ ├── unity.py
│ ├── uol.py
│ ├── uplynk.py
│ ├── urort.py
│ ├── urplay.py
│ ├── usanetwork.py
│ ├── usatoday.py
│ ├── ustream.py
│ ├── ustudio.py
│ ├── varzesh3.py
│ ├── vbox7.py
│ ├── veehd.py
│ ├── veoh.py
│ ├── vesti.py
│ ├── vevo.py
│ ├── vgtv.py
│ ├── vh1.py
│ ├── vice.py
│ ├── vidbit.py
│ ├── viddler.py
│ ├── videa.py
│ ├── videodetective.py
│ ├── videofyme.py
│ ├── videomore.py
│ ├── videopress.py
│ ├── vidio.py
│ ├── vidlii.py
│ ├── vidme.py
│ ├── vier.py
│ ├── viewlift.py
│ ├── viidea.py
│ ├── viki.py
│ ├── vimeo.py
│ ├── vimple.py
│ ├── vine.py
│ ├── viqeo.py
│ ├── viu.py
│ ├── vk.py
│ ├── vlive.py
│ ├── vodlocker.py
│ ├── vodpl.py
│ ├── vodplatform.py
│ ├── voicerepublic.py
│ ├── voot.py
│ ├── voxmedia.py
│ ├── vrak.py
│ ├── vrt.py
│ ├── vrv.py
│ ├── vshare.py
│ ├── vtm.py
│ ├── vube.py
│ ├── vuclip.py
│ ├── vvvvid.py
│ ├── vyborymos.py
│ ├── vzaar.py
│ ├── wakanim.py
│ ├── walla.py
│ ├── washingtonpost.py
│ ├── wat.py
│ ├── watchbox.py
│ ├── watchindianporn.py
│ ├── wdr.py
│ ├── webcaster.py
│ ├── webofstories.py
│ ├── weibo.py
│ ├── weiqitv.py
│ ├── whyp.py
│ ├── wistia.py
│ ├── worldstarhiphop.py
│ ├── wsj.py
│ ├── wwe.py
│ ├── xbef.py
│ ├── xboxclips.py
│ ├── xfileshare.py
│ ├── xhamster.py
│ ├── xiami.py
│ ├── ximalaya.py
│ ├── xminus.py
│ ├── xnxx.py
│ ├── xstream.py
│ ├── xtube.py
│ ├── xuite.py
│ ├── xvideos.py
│ ├── xxxymovies.py
│ ├── yahoo.py
│ ├── yandexdisk.py
│ ├── yandexmusic.py
│ ├── yandexvideo.py
│ ├── yapfiles.py
│ ├── yesjapan.py
│ ├── yinyuetai.py
│ ├── ynet.py
│ ├── youjizz.py
│ ├── youku.py
│ ├── younow.py
│ ├── youporn.py
│ ├── yourporn.py
│ ├── yourupload.py
│ ├── youtube.py
│ ├── zapiks.py
│ ├── zattoo.py
│ ├── zdf.py
│ ├── zhihu.py
│ ├── zingmp3.py
│ ├── zoom.py
│ └── zype.py
├── jsinterp.py
├── options.py
├── postprocessor/
│ ├── __init__.py
│ ├── common.py
│ ├── embedthumbnail.py
│ ├── execafterdownload.py
│ ├── ffmpeg.py
│ ├── metadatafromtitle.py
│ └── xattrpp.py
├── socks.py
├── swfinterp.py
├── traversal.py
├── update.py
├── utils.py
└── version.py
Showing preview only (417K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (5249 symbols across 888 files)
FILE: devscripts/bash-completion.py
function build_completion (line 19) | def build_completion(opt_parser):
FILE: devscripts/buildserver.py
class BuildHTTPServer (line 35) | class BuildHTTPServer(compat_socketserver.ThreadingMixIn, compat_http_se...
class SERVICE_TABLE_ENTRY (line 57) | class SERVICE_TABLE_ENTRY(ctypes.Structure):
function _ctypes_array (line 73) | def _ctypes_array(c_type, py_array):
function win_OpenSCManager (line 79) | def win_OpenSCManager():
function win_install_service (line 87) | def win_install_service(service_name, cmdline):
function win_uninstall_service (line 103) | def win_uninstall_service(service_name):
function win_service_report_event (line 120) | def win_service_report_event(service_name, msg, is_error=True):
function win_service_handler (line 141) | def win_service_handler(stop_event, *args):
function win_service_set_status (line 152) | def win_service_set_status(handle, status_code):
function win_service_main (line 164) | def win_service_main(service_name, real_main, argc, argv_raw):
function win_service_start (line 182) | def win_service_start(service_name, real_main):
function main (line 203) | def main(args=None):
function rmtree (line 245) | def rmtree(path):
class BuildError (line 256) | class BuildError(Exception):
method __init__ (line 257) | def __init__(self, output, code=500):
method __str__ (line 261) | def __str__(self):
class HTTPError (line 265) | class HTTPError(BuildError):
class PythonBuilder (line 269) | class PythonBuilder(object):
method __init__ (line 270) | def __init__(self, **kwargs):
class GITInfoBuilder (line 294) | class GITInfoBuilder(object):
method __init__ (line 295) | def __init__(self, **kwargs):
class GITBuilder (line 313) | class GITBuilder(GITInfoBuilder):
method build (line 314) | def build(self):
class YoutubeDLBuilder (line 324) | class YoutubeDLBuilder(object):
method __init__ (line 327) | def __init__(self, **kwargs):
method build (line 335) | def build(self):
class DownloadBuilder (line 347) | class DownloadBuilder(object):
method __init__ (line 348) | def __init__(self, **kwargs):
method build (line 357) | def build(self):
class CleanupTempDir (line 375) | class CleanupTempDir(object):
method build (line 376) | def build(self):
class Null (line 385) | class Null(object):
method __init__ (line 386) | def __init__(self, **kwargs):
method start (line 389) | def start(self):
method close (line 392) | def close(self):
method build (line 395) | def build(self):
class Builder (line 399) | class Builder(PythonBuilder, GITBuilder, YoutubeDLBuilder, DownloadBuild...
class BuildHTTPRequestHandler (line 403) | class BuildHTTPRequestHandler(compat_http_server.BaseHTTPRequestHandler):
method do_GET (line 406) | def do_GET(self):
FILE: devscripts/cli_to_api.py
function cli_to_api (line 24) | def cli_to_api(*opts):
function main (line 66) | def main():
FILE: devscripts/create-github-release.py
class GitHubReleaser (line 29) | class GitHubReleaser(object):
method __init__ (line 34) | def __init__(self, debuglevel=0):
method _init_github_account (line 39) | def _init_github_account(self):
method _call (line 53) | def _call(self, req):
method list_releases (line 60) | def list_releases(self):
method create_release (line 63) | def create_release(self, tag_name, name=None, body='', draft=False, pr...
method create_asset (line 75) | def create_asset(self, release_id, asset):
function main (line 86) | def main():
FILE: devscripts/fish-completion.py
function build_completion (line 30) | def build_completion(opt_parser):
FILE: devscripts/generate_aes_testdata.py
function hex_str (line 16) | def hex_str(int_list):
function openssl_encode (line 20) | def openssl_encode(algo, key, iv):
FILE: devscripts/gh-pages/update-sites.py
function main (line 17) | def main():
FILE: devscripts/lazy_load_template.py
class LazyLoadExtractor (line 7) | class LazyLoadExtractor(object):
method ie_key (line 11) | def ie_key(cls):
method __new__ (line 14) | def __new__(cls, *args, **kwargs):
FILE: devscripts/make_contributing.py
function main (line 10) | def main():
FILE: devscripts/make_issue_template.py
function main (line 11) | def main():
FILE: devscripts/make_lazy_extractors.py
function get_source (line 35) | def get_source(m):
function get_base_name (line 61) | def get_base_name(base):
function build_lazy_ie (line 70) | def build_lazy_ie(ie, name):
FILE: devscripts/make_supportedsites.py
function main (line 18) | def main():
FILE: devscripts/prepare_manpage.py
function main (line 24) | def main():
function filter_options (line 43) | def filter_options(readme):
FILE: devscripts/show-downloads-statistics.py
function format_size (line 19) | def format_size(bytes):
FILE: devscripts/utils.py
function read_file (line 20) | def read_file(fname):
function write_file (line 25) | def write_file(fname, content, mode='w'):
function read_version (line 30) | def read_version(fname='youtube_dl/version.py'):
function get_filename_args (line 36) | def get_filename_args(has_infile=False, default_outfile=None):
function compose_functions (line 50) | def compose_functions(*functions):
function run_process (line 54) | def run_process(*args, **kwargs):
FILE: devscripts/zsh-completion.py
function build_completion (line 17) | def build_completion(opt_parser):
FILE: setup.py
class build_lazy_extractors (line 86) | class build_lazy_extractors(Command):
method initialize_options (line 90) | def initialize_options(self):
method finalize_options (line 93) | def finalize_options(self):
method run (line 96) | def run(self):
FILE: test/helper.py
function get_params (line 27) | def get_params(override=None):
function try_rm (line 42) | def try_rm(filename):
function report_warning (line 51) | def report_warning(message):
class FakeYDL (line 66) | class FakeYDL(YoutubeDL):
method __init__ (line 67) | def __init__(self, override=None):
method to_screen (line 74) | def to_screen(self, s, skip_eol=None):
method trouble (line 77) | def trouble(self, *args, **kwargs):
method download (line 81) | def download(self, x):
method expect_warning (line 84) | def expect_warning(self, regex):
class FakeLogger (line 95) | class FakeLogger(object):
method debug (line 96) | def debug(self, msg):
method warning (line 99) | def warning(self, msg):
method error (line 102) | def error(self, msg):
function gettestcases (line 106) | def gettestcases(include_onlymatching=False):
function expect_value (line 115) | def expect_value(self, got, expected, field):
function expect_dict (line 203) | def expect_dict(self, got_dict, expected_dict):
function expect_info_dict (line 209) | def expect_info_dict(self, got_dict, expected_dict):
function assertRegexpMatches (line 249) | def assertRegexpMatches(self, text, regexp, msg=None):
function expect_warnings (line 265) | def expect_warnings(ydl, warnings_re):
function http_server_port (line 275) | def http_server_port(httpd):
function expectedFailureIf (line 284) | def expectedFailureIf(cond):
FILE: test/test_InfoExtractor.py
class InfoExtractorTestRequestHandler (line 42) | class InfoExtractorTestRequestHandler(compat_http_server.BaseHTTPRequest...
method log_message (line 43) | def log_message(self, format, *args):
method do_GET (line 46) | def do_GET(self):
class DummyIE (line 56) | class DummyIE(InfoExtractor):
class TestInfoExtractor (line 60) | class TestInfoExtractor(unittest.TestCase):
method setUp (line 61) | def setUp(self):
method test_ie_key (line 64) | def test_ie_key(self):
method test_html_search_regex (line 67) | def test_html_search_regex(self):
method test_opengraph (line 72) | def test_opengraph(self):
method test_html_search_meta (line 98) | def test_html_search_meta(self):
method test_search_nextjs_data (line 121) | def test_search_nextjs_data(self):
method test_search_nuxt_data (line 160) | def test_search_nuxt_data(self):
method test_search_json_ld_realworld (line 189) | def test_search_json_ld_realworld(self):
method test_download_json (line 238) | def test_download_json(self):
method test_parse_html5_media_entries (line 247) | def test_parse_html5_media_entries(self):
method test_extract_jwplayer_data_realworld (line 455) | def test_extract_jwplayer_data_realworld(self):
method test_parse_m3u8_formats (line 546) | def test_parse_m3u8_formats(self):
method test_parse_mpd_formats (line 915) | def test_parse_mpd_formats(self):
method test_parse_f4m_formats (line 1310) | def test_parse_f4m_formats(self):
method test_parse_xspf (line 1337) | def test_parse_xspf(self):
method test_response_with_expected_status_returns_content (line 1386) | def test_response_with_expected_status_returns_content(self):
FILE: test/test_YoutubeDL.py
class YDL (line 42) | class YDL(FakeYDL):
method __init__ (line 43) | def __init__(self, *args, **kwargs):
method process_info (line 48) | def process_info(self, info_dict):
method to_screen (line 51) | def to_screen(self, msg):
method dl (line 54) | def dl(self, *args, **kwargs):
function _make_result (line 58) | def _make_result(formats, **kwargs):
class TestFormatSelection (line 71) | class TestFormatSelection(unittest.TestCase):
method test_prefer_free_formats (line 72) | def test_prefer_free_formats(self):
method test_format_selection (line 129) | def test_format_selection(self):
method test_format_selection_audio (line 169) | def test_format_selection_audio(self):
method test_format_selection_audio_exts (line 199) | def test_format_selection_audio_exts(self):
method test_format_selection_video (line 230) | def test_format_selection_video(self):
method test_format_selection_string_ops (line 263) | def test_format_selection_string_ops(self):
method test_youtube_format_selection (line 333) | def test_youtube_format_selection(self):
method test_audio_only_extractor_format_selection (line 431) | def test_audio_only_extractor_format_selection(self):
method test_format_not_available (line 452) | def test_format_not_available(self):
method test_format_selection_issue_10083 (line 465) | def test_format_selection_issue_10083(self):
method test_invalid_format_specs (line 478) | def test_invalid_format_specs(self):
method test_format_filtering (line 490) | def test_format_filtering(self):
method test_default_format_spec (line 557) | def test_default_format_spec(self):
class TestYoutubeDL (line 575) | class TestYoutubeDL(unittest.TestCase):
method test_subtitles (line 576) | def test_subtitles(self):
method test_add_extra_info (line 635) | def test_add_extra_info(self):
method test_prepare_filename (line 647) | def test_prepare_filename(self):
method test_format_note (line 689) | def test_format_note(self):
method test_postprocessors (line 699) | def test_postprocessors(self):
method test_match_filter (line 737) | def test_match_filter(self):
method test_playlist_items_selection (line 833) | def test_playlist_items_selection(self):
method test_urlopen_no_file_protocol (line 904) | def test_urlopen_no_file_protocol(self):
method test_do_not_override_ie_key_in_url_transparent (line 909) | def test_do_not_override_ie_key_in_url_transparent(self):
method test_ignoreerrors_for_playlist_with_url_transparent_iterable_entries (line 952) | def test_ignoreerrors_for_playlist_with_url_transparent_iterable_entri...
method test_default_times (line 1015) | def test_default_times(self):
class TestYoutubeDLCookies (line 1035) | class TestYoutubeDLCookies(unittest.TestCase):
method encode_cookie (line 1038) | def encode_cookie(cookie):
method comparable_cookies (line 1045) | def comparable_cookies(cls, cookies):
method assertSameCookies (line 1049) | def assertSameCookies(self, c1, c2, msg=None):
method assertSameCookieStrings (line 1054) | def assertSameCookieStrings(self, c1, c2, msg=None):
method test_header_cookies (line 1059) | def test_header_cookies(self):
method test_infojson_cookies (line 1118) | def test_infojson_cookies(self):
method test_add_headers_cookie (line 1170) | def test_add_headers_cookie(self):
FILE: test/test_YoutubeDLCookieJar.py
class TestYoutubeDLCookieJar (line 16) | class TestYoutubeDLCookieJar(unittest.TestCase):
method test_keep_session_cookies (line 17) | def test_keep_session_cookies(self):
method test_strip_httponly_prefix (line 32) | def test_strip_httponly_prefix(self):
method test_malformed_cookies (line 42) | def test_malformed_cookies(self):
method test_get_cookie_header (line 49) | def test_get_cookie_header(self):
method test_get_cookies_for_url (line 55) | def test_get_cookies_for_url(self):
FILE: test/test_aes.py
class TestAES (line 18) | class TestAES(unittest.TestCase):
method setUp (line 19) | def setUp(self):
method test_encrypt (line 23) | def test_encrypt(self):
method test_cbc_decrypt (line 30) | def test_cbc_decrypt(self):
method test_cbc_encrypt (line 37) | def test_cbc_encrypt(self):
method test_decrypt_text (line 44) | def test_decrypt_text(self):
method test_ecb_encrypt (line 61) | def test_ecb_encrypt(self):
FILE: test/test_age_restriction.py
function _download_restricted (line 17) | def _download_restricted(url, filename, age):
class TestAgeRestriction (line 39) | class TestAgeRestriction(unittest.TestCase):
method _assert_restricted (line 40) | def _assert_restricted(self, url, filename, age, old_age=None):
method test_youtube (line 44) | def test_youtube(self):
method test_youporn (line 47) | def test_youporn(self):
FILE: test/test_all_urls.py
class TestAllURLsMatching (line 22) | class TestAllURLsMatching(unittest.TestCase):
method setUp (line 23) | def setUp(self):
method matching_ies (line 26) | def matching_ies(self, url):
method assertMatch (line 29) | def assertMatch(self, url, ie_list):
method test_youtube_playlist_matching (line 32) | def test_youtube_playlist_matching(self):
method test_youtube_matching (line 46) | def test_youtube_matching(self):
method test_youtube_channel_matching (line 54) | def test_youtube_channel_matching(self):
method test_youtube_user_matching (line 60) | def test_youtube_user_matching(self):
method test_youtube_feeds (line 63) | def test_youtube_feeds(self):
method test_youtube_search_matching (line 69) | def test_youtube_search_matching(self):
method test_facebook_matching (line 73) | def test_facebook_matching(self):
method test_no_duplicates (line 77) | def test_no_duplicates(self):
method test_keywords (line 89) | def test_keywords(self):
method test_vimeo_matching (line 94) | def test_vimeo_matching(self):
method test_soundcloud_not_matching_sets (line 103) | def test_soundcloud_not_matching_sets(self):
method test_tumblr (line 106) | def test_tumblr(self):
method test_pbs (line 110) | def test_pbs(self):
method test_no_duplicated_ie_names (line 115) | def test_no_duplicated_ie_names(self):
FILE: test/test_cache.py
function _is_empty (line 20) | def _is_empty(d):
function _mkdir (line 24) | def _mkdir(d):
class TestCache (line 29) | class TestCache(unittest.TestCase):
method setUp (line 30) | def setUp(self):
method tearDown (line 37) | def tearDown(self):
method test_cache (line 41) | def test_cache(self):
method test_cache_validation (line 58) | def test_cache_validation(self):
method test_cache_clear (line 69) | def test_cache_clear(self):
FILE: test/test_compat.py
class TestCompat (line 30) | class TestCompat(unittest.TestCase):
method test_compat_getenv (line 31) | def test_compat_getenv(self):
method test_compat_setenv (line 36) | def test_compat_setenv(self):
method test_compat_expanduser (line 43) | def test_compat_expanduser(self):
method test_all_present (line 50) | def test_all_present(self):
method test_compat_urllib_parse_unquote (line 59) | def test_compat_urllib_parse_unquote(self):
method test_compat_urllib_parse_unquote_plus (line 78) | def test_compat_urllib_parse_unquote_plus(self):
method test_compat_urllib_parse_urlencode (line 82) | def test_compat_urllib_parse_urlencode(self):
method test_compat_shlex_split (line 92) | def test_compat_shlex_split(self):
method test_compat_etree_Element (line 97) | def test_compat_etree_Element(self):
method test_compat_etree_fromstring (line 103) | def test_compat_etree_fromstring(self):
method test_compat_etree_fromstring_doctype (line 118) | def test_compat_etree_fromstring_doctype(self):
method test_compat_struct_unpack (line 124) | def test_compat_struct_unpack(self):
method test_compat_casefold (line 127) | def test_compat_casefold(self):
method test_compat_urllib_request_Request (line 139) | def test_compat_urllib_request_Request(self):
FILE: test/test_download.py
class YoutubeDL (line 52) | class YoutubeDL(youtube_dl.YoutubeDL):
method __init__ (line 53) | def __init__(self, *args, **kwargs):
method report_warning (line 58) | def report_warning(self, message):
method process_info (line 62) | def process_info(self, info_dict):
function _file_md5 (line 67) | def _file_md5(fn):
class TestDownload (line 75) | class TestDownload(unittest.TestCase):
method __str__ (line 82) | def __str__(self):
method setUp (line 94) | def setUp(self):
function generator (line 100) | def generator(test_case, tname):
FILE: test/test_downloader_external.py
function cookiejar_Cookie (line 70) | def cookiejar_Cookie(**cookie_args):
function ifExternalFDAvailable (line 74) | def ifExternalFDAvailable(externalFD):
class HTTPTestRequestHandler (line 79) | class HTTPTestRequestHandler(compat_http_server.BaseHTTPRequestHandler):
method log_message (line 80) | def log_message(self, format, *args):
method send_content_range (line 83) | def send_content_range(self, total=None):
method serve (line 98) | def serve(self, range=True, content_length=True):
method do_GET (line 109) | def do_GET(self):
class TestAria2pFD (line 123) | class TestAria2pFD(unittest.TestCase):
method setUp (line 124) | def setUp(self):
method download (line 132) | def download(self, params, ep):
method download_all (line 149) | def download_all(self, params):
method test_regular (line 153) | def test_regular(self):
method test_chunked (line 156) | def test_chunked(self):
class TestHttpieFD (line 164) | class TestHttpieFD(unittest.TestCase):
method test_make_cmd (line 165) | def test_make_cmd(self):
class TestAxelFD (line 181) | class TestAxelFD(unittest.TestCase):
method test_make_cmd (line 182) | def test_make_cmd(self):
class TestWgetFD (line 198) | class TestWgetFD(unittest.TestCase):
method test_make_cmd (line 199) | def test_make_cmd(self):
class TestCurlFD (line 209) | class TestCurlFD(unittest.TestCase):
method test_make_cmd (line 210) | def test_make_cmd(self):
class TestAria2cFD (line 221) | class TestAria2cFD(unittest.TestCase):
method test_make_cmd (line 222) | def test_make_cmd(self):
function ifFFmpegFDAvailable (line 235) | def ifFFmpegFDAvailable(externalFD):
class TestFFmpegFD (line 245) | class TestFFmpegFD(unittest.TestCase):
method _test_cmd (line 248) | def _test_cmd(self, args):
method test_make_cmd (line 251) | def test_make_cmd(self):
FILE: test/test_downloader_http.py
class HTTPTestRequestHandler (line 29) | class HTTPTestRequestHandler(compat_http_server.BaseHTTPRequestHandler):
method log_message (line 30) | def log_message(self, format, *args):
method send_content_range (line 33) | def send_content_range(self, total=None):
method serve (line 49) | def serve(self, range=True, content_length=True):
method do_GET (line 60) | def do_GET(self):
class TestHttpFD (line 73) | class TestHttpFD(unittest.TestCase):
method setUp (line 74) | def setUp(self):
method download (line 82) | def download(self, params, ep):
method download_all (line 94) | def download_all(self, params):
method test_regular (line 98) | def test_regular(self):
method test_chunked (line 101) | def test_chunked(self):
FILE: test/test_execution.py
class TestExecution (line 25) | class TestExecution(unittest.TestCase):
method setUp (line 26) | def setUp(self):
method test_import (line 31) | def test_import(self):
method test_module_exec (line 34) | def test_module_exec(self):
method test_main_exec (line 37) | def test_main_exec(self):
method test_cmdline_umlauts (line 40) | def test_cmdline_umlauts(self):
method test_lazy_extractors (line 48) | def test_lazy_extractors(self):
FILE: test/test_http.py
class HTTPTestRequestHandler (line 59) | class HTTPTestRequestHandler(compat_http_server.BaseHTTPRequestHandler):
method super (line 63) | def super(self, meth_name, *args, **kwargs):
method log_message (line 73) | def log_message(self, format, *args):
method _headers (line 76) | def _headers(self):
method _redirect (line 84) | def _redirect(self):
method _method (line 90) | def _method(self, method, payload=None):
method _status (line 98) | def _status(self, status):
method _read_data (line 106) | def _read_data(self):
method _test_url (line 110) | def _test_url(self, path, host='127.0.0.1', scheme='http', port=None):
method do_POST (line 116) | def do_POST(self):
method do_HEAD (line 127) | def do_HEAD(self):
method do_PUT (line 135) | def do_PUT(self):
method do_GET (line 144) | def do_GET(self):
method send_header (line 232) | def send_header(self, keyword, value):
method end_headers (line 246) | def end_headers(self):
class TestHTTP (line 253) | class TestHTTP(unittest.TestCase):
method setUp (line 259) | def setUp(self):
method tearDown (line 300) | def tearDown(self):
method _test_url (line 316) | def _test_url(self, path, host='127.0.0.1', scheme='http', port=None):
method test_nocheckcertificate (line 324) | def test_nocheckcertificate(self):
method test_percent_encode (line 334) | def test_percent_encode(self):
method test_unicode_path_redirection (line 345) | def test_unicode_path_redirection(self):
method test_redirect (line 351) | def test_redirect(self):
method test_content_type (line 391) | def test_content_type(self):
method test_update_req (line 405) | def test_update_req(self):
method test_cookiejar (line 417) | def test_cookiejar(self):
method test_passed_cookie_header (line 426) | def test_passed_cookie_header(self):
method test_no_compression_compat_header (line 448) | def test_no_compression_compat_header(self):
method test_gzip_trailing_garbage (line 457) | def test_gzip_trailing_garbage(self):
method __test_compression (line 464) | def __test_compression(self, encoding):
method test_brotli (line 474) | def test_brotli(self):
method test_deflate (line 477) | def test_deflate(self):
method test_gzip (line 480) | def test_gzip(self):
method test_multiple_encodings (line 483) | def test_multiple_encodings(self):
method test_unsupported_encoding (line 488) | def test_unsupported_encoding(self):
method test_remove_dot_segments (line 498) | def test_remove_dot_segments(self):
function _build_proxy_handler (line 507) | def _build_proxy_handler(name):
class TestProxy (line 522) | class TestProxy(unittest.TestCase):
method setUp (line 523) | def setUp(self):
method tearDown (line 538) | def tearDown(self):
method _test_proxy (line 554) | def _test_proxy(self, host='127.0.0.1', port=None):
method test_proxy (line 558) | def test_proxy(self):
method test_proxy_with_idn (line 573) | def test_proxy_with_idn(self):
class TestFileURL (line 583) | class TestFileURL(unittest.TestCase):
method test_file_urls (line 585) | def test_file_urls(self):
FILE: test/test_iqiyi_sdk_interpreter.py
class IqiyiIEWithCredentials (line 15) | class IqiyiIEWithCredentials(IqiyiIE):
method _get_login_info (line 16) | def _get_login_info(self):
class WarningLogger (line 20) | class WarningLogger(object):
method __init__ (line 21) | def __init__(self):
method warning (line 24) | def warning(self, msg):
method debug (line 27) | def debug(self, msg):
method error (line 30) | def error(self, msg):
class TestIqiyiSDKInterpreter (line 34) | class TestIqiyiSDKInterpreter(unittest.TestCase):
method test_iqiyi_sdk_interpreter (line 35) | def test_iqiyi_sdk_interpreter(self):
FILE: test/test_jsinterp.py
class TestJSInterpreter (line 23) | class TestJSInterpreter(unittest.TestCase):
method _test (line 24) | def _test(self, jsi_or_code, expected, func='f', args=()):
method test_basic (line 33) | def test_basic(self):
method test_add (line 42) | def test_add(self):
method test_sub (line 54) | def test_sub(self):
method test_mul (line 61) | def test_mul(self):
method test_div (line 68) | def test_div(self):
method test_mod (line 79) | def test_mod(self):
method test_exp (line 86) | def test_exp(self):
method test_calc (line 95) | def test_calc(self):
method test_empty_return (line 98) | def test_empty_return(self):
method test_morespace (line 101) | def test_morespace(self):
method test_strange_chars (line 105) | def test_strange_chars(self):
method test_operators (line 109) | def test_operators(self):
method test_bitwise_operators_typecast (line 150) | def test_bitwise_operators_typecast(self):
method test_array_access (line 169) | def test_array_access(self):
method test_parens (line 172) | def test_parens(self):
method test_quotes (line 176) | def test_quotes(self):
method test_assignments (line 179) | def test_assignments(self):
method test_comments (line 185) | def test_comments(self):
method test_precedence (line 212) | def test_precedence(self):
method test_builtins (line 222) | def test_builtins(self):
method test_Date (line 225) | def test_Date(self):
method test_call (line 262) | def test_call(self):
method test_if (line 271) | def test_if(self):
method test_elseif (line 293) | def test_elseif(self):
method test_for_loop (line 302) | def test_for_loop(self):
method test_while_loop (line 305) | def test_while_loop(self):
method test_switch (line 308) | def test_switch(self):
method test_switch_default (line 322) | def test_switch_default(self):
method test_try (line 337) | def test_try(self):
method test_catch (line 340) | def test_catch(self):
method test_finally (line 343) | def test_finally(self):
method test_nested_try (line 347) | def test_nested_try(self):
method test_for_loop_continue (line 354) | def test_for_loop_continue(self):
method test_for_loop_break (line 357) | def test_for_loop_break(self):
method test_for_loop_try (line 360) | def test_for_loop_try(self):
method test_literal_list (line 367) | def test_literal_list(self):
method test_comma (line 370) | def test_comma(self):
method test_not (line 375) | def test_not(self):
method test_void (line 382) | def test_void(self):
method test_typeof (line 385) | def test_typeof(self):
method test_return_function (line 398) | def test_return_function(self):
method test_null (line 404) | def test_null(self):
method test_undefined (line 410) | def test_undefined(self):
method test_object (line 448) | def test_object(self):
method test_indexing (line 454) | def test_indexing(self):
method test_regex (line 464) | def test_regex(self):
method test_replace (line 489) | def test_replace(self):
method test_char_code_at (line 501) | def test_char_code_at(self):
method test_bitwise_operators_overflow (line 510) | def test_bitwise_operators_overflow(self):
method test_negative (line 514) | def test_negative(self):
method test_32066 (line 521) | def test_32066(self):
method test_packed (line 527) | def test_packed(self):
method test_join (line 532) | def test_join(self):
method test_split (line 552) | def test_split(self):
method test_slice (line 580) | def test_slice(self):
method test_splice (line 608) | def test_splice(self):
method test_pop (line 611) | def test_pop(self):
method test_shift (line 622) | def test_shift(self):
method test_forEach (line 633) | def test_forEach(self):
method test_extract_function (line 645) | def test_extract_function(self):
method test_extract_function_with_global_stack (line 650) | def test_extract_function_with_global_stack(self):
FILE: test/test_netrc.py
class TestNetRc (line 15) | class TestNetRc(unittest.TestCase):
method test_netrc_present (line 16) | def test_netrc_present(self):
FILE: test/test_options.py
class TestOptions (line 14) | class TestOptions(unittest.TestCase):
method test_hide_login_info (line 15) | def test_hide_login_info(self):
FILE: test/test_postprocessors.py
class TestMetadataFromTitle (line 14) | class TestMetadataFromTitle(unittest.TestCase):
method test_format_to_regex (line 15) | def test_format_to_regex(self):
FILE: test/test_socks.py
class TestMultipleSocks (line 24) | class TestMultipleSocks(unittest.TestCase):
method _check_params (line 26) | def _check_params(attrs):
method test_proxy_http (line 34) | def test_proxy_http(self):
method test_proxy_https (line 45) | def test_proxy_https(self):
method test_secondary_proxy_http (line 56) | def test_secondary_proxy_http(self):
method test_secondary_proxy_https (line 67) | def test_secondary_proxy_https(self):
class TestSocks (line 79) | class TestSocks(unittest.TestCase):
method setUp (line 82) | def setUp(self):
method tearDown (line 91) | def tearDown(self):
method _get_ip (line 98) | def _get_ip(self, protocol):
method test_socks4 (line 107) | def test_socks4(self):
method test_socks4a (line 110) | def test_socks4a(self):
method test_socks5 (line 113) | def test_socks5(self):
FILE: test/test_subtitles.py
class BaseTestSubtitles (line 33) | class BaseTestSubtitles(unittest.TestCase):
method setUp (line 37) | def setUp(self):
method getInfoDict (line 45) | def getInfoDict(self):
method getSubtitles (line 49) | def getSubtitles(self):
class TestYoutubeSubtitles (line 61) | class TestYoutubeSubtitles(BaseTestSubtitles):
method test_youtube_allsubtitles (line 80) | def test_youtube_allsubtitles(self):
method _test_subtitles_format (line 90) | def _test_subtitles_format(self, fmt, md5_hash, lang='en'):
method test_youtube_subtitles_ttml_format (line 96) | def test_youtube_subtitles_ttml_format(self):
method test_youtube_subtitles_vtt_format (line 99) | def test_youtube_subtitles_vtt_format(self):
method test_youtube_subtitles_json3_format (line 102) | def test_youtube_subtitles_json3_format(self):
method _test_automatic_captions (line 105) | def _test_automatic_captions(self, url, lang):
method test_youtube_automatic_captions (line 112) | def test_youtube_automatic_captions(self):
method test_youtube_translated_subtitles (line 129) | def test_youtube_translated_subtitles(self):
method test_youtube_nosubtitles (line 133) | def test_youtube_nosubtitles(self):
class TestDailymotionSubtitles (line 145) | class TestDailymotionSubtitles(BaseTestSubtitles):
method test_allsubtitles (line 149) | def test_allsubtitles(self):
method test_nosubtitles (line 159) | def test_nosubtitles(self):
class TestTedSubtitles (line 169) | class TestTedSubtitles(BaseTestSubtitles):
method test_allsubtitles (line 173) | def test_allsubtitles(self):
class TestVimeoSubtitles (line 184) | class TestVimeoSubtitles(BaseTestSubtitles):
method test_allsubtitles (line 188) | def test_allsubtitles(self):
method test_nosubtitles (line 196) | def test_nosubtitles(self):
class TestWallaSubtitles (line 206) | class TestWallaSubtitles(BaseTestSubtitles):
method test_allsubtitles (line 210) | def test_allsubtitles(self):
method test_nosubtitles (line 218) | def test_nosubtitles(self):
class TestCeskaTelevizeSubtitles (line 228) | class TestCeskaTelevizeSubtitles(BaseTestSubtitles):
method test_allsubtitles (line 232) | def test_allsubtitles(self):
method test_nosubtitles (line 240) | def test_nosubtitles(self):
class TestLyndaSubtitles (line 250) | class TestLyndaSubtitles(BaseTestSubtitles):
method test_allsubtitles (line 254) | def test_allsubtitles(self):
class TestNPOSubtitles (line 263) | class TestNPOSubtitles(BaseTestSubtitles):
method test_allsubtitles (line 267) | def test_allsubtitles(self):
class TestMTVSubtitles (line 276) | class TestMTVSubtitles(BaseTestSubtitles):
method getInfoDict (line 280) | def getInfoDict(self):
method test_allsubtitles (line 283) | def test_allsubtitles(self):
class TestNRKSubtitles (line 291) | class TestNRKSubtitles(BaseTestSubtitles):
method test_allsubtitles (line 295) | def test_allsubtitles(self):
class TestRaiPlaySubtitles (line 304) | class TestRaiPlaySubtitles(BaseTestSubtitles):
method test_subtitles_key (line 307) | def test_subtitles_key(self):
method test_subtitles_array_key (line 315) | def test_subtitles_array_key(self):
class TestVikiSubtitles (line 325) | class TestVikiSubtitles(BaseTestSubtitles):
method test_allsubtitles (line 329) | def test_allsubtitles(self):
class TestThePlatformSubtitles (line 337) | class TestThePlatformSubtitles(BaseTestSubtitles):
method test_allsubtitles (line 343) | def test_allsubtitles(self):
class TestThePlatformFeedSubtitles (line 352) | class TestThePlatformFeedSubtitles(BaseTestSubtitles):
method test_allsubtitles (line 356) | def test_allsubtitles(self):
class TestRtveSubtitles (line 364) | class TestRtveSubtitles(BaseTestSubtitles):
method test_allsubtitles (line 368) | def test_allsubtitles(self):
class TestDemocracynowSubtitles (line 378) | class TestDemocracynowSubtitles(BaseTestSubtitles):
method test_allsubtitles (line 382) | def test_allsubtitles(self):
method test_subtitles_in_page (line 389) | def test_subtitles_in_page(self):
FILE: test/test_swfinterp.py
class TestSWFInterpreter (line 26) | class TestSWFInterpreter(unittest.TestCase):
function _make_testfunc (line 30) | def _make_testfunc(testfile):
FILE: test/test_traversal.py
class _TestCase (line 60) | class _TestCase(unittest.TestCase):
method assertCountEqual (line 62) | def assertCountEqual(self, *args, **kwargs):
class TestTraversal (line 68) | class TestTraversal(_TestCase):
method assertMaybeCountEqual (line 69) | def assertMaybeCountEqual(self, *args, **kwargs):
method test_traverse_obj (line 76) | def test_traverse_obj(self):
method test_traversal_unbranching (line 427) | def test_traversal_unbranching(self):
method test_traversal_morsel (line 459) | def test_traversal_morsel(self):
method test_traversal_filter (line 483) | def test_traversal_filter(self):
class TestTraversalHelpers (line 492) | class TestTraversalHelpers(_TestCase):
method test_traversal_require (line 493) | def test_traversal_require(self):
method test_subs_list_to_dict (line 500) | def test_subs_list_to_dict(self):
method test_unpack (line 599) | def test_unpack(self):
method test_value (line 611) | def test_value(self):
class TestDictGet (line 617) | class TestDictGet(_TestCase):
method test_dict_get (line 618) | def test_dict_get(self):
method test_get_first (line 640) | def test_get_first(self):
FILE: test/test_unicode_literals.py
class TestUnicodeLiterals (line 31) | class TestUnicodeLiterals(unittest.TestCase):
method test_all_files (line 32) | def test_all_files(self):
FILE: test/test_update.py
class TestUpdate (line 16) | class TestUpdate(unittest.TestCase):
method test_rsa_verify (line 17) | def test_rsa_verify(self):
FILE: test/test_utils.py
class TestUtil (line 130) | class TestUtil(unittest.TestCase):
method test_timeconvert (line 132) | def test_timeconvert(self):
method test_sanitize_filename (line 136) | def test_sanitize_filename(self):
method test_sanitize_filename_restricted (line 170) | def test_sanitize_filename_restricted(self):
method test_sanitize_ids (line 204) | def test_sanitize_ids(self):
method test_sanitize_path (line 209) | def test_sanitize_path(self):
method test_sanitize_url (line 245) | def test_sanitize_url(self):
method test_sanitized_Request (line 252) | def test_sanitized_Request(self):
method test_expand_path (line 264) | def test_expand_path(self):
method assertUnsafeExtension (line 283) | def assertUnsafeExtension(self, ext=None):
method test_prepend_extension (line 297) | def test_prepend_extension(self):
method test_replace_extension (line 318) | def test_replace_extension(self):
method test_subtitles_filename (line 336) | def test_subtitles_filename(self):
method test_remove_start (line 341) | def test_remove_start(self):
method test_remove_end (line 346) | def test_remove_end(self):
method test_remove_quotes (line 351) | def test_remove_quotes(self):
method test_ordered_set (line 360) | def test_ordered_set(self):
method test_unescape_html (line 367) | def test_unescape_html(self):
method test_date_from_str (line 377) | def test_date_from_str(self):
method test_daterange (line 384) | def test_daterange(self):
method test_unified_dates (line 392) | def test_unified_dates(self):
method test_unified_timestamps (line 417) | def test_unified_timestamps(self):
method test_determine_ext (line 445) | def test_determine_ext(self):
method test_find_xpath_attr (line 453) | def test_find_xpath_attr(self):
method test_xpath_with_ns (line 475) | def test_xpath_with_ns(self):
method test_xpath_element (line 488) | def test_xpath_element(self):
method test_xpath_text (line 505) | def test_xpath_text(self):
method test_xpath_attr (line 517) | def test_xpath_attr(self):
method test_smuggle_url (line 532) | def test_smuggle_url(self):
method test_shell_quote (line 550) | def test_shell_quote(self):
method test_float_or_none (line 556) | def test_float_or_none(self):
method test_int_or_none (line 564) | def test_int_or_none(self):
method test_str_to_int (line 574) | def test_str_to_int(self):
method test_url_basename (line 584) | def test_url_basename(self):
method test_base_url (line 594) | def test_base_url(self):
method test_urljoin (line 601) | def test_urljoin(self):
method test_url_or_none (line 623) | def test_url_or_none(self):
method test_parse_age_limit (line 638) | def test_parse_age_limit(self):
method test_parse_duration (line 654) | def test_parse_duration(self):
method test_fix_xml_ampersands (line 693) | def test_fix_xml_ampersands(self):
method test_paged_list (line 706) | def test_paged_list(self):
method test_read_batch_urls (line 731) | def test_read_batch_urls(self):
method test_urlencode_postdata (line 740) | def test_urlencode_postdata(self):
method test_update_url_query (line 744) | def test_update_url_query(self):
method test_multipart_encode (line 776) | def test_multipart_encode(self):
method test_merge_dicts (line 786) | def test_merge_dicts(self):
method test_encode_compat_str (line 797) | def test_encode_compat_str(self):
method test_parse_iso8601 (line 801) | def test_parse_iso8601(self):
method test_strip_jsonp (line 809) | def test_strip_jsonp(self):
method test_strip_or_none (line 834) | def test_strip_or_none(self):
method test_uppercase_escape (line 846) | def test_uppercase_escape(self):
method test_lowercase_escape (line 850) | def test_lowercase_escape(self):
method test_limit_length (line 854) | def test_limit_length(self):
method test_mimetype2ext (line 861) | def test_mimetype2ext(self):
method test_month_by_name (line 871) | def test_month_by_name(self):
method test_parse_codecs (line 879) | def test_parse_codecs(self):
method test_escape_rfc3986 (line 939) | def test_escape_rfc3986(self):
method test_escape_url (line 949) | def test_escape_url(self):
method test_remove_dot_segments (line 968) | def test_remove_dot_segments(self):
method test_js_to_json_vars_strings (line 994) | def test_js_to_json_vars_strings(self):
method test_js_to_json_realworld (line 1073) | def test_js_to_json_realworld(self):
method test_js_to_json_edgecases (line 1114) | def test_js_to_json_edgecases(self):
method test_js_to_json_malformed (line 1225) | def test_js_to_json_malformed(self):
method test_js_to_json_template_literal (line 1229) | def test_js_to_json_template_literal(self):
method test_extract_attributes (line 1236) | def test_extract_attributes(self):
method test_clean_html (line 1276) | def test_clean_html(self):
method test_intlist_to_bytes (line 1281) | def test_intlist_to_bytes(self):
method test_args_to_str (line 1286) | def test_args_to_str(self):
method test_parse_filesize (line 1292) | def test_parse_filesize(self):
method test_parse_count (line 1305) | def test_parse_count(self):
method test_parse_resolution (line 1316) | def test_parse_resolution(self):
method test_parse_bitrate (line 1326) | def test_parse_bitrate(self):
method test_version_tuple (line 1333) | def test_version_tuple(self):
method test_detect_exe_version (line 1338) | def test_detect_exe_version(self):
method test_age_restricted (line 1349) | def test_age_restricted(self):
method test_is_html (line 1356) | def test_is_html(self):
method test_render_table (line 1372) | def test_render_table(self):
method test_match_str (line 1381) | def test_match_str(self):
method test_parse_dfxp_time_expr (line 1424) | def test_parse_dfxp_time_expr(self):
method test_dfxp2srt (line 1433) | def test_dfxp2srt(self):
method test_cli_option (line 1540) | def test_cli_option(self):
method test_cli_valueless_option (line 1546) | def test_cli_valueless_option(self):
method test_cli_bool_option (line 1560) | def test_cli_bool_option(self):
method test_ohdave_rsa_encrypt (line 1590) | def test_ohdave_rsa_encrypt(self):
method test_pkcs1pad (line 1598) | def test_pkcs1pad(self):
method test_encode_base_n (line 1606) | def test_encode_base_n(self):
method test_caesar (line 1617) | def test_caesar(self):
method test_rot47 (line 1627) | def test_rot47(self):
method test_urshift (line 1631) | def test_urshift(self):
method test_get_element_by_class (line 1635) | def test_get_element_by_class(self):
method test_get_element_by_attribute (line 1643) | def test_get_element_by_attribute(self):
method test_get_elements_by_class (line 1658) | def test_get_elements_by_class(self):
method test_get_elements_by_attribute (line 1666) | def test_get_elements_by_attribute(self):
method test_clean_podcast_url (line 1675) | def test_clean_podcast_url(self):
method test_LazyList (line 1679) | def test_LazyList(self):
method test_LazyList_laziness (line 1704) | def test_LazyList_laziness(self):
method test_try_call (line 1724) | def test_try_call(self):
method test_variadic (line 1745) | def test_variadic(self):
method test_join_nonempty (line 1751) | def test_join_nonempty(self):
method test_partial_application (line 1757) | def test_partial_application(self):
FILE: test/test_verbose_output.py
class TestVerboseOutput (line 16) | class TestVerboseOutput(unittest.TestCase):
method test_private_info_arg (line 17) | def test_private_info_arg(self):
method test_private_info_shortarg (line 30) | def test_private_info_shortarg(self):
method test_private_info_eq (line 43) | def test_private_info_eq(self):
method test_private_info_shortarg_eq (line 56) | def test_private_info_shortarg_eq(self):
FILE: test/test_write_annotations.py
class YoutubeDL (line 21) | class YoutubeDL(youtube_dl.YoutubeDL):
method __init__ (line 22) | def __init__(self, *args, **kwargs):
class TestAnnotations (line 40) | class TestAnnotations(unittest.TestCase):
method setUp (line 41) | def setUp(self):
method test_info_json (line 45) | def test_info_json(self):
method tearDown (line 74) | def tearDown(self):
FILE: test/test_youtube_lists.py
class TestYoutubeLists (line 20) | class TestYoutubeLists(unittest.TestCase):
method assertIsPlaylist (line 21) | def assertIsPlaylist(self, info):
method test_youtube_playlist_noplaylist (line 25) | def test_youtube_playlist_noplaylist(self):
method test_youtube_mix (line 35) | def test_youtube_mix(self):
method test_youtube_flat_playlist_extraction (line 46) | def test_youtube_flat_playlist_extraction(self):
FILE: test/test_youtube_misc.py
class TestYoutubeMisc (line 14) | class TestYoutubeMisc(unittest.TestCase):
method test_youtube_extract (line 15) | def test_youtube_extract(self):
FILE: test/test_youtube_signature.py
class TestPlayerInfo (line 356) | class TestPlayerInfo(unittest.TestCase):
method test_youtube_extract_player_info (line 357) | def test_youtube_extract_player_info(self):
class TestSignature (line 382) | class TestSignature(unittest.TestCase):
method setUp (line 383) | def setUp(self):
method tearDown (line 389) | def tearDown(self):
function t_factory (line 395) | def t_factory(name, sig_func, url_pattern):
function signature (line 416) | def signature(jscode, sig_input):
function n_sig (line 424) | def n_sig(jscode, sig_input):
FILE: youtube_dl/YoutubeDL.py
function _catch_unsafe_file_extension (line 134) | def _catch_unsafe_file_extension(func):
class YoutubeDL (line 148) | class YoutubeDL(object):
method __init__ (line 378) | def __init__(self, params=None, auto_init=True):
method warn_if_short_id (line 475) | def warn_if_short_id(self, argv):
method add_info_extractor (line 491) | def add_info_extractor(self, ie):
method get_info_extractor (line 498) | def get_info_extractor(self, ie_key):
method add_default_info_extractors (line 510) | def add_default_info_extractors(self):
method add_post_processor (line 517) | def add_post_processor(self, pp):
method add_progress_hook (line 522) | def add_progress_hook(self, ph):
method _bidi_workaround (line 526) | def _bidi_workaround(self, message):
method to_screen (line 539) | def to_screen(self, message, skip_eol=False):
method _write_string (line 543) | def _write_string(self, s, out=None, only_once=False, _cache=set()):
method to_stdout (line 550) | def to_stdout(self, message, skip_eol=False, check_quiet=False, only_o...
method to_stderr (line 561) | def to_stderr(self, message, only_once=False):
method to_console_title (line 571) | def to_console_title(self, message):
method save_console_title (line 582) | def save_console_title(self):
method restore_console_title (line 591) | def restore_console_title(self):
method __enter__ (line 600) | def __enter__(self):
method __exit__ (line 604) | def __exit__(self, *args):
method trouble (line 610) | def trouble(self, *args, **kwargs):
method report_warning (line 648) | def report_warning(self, message, only_once=False):
method report_error (line 665) | def report_error(self, message, *args, **kwargs):
method write_debug (line 677) | def write_debug(self, message, only_once=False):
method report_unscoped_cookies (line 687) | def report_unscoped_cookies(self, *args, **kwargs):
method report_file_already_downloaded (line 697) | def report_file_already_downloaded(self, file_name):
method prepare_filename (line 704) | def prepare_filename(self, info_dict):
method _match_entry (line 793) | def _match_entry(self, info_dict, incomplete):
method add_extra_info (line 836) | def add_extra_info(info_dict, extra_info):
method extract_info (line 841) | def extract_info(self, url, download=True, ie_key=None, extra_info={},
method __handle_extraction_exceptions (line 879) | def __handle_extraction_exceptions(func):
method _remove_cookie_header (line 901) | def _remove_cookie_header(self, http_headers):
method _load_cookies (line 911) | def _load_cookies(self, data, **kwargs):
method _load_cookies_from_headers (line 955) | def _load_cookies_from_headers(self, headers):
method _apply_header_cookies (line 958) | def _apply_header_cookies(self, url, cookies=None):
method __extract_info (line 974) | def __extract_info(self, url, ie, download, extra_info, process):
method add_default_extra_info (line 993) | def add_default_extra_info(self, ie_result, ie, url):
method process_ie_result (line 1001) | def process_ie_result(self, ie_result, download=True, extra_info={}):
method __process_playlist (line 1108) | def __process_playlist(self, ie_result, download):
method __process_iterable_entry (line 1221) | def __process_iterable_entry(self, entry, download, extra_info):
method _build_format_filter (line 1225) | def _build_format_filter(self, filter_spec):
method _default_format_spec (line 1288) | def _default_format_spec(self, info_dict, download=True):
method build_format_selector (line 1312) | def build_format_selector(self, format_spec):
method _calc_headers (line 1578) | def _calc_headers(self, info_dict, load_cookies=False):
method _calc_cookies (line 1618) | def _calc_cookies(self, info_dict):
method _fill_common_fields (line 1623) | def _fill_common_fields(self, info_dict, final=True):
method process_video_result (line 1645) | def process_video_result(self, info_dict, download=True):
method process_subtitles (line 1872) | def process_subtitles(self, video_id, normal_subtitles, automatic_capt...
method __forced_printings (line 1921) | def __forced_printings(self, info_dict, filename, incomplete):
method process_info (line 1952) | def process_info(self, info_dict):
method download (line 2248) | def download(self, url_list):
method download_with_info_file (line 2273) | def download_with_info_file(self, info_filename):
method sanitize_info (line 2288) | def sanitize_info(info_dict, remove_private_keys=False):
method filter_requested_info (line 2316) | def filter_requested_info(cls, info_dict):
method post_process (line 2319) | def post_process(self, filename, ie_info):
method _make_archive_id (line 2341) | def _make_archive_id(self, info_dict):
method in_download_archive (line 2361) | def in_download_archive(self, info_dict):
method record_download_archive (line 2380) | def record_download_archive(self, info_dict):
method format_resolution (line 2390) | def format_resolution(format, default='unknown'):
method _format_note (line 2406) | def _format_note(self, fdict):
method list_formats (line 2454) | def list_formats(self, info_dict):
method list_thumbnails (line 2468) | def list_thumbnails(self, info_dict):
method list_subtitles (line 2480) | def list_subtitles(self, video_id, subtitles, name='subtitles'):
method urlopen (line 2491) | def urlopen(self, req):
method print_debug_header (line 2497) | def print_debug_header(self):
method _setup_opener (line 2589) | def _setup_opener(self):
method encode (line 2642) | def encode(self, s):
method get_encoding (line 2652) | def get_encoding(self):
method _write_info_json (line 2658) | def _write_info_json(self, label, info_dict, infofn, overwrite=None):
method _write_thumbnails (line 2680) | def _write_thumbnails(self, info_dict, filename):
FILE: youtube_dl/__init__.py
function _real_main (line 49) | def _real_main(argv=None):
function main (line 477) | def main(argv=None):
FILE: youtube_dl/aes.py
function pkcs7_padding (line 11) | def pkcs7_padding(data):
function aes_ctr_decrypt (line 23) | def aes_ctr_decrypt(data, key, counter):
function aes_cbc_decrypt (line 49) | def aes_cbc_decrypt(data, key, iv):
function aes_cbc_encrypt (line 75) | def aes_cbc_encrypt(data, key, iv):
function aes_ecb_encrypt (line 102) | def aes_ecb_encrypt(data, key):
function key_expansion (line 124) | def key_expansion(data):
function aes_encrypt (line 159) | def aes_encrypt(data, expanded_key):
function aes_decrypt (line 180) | def aes_decrypt(data, expanded_key):
function aes_decrypt_text (line 201) | def aes_decrypt_text(data, password, key_size_bytes):
function sub_bytes (line 314) | def sub_bytes(data):
function sub_bytes_inv (line 318) | def sub_bytes_inv(data):
function rotate (line 322) | def rotate(data):
function key_schedule_core (line 326) | def key_schedule_core(data, rcon_iteration):
function xor (line 334) | def xor(data1, data2):
function rijndael_mul (line 338) | def rijndael_mul(a, b):
function mix_column (line 344) | def mix_column(data, matrix):
function mix_columns (line 355) | def mix_columns(data, matrix=MIX_COLUMN_MATRIX):
function mix_columns_inv (line 363) | def mix_columns_inv(data):
function shift_rows (line 367) | def shift_rows(data):
function shift_rows_inv (line 375) | def shift_rows_inv(data):
function inc (line 383) | def inc(data):
FILE: youtube_dl/cache.py
class Cache (line 27) | class Cache(object):
method __init__ (line 33) | def __init__(self, ydl):
method _write_debug (line 36) | def _write_debug(self, *args, **kwargs):
method _report_warning (line 39) | def _report_warning(self, *args, **kwargs):
method _to_screen (line 42) | def _to_screen(self, *args, **kwargs):
method _get_param (line 45) | def _get_param(self, k, default=None):
method _get_root_dir (line 48) | def _get_root_dir(self):
method _get_cache_fn (line 55) | def _get_cache_fn(self, section, key, dtype):
method enabled (line 63) | def enabled(self):
method store (line 66) | def store(self, section, key, data, dtype='json'):
method clear (line 81) | def clear(self, section, key, dtype='json'):
method _validate (line 97) | def _validate(self, data, min_ver):
method load (line 105) | def load(self, section, key, dtype='json', default=None, **kw_min_ver):
method remove (line 131) | def remove(self):
FILE: youtube_dl/casefold.py
function _parse_unichr (line 1644) | def _parse_unichr(s):
function _casefold (line 1661) | def _casefold(s):
FILE: youtube_dl/compat.py
function _add_init_method_arg (line 71) | def _add_init_method_arg(cls):
class compat_cookiejar_Cookie (line 137) | class compat_cookiejar_Cookie(compat_cookiejar.Cookie):
method __init__ (line 138) | def __init__(self, version, name, value, *args, **kwargs):
class compat_cookies_SimpleCookie (line 159) | class compat_cookies_SimpleCookie(compat_cookies.SimpleCookie):
method load (line 160) | def load(self, rawdata):
class compat_HTMLParseError (line 2468) | class compat_HTMLParseError(Exception):
function compat_urllib_parse_unquote_to_bytes (line 2507) | def compat_urllib_parse_unquote_to_bytes(string):
function compat_urllib_parse_unquote (line 2531) | def compat_urllib_parse_unquote(string, encoding='utf-8', errors='replac...
function compat_urllib_parse_unquote_plus (line 2556) | def compat_urllib_parse_unquote_plus(string, encoding='utf-8', errors='r...
function compat_urllib_parse_urlencode (line 2569) | def compat_urllib_parse_urlencode(query, doseq=0, safe='', encoding='utf...
function _parse_qsl (line 2587) | def _parse_qsl(qs, keep_blank_values=False, strict_parsing=False,
function compat_parse_qs (line 2616) | def compat_parse_qs(qs, keep_blank_values=False, strict_parsing=False,
function _quote (line 2646) | def _quote(s, safe='/'):
function _quote_plus (line 2670) | def _quote_plus(s, safe=''):
function _urlcleanup (line 2676) | def _urlcleanup():
class compat_urllib_request_DataHandler (line 2697) | class compat_urllib_request_DataHandler(compat_urllib_request.BaseHandler):
method data_open (line 2698) | def data_open(self, req):
class _TreeBuilder (line 2740) | class _TreeBuilder(_etree.TreeBuilder):
method doctype (line 2741) | def doctype(self, name, pubid, system):
function compat_etree_fromstring (line 2756) | def compat_etree_fromstring(text):
function _etree_iter (line 2764) | def _etree_iter(root):
function _XML (line 2772) | def _XML(text, parser=None):
function _element_factory (line 2778) | def _element_factory(*args, **kwargs):
function compat_etree_fromstring (line 2785) | def compat_etree_fromstring(text):
function compat_etree_register_namespace (line 2797) | def compat_etree_register_namespace(prefix, uri):
function compat_xpath (line 2818) | def compat_xpath(xpath):
function _xpath_tokenizer (line 2835) | def _xpath_tokenizer(pattern, namespaces=None):
function _get_parent_map (line 2849) | def _get_parent_map(context):
function _select (line 2858) | def _select(context, result, filter_fn=lambda *_: True):
function _prepare_child (line 2864) | def _prepare_child(next_, token):
function _prepare_star (line 2868) | def _prepare_star(next_, token):
function _prepare_self (line 2871) | def _prepare_self(next_, token):
function _prepare_descendant (line 2874) | def _prepare_descendant(next_, token):
function _prepare_parent (line 2890) | def _prepare_parent(next_, token):
function _prepare_predicate (line 2903) | def _prepare_predicate(next_, token):
class _SelectorContext (line 2995) | class _SelectorContext:
method __init__ (line 2998) | def __init__(self, root):
function compat_etree_iterfind (line 3003) | def compat_etree_iterfind(elem, path, namespaces=None):
function compat_shlex_quote (line 3045) | def compat_shlex_quote(s):
function compat_shlex_quote (line 3051) | def compat_shlex_quote(s):
function compat_shlex_split (line 3068) | def compat_shlex_split(s, comments=False, posix=True):
function compat_ord (line 3075) | def compat_ord(c):
function compat_setenv (line 3087) | def compat_setenv(key, value, env=os.environ):
function compat_getenv (line 3093) | def compat_getenv(key, default=None):
function compat_setenv (line 3100) | def compat_setenv(key, value, env=os.environ):
function compat_expanduser (line 3113) | def compat_expanduser(path):
function compat_expanduser (line 3137) | def compat_expanduser(path):
function compat_os_makedirs (line 3177) | def compat_os_makedirs(name, mode=0o777, exist_ok=False):
function compat_realpath (line 3189) | def compat_realpath(path):
function compat_print (line 3201) | def compat_print(s):
function compat_print (line 3205) | def compat_print(s):
function compat_getpass (line 3212) | def compat_getpass(prompt, *args, **kwargs):
function compat_kwargs (line 3235) | def compat_kwargs(kwargs):
function compat_socket_create_connection (line 3260) | def compat_socket_create_connection(address, timeout, source_address=None):
class compat_contextlib_suppress (line 3289) | class compat_contextlib_suppress(object):
method __init__ (line 3292) | def __init__(self, *exceptions):
method __enter__ (line 3297) | def __enter__(self):
method __exit__ (line 3300) | def __exit__(self, exc_type, exc_val, exc_tb):
function compat_subprocess_Popen (line 3316) | def compat_subprocess_Popen(*args, **kwargs):
function _workaround_optparse_bug9161 (line 3333) | def _workaround_optparse_bug9161():
function compat_get_terminal_size (line 3358) | def compat_get_terminal_size(fallback=(80, 24)):
function compat_itertools_count (line 3396) | def compat_itertools_count(start=0, step=1):
function compat_struct_pack (line 3415) | def compat_struct_pack(spec, *args):
function compat_struct_unpack (line 3420) | def compat_struct_unpack(spec, *args):
class compat_Struct (line 3425) | class compat_Struct(struct.Struct):
method __init__ (line 3426) | def __init__(self, fmt):
method unpack (line 3435) | def unpack(self, string):
class compat_Struct (line 3434) | class compat_Struct(struct.Struct):
method __init__ (line 3426) | def __init__(self, fmt):
method unpack (line 3435) | def unpack(self, string):
class _DictMixin (line 3497) | class _DictMixin(compat_abc_ABC):
method has_key (line 3498) | def has_key(self, key):
method iterkeys (line 3503) | def iterkeys(self):
method itervalues (line 3506) | def itervalues(self):
method iteritems (line 3509) | def iteritems(self):
method copy (line 3514) | def copy(self):
class compat_collections_chain_map (line 3529) | class compat_collections_chain_map(compat_collections_abc.MutableMapping):
method __init__ (line 3533) | def __init__(self, *maps):
method __getitem__ (line 3536) | def __getitem__(self, k):
method __setitem__ (line 3542) | def __setitem__(self, k, v):
method __contains__ (line 3546) | def __contains__(self, k):
method __delitem (line 3549) | def __delitem(self, k):
method __delitem__ (line 3555) | def __delitem__(self, k):
method __iter__ (line 3558) | def __iter__(self):
method __len__ (line 3561) | def __len__(self):
method pop (line 3565) | def pop(self, k, *args):
method new_child (line 3574) | def new_child(self, m=None, **kwargs):
method parents (line 3581) | def parents(self):
function compat_b64decode (line 3594) | def compat_b64decode(s, *args, **kwargs):
function compat_ctypes_WINFUNCTYPE (line 3610) | def compat_ctypes_WINFUNCTYPE(*args, **kwargs):
function compat_ctypes_WINFUNCTYPE (line 3619) | def compat_ctypes_WINFUNCTYPE(*args, **kwargs):
function compat_open (line 3626) | def compat_open(file_, *args, **kwargs):
function compat_register_utf8 (line 3635) | def compat_register_utf8():
function compat_datetime_timedelta_total_seconds (line 3648) | def compat_datetime_timedelta_total_seconds(td):
class compat_dict (line 3693) | class compat_dict(compat_collections_abc.MutableMapping, _DictMixin, dict):
method __init__ (line 3698) | def __init__(self, *mappings_or_iterables, **kwargs):
method __getitem__ (line 3707) | def __getitem__(self, key):
method __setitem__ (line 3710) | def __setitem__(self, key, value):
method __len__ (line 3720) | def __len__(self):
method __delitem__ (line 3723) | def __delitem__(self, key):
method __iter__ (line 3731) | def __iter__(self):
method __del__ (line 3736) | def __del__(self):
method __repr__ (line 3743) | def __repr__(self, _repr_running={}):
method __or__ (line 3758) | def __or__(self, other):
method __ror__ (line 3765) | def __ror__(self, other):
method __ior__ (line 3772) | def __ior__(self, other):
method __reversed__ (line 3778) | def __reversed__(self):
method __contains__ (line 3783) | def __contains__(self, item):
method __update (line 3787) | def __update(self, *args, **kwargs):
FILE: youtube_dl/downloader/__init__.py
function get_suitable_downloader (line 8) | def get_suitable_downloader(info_dict, params={}):
function _get_suitable_downloader (line 42) | def _get_suitable_downloader(info_dict, params={}):
FILE: youtube_dl/downloader/common.py
class FileDownloader (line 21) | class FileDownloader(object):
method __init__ (line 62) | def __init__(self, ydl, params):
method format_seconds (line 70) | def format_seconds(seconds):
method calc_percent (line 81) | def calc_percent(byte_counter, data_len):
method format_percent (line 87) | def format_percent(percent):
method calc_eta (line 93) | def calc_eta(cls, start_or_rate, now_or_remaining, *args):
method format_eta (line 109) | def format_eta(eta):
method calc_speed (line 115) | def calc_speed(start, now, bytes):
method format_speed (line 122) | def format_speed(speed):
method format_retries (line 128) | def format_retries(retries):
method filesize_or_none (line 132) | def filesize_or_none(unencoded_filename):
method best_block_size (line 138) | def best_block_size(elapsed_time, bytes):
method parse_bytes (line 151) | def parse_bytes(bytestr):
method to_screen (line 160) | def to_screen(self, *args, **kargs):
method to_stderr (line 163) | def to_stderr(self, message):
method to_console_title (line 166) | def to_console_title(self, message):
method trouble (line 169) | def trouble(self, *args, **kargs):
method report_warning (line 172) | def report_warning(self, *args, **kargs):
method report_error (line 175) | def report_error(self, *args, **kargs):
method slow_down (line 178) | def slow_down(self, start_time, now, byte_counter):
method temp_name (line 194) | def temp_name(self, filename):
method undo_temp_name (line 201) | def undo_temp_name(self, filename):
method ytdl_filename (line 206) | def ytdl_filename(self, filename):
method try_rename (line 209) | def try_rename(self, old_filename, new_filename):
method try_utime (line 217) | def try_utime(self, filename, last_modified_hdr):
method report_destination (line 238) | def report_destination(self, filename):
method _report_progress_status (line 242) | def _report_progress_status(self, msg, is_last_line=False):
method report_progress (line 259) | def report_progress(self, s):
method report_resuming_byte (line 319) | def report_resuming_byte(self, resume_len):
method report_retry (line 323) | def report_retry(self, err, count, retries):
method report_file_already_downloaded (line 329) | def report_file_already_downloaded(self, file_name):
method report_unable_to_resume (line 336) | def report_unable_to_resume(self):
method download (line 340) | def download(self, filename, info_dict):
method real_download (line 396) | def real_download(self, filename, info_dict):
method _hook_progress (line 400) | def _hook_progress(self, status):
method add_progress_hook (line 404) | def add_progress_hook(self, ph):
method _debug_cmd (line 409) | def _debug_cmd(self, args, exe=None):
FILE: youtube_dl/downloader/dash.py
class DashSegmentsFD (line 13) | class DashSegmentsFD(FragmentFD):
method real_download (line 20) | def real_download(self, filename, info_dict):
FILE: youtube_dl/downloader/external.py
class ExternalFD (line 38) | class ExternalFD(FileDownloader):
method real_download (line 39) | def real_download(self, filename, info_dict):
method get_basename (line 86) | def get_basename(cls):
method exe (line 90) | def exe(self):
method available (line 94) | def available(cls):
method supports (line 98) | def supports(cls, info_dict):
method can_download (line 102) | def can_download(cls, info_dict):
method _option (line 105) | def _option(self, command_option, param):
method _bool_option (line 108) | def _bool_option(self, command_option, param, true_value='true', false...
method _valueless_option (line 111) | def _valueless_option(self, command_option, param, expected_value=True):
method _configuration_args (line 114) | def _configuration_args(self, default=[]):
method _write_cookies (line 117) | def _write_cookies(self):
method _call_downloader (line 127) | def _call_downloader(self, tmpfilename, info_dict):
method _header_items (line 141) | def _header_items(info_dict):
class CurlFD (line 146) | class CurlFD(ExternalFD):
method _make_cmd (line 149) | def _make_cmd(self, tmpfilename, info_dict):
method _call_downloader (line 173) | def _call_downloader(self, tmpfilename, info_dict):
class AxelFD (line 184) | class AxelFD(ExternalFD):
method _make_cmd (line 187) | def _make_cmd(self, tmpfilename, info_dict):
class WgetFD (line 199) | class WgetFD(ExternalFD):
method _make_cmd (line 202) | def _make_cmd(self, tmpfilename, info_dict):
class Aria2cFD (line 225) | class Aria2cFD(ExternalFD):
method _aria2c_filename (line 229) | def _aria2c_filename(fn):
method _make_cmd (line 232) | def _make_cmd(self, tmpfilename, info_dict):
class Aria2pFD (line 283) | class Aria2pFD(ExternalFD):
method available (line 299) | def available(cls):
method _call_downloader (line 302) | def _call_downloader(self, tmpfilename, info_dict):
class HttpieFD (line 343) | class HttpieFD(ExternalFD):
method available (line 345) | def available(cls):
method _make_cmd (line 348) | def _make_cmd(self, tmpfilename, info_dict):
class FFmpegFD (line 363) | class FFmpegFD(ExternalFD):
method supports (line 365) | def supports(cls, info_dict):
method available (line 369) | def available(cls):
method _call_downloader (line 373) | def _call_downloader(self, tmpfilename, info_dict):
class AVconvFD (line 516) | class AVconvFD(FFmpegFD):
function list_external_downloaders (line 527) | def list_external_downloaders():
function get_external_downloader (line 531) | def get_external_downloader(external_downloader):
FILE: youtube_dl/downloader/f4m.py
class DataTruncatedError (line 23) | class DataTruncatedError(Exception):
class FlvReader (line 27) | class FlvReader(io.BytesIO):
method read_bytes (line 33) | def read_bytes(self, n):
method read_unsigned_long_long (line 42) | def read_unsigned_long_long(self):
method read_unsigned_int (line 45) | def read_unsigned_int(self):
method read_unsigned_char (line 48) | def read_unsigned_char(self):
method read_string (line 51) | def read_string(self):
method read_box_info (line 60) | def read_box_info(self):
method read_asrt (line 72) | def read_asrt(self):
method read_afrt (line 93) | def read_afrt(self):
method read_abst (line 127) | def read_abst(self):
method read_bootstrap_info (line 178) | def read_bootstrap_info(self):
function read_bootstrap_info (line 184) | def read_bootstrap_info(bootstrap_bytes):
function build_fragments_list (line 188) | def build_fragments_list(boot_info):
function write_unsigned_int (line 210) | def write_unsigned_int(stream, val):
function write_unsigned_int_24 (line 214) | def write_unsigned_int_24(stream, val):
function write_flv_header (line 218) | def write_flv_header(stream):
function write_metadata_tag (line 227) | def write_metadata_tag(stream, metadata):
function remove_encrypted_media (line 240) | def remove_encrypted_media(media):
function _add_ns (line 246) | def _add_ns(prop, ver=1):
function get_base_url (line 250) | def get_base_url(manifest):
class F4mFD (line 259) | class F4mFD(FragmentFD):
method _get_unencrypted_media (line 266) | def _get_unencrypted_media(self, doc):
method _get_bootstrap_from_url (line 281) | def _get_bootstrap_from_url(self, bootstrap_url):
method _update_live_fragments (line 285) | def _update_live_fragments(self, bootstrap_url, latest_fragment):
method _parse_bootstrap_node (line 302) | def _parse_bootstrap_node(self, node, base_url):
method real_download (line 319) | def real_download(self, filename, info_dict):
FILE: youtube_dl/downloader/fragment.py
class HttpQuietDownloader (line 17) | class HttpQuietDownloader(HttpFD):
method to_screen (line 18) | def to_screen(self, *args, **kargs):
class FragmentFD (line 22) | class FragmentFD(FileDownloader):
method report_retry_fragment (line 56) | def report_retry_fragment(self, err, frag_index, count, retries):
method report_skip_fragment (line 61) | def report_skip_fragment(self, frag_index):
method _prepare_url (line 64) | def _prepare_url(self, info_dict, url):
method _prepare_and_start_frag_download (line 68) | def _prepare_and_start_frag_download(self, ctx):
method __do_ytdl_file (line 73) | def __do_ytdl_file(ctx):
method _read_ytdl_file (line 76) | def _read_ytdl_file(self, ctx):
method _write_ytdl_file (line 86) | def _write_ytdl_file(self, ctx):
method _download_fragment (line 98) | def _download_fragment(self, ctx, frag_url, info_dict, headers=None):
method _append_fragment (line 122) | def _append_fragment(self, ctx, frag_content):
method _prepare_frag_download (line 133) | def _prepare_frag_download(self, ctx):
method _start_frag_download (line 206) | def _start_frag_download(self, ctx):
method _finish_frag_download (line 268) | def _finish_frag_download(self, ctx):
FILE: youtube_dl/downloader/hls.py
class HlsFD (line 25) | class HlsFD(FragmentFD):
method can_download (line 31) | def can_download(manifest, info_dict):
method real_download (line 60) | def real_download(self, filename, info_dict):
FILE: youtube_dl/downloader/http.py
class HttpFD (line 27) | class HttpFD(FileDownloader):
method real_download (line 28) | def real_download(self, filename, info_dict):
FILE: youtube_dl/downloader/ism.py
function box (line 35) | def box(box_type, payload):
function full_box (line 39) | def full_box(box_type, version, flags, payload):
function write_piff_header (line 43) | def write_piff_header(stream, params):
function extract_box_data (line 193) | def extract_box_data(data, box_sequence):
class IsmFD (line 206) | class IsmFD(FragmentFD):
method real_download (line 213) | def real_download(self, filename, info_dict):
FILE: youtube_dl/downloader/niconico.py
class NiconicoDmcFD (line 15) | class NiconicoDmcFD(FileDownloader):
method real_download (line 20) | def real_download(self, filename, info_dict):
FILE: youtube_dl/downloader/rtmp.py
function rtmpdump_version (line 18) | def rtmpdump_version():
class RtmpFD (line 23) | class RtmpFD(FileDownloader):
method real_download (line 24) | def real_download(self, filename, info_dict):
FILE: youtube_dl/downloader/rtsp.py
class RtspFD (line 13) | class RtspFD(FileDownloader):
method real_download (line 14) | def real_download(self, filename, info_dict):
FILE: youtube_dl/extractor/__init__.py
function gen_extractor_classes (line 19) | def gen_extractor_classes():
function gen_extractors (line 26) | def gen_extractors():
function list_extractors (line 33) | def list_extractors(age_limit):
function get_info_extractor (line 44) | def get_info_extractor(ie_name):
FILE: youtube_dl/extractor/abc.py
class ABCIE (line 21) | class ABCIE(InfoExtractor):
method _real_extract (line 63) | def _real_extract(self, url):
class ABCIViewIE (line 106) | class ABCIViewIE(InfoExtractor):
method _real_extract (line 130) | def _real_extract(self, url):
FILE: youtube_dl/extractor/abcnews.py
class AbcNewsVideoIE (line 15) | class AbcNewsVideoIE(AMPIE):
method _real_extract (line 61) | def _real_extract(self, url):
class AbcNewsIE (line 74) | class AbcNewsIE(InfoExtractor):
method _real_extract (line 113) | def _real_extract(self, url):
FILE: youtube_dl/extractor/abcotvs.py
class ABCOTVSIE (line 15) | class ABCOTVSIE(InfoExtractor):
method _real_extract (line 57) | def _real_extract(self, url):
class ABCOTVSClipsIE (line 102) | class ABCOTVSClipsIE(InfoExtractor):
method _real_extract (line 121) | def _real_extract(self, url):
FILE: youtube_dl/extractor/academicearth.py
class AcademicEarthCourseIE (line 8) | class AcademicEarthCourseIE(InfoExtractor):
method _real_extract (line 21) | def _real_extract(self, url):
FILE: youtube_dl/extractor/acast.py
class ACastBaseIE (line 15) | class ACastBaseIE(InfoExtractor):
method _extract_episode (line 16) | def _extract_episode(self, episode, show_info):
method _extract_show_info (line 35) | def _extract_show_info(self, show):
method _call_api (line 41) | def _call_api(self, path, video_id, query=None):
class ACastIE (line 46) | class ACastIE(ACastBaseIE):
method _real_extract (line 82) | def _real_extract(self, url):
class ACastChannelIE (line 91) | class ACastChannelIE(ACastBaseIE):
method suitable (line 115) | def suitable(cls, url):
method _real_extract (line 118) | def _real_extract(self, url):
FILE: youtube_dl/extractor/adn.py
class ADNIE (line 33) | class ADNIE(InfoExtractor):
method _ass_subtitles_timecode (line 76) | def _ass_subtitles_timecode(seconds):
method _get_subtitles (line 79) | def _get_subtitles(self, sub_url, video_id):
method _real_initialize (line 140) | def _real_initialize(self):
method _real_extract (line 165) | def _real_extract(self, url):
FILE: youtube_dl/extractor/adobeconnect.py
class AdobeConnectIE (line 11) | class AdobeConnectIE(InfoExtractor):
method _real_extract (line 14) | def _real_extract(self, url):
FILE: youtube_dl/extractor/adobepass.py
class AdobePassIE (line 1325) | class AdobePassIE(InfoExtractor):
method _download_webpage_handle (line 1332) | def _download_webpage_handle(self, *args, **kwargs):
method _get_mvpd_resource (line 1340) | def _get_mvpd_resource(provider_id, title, guid, rating):
method _extract_mvpd_auth (line 1354) | def _extract_mvpd_auth(self, url, video_id, requestor_id, resource):
FILE: youtube_dl/extractor/adobetv.py
class AdobeTVBaseIE (line 20) | class AdobeTVBaseIE(InfoExtractor):
method _call_api (line 21) | def _call_api(self, path, video_id, query, note=None):
method _parse_subtitles (line 26) | def _parse_subtitles(self, video_data, url_key):
method _parse_video_data (line 39) | def _parse_video_data(self, video_data):
class AdobeTVEmbedIE (line 89) | class AdobeTVEmbedIE(AdobeTVBaseIE):
method _real_extract (line 107) | def _real_extract(self, url):
class AdobeTVIE (line 115) | class AdobeTVIE(AdobeTVBaseIE):
method _real_extract (line 134) | def _real_extract(self, url):
class AdobeTVPlaylistBaseIE (line 149) | class AdobeTVPlaylistBaseIE(AdobeTVBaseIE):
method _fetch_page (line 152) | def _fetch_page(self, display_id, query, page):
method _extract_playlist_entries (line 159) | def _extract_playlist_entries(self, display_id, query):
class AdobeTVShowIE (line 164) | class AdobeTVShowIE(AdobeTVPlaylistBaseIE):
method _real_extract (line 180) | def _real_extract(self, url):
class AdobeTVChannelIE (line 200) | class AdobeTVChannelIE(AdobeTVPlaylistBaseIE):
method _process_data (line 213) | def _process_data(self, show_data):
method _real_extract (line 217) | def _real_extract(self, url):
class AdobeTVVideoIE (line 233) | class AdobeTVVideoIE(AdobeTVBaseIE):
method _real_extract (line 250) | def _real_extract(self, url):
FILE: youtube_dl/extractor/adultswim.py
class AdultSwimIE (line 20) | class AdultSwimIE(TurnerBaseIE):
method _real_extract (line 91) | def _real_extract(self, url):
FILE: youtube_dl/extractor/aenetworks.py
class AENetworksBaseIE (line 18) | class AENetworksBaseIE(ThePlatformIE):
method _extract_aen_smil (line 37) | def _extract_aen_smil(self, smil_url, video_id, auth=None):
method _extract_aetn_info (line 79) | def _extract_aetn_info(self, domain, filter_key, filter_value, url):
class AENetworksIE (line 115) | class AENetworksIE(AENetworksBaseIE):
method _real_extract (line 185) | def _real_extract(self, url):
class AENetworksListBaseIE (line 190) | class AENetworksListBaseIE(AENetworksBaseIE):
method _call_api (line 191) | def _call_api(self, resource, slug, brand, fields):
method _real_extract (line 202) | def _real_extract(self, url):
class AENetworksCollectionIE (line 226) | class AENetworksCollectionIE(AENetworksListBaseIE):
method _get_doc (line 258) | def _get_doc(self, item):
class AENetworksShowIE (line 262) | class AENetworksShowIE(AENetworksListBaseIE):
method _get_doc (line 286) | def _get_doc(self, item):
class HistoryTopicIE (line 290) | class HistoryTopicIE(AENetworksBaseIE):
method _real_extract (line 312) | def _real_extract(self, url):
class HistoryPlayerIE (line 319) | class HistoryPlayerIE(AENetworksBaseIE):
method _real_extract (line 324) | def _real_extract(self, url):
class BiographyIE (line 329) | class BiographyIE(AENetworksBaseIE):
method _real_extract (line 349) | def _real_extract(self, url):
FILE: youtube_dl/extractor/afreecatv.py
class AfreecaTVIE (line 18) | class AfreecaTVIE(InfoExtractor):
method parse_video_key (line 170) | def parse_video_key(key):
method _real_initialize (line 178) | def _real_initialize(self):
method _login (line 181) | def _login(self):
method _real_extract (line 223) | def _real_extract(self, url):
FILE: youtube_dl/extractor/airmozilla.py
class AirMozillaIE (line 14) | class AirMozillaIE(InfoExtractor):
method _real_extract (line 34) | def _real_extract(self, url):
FILE: youtube_dl/extractor/aliexpress.py
class AliExpressLiveIE (line 12) | class AliExpressLiveIE(InfoExtractor):
method _real_extract (line 28) | def _real_extract(self, url):
FILE: youtube_dl/extractor/aljazeera.py
class AlJazeeraIE (line 9) | class AlJazeeraIE(InfoExtractor):
method _real_extract (line 34) | def _real_extract(self, url):
FILE: youtube_dl/extractor/allocine.py
class AllocineIE (line 16) | class AllocineIE(InfoExtractor):
method _real_extract (line 76) | def _real_extract(self, url):
FILE: youtube_dl/extractor/alphaporno.py
class AlphaPornoIE (line 12) | class AlphaPornoIE(InfoExtractor):
method _real_extract (line 33) | def _real_extract(self, url):
FILE: youtube_dl/extractor/alsace20tv.py
class Alsace20TVIE (line 15) | class Alsace20TVIE(InfoExtractor):
method _extract_video (line 35) | def _extract_video(self, video_id, url=None):
method _real_extract (line 64) | def _real_extract(self, url):
class Alsace20TVEmbedIE (line 69) | class Alsace20TVEmbedIE(Alsace20TVIE):
method _real_extract (line 87) | def _real_extract(self, url):
FILE: youtube_dl/extractor/amara.py
class AmaraIE (line 14) | class AmaraIE(InfoExtractor):
method _real_extract (line 64) | def _real_extract(self, url):
FILE: youtube_dl/extractor/amcnetworks.py
class AMCNetworksIE (line 15) | class AMCNetworksIE(ThePlatformIE):
method _real_extract (line 65) | def _real_extract(self, url):
FILE: youtube_dl/extractor/americastestkitchen.py
class AmericasTestKitchenIE (line 17) | class AmericasTestKitchenIE(InfoExtractor):
method _real_extract (line 87) | def _real_extract(self, url):
class AmericasTestKitchenSeasonIE (line 112) | class AmericasTestKitchenSeasonIE(InfoExtractor):
method _real_extract (line 163) | def _real_extract(self, url):
FILE: youtube_dl/extractor/amp.py
class AMPIE (line 16) | class AMPIE(InfoExtractor):
method _extract_feed_info (line 18) | def _extract_feed_info(self, url):
FILE: youtube_dl/extractor/animeondemand.py
class AnimeOnDemandIE (line 17) | class AnimeOnDemandIE(InfoExtractor):
method _login (line 55) | def _login(self):
method _real_initialize (line 95) | def _real_initialize(self):
method _real_extract (line 98) | def _real_extract(self, url):
FILE: youtube_dl/extractor/anvato.py
function md5_text (line 25) | def md5_text(s):
class AnvatoIE (line 31) | class AnvatoIE(InfoExtractor):
method __init__ (line 233) | def __init__(self, *args, **kwargs):
method _server_time (line 237) | def _server_time(self, access_key, video_id):
method _api_prefix (line 247) | def _api_prefix(self, access_key):
method _get_video_json (line 250) | def _get_video_json(self, access_key, video_id):
method _get_anvato_videos (line 273) | def _get_anvato_videos(self, access_key, video_id):
method _extract_urls (line 338) | def _extract_urls(ie, webpage, video_id):
method _extract_anvato_videos (line 362) | def _extract_anvato_videos(self, webpage, video_id):
method _real_extract (line 370) | def _real_extract(self, url):
FILE: youtube_dl/extractor/aol.py
class AolIE (line 18) | class AolIE(YahooIE):
method _real_extract (line 85) | def _real_extract(self, url):
FILE: youtube_dl/extractor/apa.py
class APAIE (line 14) | class APAIE(InfoExtractor):
method _extract_urls (line 37) | def _extract_urls(webpage):
method _real_extract (line 44) | def _real_extract(self, url):
FILE: youtube_dl/extractor/aparat.py
class AparatIE (line 14) | class AparatIE(InfoExtractor):
method _real_extract (line 36) | def _real_extract(self, url):
FILE: youtube_dl/extractor/appleconnect.py
class AppleConnectIE (line 11) | class AppleConnectIE(InfoExtractor):
method _real_extract (line 30) | def _real_extract(self, url):
FILE: youtube_dl/extractor/applepodcasts.py
class ApplePodcastsIE (line 16) | class ApplePodcastsIE(InfoExtractor):
method _real_extract (line 43) | def _real_extract(self, url):
FILE: youtube_dl/extractor/appletrailers.py
class AppleTrailersIE (line 15) | class AppleTrailersIE(InfoExtractor):
method _real_extract (line 96) | def _real_extract(self, url):
class AppleTrailersSectionIE (line 213) | class AppleTrailersSectionIE(InfoExtractor):
method _real_extract (line 275) | def _real_extract(self, url):
FILE: youtube_dl/extractor/archiveorg.py
class ArchiveOrgIE (line 12) | class ArchiveOrgIE(InfoExtractor):
method _real_extract (line 49) | def _real_extract(self, url):
FILE: youtube_dl/extractor/arcpublishing.py
class ArcPublishingIE (line 15) | class ArcPublishingIE(InfoExtractor):
method _extract_urls (line 77) | def _extract_urls(webpage):
method _real_extract (line 88) | def _real_extract(self, url):
FILE: youtube_dl/extractor/ard.py
class ARDMediathekBaseIE (line 26) | class ARDMediathekBaseIE(InfoExtractor):
method _extract_media_info (line 29) | def _extract_media_info(self, media_info_url, webpage, video_id):
method _parse_media_info (line 34) | def _parse_media_info(self, media_info, video_id, fsk):
method _extract_formats (line 65) | def _extract_formats(self, media_info, video_id):
class ARDMediathekIE (line 120) | class ARDMediathekIE(ARDMediathekBaseIE):
method suitable (line 158) | def suitable(cls, url):
method _real_extract (line 161) | def _real_extract(self, url):
class ARDIE (line 251) | class ARDIE(InfoExtractor):
method _real_extract (line 283) | def _real_extract(self, url):
class ARDBetaMediathekIE (line 361) | class ARDBetaMediathekIE(ARDMediathekBaseIE):
method _real_extract (line 400) | def _real_extract(self, url):
FILE: youtube_dl/extractor/arkena.py
class ArkenaIE (line 17) | class ArkenaIE(InfoExtractor):
method _extract_url (line 57) | def _extract_url(webpage):
method _real_extract (line 65) | def _real_extract(self, url):
FILE: youtube_dl/extractor/arnes.py
class ArnesIE (line 17) | class ArnesIE(InfoExtractor):
method _real_extract (line 59) | def _real_extract(self, url):
FILE: youtube_dl/extractor/arte.py
class ArteTVBaseIE (line 22) | class ArteTVBaseIE(InfoExtractor):
class ArteTVIE (line 27) | class ArteTVIE(ArteTVBaseIE):
method _real_extract (line 52) | def _real_extract(self, url):
class ArteTVEmbedIE (line 184) | class ArteTVEmbedIE(InfoExtractor):
method _extract_urls (line 201) | def _extract_urls(webpage):
method _real_extract (line 206) | def _real_extract(self, url):
class ArteTVPlaylistIE (line 214) | class ArteTVPlaylistIE(ArteTVBaseIE):
method _real_extract (line 229) | def _real_extract(self, url):
class ArteTVCategoryIE (line 258) | class ArteTVCategoryIE(ArteTVBaseIE):
method suitable (line 272) | def suitable(cls, url):
method _real_extract (line 277) | def _real_extract(self, url):
FILE: youtube_dl/extractor/asiancrush.py
class AsianCrushBaseIE (line 19) | class AsianCrushBaseIE(InfoExtractor):
method _call_api (line 27) | def _call_api(self, host, endpoint, video_id, query, resource):
method _download_object_data (line 33) | def _download_object_data(self, host, object_id, resource):
method _get_object_description (line 37) | def _get_object_description(self, obj):
method _parse_video_data (line 40) | def _parse_video_data(self, video):
class AsianCrushIE (line 73) | class AsianCrushIE(AsianCrushBaseIE):
method _real_extract (line 113) | def _real_extract(self, url):
class AsianCrushPlaylistIE (line 127) | class AsianCrushPlaylistIE(AsianCrushBaseIE):
method _fetch_page (line 152) | def _fetch_page(self, domain, parent_id, page):
method _real_extract (line 163) | def _real_extract(self, url):
FILE: youtube_dl/extractor/atresplayer.py
class AtresPlayerIE (line 15) | class AtresPlayerIE(InfoExtractor):
method _real_initialize (line 44) | def _real_initialize(self):
method _handle_error (line 47) | def _handle_error(self, e, code):
method _login (line 55) | def _login(self):
method _real_extract (line 77) | def _real_extract(self, url):
FILE: youtube_dl/extractor/atttechchannel.py
class ATTTechChannelIE (line 7) | class ATTTechChannelIE(InfoExtractor):
method _real_extract (line 26) | def _real_extract(self, url):
FILE: youtube_dl/extractor/atvat.py
class ATVAtIE (line 12) | class ATVAtIE(InfoExtractor):
method _real_extract (line 27) | def _real_extract(self, url):
FILE: youtube_dl/extractor/audimedia.py
class AudiMediaIE (line 11) | class AudiMediaIE(InfoExtractor):
method _real_extract (line 31) | def _real_extract(self, url):
FILE: youtube_dl/extractor/audioboom.py
class AudioBoomIE (line 11) | class AudioBoomIE(InfoExtractor):
method _real_extract (line 30) | def _real_extract(self, url):
FILE: youtube_dl/extractor/audiomack.py
class AudiomackIE (line 16) | class AudiomackIE(InfoExtractor):
method _real_extract (line 48) | def _real_extract(self, url):
class AudiomackAlbumIE (line 77) | class AudiomackAlbumIE(InfoExtractor):
method _real_extract (line 113) | def _real_extract(self, url):
FILE: youtube_dl/extractor/awaan.py
class AWAANIE (line 21) | class AWAANIE(InfoExtractor):
method _real_extract (line 24) | def _real_extract(self, url):
class AWAANBaseIE (line 38) | class AWAANBaseIE(InfoExtractor):
method _parse_video_data (line 39) | def _parse_video_data(self, video_data, video_id, is_live):
class AWAANVideoIE (line 55) | class AWAANVideoIE(AWAANBaseIE):
method _real_extract (line 77) | def _real_extract(self, url):
class AWAANLiveIE (line 100) | class AWAANLiveIE(AWAANBaseIE):
method _real_extract (line 119) | def _real_extract(self, url):
class AWAANSeasonIE (line 142) | class AWAANSeasonIE(InfoExtractor):
method _real_extract (line 155) | def _real_extract(self, url):
FILE: youtube_dl/extractor/aws.py
class AWSIE (line 12) | class AWSIE(InfoExtractor):
method _aws_execute_api (line 16) | def _aws_execute_api(self, aws_dict, video_id, query=None):
FILE: youtube_dl/extractor/azmedien.py
class AZMedienIE (line 11) | class AZMedienIE(InfoExtractor):
method _real_extract (line 53) | def _real_extract(self, url):
FILE: youtube_dl/extractor/baidu.py
class BaiduVideoIE (line 10) | class BaiduVideoIE(InfoExtractor):
method _call_api (line 31) | def _call_api(self, path, category, playlist_id, note):
method _real_extract (line 35) | def _real_extract(self, url):
FILE: youtube_dl/extractor/bandaichannel.py
class BandaiChannelIE (line 8) | class BandaiChannelIE(BrightcoveNewIE):
method _real_extract (line 29) | def _real_extract(self, url):
FILE: youtube_dl/extractor/bandcamp.py
class BandcampIE (line 26) | class BandcampIE(InfoExtractor):
method _extract_data_attr (line 84) | def _extract_data_attr(self, webpage, video_id, attr='tralbum', fatal=...
method _real_extract (line 89) | def _real_extract(self, url):
class BandcampAlbumIE (line 213) | class BandcampAlbumIE(BandcampIE):
method suitable (line 291) | def suitable(cls, url):
method _real_extract (line 296) | def _real_extract(self, url):
class BandcampWeeklyIE (line 324) | class BandcampWeeklyIE(BandcampIE):
method _real_extract (line 349) | def _real_extract(self, url):
FILE: youtube_dl/extractor/bbc.py
class BBCCoUkIE (line 40) | class BBCCoUkIE(InfoExtractor):
method _login (line 268) | def _login(self):
method _real_initialize (line 298) | def _real_initialize(self):
class MediaSelectionError (line 301) | class MediaSelectionError(Exception):
method __init__ (line 302) | def __init__(self, id):
method _extract_asx_playlist (line 305) | def _extract_asx_playlist(self, connection, programme_id):
method _extract_items (line 309) | def _extract_items(self, playlist):
method _extract_medias (line 312) | def _extract_medias(self, media_selection):
method _extract_connections (line 318) | def _extract_connections(self, media):
method _get_subtitles (line 321) | def _get_subtitles(self, media, programme_id):
method _raise_extractor_error (line 340) | def _raise_extractor_error(self, media_selection_error):
method _download_media_selector (line 345) | def _download_media_selector(self, programme_id):
method _download_media_selector_url (line 358) | def _download_media_selector_url(self, url, programme_id=None):
method _process_media_selector (line 364) | def _process_media_selector(self, media_selection, programme_id):
method _download_playlist (line 459) | def _download_playlist(self, playlist_id):
method _process_legacy_playlist_url (line 485) | def _process_legacy_playlist_url(self, url, display_id):
method _process_legacy_playlist (line 489) | def _process_legacy_playlist(self, playlist_id):
method _download_legacy_playlist_url (line 493) | def _download_legacy_playlist_url(self, url, playlist_id=None):
method _extract_from_legacy_playlist (line 497) | def _extract_from_legacy_playlist(self, playlist, playlist_id):
method _real_extract (line 541) | def _real_extract(self, url):
class BBCIE (line 595) | class BBCIE(BBCCoUkIE):
method suitable (line 851) | def suitable(cls, url):
method _extract_from_media_meta (line 856) | def _extract_from_media_meta(self, media_meta, video_id):
method _extract_from_playlist_sxml (line 883) | def _extract_from_playlist_sxml(self, url, playlist_id, timestamp):
method _real_extract (line 897) | def _real_extract(self, url):
class BBCCoUkArticleIE (line 1344) | class BBCCoUkArticleIE(InfoExtractor):
method _real_extract (line 1360) | def _real_extract(self, url):
class BBCCoUkPlaylistBaseIE (line 1374) | class BBCCoUkPlaylistBaseIE(InfoExtractor):
method _entries (line 1375) | def _entries(self, webpage, url, playlist_id):
method _real_extract (line 1394) | def _real_extract(self, url):
class BBCCoUkIPlayerPlaylistBaseIE (line 1406) | class BBCCoUkIPlayerPlaylistBaseIE(InfoExtractor):
method _get_default (line 1410) | def _get_default(episode, key, default_key='default'):
method _get_description (line 1413) | def _get_description(self, data):
method _fetch_page (line 1417) | def _fetch_page(self, programme_id, per_page, series_id, page):
method _real_extract (line 1442) | def _real_extract(self, url):
class BBCCoUkIPlayerEpisodesIE (line 1456) | class BBCCoUkIPlayerEpisodesIE(BBCCoUkIPlayerPlaylistBaseIE):
method _get_episode_image (line 1507) | def _get_episode_image(self, episode):
method _get_episode_field (line 1510) | def _get_episode_field(self, episode, field):
method _get_elements (line 1514) | def _get_elements(data):
method _get_episode (line 1518) | def _get_episode(element):
method _call_api (line 1521) | def _call_api(self, pid, per_page, page=1, series_id=None):
method _get_playlist_data (line 1538) | def _get_playlist_data(data):
method _get_playlist_title (line 1541) | def _get_playlist_title(self, data):
class BBCCoUkIPlayerGroupIE (line 1545) | class BBCCoUkIPlayerGroupIE(BBCCoUkIPlayerPlaylistBaseIE):
method _get_episode_image (line 1579) | def _get_episode_image(self, episode):
method _get_episode_field (line 1582) | def _get_episode_field(self, episode, field):
method _get_elements (line 1586) | def _get_elements(data):
method _get_episode (line 1590) | def _get_episode(element):
method _call_api (line 1593) | def _call_api(self, pid, per_page, page=1, series_id=None):
method _get_playlist_data (line 1602) | def _get_playlist_data(data):
method _get_playlist_title (line 1605) | def _get_playlist_title(self, data):
class BBCCoUkPlaylistIE (line 1609) | class BBCCoUkPlaylistIE(BBCCoUkPlaylistBaseIE):
method _extract_title_and_description (line 1651) | def _extract_title_and_description(self, webpage):
FILE: youtube_dl/extractor/beatport.py
class BeatportIE (line 11) | class BeatportIE(InfoExtractor):
method _real_extract (line 42) | def _real_extract(self, url):
FILE: youtube_dl/extractor/beeg.py
class BeegIE (line 14) | class BeegIE(InfoExtractor):
method _real_extract (line 47) | def _real_extract(self, url):
FILE: youtube_dl/extractor/behindkink.py
class BehindKinkIE (line 10) | class BehindKinkIE(InfoExtractor):
method _real_extract (line 26) | def _real_extract(self, url):
FILE: youtube_dl/extractor/bellmedia.py
class BellMediaIE (line 9) | class BellMediaIE(InfoExtractor):
method _real_extract (line 80) | def _real_extract(self, url):
FILE: youtube_dl/extractor/bet.py
class BetIE (line 7) | class BetIE(MTVServicesInfoExtractor):
method _get_feed_query (line 54) | def _get_feed_query(self, uri):
method _extract_mgid (line 59) | def _extract_mgid(self, webpage):
method _real_extract (line 62) | def _real_extract(self, url):
FILE: youtube_dl/extractor/bfi.py
class BFIPlayerIE (line 10) | class BFIPlayerIE(InfoExtractor):
method _real_extract (line 25) | def _real_extract(self, url):
FILE: youtube_dl/extractor/bfmtv.py
class BFMTVBaseIE (line 10) | class BFMTVBaseIE(InfoExtractor):
method _brightcove_url_result (line 16) | def _brightcove_url_result(self, video_id, video_block):
class BFMTVIE (line 24) | class BFMTVIE(BFMTVBaseIE):
method _real_extract (line 40) | def _real_extract(self, url):
class BFMTVLiveIE (line 48) | class BFMTVLiveIE(BFMTVIE):
class BFMTVArticleIE (line 70) | class BFMTVArticleIE(BFMTVBaseIE):
method _real_extract (line 89) | def _real_extract(self, url):
FILE: youtube_dl/extractor/bibeltv.py
class BibelTVIE (line 7) | class BibelTVIE(InfoExtractor):
method _real_extract (line 27) | def _real_extract(self, url):
FILE: youtube_dl/extractor/bigflix.py
class BigflixIE (line 13) | class BigflixIE(InfoExtractor):
method _real_extract (line 34) | def _real_extract(self, url):
FILE: youtube_dl/extractor/bigo.py
class BigoIE (line 8) | class BigoIE(InfoExtractor):
method _real_extract (line 30) | def _real_extract(self, url):
FILE: youtube_dl/extractor/bild.py
class BildIE (line 11) | class BildIE(InfoExtractor):
method _real_extract (line 27) | def _real_extract(self, url):
FILE: youtube_dl/extractor/bilibili.py
class BiliBiliIE (line 26) | class BiliBiliIE(InfoExtractor):
method _report_error (line 115) | def _report_error(self, result):
method _real_extract (line 123) | def _real_extract(self, url):
class BiliBiliBangumiIE (line 261) | class BiliBiliBangumiIE(InfoExtractor):
method suitable (line 301) | def suitable(cls, url):
method _real_extract (line 304) | def _real_extract(self, url):
class BilibiliAudioBaseIE (line 328) | class BilibiliAudioBaseIE(InfoExtractor):
method _call_api (line 329) | def _call_api(self, path, sid, query=None):
class BilibiliAudioIE (line 337) | class BilibiliAudioIE(BilibiliAudioBaseIE):
method _real_extract (line 363) | def _real_extract(self, url):
class BilibiliAudioAlbumIE (line 406) | class BilibiliAudioAlbumIE(BilibiliAudioBaseIE):
method _real_extract (line 418) | def _real_extract(self, url):
class BiliBiliPlayerIE (line 445) | class BiliBiliPlayerIE(InfoExtractor):
method _real_extract (line 452) | def _real_extract(self, url):
FILE: youtube_dl/extractor/biobiochiletv.py
class BioBioChileTVIE (line 11) | class BioBioChileTVIE(InfoExtractor):
method _real_extract (line 61) | def _real_extract(self, url):
FILE: youtube_dl/extractor/biqle.py
class BIQLEIE (line 13) | class BIQLEIE(InfoExtractor):
method _real_extract (line 42) | def _real_extract(self, url):
FILE: youtube_dl/extractor/bitchute.py
class BitChuteIE (line 15) | class BitChuteIE(InfoExtractor):
method _real_extract (line 37) | def _real_extract(self, url):
class BitChuteChannelIE (line 94) | class BitChuteChannelIE(InfoExtractor):
method _entries (line 106) | def _entries(self, channel_id):
method _real_extract (line 139) | def _real_extract(self, url):
FILE: youtube_dl/extractor/bleacherreport.py
class BleacherReportIE (line 13) | class BleacherReportIE(InfoExtractor):
method _real_extract (line 45) | def _real_extract(self, url):
class BleacherReportCMSIE (line 89) | class BleacherReportCMSIE(AMPIE):
method _real_extract (line 108) | def _real_extract(self, url):
FILE: youtube_dl/extractor/blerp.py
class BlerpIE (line 13) | class BlerpIE(InfoExtractor):
method _real_extract (line 143) | def _real_extract(self, url):
FILE: youtube_dl/extractor/bloomberg.py
class BloombergIE (line 9) | class BloombergIE(InfoExtractor):
method _real_extract (line 48) | def _real_extract(self, url):
FILE: youtube_dl/extractor/bokecc.py
class BokeCCBaseIE (line 11) | class BokeCCBaseIE(InfoExtractor):
method _extract_bokecc_formats (line 12) | def _extract_bokecc_formats(self, webpage, video_id, format_id=None):
class BokeCCIE (line 34) | class BokeCCIE(BokeCCBaseIE):
method _real_extract (line 47) | def _real_extract(self, url):
FILE: youtube_dl/extractor/bongacams.py
class BongaCamsIE (line 15) | class BongaCamsIE(InfoExtractor):
method _real_extract (line 40) | def _real_extract(self, url):
FILE: youtube_dl/extractor/bostonglobe.py
class BostonGlobeIE (line 13) | class BostonGlobeIE(InfoExtractor):
method _real_extract (line 46) | def _real_extract(self, url):
FILE: youtube_dl/extractor/box.py
class BoxIE (line 16) | class BoxIE(InfoExtractor):
method _real_extract (line 32) | def _real_extract(self, url):
FILE: youtube_dl/extractor/bpb.py
class BpbIE (line 13) | class BpbIE(InfoExtractor):
method _real_extract (line 29) | def _real_extract(self, url):
FILE: youtube_dl/extractor/br.py
class BRIE (line 19) | class BRIE(InfoExtractor):
method _real_extract (line 88) | def _real_extract(self, url):
method _extract_formats (line 124) | def _extract_formats(self, assets, media_id):
method _extract_thumbnails (line 167) | def _extract_thumbnails(self, variants, base_url):
class BRMediathekIE (line 177) | class BRMediathekIE(InfoExtractor):
method _real_extract (line 194) | def _real_extract(self, url):
FILE: youtube_dl/extractor/bravotv.py
class BravoTVIE (line 14) | class BravoTVIE(AdobePassIE):
method _real_extract (line 36) | def _real_extract(self, url):
FILE: youtube_dl/extractor/breakcom.py
class BreakIE (line 13) | class BreakIE(InfoExtractor):
method _real_extract (line 43) | def _real_extract(self, url):
FILE: youtube_dl/extractor/brightcove.py
class BrightcoveLegacyIE (line 40) | class BrightcoveLegacyIE(InfoExtractor):
method _build_brightcove_url (line 151) | def _build_brightcove_url(cls, object_str):
method _build_brightcove_url_from_js (line 221) | def _build_brightcove_url_from_js(cls, object_js):
method _make_brightcove_url (line 239) | def _make_brightcove_url(cls, params):
method _extract_brightcove_url (line 244) | def _extract_brightcove_url(cls, webpage):
method _extract_brightcove_urls (line 252) | def _extract_brightcove_urls(cls, webpage):
method _real_extract (line 286) | def _real_extract(self, url):
class BrightcoveNewIE (line 341) | class BrightcoveNewIE(AdobePassIE):
method _extract_url (line 406) | def _extract_url(ie, webpage):
method _extract_urls (line 411) | def _extract_urls(ie, webpage):
method _parse_brightcove_metadata (line 471) | def _parse_brightcove_metadata(self, json_data, video_id, headers={}):
method _real_extract (line 589) | def _real_extract(self, url):
FILE: youtube_dl/extractor/businessinsider.py
class BusinessInsiderIE (line 8) | class BusinessInsiderIE(InfoExtractor):
method _real_extract (line 37) | def _real_extract(self, url):
FILE: youtube_dl/extractor/buzzfeed.py
class BuzzFeedIE (line 11) | class BuzzFeedIE(InfoExtractor):
method _real_extract (line 71) | def _real_extract(self, url):
FILE: youtube_dl/extractor/byutv.py
class BYUtvIE (line 14) | class BYUtvIE(InfoExtractor):
method _real_extract (line 54) | def _real_extract(self, url):
FILE: youtube_dl/extractor/c56.py
class C56IE (line 10) | class C56IE(InfoExtractor):
method _real_extract (line 33) | def _real_extract(self, url):
FILE: youtube_dl/extractor/caffeine.py
class CaffeineTVIE (line 17) | class CaffeineTVIE(InfoExtractor):
method _real_extract (line 36) | def _real_extract(self, url):
FILE: youtube_dl/extractor/callin.py
class CallinIE (line 13) | class CallinIE(InfoExtractor):
method _search_nextjs_data (line 39) | def _search_nextjs_data(self, webpage, video_id, transform_source=None...
method _real_extract (line 46) | def _real_extract(self, url):
FILE: youtube_dl/extractor/camdemy.py
class CamdemyIE (line 19) | class CamdemyIE(InfoExtractor):
method _real_extract (line 66) | def _real_extract(self, url):
class CamdemyFolderIE (line 114) | class CamdemyFolderIE(InfoExtractor):
method _real_extract (line 143) | def _real_extract(self, url):
FILE: youtube_dl/extractor/cammodels.py
class CamModelsIE (line 11) | class CamModelsIE(InfoExtractor):
method _real_extract (line 19) | def _real_extract(self, url):
FILE: youtube_dl/extractor/camtube.py
class CamTubeIE (line 11) | class CamTubeIE(InfoExtractor):
method _real_extract (line 32) | def _real_extract(self, url):
FILE: youtube_dl/extractor/camwithher.py
class CamWithHerIE (line 13) | class CamWithHerIE(InfoExtractor):
method _real_extract (line 44) | def _real_extract(self, url):
FILE: youtube_dl/extractor/canalc2.py
class Canalc2IE (line 10) | class Canalc2IE(InfoExtractor):
method _real_extract (line 28) | def _real_extract(self, url):
FILE: youtube_dl/extractor/canalplus.py
class CanalplusIE (line 16) | class CanalplusIE(InfoExtractor):
method _real_extract (line 52) | def _real_extract(self, url):
FILE: youtube_dl/extractor/canvas.py
class CanvasIE (line 23) | class CanvasIE(InfoExtractor):
method _real_extract (line 49) | def _real_extract(self, url):
class CanvasEenIE (line 131) | class CanvasEenIE(InfoExtractor):
method _real_extract (line 188) | def _real_extract(self, url):
class VrtNUIE (line 214) | class VrtNUIE(GigyaBaseIE):
method _real_initialize (line 265) | def _real_initialize(self):
method _login (line 268) | def _login(self):
method _real_extract (line 312) | def _real_extract(self, url):
class DagelijkseKostIE (line 339) | class DagelijkseKostIE(InfoExtractor):
method _real_extract (line 357) | def _real_extract(self, url):
FILE: youtube_dl/extractor/carambatv.py
class CarambaTVIE (line 15) | class CarambaTVIE(InfoExtractor):
method _real_extract (line 32) | def _real_extract(self, url):
class CarambaTVPageIE (line 63) | class CarambaTVPageIE(InfoExtractor):
method _real_extract (line 79) | def _real_extract(self, url):
FILE: youtube_dl/extractor/cartoonnetwork.py
class CartoonNetworkIE (line 8) | class CartoonNetworkIE(TurnerBaseIE):
method _real_extract (line 24) | def _real_extract(self, url):
FILE: youtube_dl/extractor/cbc.py
class CBCIE (line 32) | class CBCIE(InfoExtractor):
method suitable (line 114) | def suitable(cls, url):
method _extract_player_init (line 117) | def _extract_player_init(self, player_init, display_id):
method _real_extract (line 133) | def _real_extract(self, url):
class CBCPlayerIE (line 156) | class CBCPlayerIE(InfoExtractor):
method _real_extract (line 199) | def _real_extract(self, url):
class CBCWatchBaseIE (line 212) | class CBCWatchBaseIE(InfoExtractor):
method _signature (line 226) | def _signature(self, email, password):
method _call_api (line 245) | def _call_api(self, path, video_id):
method _real_initialize (line 264) | def _real_initialize(self):
method _valid_device_token (line 274) | def _valid_device_token(self):
method _cache_device_key (line 277) | def _cache_device_key(self):
method _register_device (line 281) | def _register_device(self):
method _parse_rss_feed (line 305) | def _parse_rss_feed(self, rss):
class CBCWatchVideoIE (line 361) | class CBCWatchVideoIE(CBCWatchBaseIE):
method _real_extract (line 370) | def _real_extract(self, url):
class CBCWatchIE (line 401) | class CBCWatchIE(CBCWatchBaseIE):
method _real_extract (line 434) | def _real_extract(self, url):
class CBCOlympicsIE (line 440) | class CBCOlympicsIE(InfoExtractor):
method _real_extract (line 448) | def _real_extract(self, url):
FILE: youtube_dl/extractor/cbs.py
class CBSBaseIE (line 14) | class CBSBaseIE(ThePlatformFeedIE):
method _parse_smil_subtitles (line 15) | def _parse_smil_subtitles(self, smil, namespace=None, subtitles_lang='...
class CBSIE (line 29) | class CBSIE(CBSBaseIE):
method _extract_video_info (line 60) | def _extract_video_info(self, content_id, site='cbs', mpx_acc=21983115...
method _real_extract (line 113) | def _real_extract(self, url):
FILE: youtube_dl/extractor/cbsinteractive.py
class CBSInteractiveIE (line 10) | class CBSInteractiveIE(CBSIE):
method _real_extract (line 73) | def _real_extract(self, url):
FILE: youtube_dl/extractor/cbslocal.py
class CBSLocalIE (line 13) | class CBSLocalIE(AnvatoIE):
method _real_extract (line 47) | def _real_extract(self, url):
class CBSLocalArticleIE (line 53) | class CBSLocalArticleIE(AnvatoIE):
method _real_extract (line 97) | def _real_extract(self, url):
FILE: youtube_dl/extractor/cbsnews.py
class CBSNewsEmbedIE (line 18) | class CBSNewsEmbedIE(CBSIE):
method _real_extract (line 26) | def _real_extract(self, url):
class CBSNewsIE (line 33) | class CBSNewsIE(CBSIE):
method _real_extract (line 92) | def _real_extract(self, url):
class CBSNewsLiveVideoIE (line 111) | class CBSNewsLiveVideoIE(InfoExtractor):
method _real_extract (line 128) | def _real_extract(self, url):
FILE: youtube_dl/extractor/cbssports.py
class CBSSportsEmbedIE (line 14) | class CBSSportsEmbedIE(InfoExtractor):
method _real_extract (line 32) | def _real_extract(self, url):
class CBSSportsBaseIE (line 72) | class CBSSportsBaseIE(InfoExtractor):
method _real_extract (line 73) | def _real_extract(self, url):
class CBSSportsIE (line 82) | class CBSSportsIE(CBSSportsBaseIE):
class TwentyFourSevenSportsIE (line 99) | class TwentyFourSevenSportsIE(CBSSportsBaseIE):
FILE: youtube_dl/extractor/ccc.py
class CCCIE (line 13) | class CCCIE(InfoExtractor):
method _real_extract (line 37) | def _real_extract(self, url):
class CCCPlaylistIE (line 86) | class CCCPlaylistIE(InfoExtractor):
method _real_extract (line 98) | def _real_extract(self, url):
FILE: youtube_dl/extractor/ccma.py
class CCMAIE (line 20) | class CCMAIE(InfoExtractor):
method _real_extract (line 63) | def _real_extract(self, url):
FILE: youtube_dl/extractor/cctv.py
class CCTVIE (line 15) | class CCTVIE(InfoExtractor):
method _real_extract (line 128) | def _real_extract(self, url):
FILE: youtube_dl/extractor/cda.py
class CDAIE (line 25) | class CDAIE(InfoExtractor):
method _download_age_confirm_page (line 78) | def _download_age_confirm_page(self, url, video_id, *args, **kwargs):
method _real_extract (line 89) | def _real_extract(self, url):
FILE: youtube_dl/extractor/ceskatelevize.py
class CeskaTelevizeIE (line 22) | class CeskaTelevizeIE(InfoExtractor):
method _search_nextjs_data (line 100) | def _search_nextjs_data(self, webpage, video_id, **kw):
method _real_extract (line 107) | def _real_extract(self, url):
method _get_subtitles (line 268) | def _get_subtitles(self, episode_id, subs):
method _fix_subtitles (line 280) | def _fix_subtitles(subtitles):
FILE: youtube_dl/extractor/channel9.py
class Channel9IE (line 16) | class Channel9IE(InfoExtractor):
method _extract_urls (line 85) | def _extract_urls(webpage):
method _extract_list (line 90) | def _extract_list(self, video_id, rss_url=None):
method _real_extract (line 99) | def _real_extract(self, url):
FILE: youtube_dl/extractor/charlierose.py
class CharlieRoseIE (line 7) | class CharlieRoseIE(InfoExtractor):
method _real_extract (line 34) | def _real_extract(self, url):
FILE: youtube_dl/extractor/chaturbate.py
class ChaturbateIE (line 13) | class ChaturbateIE(InfoExtractor):
method _real_extract (line 38) | def _real_extract(self, url):
FILE: youtube_dl/extractor/chilloutzone.py
class ChilloutzoneIE (line 15) | class ChilloutzoneIE(InfoExtractor):
method _real_extract (line 53) | def _real_extract(self, url):
FILE: youtube_dl/extractor/chirbit.py
class ChirbitIE (line 11) | class ChirbitIE(InfoExtractor):
method _real_extract (line 35) | def _real_extract(self, url):
class ChirbitProfileIE (line 71) | class ChirbitProfileIE(InfoExtractor):
method _real_extract (line 82) | def _real_extract(self, url):
FILE: youtube_dl/extractor/cinchcast.py
class CinchcastIE (line 11) | class CinchcastIE(InfoExtractor):
method _real_extract (line 27) | def _real_extract(self, url):
FILE: youtube_dl/extractor/cinemax.py
class CinemaxIE (line 9) | class CinemaxIE(HBOBaseIE):
method _real_extract (line 25) | def _real_extract(self, url):
FILE: youtube_dl/extractor/ciscolive.py
class CiscoLiveBaseIE (line 20) | class CiscoLiveBaseIE(InfoExtractor):
method _call_api (line 34) | def _call_api(self, ep, rf_id, query, referrer, note=None):
method _parse_rf_item (line 41) | def _parse_rf_item(self, rf_item):
class CiscoLiveSessionIE (line 67) | class CiscoLiveSessionIE(CiscoLiveBaseIE):
method _real_extract (line 90) | def _real_extract(self, url):
class CiscoLiveSearchIE (line 96) | class CiscoLiveSearchIE(CiscoLiveBaseIE):
method suitable (line 113) | def suitable(cls, url):
method _check_bc_id_exists (line 117) | def _check_bc_id_exists(rf_item):
method _entries (line 120) | def _entries(self, query, url):
method _real_extract (line 147) | def _real_extract(self, url):
FILE: youtube_dl/extractor/cjsw.py
class CJSWIE (line 13) | class CJSWIE(InfoExtractor):
method _real_extract (line 32) | def _real_extract(self, url):
FILE: youtube_dl/extractor/clipchamp.py
class ClipchampIE (line 16) | class ClipchampIE(InfoExtractor):
method _real_extract (line 38) | def _real_extract(self, url):
FILE: youtube_dl/extractor/cliphunter.py
class CliphunterIE (line 10) | class CliphunterIE(InfoExtractor):
method _real_extract (line 40) | def _real_extract(self, url):
FILE: youtube_dl/extractor/clippit.py
class ClippitIE (line 14) | class ClippitIE(InfoExtractor):
method _real_extract (line 33) | def _real_extract(self, url):
FILE: youtube_dl/extractor/cliprs.py
class ClipRsIE (line 7) | class ClipRsIE(OnetBaseIE):
method _real_extract (line 23) | def _real_extract(self, url):
FILE: youtube_dl/extractor/clipsyndicate.py
class ClipsyndicateIE (line 10) | class ClipsyndicateIE(InfoExtractor):
method _real_extract (line 28) | def _real_extract(self, url):
FILE: youtube_dl/extractor/closertotruth.py
class CloserToTruthIE (line 9) | class CloserToTruthIE(InfoExtractor):
method _real_extract (line 48) | def _real_extract(self, url):
FILE: youtube_dl/extractor/cloudflarestream.py
class CloudflareStreamIE (line 10) | class CloudflareStreamIE(InfoExtractor):
method _extract_urls (line 44) | def _extract_urls(webpage):
method _real_extract (line 51) | def _real_extract(self, url):
FILE: youtube_dl/extractor/cloudy.py
class CloudyIE (line 11) | class CloudyIE(InfoExtractor):
method _real_extract (line 29) | def _real_extract(self, url):
FILE: youtube_dl/extractor/clubic.py
class ClubicIE (line 11) | class ClubicIE(InfoExtractor):
method _real_extract (line 29) | def _real_extract(self, url):
FILE: youtube_dl/extractor/clyp.py
class ClypIE (line 14) | class ClypIE(InfoExtractor):
method _real_extract (line 44) | def _real_extract(self, url):
FILE: youtube_dl/extractor/cmt.py
class CMTIE (line 6) | class CMTIE(MTVIE):
method _extract_mgid (line 42) | def _extract_mgid(self, webpage):
method _real_extract (line 50) | def _real_extract(self, url):
FILE: youtube_dl/extractor/cnbc.py
class CNBCIE (line 10) | class CNBCIE(InfoExtractor):
method _real_extract (line 29) | def _real_extract(self, url):
class CNBCVideoIE (line 41) | class CNBCVideoIE(InfoExtractor):
method _real_extract (line 59) | def _real_extract(self, url):
FILE: youtube_dl/extractor/cnn.py
class CNNIE (line 10) | class CNNIE(TurnerBaseIE):
method _extract_timestamp (line 86) | def _extract_timestamp(self, video_data):
method _real_extract (line 90) | def _real_extract(self, url):
class CNNBlogsIE (line 106) | class CNNBlogsIE(InfoExtractor):
method _real_extract (line 122) | def _real_extract(self, url):
class CNNArticleIE (line 128) | class CNNArticleIE(InfoExtractor):
method _real_extract (line 144) | def _real_extract(self, url):
FILE: youtube_dl/extractor/comedycentral.py
class ComedyCentralIE (line 6) | class ComedyCentralIE(MTVServicesInfoExtractor):
class ComedyCentralTVIE (line 30) | class ComedyCentralTVIE(MTVServicesInfoExtractor):
method _get_feed_query (line 44) | def _get_feed_query(self, uri):
FILE: youtube_dl/extractor/common.py
class InfoExtractor (line 98) | class InfoExtractor(object):
method __init__ (line 429) | def __init__(self, downloader=None):
method __match_valid_url (line 436) | def __match_valid_url(cls, url):
method suitable (line 453) | def suitable(cls, url):
method _match_id (line 460) | def _match_id(cls, url):
method working (line 466) | def working(cls):
method initialize (line 470) | def initialize(self):
method _initialize_geo_bypass (line 480) | def _initialize_geo_bypass(self, geo_bypass_context):
method extract (line 568) | def extract(self, url):
method __maybe_fake_ip_and_retry (line 589) | def __maybe_fake_ip_and_retry(self, countries):
method set_downloader (line 604) | def set_downloader(self, downloader):
method cache (line 609) | def cache(self):
method cookiejar (line 613) | def cookiejar(self):
method _real_initialize (line 616) | def _real_initialize(self):
method _real_extract (line 620) | def _real_extract(self, url):
method ie_key (line 625) | def ie_key(cls):
method IE_NAME (line 630) | def IE_NAME(self):
method __can_accept_status_code (line 634) | def __can_accept_status_code(err, expected_status):
method _request_webpage (line 647) | def _request_webpage(self, url_or_request, video_id, note=None, errnot...
method _download_webpage_handle (line 705) | def _download_webpage_handle(self, url_or_request, video_id, note=None...
method _guess_encoding_from_content (line 723) | def _guess_encoding_from_content(content_type, webpage_bytes):
method __check_blocked (line 739) | def __check_blocked(self, content):
method _webpage_read_content (line 767) | def _webpage_read_content(self, urlh, url_or_request, video_id, note=N...
method _download_webpage (line 804) | def _download_webpage(
method _download_xml_handle (line 862) | def _download_xml_handle(
method _download_xml (line 883) | def _download_xml(
method _parse_xml (line 900) | def _parse_xml(self, xml_string, video_id, transform_source=None, fata...
method _download_json_handle (line 912) | def _download_json_handle(
method _download_json (line 933) | def _download_json(
method _parse_json (line 950) | def _parse_json(self, json_string, video_id, transform_source=None, fa...
method __ie_msg (line 962) | def __ie_msg(self, *msg):
method report_warning (line 966) | def report_warning(self, msg, *args, **kwargs):
method to_screen (line 976) | def to_screen(self, msg):
method write_debug (line 980) | def write_debug(self, msg, only_once=False):
method get_param (line 985) | def get_param(self, name, *args, **kwargs):
method report_drm (line 991) | def report_drm(self, video_id):
method report_extraction (line 994) | def report_extraction(self, id_or_name):
method report_download_webpage (line 998) | def report_download_webpage(self, video_id):
method report_age_confirmation (line 1002) | def report_age_confirmation(self):
method report_login (line 1006) | def report_login(self):
method raise_login_required (line 1011) | def raise_login_required(msg='This video is only available for registe...
method raise_geo_restricted (line 1017) | def raise_geo_restricted(msg='This video is not available from your lo...
method raise_no_formats (line 1020) | def raise_no_formats(self, msg, expected=False, video_id=None):
method url_result (line 1031) | def url_result(url, ie=None, video_id=None, video_title=None):
method playlist_from_matches (line 1043) | def playlist_from_matches(self, matches, playlist_id=None, playlist_ti...
method playlist_result (line 1051) | def playlist_result(entries, playlist_id=None, playlist_title=None, pl...
method _search_regex (line 1063) | def _search_regex(self, pattern, string, name, default=NO_DEFAULT, fat...
method _search_json (line 1099) | def _search_json(self, start_pattern, string, name, video_id, **kwargs):
method _html_search_regex (line 1153) | def _html_search_regex(self, pattern, string, name, default=NO_DEFAULT...
method _get_netrc_login_info (line 1162) | def _get_netrc_login_info(self, netrc_machine=None):
method _get_login_info (line 1182) | def _get_login_info(self, username_option='username', password_option=...
method _get_tfa_info (line 1205) | def _get_tfa_info(self, note='two-factor verification code'):
method _og_regexes (line 1223) | def _og_regexes(prop):
method _meta_regex (line 1234) | def _meta_regex(prop):
method _og_search_property (line 1239) | def _og_search_property(self, prop, html, name=None, **kargs):
method _og_search_thumbnail (line 1252) | def _og_search_thumbnail(self, html, **kargs):
method _og_search_description (line 1255) | def _og_search_description(self, html, **kargs):
method _og_search_title (line 1258) | def _og_search_title(self, html, **kargs):
method _og_search_video_url (line 1261) | def _og_search_video_url(self, html, name='video url', secure=True, **...
method _og_search_url (line 1267) | def _og_search_url(self, html, **kargs):
method _html_search_meta (line 1270) | def _html_search_meta(self, name, html, display_name=None, fatal=False...
method _dc_search_uploader (line 1279) | def _dc_search_uploader(self, html):
method _rta_search (line 1282) | def _rta_search(self, html):
method _media_rating_search (line 1290) | def _media_rating_search(self, html):
method _family_friendly_search (line 1306) | def _family_friendly_search(self, html):
method _twitter_search_player (line 1322) | def _twitter_search_player(self, html):
method _search_json_ld (line 1326) | def _search_json_ld(self, html, video_id, expected_type=None, **kwargs):
method _json_ld (line 1355) | def _json_ld(self, json_ld, video_id, fatal=True, expected_type=None):
method _search_nextjs_data (line 1485) | def _search_nextjs_data(self, webpage, video_id, **kw):
method _search_nuxt_data (line 1499) | def _search_nuxt_data(self, webpage, video_id, *args, **kwargs):
method _hidden_inputs (line 1528) | def _hidden_inputs(html):
method _form_hidden_inputs (line 1543) | def _form_hidden_inputs(self, form_id, html):
method _sort_formats (line 1549) | def _sort_formats(self, formats, field_preference=None):
method _check_formats (line 1625) | def _check_formats(self, formats, video_id):
method _remove_duplicate_formats (line 1634) | def _remove_duplicate_formats(formats):
method _is_valid_url (line 1643) | def _is_valid_url(self, url, video_id, item='video', headers={}):
method http_scheme (line 1657) | def http_scheme(self):
method _proto_relative_url (line 1664) | def _proto_relative_url(self, url, scheme=None):
method _sleep (line 1674) | def _sleep(self, timeout, video_id, msg_template=None):
method _extract_f4m_formats (line 1681) | def _extract_f4m_formats(self, manifest_url, video_id, preference=None...
method _parse_f4m_formats (line 1699) | def _parse_f4m_formats(self, manifest, manifest_url, video_id, prefere...
method _m3u8_meta_format (line 1800) | def _m3u8_meta_format(self, m3u8_url, ext=None, preference=None, m3u8_...
method _report_ignoring_subs (line 1811) | def _report_ignoring_subs(self, name):
method _extract_m3u8_formats (line 1817) | def _extract_m3u8_formats(self, m3u8_url, video_id, ext=None,
method _parse_m3u8_formats (line 1838) | def _parse_m3u8_formats(self, m3u8_doc, m3u8_url, ext=None,
method _xpath_ns (line 2017) | def _xpath_ns(path, namespace=None):
method _extract_smil_formats (line 2028) | def _extract_smil_formats(self, smil_url, video_id, fatal=True, f4m_pa...
method _extract_smil_info (line 2040) | def _extract_smil_info(self, smil_url, video_id, fatal=True, f4m_param...
method _download_smil (line 2046) | def _download_smil(self, smil_url, video_id, fatal=True, transform_sou...
method _parse_smil (line 2051) | def _parse_smil(self, smil, smil_url, video_id, f4m_params=None):
method _parse_smil_namespace (line 2091) | def _parse_smil_namespace(self, smil):
method _parse_smil_formats (line 2095) | def _parse_smil_formats(self, smil, smil_url, video_id, namespace=None...
method _parse_smil_subtitles (line 2190) | def _parse_smil_subtitles(self, smil, namespace=None, subtitles_lang='...
method _extract_xspf_playlist (line 2206) | def _extract_xspf_playlist(self, xspf_url, playlist_id, fatal=True):
method _parse_xspf (line 2216) | def _parse_xspf(self, xspf_doc, playlist_id, xspf_url=None, xspf_base_...
method _extract_mpd_formats (line 2257) | def _extract_mpd_formats(self, *args, **kwargs):
method _extract_mpd_formats_and_subtitles (line 2263) | def _extract_mpd_formats_and_subtitles(
method _parse_mpd_formats (line 2289) | def _parse_mpd_formats(self, *args, **kwargs):
method _parse_mpd_formats_and_subtitles (line 2295) | def _parse_mpd_formats_and_subtitles(
method _extract_ism_formats (line 2676) | def _extract_ism_formats(self, ism_url, video_id, ism_id=None, note=No...
method _parse_ism_formats (line 2690) | def _parse_ism_formats(self, ism_doc, ism_url, ism_id=None):
method _parse_html5_media_entries (line 2785) | def _parse_html5_media_entries(self, base_url, webpage, video_id, m3u8...
method _extract_akamai_formats (line 2911) | def _extract_akamai_formats(self, manifest_url, video_id, hosts={}):
method _extract_wowza_formats (line 2967) | def _extract_wowza_formats(self, url, video_id, m3u8_entry_protocol='m...
method _find_jwplayer_data (line 3020) | def _find_jwplayer_data(self, webpage, video_id=None, transform_source...
method _extract_jwplayer_data (line 3028) | def _extract_jwplayer_data(self, webpage, video_id, *args, **kwargs):
method _parse_jwplayer_data (line 3037) | def _parse_jwplayer_data(self, jwplayer_data, video_id=None, require_t...
method _parse_jwplayer_formats (line 3111) | def _parse_jwplayer_formats(self, jwplayer_sources_data, video_id=None,
method _live_title (line 3178) | def _live_title(self, name):
method _int (line 3184) | def _int(self, v, name, fatal=False, **kwargs):
method _float (line 3196) | def _float(self, v, name, fatal=False, **kwargs):
method _set_cookie (line 3206) | def _set_cookie(self, domain, name, value, expire_time=None, port=None,
method _get_cookies (line 3214) | def _get_cookies(self, url):
method _apply_first_set_cookie_header (line 3220) | def _apply_first_set_cookie_header(self, url_handle, cookie):
method get_testcases (line 3247) | def get_testcases(self, include_onlymatching=False):
method is_suitable (line 3261) | def is_suitable(self, age_limit):
method extract_subtitles (line 3276) | def extract_subtitles(self, *args, **kwargs):
method _get_subtitles (line 3282) | def _get_subtitles(self, *args, **kwargs):
method _merge_subtitle_items (line 3286) | def _merge_subtitle_items(subtitle_list1, subtitle_list2):
method _merge_subtitles (line 3295) | def _merge_subtitles(cls, subtitle_dict1, *subtitle_dicts, **kwargs):
method extract_automatic_captions (line 3310) | def extract_automatic_captions(self, *args, **kwargs):
method _get_automatic_captions (line 3316) | def _get_automatic_captions(self, *args, **kwargs):
method mark_watched (line 3319) | def mark_watched(self, *args, **kwargs):
method _mark_watched (line 3325) | def _mark_watched(self, *args, **kwargs):
method geo_verification_headers (line 3328) | def geo_verification_headers(self):
method _generic_id (line 3335) | def _generic_id(self, url):
method _generic_title (line 3338) | def _generic_title(self, url):
method _yes_playlist (line 3341) | def _yes_playlist(self, playlist_id, video_id, *args, **kwargs):
class SearchInfoExtractor (line 3365) | class SearchInfoExtractor(InfoExtractor):
method _make_valid_url (line 3373) | def _make_valid_url(cls):
method suitable (line 3377) | def suitable(cls, url):
method _real_extract (line 3380) | def _real_extract(self, query):
method _get_n_results (line 3400) | def _get_n_results(self, query, n):
method SEARCH_KEY (line 3405) | def SEARCH_KEY(self):
FILE: youtube_dl/extractor/commonmistakes.py
class CommonMistakesIE (line 9) | class CommonMistakesIE(InfoExtractor):
method _real_extract (line 23) | def _real_extract(self, url):
class UnicodeBOMIE (line 34) | class UnicodeBOMIE(InfoExtractor):
method _real_extract (line 45) | def _real_extract(self, url):
FILE: youtube_dl/extractor/commonprotocols.py
class RtmpIE (line 9) | class RtmpIE(InfoExtractor):
method _real_extract (line 21) | def _real_extract(self, url):
class MmsIE (line 35) | class MmsIE(InfoExtractor):
method _real_extract (line 52) | def _real_extract(self, url):
FILE: youtube_dl/extractor/condenast.py
class CondeNastIE (line 24) | class CondeNastIE(InfoExtractor):
method _extract_series (line 109) | def _extract_series(self, url, webpage):
method _extract_video_params (line 122) | def _extract_video_params(self, webpage, display_id):
method _extract_video (line 143) | def _extract_video(self, params):
method _real_extract (line 224) | def _real_extract(self, url):
FILE: youtube_dl/extractor/contv.py
class CONtvIE (line 11) | class CONtvIE(InfoExtractor):
method _real_extract (line 36) | def _real_extract(self, url):
FILE: youtube_dl/extractor/corus.py
class CorusIE (line 15) | class CorusIE(ThePlatformFeedIE):
method _real_extract (line 98) | def _real_extract(self, url):
FILE: youtube_dl/extractor/coub.py
class CoubIE (line 14) | class CoubIE(InfoExtractor):
method _real_extract (line 46) | def _real_extract(self, url):
FILE: youtube_dl/extractor/cpac.py
class CPACIE (line 23) | class CPACIE(InfoExtractor):
method _real_extract (line 44) | def _real_extract(self, url):
class CPACPlaylistIE (line 86) | class CPACPlaylistIE(InfoExtractor):
method _real_extract (line 120) | def _real_extract(self, url):
FILE: youtube_dl/extractor/cracked.py
class CrackedIE (line 13) | class CrackedIE(InfoExtractor):
method _real_extract (line 40) | def _real_extract(self, url):
FILE: youtube_dl/extractor/crackle.py
class CrackleIE (line 22) | class CrackleIE(InfoExtractor):
method _real_extract (line 69) | def _real_extract(self, url):
FILE: youtube_dl/extractor/crooksandliars.py
class CrooksAndLiarsIE (line 10) | class CrooksAndLiarsIE(InfoExtractor):
method _real_extract (line 30) | def _real_extract(self, url):
FILE: youtube_dl/extractor/crunchyroll.py
class CrunchyrollBaseIE (line 40) | class CrunchyrollBaseIE(InfoExtractor):
method _call_rpc_api (line 45) | def _call_rpc_api(self, method, video_id, note=None, data=None):
method _login (line 55) | def _login(self):
method _real_initialize (line 104) | def _real_initialize(self):
method _add_skip_wall (line 108) | def _add_skip_wall(url):
class CrunchyrollIE (line 121) | class CrunchyrollIE(CrunchyrollBaseIE, VRVIE):
method _download_webpage (line 266) | def _download_webpage(self, url_or_request, *args, **kwargs):
method _decrypt_subtitles (line 279) | def _decrypt_subtitles(self, data, iv, id):
method _convert_subtitles_to_srt (line 308) | def _convert_subtitles_to_srt(self, sub_root):
method _convert_subtitles_to_ass (line 318) | def _convert_subtitles_to_ass(self, sub_root):
method _extract_subtitles (line 382) | def _extract_subtitles(self, subtitle):
method _get_subtitles (line 392) | def _get_subtitles(self, video_id, webpage):
method _real_extract (line 414) | def _real_extract(self, url):
class CrunchyrollShowPlaylistIE (line 638) | class CrunchyrollShowPlaylistIE(CrunchyrollBaseIE):
method _real_extract (line 664) | def _real_extract(self, url):
FILE: youtube_dl/extractor/cspan.py
class CSpanIE (line 25) | class CSpanIE(InfoExtractor):
method _real_extract (line 84) | def _real_extract(self, url):
FILE: youtube_dl/extractor/ctsnews.py
class CtsNewsIE (line 9) | class CtsNewsIE(InfoExtractor):
method _real_extract (line 53) | def _real_extract(self, url):
FILE: youtube_dl/extractor/ctv.py
class CTVIE (line 7) | class CTVIE(InfoExtractor):
method _real_extract (line 32) | def _real_extract(self, url):
FILE: youtube_dl/extractor/ctvnews.py
class CTVNewsIE (line 10) | class CTVNewsIE(InfoExtractor):
method _real_extract (line 48) | def _real_extract(self, url):
FILE: youtube_dl/extractor/cultureunplugged.py
class CultureUnpluggedIE (line 13) | class CultureUnpluggedIE(InfoExtractor):
method _real_extract (line 34) | def _real_extract(self, url):
FILE: youtube_dl/extractor/curiositystream.py
class CuriosityStreamBaseIE (line 15) | class CuriosityStreamBaseIE(InfoExtractor):
method _handle_errors (line 20) | def _handle_errors(self, result):
method _call_api (line 28) | def _call_api(self, path, video_id, query=None):
method _real_initialize (line 37) | def _real_initialize(self):
class CuriosityStreamIE (line 50) | class CuriosityStreamIE(CuriosityStreamBaseIE):
method _real_extract (line 68) | def _real_extract(self, url):
class CuriosityStreamCollectionIE (line 146) | class CuriosityStreamCollectionIE(CuriosityStreamBaseIE):
method _real_extract (line 165) | def _real_extract(self, url):
FILE: youtube_dl/extractor/cwtv.py
class CWTVIE (line 15) | class CWTVIE(InfoExtractor):
method _real_extract (line 68) | def _real_extract(self, url):
FILE: youtube_dl/extractor/dailymail.py
class DailyMailIE (line 16) | class DailyMailIE(InfoExtractor):
method _extract_urls (line 33) | def _extract_urls(webpage):
method _real_extract (line 38) | def _real_extract(self, url):
FILE: youtube_dl/extractor/dailymotion.py
class DailymotionBaseInfoExtractor (line 22) | class DailymotionBaseInfoExtractor(InfoExtractor):
method _get_dailymotion_cookies (line 30) | def _get_dailymotion_cookies(self):
method _get_cookie_value (line 34) | def _get_cookie_value(cookies, name):
method _set_dailymotion_cookie (line 39) | def _set_dailymotion_cookie(self, name, value):
method _real_initialize (line 42) | def _real_initialize(self):
method _call_api (line 48) | def _call_api(self, object_type, xid, object_fields, note, filter_extr...
class DailymotionIE (line 93) | class DailymotionIE(DailymotionBaseInfoExtractor):
method _extract_urls (line 194) | def _extract_urls(webpage):
method _real_extract (line 206) | def _real_extract(self, url):
class DailymotionPlaylistBaseIE (line 325) | class DailymotionPlaylistBaseIE(DailymotionBaseInfoExtractor):
method _fetch_page (line 328) | def _fetch_page(self, playlist_id, page):
method _real_extract (line 346) | def _real_extract(self, url):
class DailymotionPlaylistIE (line 354) | class DailymotionPlaylistIE(DailymotionPlaylistBaseIE):
class DailymotionUserIE (line 367) | class DailymotionUserIE(DailymotionPlaylistBaseIE):
FILE: youtube_dl/extractor/daum.py
class DaumBaseIE (line 15) | class DaumBaseIE(InfoExtractor):
class DaumIE (line 19) | class DaumIE(DaumBaseIE):
method _real_extract (line 90) | def _real_extract(self, url):
class DaumClipIE (line 98) | class DaumClipIE(DaumBaseIE):
method suitable (line 124) | def suitable(cls, url):
method _real_extract (line 127) | def _real_extract(self, url):
class DaumListIE (line 133) | class DaumListIE(InfoExtractor):
method _get_entries (line 134) | def _get_entries(self, list_id, list_id_type):
method _check_clip (line 157) | def _check_clip(self, url, list_id):
class DaumPlaylistIE (line 168) | class DaumPlaylistIE(DaumListIE):
method suitable (line 197) | def suitable(cls, url):
method _real_extract (line 200) | def _real_extract(self, url):
class DaumUserIE (line 212) | class DaumUserIE(DaumListIE):
method _real_extract (line 252) | def _real_extract(self, url):
FILE: youtube_dl/extractor/dbtv.py
class DBTVIE (line 9) | class DBTVIE(InfoExtractor):
method _extract_urls (line 35) | def _extract_urls(webpage):
method _real_extract (line 40) | def _real_extract(self, url):
FILE: youtube_dl/extractor/dctp.py
class DctpTvIE (line 14) | class DctpTvIE(InfoExtractor):
method _real_extract (line 39) | def _real_extract(self, url):
FILE: youtube_dl/extractor/deezer.py
class DeezerPlaylistIE (line 14) | class DeezerPlaylistIE(InfoExtractor):
method _real_extract (line 28) | def _real_extract(self, url):
FILE: youtube_dl/extractor/defense.py
class DefenseGouvFrIE (line 6) | class DefenseGouvFrIE(InfoExtractor):
method _real_extract (line 20) | def _real_extract(self, url):
FILE: youtube_dl/extractor/democracynow.py
class DemocracynowIE (line 15) | class DemocracynowIE(InfoExtractor):
method _real_extract (line 40) | def _real_extract(self, url):
FILE: youtube_dl/extractor/dfb.py
class DFBIE (line 9) | class DFBIE(InfoExtractor):
method _real_extract (line 25) | def _real_extract(self, url):
FILE: youtube_dl/extractor/dhm.py
class DHMIE (line 7) | class DHMIE(InfoExtractor):
method _real_extract (line 33) | def _real_extract(self, url):
FILE: youtube_dl/extractor/digg.py
class DiggIE (line 7) | class DiggIE(InfoExtractor):
method _real_extract (line 33) | def _real_extract(self, url):
FILE: youtube_dl/extractor/digiteka.py
class DigitekaIE (line 10) | class DigitekaIE(InfoExtractor):
method _extract_url (line 65) | def _extract_url(webpage):
method _real_extract (line 72) | def _real_extract(self, url):
FILE: youtube_dl/extractor/discovery.py
class DiscoveryIE (line 13) | class DiscoveryIE(DiscoveryGoBaseIE):
method _real_extract (line 64) | def _real_extract(self, url):
FILE: youtube_dl/extractor/discoverygo.py
class DiscoveryGoBaseIE (line 18) | class DiscoveryGoBaseIE(InfoExtractor):
method _extract_video_info (line 31) | def _extract_video_info(self, video, stream, display_id):
class DiscoveryGoIE (line 98) | class DiscoveryGoIE(DiscoveryGoBaseIE):
method _real_extract (line 116) | def _real_extract(self, url):
class DiscoveryGoPlaylistIE (line 135) | class DiscoveryGoPlaylistIE(DiscoveryGoBaseIE):
method suitable (line 148) | def suitable(cls, url):
method _real_extract (line 152) | def _real_extract(self, url):
FILE: youtube_dl/extractor/discoverynetworks.py
class DiscoveryNetworksDeIE (line 9) | class DiscoveryNetworksDeIE(DPlayIE):
method _real_extract (line 37) | def _real_extract(self, url):
FILE: youtube_dl/extractor/discoveryvr.py
class DiscoveryVRIE (line 8) | class DiscoveryVRIE(InfoExtractor):
method _real_extract (line 21) | def _real_extract(self, url):
FILE: youtube_dl/extractor/disney.py
class DisneyIE (line 17) | class DisneyIE(InfoExtractor):
method _real_extract (line 80) | def _real_extract(self, url):
FILE: youtube_dl/extractor/dispeak.py
class DigitallySpeakingIE (line 15) | class DigitallySpeakingIE(InfoExtractor):
method _parse_mp4 (line 49) | def _parse_mp4(self, metadata):
method _parse_flv (line 87) | def _parse_flv(self, metadata):
method _real_extract (line 115) | def _real_extract(self, url):
FILE: youtube_dl/extractor/dlf.py
class DLFBaseIE (line 21) | class DLFBaseIE(InfoExtractor):
method _parse_button_attrs (line 25) | def _parse_button_attrs(self, button, audio_id=None):
class DLFIE (line 61) | class DLFIE(DLFBaseIE):
method _real_extract (line 97) | def _real_extract(self, url):
class DLFCorpusIE (line 105) | class DLFCorpusIE(DLFBaseIE):
method _real_extract (line 197) | def _real_extract(self, url):
FILE: youtube_dl/extractor/dlive.py
class DLiveVODIE (line 10) | class DLiveVODIE(InfoExtractor):
method _real_extract (line 28) | def _real_extract(self, url):
class DLiveStreamIE (line 59) | class DLiveStreamIE(InfoExtractor):
method _real_extract (line 63) | def _real_extract(self, url):
FILE: youtube_dl/extractor/dotsub.py
class DotsubIE (line 10) | class DotsubIE(InfoExtractor):
method _real_extract (line 46) | def _real_extract(self, url):
FILE: youtube_dl/extractor/douyutv.py
class DouyuTVIE (line 17) | class DouyuTVIE(InfoExtractor):
method _real_extract (line 75) | def _real_extract(self, url):
class DouyuShowIE (line 125) | class DouyuShowIE(InfoExtractor):
method _real_extract (line 147) | def _real_extract(self, url):
FILE: youtube_dl/extractor/dplay.py
class DPlayIE (line 19) | class DPlayIE(InfoExtractor):
method _process_errors (line 157) | def _process_errors(self, e, geo_countries):
method _update_disco_api_headers (line 168) | def _update_disco_api_headers(self, headers, disco_base, display_id, r...
method _download_video_playback_info (line 175) | def _download_video_playback_info(self, disco_base, video_id, headers):
method _get_disco_api_info (line 187) | def _get_disco_api_info(self, url, display_id, disco_host, realm, coun...
method _real_extract (line 289) | def _real_extract(self, url):
class DiscoveryPlusIE (line 299) | class DiscoveryPlusIE(DPlayIE):
method _update_disco_api_headers (line 320) | def _update_disco_api_headers(self, headers, disco_base, display_id, r...
method _download_video_playback_info (line 323) | def _download_video_playback_info(self, disco_base, video_id, headers):
method _real_extract (line 337) | def _real_extract(self, url):
class HGTVDeIE (line 343) | class HGTVDeIE(DPlayIE):
method _real_extract (line 366) | def _real_extract(self, url):
FILE: youtube_dl/extractor/drbonanza.py
class DRBonanzaIE (line 13) | class DRBonanzaIE(InfoExtractor):
method _real_extract (line 28) | def _real_extract(self, url):
FILE: youtube_dl/extractor/dreisat.py
class DreiSatIE (line 6) | class DreiSatIE(ZDFIE):
FILE: youtube_dl/extractor/dropbox.py
class DropboxIE (line 12) | class DropboxIE(InfoExtractor):
method _real_extract (line 28) | def _real_extract(self, url):
FILE: youtube_dl/extractor/drtuber.py
class DrTuberIE (line 14) | class DrTuberIE(InfoExtractor):
method _extract_urls (line 39) | def _extract_urls(webpage):
method _real_extract (line 44) | def _real_extract(self, url):
FILE: youtube_dl/extractor/drtv.py
class DRTVIE (line 27) | class DRTVIE(InfoExtractor):
method _real_extract (line 119) | def _real_extract(self, url):
class DRTVLiveIE (line 302) | class DRTVLiveIE(InfoExtractor):
method _real_extract (line 319) | def _real_extract(self, url):
FILE: youtube_dl/extractor/dtube.py
class DTubeIE (line 15) | class DTubeIE(InfoExtractor):
method _real_extract (line 34) | def _real_extract(self, url):
FILE: youtube_dl/extractor/dumpert.py
class DumpertIE (line 11) | class DumpertIE(InfoExtractor):
method _real_extract (line 34) | def _real_extract(self, url):
FILE: youtube_dl/extractor/dvtv.py
class DVTVIE (line 19) | class DVTVIE(InfoExtractor):
method _parse_video_metadata (line 115) | def _parse_video_metadata(self, js, video_id, timestamp):
method _real_extract (line 163) | def _real_extract(self, url):
FILE: youtube_dl/extractor/dw.py
class DWIE (line 12) | class DWIE(InfoExtractor):
method _real_extract (line 51) | def _real_extract(self, url):
class DWArticleIE (line 86) | class DWArticleIE(InfoExtractor):
method _real_extract (line 101) | def _real_extract(self, url):
FILE: youtube_dl/extractor/eagleplatform.py
class EaglePlatformIE (line 16) | class EaglePlatformIE(InfoExtractor):
method _extract_url (line 59) | def _extract_url(webpage):
method _handle_error (line 104) | def _handle_error(response):
method _download_json (line 109) | def _download_json(self, url_or_request, video_id, *args, **kwargs):
method _get_video_url (line 120) | def _get_video_url(self, url_or_request, video_id, note='Downloading J...
method _real_extract (line 123) | def _real_extract(self, url):
FILE: youtube_dl/extractor/ebaumsworld.py
class EbaumsWorldIE (line 6) | class EbaumsWorldIE(InfoExtractor):
method _real_extract (line 20) | def _real_extract(self, url):
FILE: youtube_dl/extractor/echomsk.py
class EchoMskIE (line 9) | class EchoMskIE(InfoExtractor):
method _real_extract (line 21) | def _real_extract(self, url):
FILE: youtube_dl/extractor/egghead.py
class EggheadBaseIE (line 15) | class EggheadBaseIE(InfoExtractor):
method _call_api (line 16) | def _call_api(self, path, video_id, resource, fatal=True):
class EggheadCourseIE (line 22) | class EggheadCourseIE(EggheadBaseIE):
method _real_extract (line 39) | def _real_extract(self, url):
class EggheadLessonIE (line 68) | class EggheadLessonIE(EggheadBaseIE):
method _real_extract (line 99) | def _real_extract(self, url):
FILE: youtube_dl/extractor/ehow.py
class EHowIE (line 7) | class EHowIE(InfoExtractor):
method _real_extract (line 22) | def _real_extract(self, url):
FILE: youtube_dl/extractor/eighttracks.py
class EightTracksIE (line 16) | class EightTracksIE(InfoExtractor):
method _real_extract (line 104) | def _real_extract(self, url):
FILE: youtube_dl/extractor/einthusan.py
class EinthusanIE (line 21) | class EinthusanIE(InfoExtractor):
method _decrypt (line 45) | def _decrypt(self, encrypted_data, video_id):
method _real_extract (line 50) | def _real_extract(self, url):
FILE: youtube_dl/extractor/eitb.py
class EitbIE (line 13) | class EitbIE(InfoExtractor):
method _real_extract (line 32) | def _real_extract(self, url):
FILE: youtube_dl/extractor/ellentube.py
class EllenTubeBaseIE (line 14) | class EllenTubeBaseIE(InfoExtractor):
method _extract_data_config (line 15) | def _extract_data_config(self, webpage, video_id):
method _extract_video (line 22) | def _extract_video(self, data, video_id):
class EllenTubeIE (line 54) | class EllenTubeIE(EllenTubeBaseIE):
method _real_extract (line 82) | def _real_extract(self, url):
class EllenTubeVideoIE (line 90) | class EllenTubeVideoIE(EllenTubeBaseIE):
method _real_extract (line 97) | def _real_extract(self, url):
class EllenTubePlaylistIE (line 106) | class EllenTubePlaylistIE(EllenTubeBaseIE):
method _real_extract (line 121) | def _real_extract(self, url):
FILE: youtube_dl/extractor/elpais.py
class ElPaisIE (line 8) | class ElPaisIE(InfoExtractor):
method _real_extract (line 56) | def _real_extract(self, url):
FILE: youtube_dl/extractor/embedly.py
class EmbedlyIE (line 8) | class EmbedlyIE(InfoExtractor):
method _real_extract (line 15) | def _real_extract(self, url):
FILE: youtube_dl/extractor/engadget.py
class EngadgetIE (line 6) | class EngadgetIE(InfoExtractor):
method _real_extract (line 25) | def _real_extract(self, url):
FILE: youtube_dl/extractor/epidemicsound.py
class EpidemicSoundIE (line 15) | class EpidemicSoundIE(InfoExtractor):
method _real_extract (line 54) | def _real_extract(self, url):
FILE: youtube_dl/extractor/eporner.py
class EpornerIE (line 18) | class EpornerIE(InfoExtractor):
method _real_extract (line 53) | def _real_extract(self, url):
FILE: youtube_dl/extractor/eroprofile.py
class EroProfileIE (line 13) | class EroProfileIE(InfoExtractor):
method _login (line 42) | def _login(self):
method _real_initialize (line 65) | def _real_initialize(self):
method _real_extract (line 68) | def _real_extract(self, url):
FILE: youtube_dl/extractor/escapist.py
function _decrypt_config (line 12) | def _decrypt_config(key, string):
class EscapistIE (line 35) | class EscapistIE(InfoExtractor):
method _real_extract (line 69) | def _real_extract(self, url):
FILE: youtube_dl/extractor/espn.py
class ESPNIE (line 15) | class ESPNIE(OnceIE):
method _real_extract (line 103) | def _real_extract(self, url):
class ESPNArticleIE (line 181) | class ESPNArticleIE(InfoExtractor):
method suitable (line 198) | def suitable(cls, url):
method _real_extract (line 201) | def _real_extract(self, url):
class FiveThirtyEightIE (line 214) | class FiveThirtyEightIE(InfoExtractor):
method _real_extract (line 229) | def _real_extract(self, url):
FILE: youtube_dl/extractor/esri.py
class EsriVideoIE (line 15) | class EsriVideoIE(InfoExtractor):
method _real_extract (line 31) | def _real_extract(self, url):
FILE: youtube_dl/extractor/europa.py
class EuropaIE (line 16) | class EuropaIE(InfoExtractor):
method _real_extract (line 40) | def _real_extract(self, url):
FILE: youtube_dl/extractor/expotv.py
class ExpoTVIE (line 10) | class ExpoTVIE(InfoExtractor):
method _real_extract (line 27) | def _real_extract(self, url):
FILE: youtube_dl/extractor/expressen.py
class ExpressenIE (line 15) | class ExpressenIE(InfoExtractor):
method _extract_urls (line 51) | def _extract_urls(webpage):
method _real_extract (line 57) | def _real_extract(self, url):
FILE: youtube_dl/extractor/extremetube.py
class ExtremeTubeIE (line 7) | class ExtremeTubeIE(KeezMoviesIE):
method _real_extract (line 31) | def _real_extract(self, url):
FILE: youtube_dl/extractor/eyedotv.py
class EyedoTVIE (line 12) | class EyedoTVIE(InfoExtractor):
method _real_extract (line 28) | def _real_extract(self, url):
FILE: youtube_dl/extractor/facebook.py
class FacebookIE (line 35) | class FacebookIE(InfoExtractor):
method _extract_urls (line 300) | def _extract_urls(webpage):
method _login (line 314) | def _login(self):
method _real_initialize (line 377) | def _real_initialize(self):
method _extract_from_url (line 380) | def _extract_from_url(self, url, video_id):
method _real_extract (line 676) | def _real_extract(self, url):
class FacebookPluginsVideoIE (line 683) | class FacebookPluginsVideoIE(InfoExtractor):
method _real_extract (line 706) | def _real_extract(self, url):
FILE: youtube_dl/extractor/faz.py
class FazIE (line 15) | class FazIE(InfoExtractor):
method _real_extract (line 44) | def _real_extract(self, url):
FILE: youtube_dl/extractor/fc2.py
class FC2IE (line 20) | class FC2IE(InfoExtractor):
method _login (line 48) | def _login(self):
method _real_extract (line 77) | def _real_extract(self, url):
class FC2EmbedIE (line 125) | class FC2EmbedIE(InfoExtractor):
method _real_extract (line 140) | def _real_extract(self, url):
FILE: youtube_dl/extractor/fczenit.py
class FczenitIE (line 11) | class FczenitIE(InfoExtractor):
method _real_extract (line 25) | def _real_extract(self, url):
FILE: youtube_dl/extractor/fifa.py
class InfoExtractor (line 18) | class InfoExtractor(BaseInfoExtractor):
method _match_valid_url (line 21) | def _match_valid_url(cls, url):
class FifaIE (line 25) | class FifaIE(InfoExtractor):
method _real_extract (line 67) | def _real_extract(self, url):
FILE: youtube_dl/extractor/filmon.py
class FilmOnIE (line 17) | class FilmOnIE(InfoExtractor):
method _real_extract (line 38) | def _real_extract(self, url):
class FilmOnChannelIE (line 97) | class FilmOnChannelIE(InfoExtractor):
method _real_extract (line 124) | def _real_extract(self, url):
FILE: youtube_dl/extractor/filmweb.py
class FilmwebIE (line 8) | class FilmwebIE(InfoExtractor):
method _real_extract (line 24) | def _real_extract(self, url):
FILE: youtube_dl/extractor/firsttv.py
class FirstTVIE (line 17) | class FirstTVIE(InfoExtractor):
method _real_extract (line 62) | def _real_extract(self, url):
FILE: youtube_dl/extractor/fivemin.py
class FiveMinIE (line 6) | class FiveMinIE(InfoExtractor):
method _real_extract (line 52) | def _real_extract(self, url):
FILE: youtube_dl/extractor/fivetv.py
class FiveTVIE (line 10) | class FiveTVIE(InfoExtractor):
method _real_extract (line 68) | def _real_extract(self, url):
FILE: youtube_dl/extractor/flickr.py
class FlickrIE (line 15) | class FlickrIE(InfoExtractor):
method _call_api (line 53) | def _call_api(self, method, video_id, api_key, note, secret=None):
method _real_extract (line 68) | def _real_extract(self, url):
FILE: youtube_dl/extractor/folketinget.py
class FolketingetIE (line 14) | class FolketingetIE(InfoExtractor):
method _real_extract (line 39) | def _real_extract(self, url):
FILE: youtube_dl/extractor/footyroom.py
class FootyRoomIE (line 8) | class FootyRoomIE(InfoExtractor):
method _real_extract (line 28) | def _real_extract(self, url):
FILE: youtube_dl/extractor/formula1.py
class Formula1IE (line 7) | class Formula1IE(InfoExtractor):
method _real_extract (line 24) | def _real_extract(self, url):
FILE: youtube_dl/extractor/fourtube.py
class FourTubeBaseIE (line 24) | class FourTubeBaseIE(InfoExtractor):
method _extract_formats (line 25) | def _extract_formats(self, url, video_id, media_id, sources):
method _real_extract (line 43) | def _real_extract(self, url):
class FourTubeIE (line 117) | class FourTubeIE(FourTubeBaseIE):
class FuxIE (line 148) | class FuxIE(FourTubeBaseIE):
class PornTubeIE (line 180) | class PornTubeIE(FourTubeBaseIE):
method _real_extract (line 230) | def _real_extract(self, url):
class PornerBrosIE (line 280) | class PornerBrosIE(FourTubeBaseIE):
FILE: youtube_dl/extractor/fox.py
class FOXIE (line 23) | class FOXIE(AdobePassIE):
method _call_api (line 58) | def _call_api(self, path, video_id, data=None):
method _real_initialize (line 81) | def _real_initialize(self):
method _real_extract (line 93) | def _real_extract(self, url):
FILE: youtube_dl/extractor/fox9.py
class FOX9IE (line 7) | class FOX9IE(InfoExtractor):
method _real_extract (line 10) | def _real_extract(self, url):
class FOX9NewsIE (line 17) | class FOX9NewsIE(InfoExtractor):
method _real_extract (line 36) | def _real_extract(self, url):
FILE: youtube_dl/extractor/foxgay.py
class FoxgayIE (line 13) | class FoxgayIE(InfoExtractor):
method _real_extract (line 28) | def _real_extract(self, url):
FILE: youtube_dl/extractor/foxnews.py
class FoxNewsIE (line 9) | class FoxNewsIE(AMPIE):
method _extract_urls (line 62) | def _extract_urls(webpage):
method _real_extract (line 69) | def _real_extract(self, url):
class FoxNewsArticleIE (line 78) | class FoxNewsArticleIE(InfoExtractor):
method _real_extract (line 115) | def _real_extract(self, url):
FILE: youtube_dl/extractor/foxsports.py
class FoxSportsIE (line 6) | class FoxSportsIE(InfoExtractor):
method _real_extract (line 29) | def _real_extract(self, url):
FILE: youtube_dl/extractor/franceculture.py
class FranceCultureIE (line 12) | class FranceCultureIE(InfoExtractor):
method _real_extract (line 32) | def _real_extract(self, url):
FILE: youtube_dl/extractor/franceinter.py
class FranceInterIE (line 8) | class FranceInterIE(InfoExtractor):
method _real_extract (line 24) | def _real_extract(self, url):
FILE: youtube_dl/extractor/francetv.py
class FranceTVBaseInfoExtractor (line 25) | class FranceTVBaseInfoExtractor(InfoExtractor):
method _make_url_result (line 26) | def _make_url_result(self, video_or_full_id, catalog=None):
class FranceTVIE (line 35) | class FranceTVIE(InfoExtractor):
method _extract_video (line 89) | def _extract_video(self, video_id, catalogue=None):
method _real_extract (line 222) | def _real_extract(self, url):
class FranceTVSiteIE (line 237) | class FranceTVSiteIE(FranceTVBaseInfoExtractor):
method _real_extract (line 292) | def _real_extract(self, url):
class FranceTVEmbedIE (line 310) | class FranceTVEmbedIE(FranceTVBaseInfoExtractor):
method _real_extract (line 329) | def _real_extract(self, url):
class FranceTVInfoIE (line 339) | class FranceTVInfoIE(FranceTVBaseInfoExtractor):
method _real_extract (line 392) | def _real_extract(self, url):
class FranceTVInfoSportIE (line 413) | class FranceTVInfoSportIE(FranceTVBaseInfoExtractor):
method _real_extract (line 431) | def _real_extract(self, url):
class GenerationWhatIE (line 438) | class GenerationWhatIE(InfoExtractor):
method _real_extract (line 461) | def _real_extract(self, url):
class CultureboxIE (line 473) | class CultureboxIE(FranceTVBaseInfoExtractor):
method _real_extract (line 493) | def _real_extract(self, url):
class FranceTVJeunesseIE (line 509) | class FranceTVJeunesseIE(FranceTVBaseInfoExtractor):
method _real_extract (line 529) | def _real_extract(self, url):
FILE: youtube_dl/extractor/freesound.py
class FreesoundIE (line 14) | class FreesoundIE(InfoExtractor):
method _real_extract (line 31) | def _real_extract(self, url):
FILE: youtube_dl/extractor/freespeech.py
class FreespeechIE (line 7) | class FreespeechIE(InfoExtractor):
method _real_extract (line 24) | def _real_extract(self, url):
FILE: youtube_dl/extractor/freshlive.py
class FreshLiveIE (line 14) | class FreshLiveIE(InfoExtractor):
method _real_extract (line 36) | def _real_extract(self, url):
FILE: youtube_dl/extractor/frontendmasters.py
class FrontendMastersBaseIE (line 19) | class FrontendMastersBaseIE(InfoExtractor):
method _real_initialize (line 31) | def _real_initialize(self):
method _login (line 34) | def _login(self):
class FrontendMastersPageBaseIE (line 73) | class FrontendMastersPageBaseIE(FrontendMastersBaseIE):
method _download_course (line 74) | def _download_course(self, course_name, url):
method _extract_chapters (line 80) | def _extract_chapters(course):
method _extract_lesson (line 88) | def _extract_lesson(chapters, lesson_id, lesson):
class FrontendMastersIE (line 128) | class FrontendMastersIE(FrontendMastersBaseIE):
method _real_extract (line 144) | def _real_extract(self, url):
class FrontendMastersLessonIE (line 189) | class FrontendMastersLessonIE(FrontendMastersPageBaseIE):
method _real_extract (line 209) | def _real_extract(self, url):
class FrontendMastersCourseIE (line 224) | class FrontendMastersCourseIE(FrontendMastersPageBaseIE):
method suitable (line 238) | def suitable(cls, url):
method _real_extract (line 242) | def _real_extract(self, url):
FILE: youtube_dl/extractor/fujitv.py
class FujiTVFODPlus7IE (line 7) | class FujiTVFODPlus7IE(InfoExtractor):
method _real_extract (line 17) | def _real_extract(self, url):
FILE: youtube_dl/extractor/funimation.py
class FunimationIE (line 18) | class FunimationIE(InfoExtractor):
method _login (line 60) | def _login(self):
method _real_initialize (line 78) | def _real_initialize(self):
method _real_extract (line 81) | def _real_extract(self, url):
FILE: youtube_dl/extractor/funk.py
class FunkIE (line 14) | class FunkIE(InfoExtractor):
method _real_extract (line 33) | def _real_extract(self, url):
FILE: youtube_dl/extractor/fusion.py
class FusionIE (line 12) | class FusionIE(InfoExtractor):
method _real_extract (line 38) | def _real_extract(self, url):
FILE: youtube_dl/extractor/gaia.py
class GaiaIE (line 21) | class GaiaIE(InfoExtractor):
method _real_initialize (line 57) | def _real_initialize(self):
method _real_extract (line 78) | def _real_extract(self, url):
FILE: youtube_dl/extractor/gameinformer.py
class GameInformerIE (line 13) | class GameInformerIE(InfoExtractor):
method _real_extract (line 43) | def _real_extract(self, url):
FILE: youtube_dl/extractor/gamespot.py
class GameSpotIE (line 7) | class GameSpotIE(OnceIE):
method _real_extract (line 39) | def _real_extract(self, url):
FILE: youtube_dl/extractor/gamestar.py
class GameStarIE (line 13) | class GameStarIE(InfoExtractor):
method _real_extract (line 36) | def _real_extract(self, url):
FILE: youtube_dl/extractor/gaskrank.py
class GaskrankIE (line 13) | class GaskrankIE(InfoExtractor):
method _real_extract (line 45) | def _real_extract(self, url):
FILE: youtube_dl/extractor/gazeta.py
class GazetaIE (line 9) | class GazetaIE(InfoExtractor):
method _real_extract (line 36) | def _real_extract(self, url):
FILE: youtube_dl/extractor/gbnews.py
class GBNewsIE (line 15) | class GBNewsIE(InfoExtractor):
method _real_extract (line 55) | def _real_extract(self, url):
FILE: youtube_dl/extractor/gdcvault.py
class GDCVaultIE (line 16) | class GDCVaultIE(InfoExtractor):
method _login (line 128) | def _login(self, webpage_url, display_id):
method _real_extract (line 151) | def _real_extract(self, url):
FILE: youtube_dl/extractor/gedidigital.py
class GediDigitalIE (line 13) | class GediDigitalIE(InfoExtractor):
method _real_extract (line 97) | def _real_extract(self, url):
FILE: youtube_dl/extractor/generic.py
class GenericIE (line 137) | class GenericIE(InfoExtractor):
method report_following_redirect (line 2345) | def report_following_redirect(self, new_url):
method _extract_rss (line 2349) | def _extract_rss(self, url, video_id, doc):
method _extract_camtasia (line 2410) | def _extract_camtasia(self, url, video_id, webpage):
method _extract_kvs (line 2447) | def _extract_kvs(self, url, webpage, video_id):
method _real_extract (line 2529) | def _real_extract(self, url):
FILE: youtube_dl/extractor/gfycat.py
class GfycatIE (line 13) | class GfycatIE(InfoExtractor):
method _real_extract (line 64) | def _real_extract(self, url):
FILE: youtube_dl/extractor/giantbomb.py
class GiantBombIE (line 15) | class GiantBombIE(InfoExtractor):
method _real_extract (line 34) | def _real_extract(self, url):
FILE: youtube_dl/extractor/giga.py
class GigaIE (line 16) | class GigaIE(InfoExtractor):
method _real_extract (line 45) | def _real_extract(self, url):
FILE: youtube_dl/extractor/gigya.py
class GigyaBaseIE (line 11) | class GigyaBaseIE(InfoExtractor):
method _gigya_login (line 12) | def _gigya_login(self, auth_data):
FILE: youtube_dl/extractor/glide.py
class GlideIE (line 7) | class GlideIE(InfoExtractor):
method _real_extract (line 21) | def _real_extract(self, url):
FILE: youtube_dl/extractor/globalplayer.py
class GlobalPlayerBaseIE (line 19) | class GlobalPlayerBaseIE(InfoExtractor):
method _get_page_props (line 21) | def _get_page_props(self, url, video_id):
method _request_ext (line 25) | def _request_ext(self, url, video_id):
method _clean_desc (line 30) | def _clean_desc(x):
method _extract_audio (line 36) | def _extract_audio(self, episode, series):
class GlobalPlayerLiveIE (line 56) | class GlobalPlayerLiveIE(GlobalPlayerBaseIE):
method _real_extract (line 98) | def _real_extract(self, url):
class GlobalPlayerLivePlaylistIE (line 122) | class GlobalPlayerLivePlaylistIE(GlobalPlayerBaseIE):
method _real_extract (line 138) | def _real_extract(self, url):
class GlobalPlayerAudioIE (line 156) | class GlobalPlayerAudioIE(GlobalPlayerBaseIE):
method _real_extract (line 182) | def _real_extract(self, url):
class GlobalPlayerAudioEpisodeIE (line 201) | class GlobalPlayerAudioEpisodeIE(GlobalPlayerBaseIE):
method _real_extract (line 238) | def _real_extract(self, url):
class GlobalPlayerVideoIE (line 247) | class GlobalPlayerVideoIE(GlobalPlayerBaseIE):
method _real_extract (line 261) | def _real_extract(self, url):
FILE: youtube_dl/extractor/globo.py
class GloboIE (line 24) | class GloboIE(InfoExtractor):
method _real_initialize (line 69) | def _real_initialize(self):
method _real_extract (line 93) | def _real_extract(self, url):
class GloboArticleIE (line 187) | class GloboArticleIE(InfoExtractor):
method suitable (line 226) | def suitable(cls, url):
method _real_extract (line 229) | def _real_extract(self, url):
FILE: youtube_dl/extractor/go.py
class GoIE (line 18) | class GoIE(AdobePassIE):
method _extract_videos (line 152) | def _extract_videos(self, brand, video_id='-1', show_id='-1'):
method _real_extract (line 158) | def _real_extract(self, url):
FILE: youtube_dl/extractor/godtube.py
class GodTubeIE (line 12) | class GodTubeIE(InfoExtractor):
method _real_extract (line 31) | def _real_extract(self, url):
FILE: youtube_dl/extractor/golem.py
class GolemIE (line 14) | class GolemIE(InfoExtractor):
method _real_extract (line 31) | def _real_extract(self, url):
FILE: youtube_dl/extractor/googledrive.py
class GoogleDriveIE (line 18) | class GoogleDriveIE(InfoExtractor):
method _extract_url (line 83) | def _extract_url(webpage):
method _download_subtitles_xml (line 90) | def _download_subtitles_xml(self, video_id, subtitles_id, hl):
method _get_captions_by_type (line 110) | def _get_captions_by_type(self, video_id, subtitles_id, caption_type,
method _get_subtitles (line 141) | def _get_subtitles(self, video_id, subtitles_id, hl):
method _get_automatic_captions (line 149) | def _get_automatic_captions(self, video_id, subtitles_id, hl):
method _real_extract (line 164) | def _real_extract(self, url):
FILE: youtube_dl/extractor/googlepodcasts.py
class GooglePodcastsBaseIE (line 16) | class GooglePodcastsBaseIE(InfoExtractor):
method _batch_execute (line 19) | def _batch_execute(self, func_id, video_id, params):
method _extract_episode (line 26) | def _extract_episode(self, episode):
class GooglePodcastsIE (line 40) | class GooglePodcastsIE(GooglePodcastsBaseIE):
method _real_extract (line 58) | def _real_extract(self, url):
class GooglePodcastsFeedIE (line 65) | class GooglePodcastsFeedIE(GooglePodcastsBaseIE):
method _real_extract (line 77) | def _real_extract(self, url):
FILE: youtube_dl/extractor/googlesearch.py
class GoogleSearchIE (line 9) | class GoogleSearchIE(SearchInfoExtractor):
method _get_n_results (line 23) | def _get_n_results(self, query, n):
FILE: youtube_dl/extractor/goshgay.py
class GoshgayIE (line 13) | class GoshgayIE(InfoExtractor):
method _real_extract (line 28) | def _real_extract(self, url):
FILE: youtube_dl/extractor/gputechconf.py
class GPUTechConfIE (line 7) | class GPUTechConfIE(InfoExtractor):
method _real_extract (line 20) | def _real_extract(self, url):
FILE: youtube_dl/extractor/groupon.py
class GrouponIE (line 6) | class GrouponIE(InfoExtractor):
method _real_extract (line 40) | def _real_extract(self, url):
FILE: youtube_dl/extractor/hbo.py
class HBOBaseIE (line 16) | class HBOBaseIE(InfoExtractor):
method _extract_info (line 56) | def _extract_info(self, url, display_id):
class HBOIE (line 156) | class HBOIE(HBOBaseIE):
method _real_extract (line 170) | def _real_extract(self, url):
FILE: youtube_dl/extractor/hearthisat.py
class HearThisAtIE (line 18) | class HearThisAtIE(InfoExtractor):
method _real_extract (line 58) | def _real_extract(self, url):
FILE: youtube_dl/extractor/heise.py
class HeiseIE (line 17) | class HeiseIE(InfoExtractor):
method _real_extract (line 86) | def _real_extract(self, url):
FILE: youtube_dl/extractor/hellporno.py
class HellPornoIE (line 12) | class HellPornoIE(InfoExtractor):
method _real_extract (line 36) | def _real_extract(self, url):
FILE: youtube_dl/extractor/helsinki.py
class HelsinkiIE (line 9) | class HelsinkiIE(InfoExtractor):
method _real_extract (line 25) | def _real_extract(self, url):
FILE: youtube_dl/extractor/hentaistigma.py
class HentaiStigmaIE (line 6) | class HentaiStigmaIE(InfoExtractor):
method _real_extract (line 19) | def _real_extract(self, url):
FILE: youtube_dl/extractor/hgtv.py
class HGTVComShowIE (line 7) | class HGTVComShowIE(InfoExtractor):
method _real_extract (line 24) | def _real_extract(self, url):
FILE: youtube_dl/extractor/hidive.py
class HiDiveIE (line 16) | class HiDiveIE(InfoExtractor):
method _real_initialize (line 40) | def _real_initialize(self):
method _real_extract (line 57) | def _real_extract(self, url):
FILE: youtube_dl/extractor/historicfilms.py
class HistoricFilmsIE (line 7) | class HistoricFilmsIE(InfoExtractor):
method _real_extract (line 22) | def _real_extract(self, url):
FILE: youtube_dl/extractor/hitbox.py
class HitboxIE (line 17) | class HitboxIE(InfoExtractor):
method _extract_metadata (line 46) | def _extract_metadata(self, url, video_id):
method _real_extract (line 92) | def _real_extract(self, url):
class HitboxLiveIE (line 133) | class HitboxLiveIE(HitboxIE):
method suitable (line 157) | def suitable(cls, url):
method _real_extract (line 160) | def _real_extract(self, url):
FILE: youtube_dl/extractor/hitrecord.py
class HitRecordIE (line 13) | class HitRecordIE(InfoExtractor):
method _real_extract (line 35) | def _real_extract(self, url):
FILE: youtube_dl/extractor/hketv.py
class HKETVIE (line 20) | class HKETVIE(InfoExtractor):
method _real_extract (line 74) | def _real_extract(self, url):
FILE: youtube_dl/extractor/hornbunny.py
class HornBunnyIE (line 11) | class HornBunnyIE(InfoExtractor):
method _real_extract (line 27) | def _real_extract(self, url):
FILE: youtube_dl/extractor/hotnewhiphop.py
class HotNewHipHopIE (line 13) | class HotNewHipHopIE(InfoExtractor):
method _real_extract (line 25) | def _real_extract(self, url):
FILE: youtube_dl/extractor/hotstar.py
class HotStarBaseIE (line 26) | class HotStarBaseIE(InfoExtractor):
method _call_api_impl (line 29) | def _call_api_impl(self, path, video_id, headers, query, data=None):
method _call_api (line 40) | def _call_api(self, path, video_id, query_name='contentId'):
method _call_api_v2 (line 53) | def _call_api_v2(self, path, video_id, headers, query=None, data=None):
class HotStarIE (line 70) | class HotStarIE(HotStarBaseIE):
method _real_extract (line 111) | def _real_extract(self, url):
class HotStarPlaylistIE (line 223) | class HotStarPlaylistIE(HotStarBaseIE):
method _real_extract (line 240) | def _real_extract(self, url):
FILE: youtube_dl/extractor/howcast.py
class HowcastIE (line 7) | class HowcastIE(InfoExtractor):
method _real_extract (line 27) | def _real_extract(self, url):
FILE: youtube_dl/extractor/howstuffworks.py
class HowStuffWorksIE (line 13) | class HowStuffWorksIE(InfoExtractor):
method _real_extract (line 32) | def _real_extract(self, url):
FILE: youtube_dl/extractor/hrfernsehen.py
class HRFernsehenIE (line 16) | class HRFernsehenIE(InfoExtractor):
method extract_airdate (line 44) | def extract_airdate(self, loader_data):
method extract_formats (line 52) | def extract_formats(self, loader_data):
method _real_extract (line 74) | def _real_extract(self, url):
FILE: youtube_dl/extractor/hrti.py
class HRTiBaseIE (line 19) | class HRTiBaseIE(InfoExtractor):
method _initialize_api (line 32) | def _initialize_api(self):
method _login (line 68) | def _login(self):
method _real_initialize (line 97) | def _real_initialize(self):
class HRTiIE (line 102) | class HRTiIE(HRTiBaseIE):
method _real_extract (line 137) | def _real_extract(self, url):
class HRTiPlaylistIE (line 175) | class HRTiPlaylistIE(HRTiBaseIE):
method _real_extract (line 193) | def _real_extract(self, url):
FILE: youtube_dl/extractor/huajiao.py
class HuajiaoIE (line 11) | class HuajiaoIE(InfoExtractor):
method _real_extract (line 31) | def _real_extract(self, url):
FILE: youtube_dl/extractor/huffpost.py
class HuffPostIE (line 13) | class HuffPostIE(InfoExtractor):
method _real_extract (line 41) | def _real_extract(self, url):
FILE: youtube_dl/extractor/hungama.py
class HungamaIE (line 11) | class HungamaIE(InfoExtractor):
method _real_extract (line 41) | def _real_extract(self, url):
class HungamaSongIE (line 70) | class HungamaSongIE(InfoExtractor):
method _real_extract (line 86) | def _real_extract(self, url):
FILE: youtube_dl/extractor/hypem.py
class HypemIE (line 7) | class HypemIE(InfoExtractor):
method _real_extract (line 22) | def _real_extract(self, url):
FILE: youtube_dl/extractor/ign.py
class IGNBaseIE (line 30) | class IGNBaseIE(InfoExtractor):
method _call_api (line 31) | def _call_api(self, slug):
method _checked_call_api (line 35) | def _checked_call_api(self, slug):
method _extract_video_info (line 47) | def _extract_video_info(self, video, fatal=True):
method _extract_from_webpage (line 115) | def _extract_from_webpage(cls, url, webpage):
class IGNIE (line 121) | class IGNIE(IGNBaseIE):
method _extract_embed_urls (line 168) | def _extract_embed_urls(cls, url, webpage):
method _real_extract (line 177) | def _real_extract(self, url):
method _extract_playlist (line 185) | def _extract_playlist(self, url, display_id):
method _extract_video (line 193) | def _extract_video(self, url, display_id):
class IGNVideoIE (line 204) | class IGNVideoIE(IGNBaseIE):
method _real_extract (line 235) | def _real_extract(self, url):
class IGNArticleIE (line 262) | class IGNArticleIE(IGNBaseIE):
method _checked_call_api (line 327) | def _checked_call_api(self, slug):
method _search_nextjs_data (line 343) | def _search_nextjs_data(self, webpage, video_id, **kw):
method _real_extract (line 350) | def _real_extract(self, url):
FILE: youtube_dl/extractor/iheart.py
class IHeartRadioBaseIE (line 13) | class IHeartRadioBaseIE(InfoExtractor):
method _call_api (line 14) | def _call_api(self, path, video_id, fatal=True, query=None):
method _extract_episode (line 19) | def _extract_episode(self, episode):
class IHeartRadioIE (line 28) | class IHeartRadioIE(IHeartRadioBaseIE):
method _real_extract (line 44) | def _real_extract(self, url):
class IHeartRadioPodcastIE (line 57) | class IHeartRadioPodcastIE(IHeartRadioBaseIE):
method _real_extract (line 73) | def _real_extract(self, url):
FILE: youtube_dl/extractor/imdb.py
class ImdbIE (line 18) | class ImdbIE(InfoExtractor):
method _real_extract (line 52) | def _real_extract(self, url):
class ImdbListIE (line 119) | class ImdbListIE(InfoExtractor):
method _real_extract (line 133) | def _real_extract(self, url):
FILE: youtube_dl/extractor/imggaming.py
class ImgGamingBaseIE (line 17) | class ImgGamingBaseIE(InfoExtractor):
method _real_initialize (line 25) | def _real_initialize(self):
method _call_api (line 44) | def _call_api(self, path, media_id):
method _extract_dve_api_url (line 48) | def _extract_dve_api_url(self, media_id, media_type):
method _real_extract (line 64) | def _real_extract(self, url):
FILE: youtube_dl/extractor/imgur.py
class ImgurBaseIE (line 23) | class ImgurBaseIE(InfoExtractor):
method _imgur_result (line 28) | def _imgur_result(cls, item_id):
method _call_api (line 31) | def _call_api(self, endpoint, video_id, **kwargs):
method get_description (line 37) | def get_description(s):
class ImgurIE (line 43) | class ImgurIE(ImgurBaseIE):
method _extract_twitter_formats (line 78) | def _extract_twitter_formats(self, html, tw_id='twitter', **kwargs):
method _real_extract (line 95) | def _real_extract(self, url):
class ImgurGalleryBaseIE (line 224) | class ImgurGalleryBaseIE(ImgurBaseIE):
method _real_extract (line 227) | def _real_extract(self, url):
class ImgurGalleryIE (line 264) | class ImgurGalleryIE(ImgurGalleryBaseIE):
class ImgurAlbumIE (line 341) | class ImgurAlbumIE(ImgurGalleryBaseIE):
FILE: youtube_dl/extractor/ina.py
class InaIE (line 14) | class InaIE(InfoExtractor):
method _real_extract (line 39) | def _real_extract(self, url):
FILE: youtube_dl/extractor/inc.py
class IncIE (line 7) | class IncIE(InfoExtractor):
method _real_extract (line 44) | def _real_extract(self, url):
FILE: youtube_dl/extractor/indavideo.py
class IndavideoEmbedIE (line 16) | class IndavideoEmbedIE(InfoExtractor):
method _extract_urls (line 52) | def _extract_urls(webpage):
method _real_extract (line 57) | def _real_extract(self, url):
FILE: youtube_dl/extractor/infoq.py
class InfoQIE (line 20) | class InfoQIE(BokeCCBaseIE):
method _extract_rtmp_video (line 58) | def _extract_rtmp_video(self, webpage):
method _extract_cf_auth (line 76) | def _extract_cf_auth(self, webpage):
method _extract_http_video (line 86) | def _extract_http_video(self, webpage):
method _extract_http_audio (line 95) | def _extract_http_audio(self, webpage, video_id):
method _real_extract (line 121) | def _real_extract(self, url):
FILE: youtube_dl/extractor/instagram.py
class InstagramIE (line 25) | class InstagramIE(InfoExtractor):
method _extract_embed_url (line 125) | def _extract_embed_url(webpage):
method _real_extract (line 142) | def _real_extract(self, url):
class InstagramPlaylistIE (line 279) | class InstagramPlaylistIE(InfoExtractor):
method _parse_graphql (line 285) | def _parse_graphql(self, webpage, item_id):
method _extract_graphql (line 292) | def _extract_graphql(self, data, url):
method _real_extract (line 397) | def _real_extract(self, url):
class InstagramUserIE (line 408) | class InstagramUserIE(InstagramPlaylistIE):
method _parse_timeline_from (line 429) | def _parse_timeline_from(data):
method _query_vars_for (line 434) | def _query_vars_for(data):
class InstagramTagIE (line 442) | class InstagramTagIE(InstagramPlaylistIE):
method _parse_timeline_from (line 463) | def _parse_timeline_from(data):
method _query_vars_for (line 468) | def _query_vars_for(data):
FILE: youtube_dl/extractor/internazionale.py
class InternazionaleIE (line 8) | class InternazionaleIE(InfoExtractor):
method _real_extract (line 44) | def _real_extract(self, url):
FILE: youtube_dl/extractor/internetvideoarchive.py
class InternetVideoArchiveIE (line 13) | class InternetVideoArchiveIE(InfoExtractor):
method _build_json_url (line 31) | def _build_json_url(query):
method _real_extract (line 34) | def _real_extract(self, url):
FILE: youtube_dl/extractor/iprima.py
class IPrimaIE (line 14) | class IPrimaIE(InfoExtractor):
method _real_extract (line 74) | def _real_extract(self, url):
FILE: youtube_dl/extractor/iqiyi.py
function md5_text (line 25) | def md5_text(text):
class IqiyiSDK (line 29) | class IqiyiSDK(object):
method __init__ (line 30) | def __init__(self, target, ip, timestamp):
method split_sum (line 36) | def split_sum(data):
method digit_sum (line 40) | def digit_sum(num):
method even_odd (line 45) | def even_odd(self):
method preprocess (line 50) | def preprocess(self, chunksize):
method mod (line 59) | def mod(self, modulus):
method split (line 63) | def split(self, chunksize):
method handle_input16 (line 80) | def handle_input16(self):
method handle_input8 (line 84) | def handle_input8(self):
method handleSum (line 92) | def handleSum(self):
method date (line 96) | def date(self, scheme):
method split_time_even_odd (line 106) | def split_time_even_odd(self):
method split_time_odd_even (line 110) | def split_time_odd_even(self):
method split_ip_time_sum (line 114) | def split_ip_time_sum(self):
method split_time_ip_sum (line 118) | def split_time_ip_sum(self):
class IqiyiSDKInterpreter (line 123) | class IqiyiSDKInterpreter(object):
method __init__ (line 124) | def __init__(self, sdk_code):
method run (line 127) | def run(self, target, ip, timestamp):
class IqiyiIE (line 158) | class IqiyiIE(InfoExtractor):
method _real_initialize (line 230) | def _real_initialize(self):
method _rsa_fun (line 234) | def _rsa_fun(data):
method _login (line 241) | def _login(self):
method get_raw_data (line 288) | def get_raw_data(self, tvid, video_id):
method _extract_playlist (line 306) | def _extract_playlist(self, webpage):
method _real_extract (line 339) | def _real_extract(self, url):
FILE: youtube_dl/extractor/ir90tv.py
class Ir90TvIE (line 8) | class Ir90TvIE(InfoExtractor):
method _real_extract (line 24) | def _real_extract(self, url):
FILE: youtube_dl/extractor/itv.py
class ITVBaseIE (line 36) | class ITVBaseIE(InfoExtractor):
method __handle_request_webpage_error (line 38) | def __handle_request_webpage_error(self, err, video_id=None, errnote=N...
method _vanilla_ua_header (line 52) | def _vanilla_ua_header():
method _download_webpage_handle (line 55) | def _download_webpage_handle(self, url, video_id, *args, **kwargs):
class ITVIE (line 101) | class ITVIE(ITVBaseIE):
method _og_extract (line 172) | def _og_extract(self, webpage, require_title=False):
method _real_extract (line 180) | def _real_extract(self, url):
class ITVBTCCIE (line 317) | class ITVBTCCIE(ITVBaseIE):
method _real_extract (line 347) | def _real_extract(self, url):
FILE: youtube_dl/extractor/ivi.py
class IviIE (line 16) | class IviIE(InfoExtractor):
method _real_extract (line 83) | def _real_extract(self, url):
class IviCompilationIE (line 217) | class IviCompilationIE(InfoExtractor):
method _extract_entries (line 237) | def _extract_entries(self, html, compilation_id):
method _real_extract (line 244) | def _real_extract(self, url):
FILE: youtube_dl/extractor/ivideon.py
class IvideonIE (line 14) | class IvideonIE(InfoExtractor):
method _real_extract (line 40) | def _real_extract(self, url):
FILE: youtube_dl/extractor/iwara.py
class IwaraIE (line 14) | class IwaraIE(InfoExtractor):
method _real_extract (line 51) | def _real_extract(self, url):
FILE: youtube_dl/extractor/izlesene.py
class IzleseneIE (line 19) | class IzleseneIE(InfoExtractor):
method _real_extract (line 58) | def _real_extract(self, url):
FILE: youtube_dl/extractor/jamendo.py
class JamendoIE (line 16) | class JamendoIE(InfoExtractor):
method _call_api (line 51) | def _call_api(self, resource, resource_id):
method _real_extract (line 61) | def _real_extract(self, url):
class JamendoAlbumIE (line 137) | class JamendoAlbumIE(JamendoIE):
method _real_extract (line 174) | def _real_extract(self, url):
FILE: youtube_dl/extractor/jeuxvideo.py
class JeuxVideoIE (line 10) | class JeuxVideoIE(InfoExtractor):
method _real_extract (line 27) | def _real_extract(self, url):
FILE: youtube_dl/extractor/joj.py
class JojIE (line 15) | class JojIE(InfoExtractor):
method _extract_urls (line 44) | def _extract_urls(webpage):
method _real_extract (line 51) | def _real_extract(self, url):
FILE: youtube_dl/extractor/jove.py
class JoveIE (line 12) | class JoveIE(InfoExtractor):
method _real_extract (line 43) | def _real_extract(self, url):
FILE: youtube_dl/extractor/jwplatform.py
class JWPlatformIE (line 10) | class JWPlatformIE(InfoExtractor):
method _extract_url (line 29) | def _extract_url(webpage):
method _extract_urls (line 34) | def _extract_urls(webpage):
method _real_extract (line 39) | def _real_extract(self, url):
FILE: youtube_dl/extractor/kakao.py
class KakaoIE (line 18) | class KakaoIE(InfoExtractor):
method _real_extract (line 53) | def _real_extract(self, url):
FILE: youtube_dl/extractor/kaltura.py
class KalturaIE (line 21) | class KalturaIE(InfoExtractor):
method _extract_url (line 115) | def _extract_url(webpage):
method _extract_urls (line 120) | def _extract_urls(webpage):
method _kaltura_api_call (line 172) | def _kaltura_api_call(self, video_id, actions, service_url=None, *args...
method _get_video_info (line 190) | def _get_video_info(self, video_id, partner_id, service_url=None):
method _real_extract (line 229) | def _real_extract(self, url):
FILE: youtube_dl/extractor/kankan.py
class KankanIE (line 11) | class KankanIE(InfoExtractor):
method _real_extract (line 25) | def _real_extract(self, url):
FILE: youtube_dl/extractor/karaoketv.py
class KaraoketvIE (line 7) | class KaraoketvIE(InfoExtractor):
method _real_extract (line 22) | def _real_extract(self, url):
FILE: youtube_dl/extractor/karrierevideos.py
class KarriereVideosIE (line 14) | class KarriereVideosIE(InfoExtractor):
method _real_extract (line 45) | def _real_extract(self, url):
FILE: youtube_dl/extractor/keezmovies.py
class KeezMoviesIE (line 18) | class KeezMoviesIE(InfoExtractor):
method _extract_info (line 37) | def _extract_info(self, url, fatal=True):
method _real_extract (line 127) | def _real_extract(self, url):
FILE: youtube_dl/extractor/ketnet.py
class KetnetIE (line 12) | class KetnetIE(InfoExtractor):
method _real_extract (line 37) | def _real_extract(self, url):
FILE: youtube_dl/extractor/khanacademy.py
class KhanAcademyBaseIE (line 13) | class KhanAcademyBaseIE(InfoExtractor):
method _parse_video (line 16) | def _parse_video(self, video):
method _real_extract (line 28) | def _real_extract(self, url):
class KhanAcademyIE (line 42) | class KhanAcademyIE(KhanAcademyBaseIE):
method _parse_component_props (line 63) | def _parse_component_props(self, component_props):
class KhanAcademyUnitIE (line 75) | class KhanAcademyUnitIE(KhanAcademyBaseIE):
method _parse_component_props (line 88) | def _parse_component_props(self, component_props):
FILE: youtube_dl/extractor/kickstarter.py
class KickStarterIE (line 8) | class KickStarterIE(InfoExtractor):
method _real_extract (line 42) | def _real_extract(self, url):
FILE: youtube_dl/extractor/kinja.py
class KinjaEmbedIE (line 21) | class KinjaEmbedIE(InfoExtractor):
method _extract_urls (line 126) | def _extract_urls(webpage, url):
method _real_extract (line 131) | def _real_extract(self, url):
FILE: youtube_dl/extractor/kinopoisk.py
class KinoPoiskIE (line 11) | class KinoPoiskIE(InfoExtractor):
method _real_extract (line 34) | def _real_extract(self, url):
FILE: youtube_dl/extractor/kommunetv.py
class KommunetvIE (line 8) | class KommunetvIE(InfoExtractor):
method _real_extract (line 20) | def _real_extract(self, url):
FILE: youtube_dl/extractor/konserthusetplay.py
class KonserthusetPlayIE (line 13) | class KonserthusetPlayIE(InfoExtractor):
method _real_extract (line 31) | def _real_extract(self, url):
FILE: youtube_dl/extractor/krasview.py
class KrasViewIE (line 13) | class KrasViewIE(InfoExtractor):
method _real_extract (line 33) | def _real_extract(self, url):
FILE: youtube_dl/extractor/kth.py
class KTHIE (line 8) | class KTHIE(InfoExtractor):
method _real_extract (line 25) | def _real_extract(self, url):
FILE: youtube_dl/extractor/ku6.py
class Ku6IE (line 6) | class Ku6IE(InfoExtractor):
method _real_extract (line 18) | def _real_extract(self, url):
FILE: youtube_dl/extractor/kusi.py
class KUSIIE (line 18) | class KUSIIE(InfoExtractor):
method _real_extract (line 37) | def _real_extract(self, url):
FILE: youtube_dl/extractor/kuwo.py
class KuwoBaseIE (line 17) | class KuwoBaseIE(InfoExtractor):
method _get_formats (line 27) | def _get_formats(self, song_id, tolerate_ip_deny=False):
class KuwoIE (line 59) | class KuwoIE(KuwoBaseIE):
method _real_extract (line 92) | def _real_extract(self, url):
class KuwoAlbumIE (line 139) | class KuwoAlbumIE(InfoExtractor):
method _real_extract (line 153) | def _real_extract(self, url):
class KuwoChartIE (line 175) | class KuwoChartIE(InfoExtractor):
method _real_extract (line 187) | def _real_extract(self, url):
class KuwoSingerIE (line 200) | class KuwoSingerIE(InfoExtractor):
method _real_extract (line 223) | def _real_extract(self, url):
class KuwoCategoryIE (line 257) | class KuwoCategoryIE(InfoExtractor):
method _real_extract (line 271) | def _real_extract(self, url):
class KuwoMvIE (line 296) | class KuwoMvIE(KuwoBaseIE):
method _real_extract (line 320) | def _real_extract(self, url):
FILE: youtube_dl/extractor/la7.py
class LA7IE (line 11) | class LA7IE(InfoExtractor):
method _real_extract (line 46) | def _real_extract(self, url):
FILE: youtube_dl/extractor/laola1tv.py
class Laola1TvEmbedIE (line 19) | class Laola1TvEmbedIE(InfoExtractor):
method _extract_token_url (line 34) | def _extract_token_url(self, stream_access_url, video_id, data):
method _extract_formats (line 41) | def _extract_formats(self, token_url, video_id):
method _real_extract (line 58) | def _real_extract(self, url):
class Laola1TvBaseIE (line 124) | class Laola1TvBaseIE(Laola1TvEmbedIE):
method _extract_video (line 125) | def _extract_video(self, url):
class Laola1TvIE (line 173) | class Laola1TvIE(Laola1TvBaseIE):
method _real_extract (line 223) | def _real_extract(self, url):
class EHFTVIE (line 227) | class EHFTVIE(Laola1TvBaseIE):
method _real_extract (line 246) | def _real_extract(self, url):
class ITTFIE (line 250) | class ITTFIE(InfoExtractor):
method _real_extract (line 257) | def _real_extract(self, url):
FILE: youtube_dl/extractor/lbry.py
class LBRYBaseIE (line 25) | class LBRYBaseIE(InfoExtractor):
method _call_api_proxy (line 31) | def _call_api_proxy(self, method, display_id, params, resource):
method _resolve_url (line 41) | def _resolve_url(self, url, display_id, resource):
method _permanent_url (line 45) | def _permanent_url(self, url, claim_name, claim_id):
method _parse_stream (line 48) | def _parse_stream(self, stream, url):
class LBRYIE (line 84) | class LBRYIE(LBRYBaseIE):
method _real_extract (line 169) | def _real_extract(self, url):
class LBRYChannelIE (line 202) | class LBRYChannelIE(LBRYBaseIE):
method _fetch_page (line 219) | def _fetch_page(self, claim_id, url, params, page):
method _real_extract (line 246) | def _real_extract(self, url):
FILE: youtube_dl/extractor/lci.py
class LCIIE (line 7) | class LCIIE(InfoExtractor):
method _real_extract (line 20) | def _real_extract(self, url):
FILE: youtube_dl/extractor/lcp.py
class LcpPlayIE (line 8) | class LcpPlayIE(ArkenaIE):
class LcpIE (line 26) | class LcpIE(InfoExtractor):
method _real_extract (line 66) | def _real_extract(self, url):
FILE: youtube_dl/extractor/lecture2go.py
class Lecture2GoIE (line 15) | class Lecture2GoIE(InfoExtractor):
method _real_extract (line 33) | def _real_extract(self, url):
FILE: youtube_dl/extractor/lecturio.py
class LecturioBaseIE (line 20) | class LecturioBaseIE(InfoExtractor):
method _real_initialize (line 25) | def _real_initialize(self):
method _login (line 28) | def _login(self):
class LecturioIE (line 66) | class LecturioIE(LecturioBaseIE):
method _real_extract (line 105) | def _real_extract(self, url):
class LecturioCourseIE (line 182) | class LecturioCourseIE(LecturioBaseIE):
method _real_extract (line 198) | def _real_extract(self, url):
class LecturioDeCourseIE (line 219) | class LecturioDeCourseIE(LecturioBaseIE):
method _real_extract (line 226) | def _real_extract(self, url):
FILE: youtube_dl/extractor/leeco.py
class LeIE (line 29) | class LeIE(InfoExtractor):
method ror (line 83) | def ror(self, param1, param2):
method calc_time_key (line 90) | def calc_time_key(self, param1):
method decrypt_m3u8 (line 96) | def decrypt_m3u8(encrypted_data):
method _check_errors (line 114) | def _check_errors(self, play_json):
method _real_extract (line 124) | def _real_extract(self, url):
class LePlaylistIE (line 205) | class LePlaylistIE(InfoExtractor):
method suitable (line 238) | def suitable(cls, url):
method _real_extract (line 241) | def _real_extract(self, url):
class LetvCloudIE (line 259) | class LetvCloudIE(InfoExtractor):
method sign_data (line 292) | def sign_data(obj):
method _get_formats (line 302) | def _get_formats(self, cf, uu, vu, media_id):
method _real_extract (line 350) | def _real_extract(self, url):
FILE: youtube_dl/extractor/lego.py
class LEGOIE (line 16) | class LEGOIE(InfoExtractor):
method _real_extract (line 66) | def _real_extract(self, url):
FILE: youtube_dl/extractor/lemonde.py
class LemondeIE (line 6) | class LemondeIE(InfoExtractor):
method _real_extract (line 46) | def _real_extract(self, url):
FILE: youtube_dl/extractor/lenta.py
class LentaIE (line 7) | class LentaIE(InfoExtractor):
method _real_extract (line 40) | def _real_extract(self, url):
FILE: youtube_dl/extractor/libraryofcongress.py
class LibraryOfCongressIE (line 16) | class LibraryOfCongressIE(InfoExtractor):
method _real_extract (line 67) | def _real_extract(self, url):
FILE: youtube_dl/extractor/libsyn.py
class LibsynIE (line 16) | class LibsynIE(InfoExtractor):
method _real_extract (line 44) | def _real_extract(self, url):
FILE: youtube_dl/extractor/lifenews.py
class LifeNewsIE (line 20) | class LifeNewsIE(InfoExtractor):
method _real_extract (line 93) | def _real_extract(self, url):
class LifeEmbedIE (line 168) | class LifeEmbedIE(InfoExtractor):
method _real_extract (line 187) | def _real_extract(self, url):
FILE: youtube_dl/extractor/limelight.py
class LimelightBaseIE (line 19) | class LimelightBaseIE(InfoExtractor):
method _extract_urls (line 23) | def _extract_urls(cls, webpage, source_url):
method _call_playlist_service (line 65) | def _call_playlist_service(self, item_id, method, fatal=True, referer=...
method _extract (line 82) | def _extract(self, item_id, pc_method, mobile_method, referer=None):
method _extract_info (line 88) | def _extract_info(self, pc, mobile, i, referer):
class LimelightMediaIE (line 211) | class LimelightMediaIE(LimelightBaseIE):
method _real_extract (line 259) | def _real_extract(self, url):
class LimelightChannelIE (line 274) | class LimelightChannelIE(LimelightBaseIE):
method _real_extract (line 302) | def _real_extract(self, url):
class LimelightChannelListIE (line 320) | class LimelightChannelListIE(LimelightBaseIE):
method _real_extract (line 347) | def _real_extract(self, url):
FILE: youtube_dl/extractor/line.py
class LineTVIE (line 16) | class LineTVIE(InfoExtractor):
method _real_extract (line 34) | def _real_extract(self, url):
class LineLiveBaseIE (line 99) | class LineLiveBaseIE(InfoExtractor):
method _parse_broadcast_item (line 102) | def _parse_broadcast_item(self, item):
class LineLiveIE (line 134) | class LineLiveIE(LineLiveBaseIE):
method _real_extract (line 157) | def _real_extract(self, url):
class LineLiveChannelIE (line 192) | class LineLiveChannelIE(LineLiveBaseIE):
method _archived_broadcasts_entries (line 204) | def _archived_broadcasts_entries(self, archived_broadcasts, channel_id):
method _real_extract (line 225) | def _real_extract(self, url):
FILE: youtube_dl/extractor/linkedin.py
class LinkedInLearningBaseIE (line 16) | class LinkedInLearningBaseIE(InfoExtractor):
method _call_api (line 20) | def _call_api(self, course_slug, fields, video_slug=None, resolution=N...
method _get_urn_id (line 39) | def _get_urn_id(self, video_data):
method _get_video_id (line 46) | def _get_video_id(self, video_data, course_slug, video_slug):
method _real_initialize (line 49) | def _real_initialize(self):
class LinkedInLearningIE (line 74) | class LinkedInLearningIE(LinkedInLearningBaseIE):
method _real_extract (line 89) | def _real_extract(self, url):
class LinkedInLearningCourseIE (line 139) | class LinkedInLearningCourseIE(LinkedInLearningBaseIE):
method suitable (line 153) | def suitable(cls, url):
method _real_extract (line 156) | def _real_extract(self, url):
FILE: youtube_dl/extractor/linuxacademy.py
class LinuxAcademyIE (line 25) | class LinuxAcademyIE(InfoExtractor):
method _real_initialize (line 69) | def _real_initialize(self):
method _login (line 72) | def _login(self):
method _real_extract (line 154) | def _real_extract(self, url):
FILE: youtube_dl/extractor/litv.py
class LiTVIE (line 15) | class LiTVIE(InfoExtractor):
method _extract_playlist (line 54) | def _extract_playlist(self, season_list, video_id, program_info, promp...
method _real_extract (line 69) | def _real_extract(self, url):
FILE: youtube_dl/extractor/livejournal.py
class LiveJournalIE (line 9) | class LiveJournalIE(InfoExtractor):
method _real_extract (line 23) | def _real_extract(self, url):
FILE: youtube_dl/extractor/livestream.py
class LivestreamIE (line 25) | class LivestreamIE(InfoExtractor):
method _parse_smil_formats (line 65) | def _parse_smil_formats(self, smil, smil_url, video_id, namespace=None...
method _extract_video_info (line 91) | def _extract_video_info(self, video_data):
method _extract_stream_info (line 153) | def _extract_stream_info(self, stream_info):
method _extract_event (line 184) | def _extract_event(self, event_data):
method _real_extract (line 214) | def _real_extract(self, url):
class LivestreamOriginalIE (line 230) | class LivestreamOriginalIE(InfoExtractor):
method _extract_video_info (line 257) | def _extract_video_info(self, user, video_id):
method _extract_video_formats (line 280) | def _extract_video_formats(self, video_data, video_id):
method _extract_folder (line 306) | def _extract_folder(self, url, folder_id):
method _real_extract (line 321) | def _real_extract(self, url):
class LivestreamShortenerIE (line 356) | class LivestreamShortenerIE(InfoExtractor):
method _real_extract (line 361) | def _real_extract(self, url):
FILE: youtube_dl/extractor/lnkgo.py
class LnkGoIE (line 15) | class LnkGoIE(InfoExtractor):
method _real_extract (line 60) | def _real_extract(self, url):
FILE: youtube_dl/extractor/localnews8.py
class LocalNews8IE (line 9) | class LocalNews8IE(InfoExtractor):
method _real_extract (line 27) | def _real_extract(self, url):
FILE: youtube_dl/extractor/lovehomeporn.py
class LoveHomePornIE (line 8) | class LoveHomePornIE(NuevoBaseIE):
method _real_extract (line 25) | def _real_extract(self, url):
FILE: youtube_dl/extractor/lrt.py
class LRTIE (line 13) | class LRTIE(InfoExtractor):
method _extract_js_var (line 44) | def _extract_js_var(self, webpage, var_name, default):
method _real_extract (line 49) | def _real_extract(self, url):
FILE: youtube_dl/extractor/lynda.py
class LyndaBaseIE (line 17) | class LyndaBaseIE(InfoExtractor):
method _real_initialize (line 24) | def _real_initialize(self):
method _check_error (line 28) | def _check_error(json_string, key_or_keys):
method _login_step (line 35) | def _login_step(self, form_html, fallback_action_url, extra_form_data,...
method _login (line 58) | def _login(self):
class LyndaIE (line 87) | class LyndaIE(LyndaBaseIE):
method _raise_unavailable (line 126) | def _raise_unavailable(self, video_id):
method _real_extract (line 130) | def _real_extract(self, url):
method _fix_subtitles (l
Condensed preview — 980 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (7,197K chars).
[
{
"path": ".github/ISSUE_TEMPLATE/1_broken_site.md",
"chars": 2555,
"preview": "---\nname: Broken site support\nabout: Report broken or misfunctioning site\ntitle: ''\n---\n\n<!--\n\n#########################"
},
{
"path": ".github/ISSUE_TEMPLATE/2_site_support_request.md",
"chars": 2180,
"preview": "---\nname: Site support request\nabout: Request support for a new site\ntitle: ''\nlabels: 'site-support-request'\n---\n\n<!--\n"
},
{
"path": ".github/ISSUE_TEMPLATE/3_site_feature_request.md",
"chars": 1490,
"preview": "---\nname: Site feature request\nabout: Request a new functionality for a site\ntitle: ''\n---\n\n<!--\n\n######################"
},
{
"path": ".github/ISSUE_TEMPLATE/4_bug_report.md",
"chars": 2837,
"preview": "---\nname: Bug report\nabout: Report a bug unrelated to any particular site or extractor\ntitle: ''\n---\n\n<!--\n\n############"
},
{
"path": ".github/ISSUE_TEMPLATE/5_feature_request.md",
"chars": 1508,
"preview": "---\nname: Feature request\nabout: Request a new functionality unrelated to any particular site or extractor\ntitle: ''\nlab"
},
{
"path": ".github/ISSUE_TEMPLATE/6_question.md",
"chars": 1133,
"preview": "---\nname: Ask question\nabout: Ask youtube-dl related question\ntitle: ''\nlabels: 'question'\n---\n\n<!--\n\n##################"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 28,
"preview": "blank_issues_enabled: false\n"
},
{
"path": ".github/ISSUE_TEMPLATE_tmpl/1_broken_site.md",
"chars": 2558,
"preview": "---\nname: Broken site support\nabout: Report broken or misfunctioning site\ntitle: ''\n---\n\n<!--\n\n#########################"
},
{
"path": ".github/ISSUE_TEMPLATE_tmpl/2_site_support_request.md",
"chars": 2182,
"preview": "---\nname: Site support request\nabout: Request support for a new site\ntitle: ''\nlabels: 'site-support-request'\n---\n\n<!--\n"
},
{
"path": ".github/ISSUE_TEMPLATE_tmpl/3_site_feature_request.md",
"chars": 1492,
"preview": "---\nname: Site feature request\nabout: Request a new functionality for a site\ntitle: ''\n---\n\n<!--\n\n######################"
},
{
"path": ".github/ISSUE_TEMPLATE_tmpl/4_bug_report.md",
"chars": 2840,
"preview": "---\nname: Bug report\nabout: Report a bug unrelated to any particular site or extractor\ntitle: ''\n---\n\n<!--\n\n############"
},
{
"path": ".github/ISSUE_TEMPLATE_tmpl/5_feature_request.md",
"chars": 1510,
"preview": "---\nname: Feature request\nabout: Request a new functionality unrelated to any particular site or extractor\ntitle: ''\nlab"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 1783,
"preview": "## Please follow the guide below\n\n- You will be asked some questions, please read them **carefully** and answer honestly"
},
{
"path": ".github/workflows/ci.yml",
"chars": 20832,
"preview": "name: CI\n\nenv:\n 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\n main-cpython"
},
{
"path": ".gitignore",
"chars": 521,
"preview": "*.pyc\n*.pyo\n*.class\n*~\n*.DS_Store\nwine-py2exe/\npy2exe.log\n*.kate-swp\nbuild/\ndist/\nMANIFEST\nREADME.txt\nyoutube-dl.1\nyoutu"
},
{
"path": "AUTHORS",
"chars": 3471,
"preview": "Ricardo Garcia Gonzalez\nDanny Colligan\nBenjamin Johnson\nVasyl' Vavrychuk\nWitold Baryluk\nPaweł Paprota\nGergely Imreh\nRogé"
},
{
"path": "CONTRIBUTING.md",
"chars": 22864,
"preview": "**Please include the full output of youtube-dl when run with `-v`**, i.e. **add** `-v` flag to **your command line**, co"
},
{
"path": "ChangeLog",
"chars": 214064,
"preview": "version 2021.12.17\n\nCore\n* [postprocessor/ffmpeg] Show ffmpeg output on error (#22680, #29336)\n\nExtractors\n* [youtube] U"
},
{
"path": "LICENSE",
"chars": 1211,
"preview": "This is free and unencumbered software released into the public domain.\n\nAnyone is free to copy, modify, publish, use, c"
},
{
"path": "MANIFEST.in",
"chars": 219,
"preview": "include README.md\ninclude LICENSE\ninclude AUTHORS\ninclude ChangeLog\ninclude youtube-dl.bash-completion\ninclude youtube-d"
},
{
"path": "Makefile",
"chars": 6235,
"preview": "all: youtube-dl README.md CONTRIBUTING.md README.txt youtube-dl.1 youtube-dl.bash-completion youtube-dl.zsh youtube-dl.f"
},
{
"path": "README.md",
"chars": 101034,
"preview": "[](https://github.com/ytdl-org/youtube-dl/"
},
{
"path": "devscripts/__init__.py",
"chars": 78,
"preview": "# Empty file needed to make devscripts.utils properly importable from outside\n"
},
{
"path": "devscripts/bash-completion.in",
"chars": 844,
"preview": "__youtube_dl()\n{\n local cur prev opts fileopts diropts keywords\n COMPREPLY=()\n cur=\"${COMP_WORDS[COMP_CWORD]}\"\n"
},
{
"path": "devscripts/bash-completion.py",
"chars": 942,
"preview": "#!/usr/bin/env python\nfrom __future__ import unicode_literals\n\nimport os\nfrom os.path import dirname as dirn\nimport sys\n"
},
{
"path": "devscripts/buildserver.py",
"chars": 13935,
"preview": "#!/usr/bin/python3\n\nimport argparse\nimport ctypes\nimport functools\nimport shutil\nimport subprocess\nimport sys\nimport tem"
},
{
"path": "devscripts/check-porn.py",
"chars": 1923,
"preview": "#!/usr/bin/env python\nfrom __future__ import unicode_literals\n\n\"\"\"\nThis script employs a VERY basic heuristic ('porn' in"
},
{
"path": "devscripts/cli_to_api.py",
"chars": 2245,
"preview": "#!/usr/bin/env python\n# coding: utf-8\n\nfrom __future__ import unicode_literals\n\n\"\"\"\nThis script displays the API paramet"
},
{
"path": "devscripts/create-github-release.py",
"chars": 3580,
"preview": "#!/usr/bin/env python\nfrom __future__ import unicode_literals\n\nimport json\nimport mimetypes\nimport netrc\nimport optparse"
},
{
"path": "devscripts/fish-completion.in",
"chars": 130,
"preview": "\n{{commands}}\n\n\ncomplete --command youtube-dl --arguments \":ytfavorites :ytrecommended :ytsubscriptions :ytwatchlater :y"
},
{
"path": "devscripts/fish-completion.py",
"chars": 1605,
"preview": "#!/usr/bin/env python\nfrom __future__ import unicode_literals\n\nimport optparse\nimport os\nfrom os.path import dirname as "
},
{
"path": "devscripts/generate_aes_testdata.py",
"chars": 1137,
"preview": "from __future__ import unicode_literals\n\nimport codecs\nimport subprocess\n\nimport os\nimport sys\nsys.path.insert(0, os.pat"
},
{
"path": "devscripts/gh-pages/add-version.py",
"chars": 1363,
"preview": "#!/usr/bin/env python3\nfrom __future__ import unicode_literals\n\nimport json\nimport sys\nimport hashlib\nimport os.path\n\ndi"
},
{
"path": "devscripts/gh-pages/generate-download.py",
"chars": 952,
"preview": "#!/usr/bin/env python3\nfrom __future__ import unicode_literals\n\nimport json\nimport os.path\nimport sys\n\ndirn = os.path.di"
},
{
"path": "devscripts/gh-pages/sign-versions.py",
"chars": 909,
"preview": "#!/usr/bin/env python3\nfrom __future__ import unicode_literals, with_statement\n\nimport rsa\nimport json\nfrom binascii imp"
},
{
"path": "devscripts/gh-pages/update-copyright.py",
"chars": 663,
"preview": "#!/usr/bin/env python\n# coding: utf-8\n\nfrom __future__ import with_statement, unicode_literals\n\nimport datetime\nimport g"
},
{
"path": "devscripts/gh-pages/update-feed.py",
"chars": 2402,
"preview": "#!/usr/bin/env python3\nfrom __future__ import unicode_literals\n\nimport datetime\nimport json\nimport os.path\nimport textwr"
},
{
"path": "devscripts/gh-pages/update-sites.py",
"chars": 976,
"preview": "#!/usr/bin/env python3\nfrom __future__ import unicode_literals\n\nimport sys\nimport os\nimport textwrap\n\ndirn = os.path.dir"
},
{
"path": "devscripts/lazy_load_template.py",
"chars": 456,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nimport re\n\n\nclass LazyLoadExtractor(object):\n _module = None"
},
{
"path": "devscripts/make_contributing.py",
"chars": 720,
"preview": "#!/usr/bin/env python\nfrom __future__ import unicode_literals\n\nimport optparse\nimport re\n\nfrom utils import read_file, w"
},
{
"path": "devscripts/make_issue_template.py",
"chars": 570,
"preview": "#!/usr/bin/env python\nfrom __future__ import unicode_literals\n\nimport optparse\nimport os.path\nimport sys\n\nfrom utils imp"
},
{
"path": "devscripts/make_lazy_extractors.py",
"chars": 3931,
"preview": "from __future__ import unicode_literals, print_function\n\nfrom inspect import getsource\nimport os\nfrom os.path import dir"
},
{
"path": "devscripts/make_readme.py",
"chars": 783,
"preview": "from __future__ import unicode_literals\n\nimport os.path\nimport re\nimport sys\ndirn = os.path.dirname\n\nsys.path.insert(0, "
},
{
"path": "devscripts/make_supportedsites.py",
"chars": 1121,
"preview": "#!/usr/bin/env python\nfrom __future__ import unicode_literals\n\nimport optparse\nimport os.path\nimport sys\n\n# Import youtu"
},
{
"path": "devscripts/posix-locale.sh",
"chars": 180,
"preview": "\n# source this file in your shell to get a POSIX locale (which will break many programs, but that's kind of the point)\n\n"
},
{
"path": "devscripts/prepare_manpage.py",
"chars": 2121,
"preview": "from __future__ import unicode_literals\n\nimport optparse\nimport os.path\nimport re\n\nfrom utils import read_file, write_fi"
},
{
"path": "devscripts/release.sh",
"chars": 5074,
"preview": "#!/bin/bash\n\n# IMPORTANT: the following assumptions are made\n# * the GH repo is on the origin remote\n# * the gh-pages br"
},
{
"path": "devscripts/run_tests.bat",
"chars": 633,
"preview": "@echo off\n\nrem Keep this list in sync with the `offlinetest` target in Makefile\nset DOWNLOAD_TESTS=\"age_restriction^|dow"
},
{
"path": "devscripts/run_tests.sh",
"chars": 562,
"preview": "#!/bin/bash\n\n# Keep this list in sync with the `offlinetest` target in Makefile\nDOWNLOAD_TESTS=\"age_restriction|download"
},
{
"path": "devscripts/show-downloads-statistics.py",
"chars": 1349,
"preview": "#!/usr/bin/env python\nfrom __future__ import unicode_literals\n\nimport itertools\nimport json\nimport os\nimport re\nimport s"
},
{
"path": "devscripts/utils.py",
"chars": 1644,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nimport argparse\nimport functools\nimport os.path\nimport subproce"
},
{
"path": "devscripts/wine-py2exe.sh",
"chars": 1961,
"preview": "#!/bin/bash\n\n# Run with as parameter a setup.py that works in the current directory\n# e.g. no os.chdir()\n# It will run t"
},
{
"path": "devscripts/zsh-completion.in",
"chars": 777,
"preview": "#compdef youtube-dl\n\n__youtube_dl() {\n local curcontext=\"$curcontext\" fileopts diropts cur prev\n typeset -A opt_ar"
},
{
"path": "devscripts/zsh-completion.py",
"chars": 1376,
"preview": "#!/usr/bin/env python\nfrom __future__ import unicode_literals\n\nimport os\nfrom os.path import dirname as dirn\nimport sys\n"
},
{
"path": "docs/.gitignore",
"chars": 8,
"preview": "_build/\n"
},
{
"path": "docs/Makefile",
"chars": 6778,
"preview": "# Makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line.\nSPHINXOPTS =\nSPHINXBUILD "
},
{
"path": "docs/conf.py",
"chars": 2276,
"preview": "# coding: utf-8\n#\n# youtube-dl documentation build configuration file, created by\n# sphinx-quickstart on Fri Mar 14 21:0"
},
{
"path": "docs/index.rst",
"chars": 461,
"preview": "Welcome to youtube-dl's documentation!\n======================================\n\n*youtube-dl* is a command-line program to"
},
{
"path": "docs/module_guide.rst",
"chars": 2119,
"preview": "Using the ``youtube_dl`` module\n===============================\n\nWhen using the ``youtube_dl`` module, you start by crea"
},
{
"path": "docs/supportedsites.md",
"chars": 30189,
"preview": "# Supported sites\n - **1tv**: Первый канал\n - **20min**\n - **220.ro**\n - **23video**\n - **247sports**\n - **24video**\n - "
},
{
"path": "setup.cfg",
"chars": 230,
"preview": "[wheel]\nuniversal = True\n\n[flake8]\nexclude = youtube_dl/extractor/__init__.py,devscripts/buildserver.py,devscripts/lazy_"
},
{
"path": "setup.py",
"chars": 4621,
"preview": "#!/usr/bin/env python\n# coding: utf-8\n\nfrom __future__ import print_function\n\nimport os.path\nimport warnings\nimport sys\n"
},
{
"path": "test/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "test/helper.py",
"chars": 10843,
"preview": "from __future__ import unicode_literals\n\nimport errno\nimport hashlib\nimport json\nimport os.path\nimport re\nimport ssl\nimp"
},
{
"path": "test/parameters.json",
"chars": 1052,
"preview": "{\n \"consoletitle\": false, \n \"continuedl\": true, \n \"forcedescription\": false, \n \"forcefilename\": false, \n "
},
{
"path": "test/swftests/.gitignore",
"chars": 6,
"preview": "*.swf\n"
},
{
"path": "test/swftests/ArrayAccess.as",
"chars": 425,
"preview": "// input: [[\"a\", \"b\", \"c\", \"d\"]]\n// output: [\"c\", \"b\", \"a\", \"d\"]\n\npackage {\npublic class ArrayAccess {\n public static"
},
{
"path": "test/swftests/ClassCall.as",
"chars": 271,
"preview": "// input: []\n// output: 121\n\npackage {\npublic class ClassCall {\n public static function main():int{\n \tvar f:OtherC"
},
{
"path": "test/swftests/ClassConstruction.as",
"chars": 181,
"preview": "// input: []\n// output: 0\n\npackage {\npublic class ClassConstruction {\n public static function main():int{\n \tvar f:"
},
{
"path": "test/swftests/ConstArrayAccess.as",
"chars": 344,
"preview": "// input: []\n// output: 4\n\npackage {\npublic class ConstArrayAccess {\n\tprivate static const x:int = 2;\n\tprivate static co"
},
{
"path": "test/swftests/ConstantInt.as",
"chars": 165,
"preview": "// input: []\n// output: 2\n\npackage {\npublic class ConstantInt {\n\tprivate static const x:int = 2;\n\n public static func"
},
{
"path": "test/swftests/DictCall.as",
"chars": 160,
"preview": "// input: [{\"x\": 1, \"y\": 2}]\n// output: 3\n\npackage {\npublic class DictCall {\n public static function main(d:Object):i"
},
{
"path": "test/swftests/EqualsOperator.as",
"chars": 147,
"preview": "// input: []\n// output: false\n\npackage {\npublic class EqualsOperator {\n public static function main():Boolean{\n "
},
{
"path": "test/swftests/LocalVars.as",
"chars": 226,
"preview": "// input: [1, 2]\n// output: 3\n\npackage {\npublic class LocalVars {\n public static function main(a:int, b:int):int{\n "
},
{
"path": "test/swftests/MemberAssignment.as",
"chars": 384,
"preview": "// input: [1]\n// output: 2\n\npackage {\npublic class MemberAssignment {\n public var v:int;\n\n public function g():int"
},
{
"path": "test/swftests/NeOperator.as",
"chars": 405,
"preview": "// input: []\n// output: 123\n\npackage {\npublic class NeOperator {\n public static function main(): int {\n var re"
},
{
"path": "test/swftests/PrivateCall.as",
"chars": 300,
"preview": "// input: []\n// output: 9\n\npackage {\npublic class PrivateCall {\n public static function main():int{\n \tvar f:OtherC"
},
{
"path": "test/swftests/PrivateVoidCall.as",
"chars": 329,
"preview": "// input: []\n// output: 9\n\npackage {\npublic class PrivateVoidCall {\n public static function main():int{\n var f"
},
{
"path": "test/swftests/StaticAssignment.as",
"chars": 184,
"preview": "// input: [1]\n// output: 1\n\npackage {\npublic class StaticAssignment {\n\tpublic static var v:int;\n\n public static funct"
},
{
"path": "test/swftests/StaticRetrieval.as",
"chars": 226,
"preview": "// input: []\n// output: 1\n\npackage {\npublic class StaticRetrieval {\n\tpublic static var v:int;\n\n public static functio"
},
{
"path": "test/swftests/StringBasics.as",
"chars": 169,
"preview": "// input: []\n// output: 3\n\npackage {\npublic class StringBasics {\n public static function main():int{\n var s:St"
},
{
"path": "test/swftests/StringCharCodeAt.as",
"chars": 206,
"preview": "// input: []\n// output: 9897\n\npackage {\npublic class StringCharCodeAt {\n public static function main():int{\n v"
},
{
"path": "test/swftests/StringConversion.as",
"chars": 178,
"preview": "// input: []\n// output: 2\n\npackage {\npublic class StringConversion {\n public static function main():int{\n var "
},
{
"path": "test/test_InfoExtractor.py",
"chars": 72605,
"preview": "#!/usr/bin/env python\n\nfrom __future__ import unicode_literals\n\n# Allow direct execution\nimport os\nimport sys\nimport uni"
},
{
"path": "test/test_YoutubeDL.py",
"chars": 49083,
"preview": "#!/usr/bin/env python\n# coding: utf-8\n\nfrom __future__ import unicode_literals\n\n# Allow direct execution\nimport os\nimpor"
},
{
"path": "test/test_YoutubeDLCookieJar.py",
"chars": 2670,
"preview": "#!/usr/bin/env python\n# coding: utf-8\n\nfrom __future__ import unicode_literals\n\nimport os\nimport re\nimport sys\nimport te"
},
{
"path": "test/test_aes.py",
"chars": 2687,
"preview": "#!/usr/bin/env python\n\nfrom __future__ import unicode_literals\n\n# Allow direct execution\nimport os\nimport sys\nimport uni"
},
{
"path": "test/test_age_restriction.py",
"chars": 1486,
"preview": "#!/usr/bin/env python\nfrom __future__ import unicode_literals\n\n# Allow direct execution\nimport os\nimport sys\nimport unit"
},
{
"path": "test/test_all_urls.py",
"chars": 6149,
"preview": "#!/usr/bin/env python\n\nfrom __future__ import unicode_literals\n\n# Allow direct execution\nimport os\nimport sys\nimport uni"
},
{
"path": "test/test_cache.py",
"chars": 2594,
"preview": "#!/usr/bin/env python\n# coding: utf-8\n\nfrom __future__ import unicode_literals\n\n# Allow direct execution\nimport os\nimpor"
},
{
"path": "test/test_compat.py",
"chars": 6744,
"preview": "#!/usr/bin/env python\n# coding: utf-8\n\nfrom __future__ import unicode_literals\n\n# Allow direct execution\nimport os\nimpor"
},
{
"path": "test/test_download.py",
"chars": 11526,
"preview": "#!/usr/bin/env python\n\nfrom __future__ import unicode_literals\n\n# Allow direct execution\nimport os\nimport sys\nimport uni"
},
{
"path": "test/test_downloader_external.py",
"chars": 9094,
"preview": "#!/usr/bin/env python\n# coding: utf-8\nfrom __future__ import unicode_literals\n\n# Allow direct execution\nimport os\nimport"
},
{
"path": "test/test_downloader_http.py",
"chars": 3383,
"preview": "#!/usr/bin/env python\n# coding: utf-8\nfrom __future__ import unicode_literals\n\n# Allow direct execution\nimport os\nimport"
},
{
"path": "test/test_execution.py",
"chars": 2053,
"preview": "#!/usr/bin/env python\n# coding: utf-8\n\nfrom __future__ import unicode_literals\n\nimport unittest\n\nimport sys\nimport os\nim"
},
{
"path": "test/test_http.py",
"chars": 23900,
"preview": "#!/usr/bin/env python\n# coding: utf-8\nfrom __future__ import unicode_literals\n\n# Allow direct execution\nimport os\nimport"
},
{
"path": "test/test_iqiyi_sdk_interpreter.py",
"chars": 1104,
"preview": "#!/usr/bin/env python\n\nfrom __future__ import unicode_literals\n\n# Allow direct execution\nimport os\nimport sys\nimport uni"
},
{
"path": "test/test_jsinterp.py",
"chars": 32839,
"preview": "#!/usr/bin/env python\n# coding: utf-8\n\nfrom __future__ import unicode_literals\n\n# Allow direct execution\nimport os\nimpor"
},
{
"path": "test/test_netrc.py",
"chars": 635,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nimport os\nimport sys\nimport unittest\nsys.path.insert(0, os.path"
},
{
"path": "test/test_options.py",
"chars": 809,
"preview": "# coding: utf-8\n\nfrom __future__ import unicode_literals\n\n# Allow direct execution\nimport os\nimport sys\nimport unittest\n"
},
{
"path": "test/test_postprocessors.py",
"chars": 494,
"preview": "#!/usr/bin/env python\n\nfrom __future__ import unicode_literals\n\n# Allow direct execution\nimport os\nimport sys\nimport uni"
},
{
"path": "test/test_socks.py",
"chars": 3500,
"preview": "#!/usr/bin/env python\n# coding: utf-8\nfrom __future__ import unicode_literals\n\n# Allow direct execution\nimport os\nimport"
},
{
"path": "test/test_subtitles.py",
"chars": 15801,
"preview": "#!/usr/bin/env python\nfrom __future__ import unicode_literals\n\n# Allow direct execution\nimport os\nimport sys\nimport unit"
},
{
"path": "test/test_swfinterp.py",
"chars": 2256,
"preview": "#!/usr/bin/env python\nfrom __future__ import unicode_literals\n\n# Allow direct execution\nimport os\nimport sys\nimport unit"
},
{
"path": "test/test_traversal.py",
"chars": 36225,
"preview": "#!/usr/bin/env python\n# coding: utf-8\nfrom __future__ import unicode_literals\n\n# Allow direct execution\nimport os\nimport"
},
{
"path": "test/test_unicode_literals.py",
"chars": 1899,
"preview": "from __future__ import unicode_literals\n\n# Allow direct execution\nimport os\nimport re\nimport sys\nimport unittest\n\ndirn ="
},
{
"path": "test/test_update.py",
"chars": 1109,
"preview": "#!/usr/bin/env python\n\nfrom __future__ import unicode_literals\n\n# Allow direct execution\nimport os\nimport sys\nimport uni"
},
{
"path": "test/test_utils.py",
"chars": 80744,
"preview": "#!/usr/bin/env python\n# coding: utf-8\n\nfrom __future__ import unicode_literals\n\n# Allow direct execution\nimport os\nimpor"
},
{
"path": "test/test_verbose_output.py",
"chars": 2513,
"preview": "#!/usr/bin/env python\n# coding: utf-8\n\nfrom __future__ import unicode_literals\n\nimport unittest\n\nimport sys\nimport os\nim"
},
{
"path": "test/test_write_annotations.py",
"chars": 2585,
"preview": "#!/usr/bin/env python\n# coding: utf-8\nfrom __future__ import unicode_literals\n\n# Allow direct execution\nimport os\nimport"
},
{
"path": "test/test_youtube_lists.py",
"chars": 2488,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\nfrom __future__ import unicode_literals\n\n# Allow direct execution\nimport o"
},
{
"path": "test/test_youtube_misc.py",
"chars": 1006,
"preview": "#!/usr/bin/env python\nfrom __future__ import unicode_literals\n\n# Allow direct execution\nimport os\nimport sys\nimport unit"
},
{
"path": "test/test_youtube_signature.py",
"chars": 18993,
"preview": "#!/usr/bin/env python\n# coding: utf-8\n\nfrom __future__ import unicode_literals\n\n# Allow direct execution\nimport os\nimpor"
},
{
"path": "test/testcert.pem",
"chars": 3176,
"preview": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDMF0bAzaHAdIyB\nHRmnIp4vv40lGqEePmWqicCl0QZ"
},
{
"path": "test/testdata/cookies/httponly_cookies.txt",
"chars": 294,
"preview": "# Netscape HTTP Cookie File\n# http://curl.haxx.se/rfc/cookie_spec.html\n# This is a generated file! Do not edit.\n\n#HttpO"
},
{
"path": "test/testdata/cookies/malformed_cookies.txt",
"chars": 336,
"preview": "# Netscape HTTP Cookie File\n# http://curl.haxx.se/rfc/cookie_spec.html\n# This is a generated file! Do not edit.\n\n# Cook"
},
{
"path": "test/testdata/cookies/session_cookies.txt",
"chars": 269,
"preview": "# Netscape HTTP Cookie File\n# http://curl.haxx.se/rfc/cookie_spec.html\n# This is a generated file! Do not edit.\n\nwww.fo"
},
{
"path": "test/testdata/f4m/custom_base_url.f4m",
"chars": 994,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<manifest xmlns=\"http://ns.adobe.com/f4m/1.0\">\n <streamType>recorded</streamTy"
},
{
"path": "test/testdata/m3u8/pluzz_francetv_11507.m3u8",
"chars": 1909,
"preview": "#EXTM3U\n \r#EXT-X-VERSION:5\n \r#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID=\"subs\",NAME=\"Francais\",DEFAULT=NO,FORCED=NO,URI="
},
{
"path": "test/testdata/m3u8/teamcoco_11995.m3u8",
"chars": 1455,
"preview": "#EXTM3U\n#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID=\"audio-0\",NAME=\"Default\",AUTOSELECT=YES,DEFAULT=YES,URI=\"hls/CONAN_020217_Highl"
},
{
"path": "test/testdata/m3u8/ted_18923.m3u8",
"chars": 2980,
"preview": "#EXTM3U\n#EXT-X-VERSION:4\n#EXT-X-STREAM-INF:AUDIO=\"600k\",BANDWIDTH=1255659,PROGRAM-ID=1,CODECS=\"avc1.42c01e,mp4a.40.2\",RE"
},
{
"path": "test/testdata/m3u8/toggle_mobile_12211.m3u8",
"chars": 1283,
"preview": "#EXTM3U\n#EXT-X-VERSION:4\n#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID=\"audio\",LANGUAGE=\"eng\",NAME=\"English\",URI=\"http://k.toggle.sg/"
},
{
"path": "test/testdata/m3u8/twitch_vod.m3u8",
"chars": 1964,
"preview": "#EXTM3U\n#EXT-X-TWITCH-INFO:ORIGIN=\"s3\",CLUSTER=\"edgecast_vod\",REGION=\"EU\",MANIFEST-CLUSTER=\"edgecast_vod\",USER-IP=\"109.1"
},
{
"path": "test/testdata/m3u8/vidio.m3u8",
"chars": 524,
"preview": "#EXTM3U\n\n#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=300000,RESOLUTION=480x270,NAME=\"270p 3G\"\nhttps://cdn1-a.production.vid"
},
{
"path": "test/testdata/mpd/float_duration.mpd",
"chars": 1715,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<MPD xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"urn:mpeg:dash:s"
},
{
"path": "test/testdata/mpd/range_only.mpd",
"chars": 1963,
"preview": "<?xml version=\"1.0\"?>\n<!-- MPD file Generated with GPAC version 1.0.1-revrelease at 2021-11-27T20:53:11.690Z -->\n<MPD xm"
},
{
"path": "test/testdata/mpd/subtitles.mpd",
"chars": 10268,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Created with Unified Streaming Platform (version=1.10.18-20255) -->\n<MPD\n x"
},
{
"path": "test/testdata/mpd/unfragmented.mpd",
"chars": 1744,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<MPD mediaPresentationDuration=\"PT54.915S\" minBufferTime=\"PT1.50"
},
{
"path": "test/testdata/mpd/url_and_range.mpd",
"chars": 1861,
"preview": "<?xml version=\"1.0\" ?>\n<MPD xmlns=\"urn:mpeg:dash:schema:mpd:2011\" profiles=\"urn:mpeg:dash:profile:isoff-live:2011\" minBu"
},
{
"path": "test/testdata/mpd/urls_only.mpd",
"chars": 22374,
"preview": "<?xml version=\"1.0\" ?>\n<MPD maxSegmentDuration=\"PT0H0M10.000S\" mediaPresentationDuration=\"PT0H4M1.728S\" minBufferTime=\"P"
},
{
"path": "test/testdata/xspf/foo_xspf.xspf",
"chars": 1385,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<playlist version=\"1\" xmlns=\"http://xspf.org/ns/0/\">\n <date>2018-03-09T18:01:4"
},
{
"path": "test/versions.json",
"chars": 1608,
"preview": "{\n \"latest\": \"2013.01.06\", \n \"signature\": \"72158cdba391628569ffdbea259afbcf279bbe3d8aeb7492690735dc1cfa6afa754f55c"
},
{
"path": "tox.ini",
"chars": 614,
"preview": "[tox]\nenvlist = py26,py27,py33,py34,py35\n[testenv]\ndeps =\n nose\n coverage\n# We need a valid $HOME for test_compat_ex"
},
{
"path": "youtube-dl.plugin.zsh",
"chars": 1014,
"preview": "# This allows the youtube-dl command to be installed in ZSH using antigen.\n# Antigen is a bundle manager. It allows you "
},
{
"path": "youtube_dl/YoutubeDL.py",
"chars": 124279,
"preview": "#!/usr/bin/env python\n# coding: utf-8\n\nfrom __future__ import absolute_import, unicode_literals\n\nimport collections\nimpo"
},
{
"path": "youtube_dl/__init__.py",
"chars": 20684,
"preview": "#!/usr/bin/env python\n# coding: utf-8\n\nfrom __future__ import unicode_literals\n\n__license__ = 'Public Domain'\n\nimport io"
},
{
"path": "youtube_dl/__main__.py",
"chars": 467,
"preview": "#!/usr/bin/env python\nfrom __future__ import unicode_literals\n\n# Execute with\n# $ python youtube_dl/__main__.py (2.6+)\n#"
},
{
"path": "youtube_dl/aes.py",
"chars": 16979,
"preview": "from __future__ import unicode_literals\n\nfrom math import ceil\n\nfrom .compat import compat_b64decode\nfrom .utils import "
},
{
"path": "youtube_dl/cache.py",
"chars": 5017,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nimport errno\nimport json\nimport os\nimport re\nimport shutil\nimpo"
},
{
"path": "youtube_dl/casefold.py",
"chars": 85900,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nfrom .compat import (\n compat_str,\n compat_chr,\n)\n\n# Belo"
},
{
"path": "youtube_dl/compat.py",
"chars": 120550,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\nfrom __future__ import division\n\nimport base64\nimport binascii\ni"
},
{
"path": "youtube_dl/downloader/__init__.py",
"chars": 2031,
"preview": "from __future__ import unicode_literals\n\nfrom ..utils import (\n determine_protocol,\n)\n\n\ndef get_suitable_downloader(i"
},
{
"path": "youtube_dl/downloader/common.py",
"chars": 15894,
"preview": "from __future__ import division, unicode_literals\n\nimport os\nimport re\nimport sys\nimport time\nimport random\n\nfrom ..comp"
},
{
"path": "youtube_dl/downloader/dash.py",
"chars": 3328,
"preview": "from __future__ import unicode_literals\n\nimport itertools\n\nfrom .fragment import FragmentFD\nfrom ..compat import compat_"
},
{
"path": "youtube_dl/downloader/external.py",
"chars": 21625,
"preview": "from __future__ import unicode_literals\n\nimport os\nimport re\nimport subprocess\nimport sys\nimport tempfile\nimport time\n\nf"
},
{
"path": "youtube_dl/downloader/f4m.py",
"chars": 15432,
"preview": "from __future__ import division, unicode_literals\n\nimport io\nimport itertools\nimport time\n\nfrom .fragment import Fragmen"
},
{
"path": "youtube_dl/downloader/fragment.py",
"chars": 11804,
"preview": "from __future__ import division, unicode_literals\n\nimport os\nimport time\nimport json\n\nfrom .common import FileDownloader"
},
{
"path": "youtube_dl/downloader/hls.py",
"chars": 10181,
"preview": "from __future__ import unicode_literals\n\nimport re\nimport binascii\ntry:\n from Crypto.Cipher import AES\n can_decryp"
},
{
"path": "youtube_dl/downloader/http.py",
"chars": 16085,
"preview": "from __future__ import unicode_literals\n\nimport errno\nimport os\nimport socket\nimport time\nimport random\nimport re\n\nfrom "
},
{
"path": "youtube_dl/downloader/ism.py",
"chars": 10566,
"preview": "from __future__ import unicode_literals\n\nimport time\nimport binascii\nimport io\n\nfrom .fragment import FragmentFD\nfrom .."
},
{
"path": "youtube_dl/downloader/niconico.py",
"chars": 2315,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\ntry:\n import threading\nexcept ImportError:\n threading = N"
},
{
"path": "youtube_dl/downloader/rtmp.py",
"chars": 8990,
"preview": "from __future__ import unicode_literals\n\nimport os\nimport re\nimport subprocess\nimport time\n\nfrom .common import FileDown"
},
{
"path": "youtube_dl/downloader/rtsp.py",
"chars": 1559,
"preview": "from __future__ import unicode_literals\n\nimport os\nimport subprocess\n\nfrom .common import FileDownloader\nfrom ..utils im"
},
{
"path": "youtube_dl/extractor/__init__.py",
"chars": 1258,
"preview": "from __future__ import unicode_literals\n\ntry:\n from .lazy_extractors import *\n from .lazy_extractors import _ALL_C"
},
{
"path": "youtube_dl/extractor/abc.py",
"chars": 7495,
"preview": "from __future__ import unicode_literals\n\nimport hashlib\nimport hmac\nimport re\nimport time\n\nfrom .common import InfoExtra"
},
{
"path": "youtube_dl/extractor/abcnews.py",
"chars": 6400,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nimport re\n\nfrom .amp import AMPIE\nfrom .common import InfoExtra"
},
{
"path": "youtube_dl/extractor/abcotvs.py",
"chars": 4740,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nimport re\n\nfrom .common import InfoExtractor\nfrom ..compat impo"
},
{
"path": "youtube_dl/extractor/academicearth.py",
"chars": 1399,
"preview": "from __future__ import unicode_literals\n\nimport re\n\nfrom .common import InfoExtractor\n\n\nclass AcademicEarthCourseIE(Info"
},
{
"path": "youtube_dl/extractor/acast.py",
"chars": 4488,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nimport re\n\nfrom .common import InfoExtractor\nfrom ..utils impor"
},
{
"path": "youtube_dl/extractor/adn.py",
"chars": 11514,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nimport base64\nimport binascii\nimport json\nimport os\nimport rand"
},
{
"path": "youtube_dl/extractor/adobeconnect.py",
"chars": 1348,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nfrom .common import InfoExtractor\nfrom ..compat import (\n co"
},
{
"path": "youtube_dl/extractor/adobepass.py",
"chars": 41407,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nimport re\nimport time\nimport xml.etree.ElementTree as etree\n\nfr"
},
{
"path": "youtube_dl/extractor/adobetv.py",
"chars": 10291,
"preview": "from __future__ import unicode_literals\n\nimport functools\nimport re\n\nfrom .common import InfoExtractor\nfrom ..compat imp"
},
{
"path": "youtube_dl/extractor/adultswim.py",
"chars": 7849,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nimport json\nimport re\n\nfrom .turner import TurnerBaseIE\nfrom .."
},
{
"path": "youtube_dl/extractor/aenetworks.py",
"chars": 12632,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nimport re\n\nfrom .theplatform import ThePlatformIE\nfrom ..utils "
},
{
"path": "youtube_dl/extractor/afreecatv.py",
"chars": 14274,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nimport re\n\nfrom .common import InfoExtractor\nfrom ..compat impo"
},
{
"path": "youtube_dl/extractor/airmozilla.py",
"chars": 2697,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nimport re\n\nfrom .common import InfoExtractor\nfrom ..utils impor"
},
{
"path": "youtube_dl/extractor/aliexpress.py",
"chars": 1583,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nfrom .common import InfoExtractor\nfrom ..compat import compat_s"
},
{
"path": "youtube_dl/extractor/aljazeera.py",
"chars": 2228,
"preview": "from __future__ import unicode_literals\n\nimport json\nimport re\n\nfrom .common import InfoExtractor\n\n\nclass AlJazeeraIE(In"
},
{
"path": "youtube_dl/extractor/allocine.py",
"chars": 4959,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nfrom .common import InfoExtractor\nfrom ..compat import compat_s"
},
{
"path": "youtube_dl/extractor/alphaporno.py",
"chars": 2724,
"preview": "from __future__ import unicode_literals\n\nfrom .common import InfoExtractor\nfrom ..utils import (\n parse_iso8601,\n "
},
{
"path": "youtube_dl/extractor/alsace20tv.py",
"chars": 3239,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nfrom .common import InfoExtractor\nfrom ..utils import (\n cle"
},
{
"path": "youtube_dl/extractor/amara.py",
"chars": 3583,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nfrom .common import InfoExtractor\nfrom .youtube import YoutubeI"
},
{
"path": "youtube_dl/extractor/amcnetworks.py",
"chars": 4967,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nimport re\n\nfrom .theplatform import ThePlatformIE\nfrom ..utils "
},
{
"path": "youtube_dl/extractor/americastestkitchen.py",
"chars": 8807,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nimport json\nimport re\n\nfrom .common import InfoExtractor\nfrom ."
},
{
"path": "youtube_dl/extractor/amp.py",
"chars": 4088,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nfrom .common import InfoExtractor\nfrom ..utils import (\n det"
},
{
"path": "youtube_dl/extractor/animeondemand.py",
"chars": 12536,
"preview": "from __future__ import unicode_literals\n\nimport re\n\nfrom .common import InfoExtractor\nfrom ..compat import compat_str\nfr"
},
{
"path": "youtube_dl/extractor/anvato.py",
"chars": 24993,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nimport base64\nimport hashlib\nimport json\nimport random\nimport r"
},
{
"path": "youtube_dl/extractor/aol.py",
"chars": 5644,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nimport re\n\nfrom .yahoo import YahooIE\nfrom ..compat import (\n "
},
{
"path": "youtube_dl/extractor/apa.py",
"chars": 3352,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nimport re\n\nfrom .common import InfoExtractor\nfrom ..utils impor"
},
{
"path": "youtube_dl/extractor/aparat.py",
"chars": 3193,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nfrom .common import InfoExtractor\nfrom ..utils import (\n get"
},
{
"path": "youtube_dl/extractor/appleconnect.py",
"chars": 1909,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nfrom .common import InfoExtractor\nfrom ..utils import (\n str"
},
{
"path": "youtube_dl/extractor/applepodcasts.py",
"chars": 3825,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nfrom .common import InfoExtractor\nfrom ..utils import (\n cle"
},
{
"path": "youtube_dl/extractor/appletrailers.py",
"chars": 10330,
"preview": "from __future__ import unicode_literals\n\nimport re\nimport json\n\nfrom .common import InfoExtractor\nfrom ..compat import c"
},
{
"path": "youtube_dl/extractor/archiveorg.py",
"chars": 3712,
"preview": "from __future__ import unicode_literals\n\nfrom .common import InfoExtractor\nfrom ..utils import (\n clean_html,\n ext"
},
{
"path": "youtube_dl/extractor/arcpublishing.py",
"chars": 7970,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nimport re\n\nfrom .common import InfoExtractor\nfrom ..utils impor"
},
{
"path": "youtube_dl/extractor/ard.py",
"chars": 18906,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nimport json\nimport re\n\nfrom .common import InfoExtractor\nfrom ."
},
{
"path": "youtube_dl/extractor/arkena.py",
"chars": 7525,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nimport re\n\nfrom .common import InfoExtractor\nfrom ..compat impo"
},
{
"path": "youtube_dl/extractor/arnes.py",
"chars": 3634,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nfrom .common import InfoExtractor\nfrom ..compat import (\n co"
},
{
"path": "youtube_dl/extractor/arte.py",
"chars": 12534,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nimport re\n\nfrom .common import InfoExtractor\nfrom ..compat impo"
},
{
"path": "youtube_dl/extractor/asiancrush.py",
"chars": 7807,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nimport functools\nimport re\n\nfrom .common import InfoExtractor\nf"
},
{
"path": "youtube_dl/extractor/atresplayer.py",
"chars": 4381,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nimport re\n\nfrom .common import InfoExtractor\nfrom ..compat impo"
},
{
"path": "youtube_dl/extractor/atttechchannel.py",
"chars": 1962,
"preview": "from __future__ import unicode_literals\n\nfrom .common import InfoExtractor\nfrom ..utils import unified_strdate\n\n\nclass A"
},
{
"path": "youtube_dl/extractor/atvat.py",
"chars": 2512,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nfrom .common import InfoExtractor\nfrom ..utils import (\n det"
},
{
"path": "youtube_dl/extractor/audimedia.py",
"chars": 4026,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nfrom .common import InfoExtractor\nfrom ..utils import (\n int"
},
{
"path": "youtube_dl/extractor/audioboom.py",
"chars": 2659,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nfrom .common import InfoExtractor\nfrom ..utils import (\n cle"
},
{
"path": "youtube_dl/extractor/audiomack.py",
"chars": 6055,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nimport itertools\nimport time\n\nfrom .common import InfoExtractor"
},
{
"path": "youtube_dl/extractor/awaan.py",
"chars": 7199,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nimport re\nimport base64\n\nfrom .common import InfoExtractor\nfrom"
},
{
"path": "youtube_dl/extractor/aws.py",
"chars": 3092,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nimport datetime\nimport hashlib\nimport hmac\n\nfrom .common import"
},
{
"path": "youtube_dl/extractor/azmedien.py",
"chars": 2266,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nimport json\nimport re\n\nfrom .common import InfoExtractor\nfrom ."
}
]
// ... and 780 more files (download for full content)
About this extraction
This page contains the full source code of the ytdl-org/youtube-dl GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 980 files (6.6 MB), approximately 1.8M tokens, and a symbol index with 5249 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.