]>
Raphaël G. Git Repositories - youtubedl/blob - test/test_playlists.py 
ee91e412ab33199fd27996dba25bccb3b646387f
   4  from  __future__ 
import  unicode_literals
   6  # Allow direct execution   10  sys
. path
. insert ( 0 ,  os
. path
. dirname ( os
. path
. dirname ( os
. path
. abspath ( __file__
))))   12  from  test
. helper 
import  (   18  from  youtube_dl
. extractor 
import  (   19      AcademicEarthCourseIE
,   20      DailymotionPlaylistIE
,   31      TeacherTubeClassroomIE
,   54  class  TestPlaylists ( unittest
. TestCase
):   55      def  assertIsPlaylist ( self
,  info
):   56          """Make sure the info has '_type' set to 'playlist'"""   57          self
. assertEqual ( info
[ '_type' ],  'playlist' )   59      def  test_dailymotion_playlist ( self
):   61          ie 
=  DailymotionPlaylistIE ( dl
)   62          result 
=  ie
. extract ( 'http://www.dailymotion.com/playlist/xv4bw_nqtv_sport/1#video=xl8v3q' )   63          self
. assertIsPlaylist ( result
)   64          self
. assertEqual ( result
[ 'title' ],  'SPORT' )   65          self
. assertTrue ( len ( result
[ 'entries' ]) >  20 )   67      def  test_dailymotion_user ( self
):   69          ie 
=  DailymotionUserIE ( dl
)   70          result 
=  ie
. extract ( 'https://www.dailymotion.com/user/nqtv' )   71          self
. assertIsPlaylist ( result
)   72          self
. assertEqual ( result
[ 'title' ],  'Rémi Gaillard' )   73          self
. assertTrue ( len ( result
[ 'entries' ]) >=  100 )   75      def  test_vimeo_channel ( self
):   77          ie 
=  VimeoChannelIE ( dl
)   78          result 
=  ie
. extract ( 'http://vimeo.com/channels/tributes' )   79          self
. assertIsPlaylist ( result
)   80          self
. assertEqual ( result
[ 'title' ],  'Vimeo Tributes' )   81          self
. assertTrue ( len ( result
[ 'entries' ]) >  24 )   83      def  test_vimeo_user ( self
):   86          result 
=  ie
. extract ( 'http://vimeo.com/nkistudio/videos' )   87          self
. assertIsPlaylist ( result
)   88          self
. assertEqual ( result
[ 'title' ],  'Nki' )   89          self
. assertTrue ( len ( result
[ 'entries' ]) >  65 )   91      def  test_vimeo_album ( self
):   94          result 
=  ie
. extract ( 'http://vimeo.com/album/2632481' )   95          self
. assertIsPlaylist ( result
)   96          self
. assertEqual ( result
[ 'title' ],  'Staff Favorites: November 2013' )   97          self
. assertTrue ( len ( result
[ 'entries' ]) >  12 )   99      def  test_vimeo_groups ( self
):  101          ie 
=  VimeoGroupsIE ( dl
)  102          result 
=  ie
. extract ( 'http://vimeo.com/groups/rolexawards' )  103          self
. assertIsPlaylist ( result
)  104          self
. assertEqual ( result
[ 'title' ],  'Rolex Awards for Enterprise' )  105          self
. assertTrue ( len ( result
[ 'entries' ]) >  72 )  107      def  test_vine_user ( self
):  110          result 
=  ie
. extract ( 'https://vine.co/Visa' )  111          self
. assertIsPlaylist ( result
)  112          self
. assertTrue ( len ( result
[ 'entries' ]) >=  50 )  114      def  test_ustream_channel ( self
):  116          ie 
=  UstreamChannelIE ( dl
)  117          result 
=  ie
. extract ( 'http://www.ustream.tv/channel/channeljapan' )  118          self
. assertIsPlaylist ( result
)  119          self
. assertEqual ( result
[ 'id' ],  '10874166' )  120          self
. assertTrue ( len ( result
[ 'entries' ]) >=  54 )  122      def  test_soundcloud_set ( self
):  124          ie 
=  SoundcloudSetIE ( dl
)  125          result 
=  ie
. extract ( 'https://soundcloud.com/the-concept-band/sets/the-royal-concept-ep' )  126          self
. assertIsPlaylist ( result
)  127          self
. assertEqual ( result
[ 'title' ],  'The Royal Concept EP' )  128          self
. assertTrue ( len ( result
[ 'entries' ]) >=  6 )  130      def  test_soundcloud_user ( self
):  132          ie 
=  SoundcloudUserIE ( dl
)  133          result 
=  ie
. extract ( 'https://soundcloud.com/the-concept-band' )  134          self
. assertIsPlaylist ( result
)  135          self
. assertEqual ( result
[ 'id' ],  '9615865' )  136          self
. assertTrue ( len ( result
[ 'entries' ]) >=  12 )  138      def  test_soundcloud_playlist ( self
):  140          ie 
=  SoundcloudPlaylistIE ( dl
)  141          result 
=  ie
. extract ( 'http://api.soundcloud.com/playlists/4110309' )  142          self
. assertIsPlaylist ( result
)  143          self
. assertEqual ( result
[ 'id' ],  '4110309' )  144          self
. assertEqual ( result
[ 'title' ],  'TILT Brass - Bowery Poetry Club, August  \' 03 [Non-Site SCR 02]' )  146              self
,  result
[ 'description' ],  r
'TILT Brass - Bowery Poetry Club' )  147          self
. assertEqual ( len ( result
[ 'entries' ]),  6 )  149      def  test_livestream_event ( self
):  151          ie 
=  LivestreamIE ( dl
)  152          result 
=  ie
. extract ( 'http://new.livestream.com/tedx/cityenglish' )  153          self
. assertIsPlaylist ( result
)  154          self
. assertEqual ( result
[ 'title' ],  'TEDCity2.0 (English)' )  155          self
. assertTrue ( len ( result
[ 'entries' ]) >=  4 )  157      def  test_nhl_videocenter ( self
):  159          ie 
=  NHLVideocenterIE ( dl
)  160          result 
=  ie
. extract ( 'http://video.canucks.nhl.com/videocenter/console?catid=999' )  161          self
. assertIsPlaylist ( result
)  162          self
. assertEqual ( result
[ 'id' ],  '999' )  163          self
. assertEqual ( result
[ 'title' ],  'Highlights' )  164          self
. assertEqual ( len ( result
[ 'entries' ]),  12 )  166      def  test_bambuser_channel ( self
):  168          ie 
=  BambuserChannelIE ( dl
)  169          result 
=  ie
. extract ( 'http://bambuser.com/channel/pixelversity' )  170          self
. assertIsPlaylist ( result
)  171          self
. assertEqual ( result
[ 'title' ],  'pixelversity' )  172          self
. assertTrue ( len ( result
[ 'entries' ]) >=  60 )  174      def  test_bandcamp_album ( self
):  176          ie 
=  BandcampAlbumIE ( dl
)  177          result 
=  ie
. extract ( 'http://mpallante.bandcamp.com/album/nightmare-night-ep' )  178          self
. assertIsPlaylist ( result
)  179          self
. assertEqual ( result
[ 'title' ],  'Nightmare Night EP' )  180          self
. assertTrue ( len ( result
[ 'entries' ]) >=  4 )  182      def  test_smotri_community ( self
):  184          ie 
=  SmotriCommunityIE ( dl
)  185          result 
=  ie
. extract ( 'http://smotri.com/community/video/kommuna' )  186          self
. assertIsPlaylist ( result
)  187          self
. assertEqual ( result
[ 'id' ],  'kommuna' )  188          self
. assertEqual ( result
[ 'title' ],  'КПРФ' )  189          self
. assertTrue ( len ( result
[ 'entries' ]) >=  4 )  191      def  test_smotri_user ( self
):  193          ie 
=  SmotriUserIE ( dl
)  194          result 
=  ie
. extract ( 'http://smotri.com/user/inspector' )  195          self
. assertIsPlaylist ( result
)  196          self
. assertEqual ( result
[ 'id' ],  'inspector' )  197          self
. assertEqual ( result
[ 'title' ],  'Inspector' )  198          self
. assertTrue ( len ( result
[ 'entries' ]) >=  9 )  200      def  test_AcademicEarthCourse ( self
):  202          ie 
=  AcademicEarthCourseIE ( dl
)  203          result 
=  ie
. extract ( 'http://academicearth.org/playlists/laws-of-nature/' )  204          self
. assertIsPlaylist ( result
)  205          self
. assertEqual ( result
[ 'id' ],  'laws-of-nature' )  206          self
. assertEqual ( result
[ 'title' ],  'Laws of Nature' )  207          self
. assertEqual ( result
[ 'description' ], u
'Introduce yourself to the laws of nature with these free online college lectures from Yale, Harvard, and MIT.' ) # u"Today's websites are increasingly dynamic. Pages are no longer static HTML files but instead generated by scripts and database calls. User interfaces are more seamless, with technologies like Ajax replacing traditional page reloads. This course teaches students how to build dynamic websites with Ajax and with Linux, Apache, MySQL, and PHP (LAMP), one of today's most popular frameworks. Students learn how to set up domain names with DNS, how to structure pages with XHTML and CSS, how to program in JavaScript and PHP, how to configure Apache and MySQL, how to design and query databases with SQL, how to use Ajax with both XML and JSON, and how to build mashups. The course explores issues of security, scalability, and cross-browser support and also discusses enterprise-level deployments of websites, including third-party hosting, virtualization, colocation in data centers, firewalling, and load-balancing.")  208          self
. assertEqual ( len ( result
[ 'entries' ]),  4 )  210      def  test_ivi_compilation ( self
):  212          ie 
=  IviCompilationIE ( dl
)  213          result 
=  ie
. extract ( 'http://www.ivi.ru/watch/dvoe_iz_lartsa' )  214          self
. assertIsPlaylist ( result
)  215          self
. assertEqual ( result
[ 'id' ],  'dvoe_iz_lartsa' )  216          self
. assertEqual ( result
[ 'title' ],  'Двое из ларца (2006 - 2008)' )  217          self
. assertTrue ( len ( result
[ 'entries' ]) >=  24 )  219      def  test_ivi_compilation_season ( self
):  221          ie 
=  IviCompilationIE ( dl
)  222          result 
=  ie
. extract ( 'http://www.ivi.ru/watch/dvoe_iz_lartsa/season1' )  223          self
. assertIsPlaylist ( result
)  224          self
. assertEqual ( result
[ 'id' ],  'dvoe_iz_lartsa/season1' )  225          self
. assertEqual ( result
[ 'title' ],  'Двое из ларца (2006 - 2008) 1 сезон' )  226          self
. assertTrue ( len ( result
[ 'entries' ]) >=  12 )  228      def  test_imdb_list ( self
):  231          result 
=  ie
. extract ( 'http://www.imdb.com/list/JFs9NWw6XI0' )  232          self
. assertIsPlaylist ( result
)  233          self
. assertEqual ( result
[ 'id' ],  'JFs9NWw6XI0' )  234          self
. assertEqual ( result
[ 'title' ],  'March 23, 2012 Releases' )  235          self
. assertEqual ( len ( result
[ 'entries' ]),  7 )  237      def  test_khanacademy_topic ( self
):  239          ie 
=  KhanAcademyIE ( dl
)  240          result 
=  ie
. extract ( 'https://www.khanacademy.org/math/applied-math/cryptography' )  241          self
. assertIsPlaylist ( result
)  242          self
. assertEqual ( result
[ 'id' ],  'cryptography' )  243          self
. assertEqual ( result
[ 'title' ],  'Journey into cryptography' )  244          self
. assertEqual ( result
[ 'description' ],  'How have humans protected their secret messages through history? What has changed today?' )  245          self
. assertTrue ( len ( result
[ 'entries' ]) >=  3 )  247      def  test_EveryonesMixtape ( self
):  249          ie 
=  EveryonesMixtapeIE ( dl
)  250          result 
=  ie
. extract ( 'http://everyonesmixtape.com/#/mix/m7m0jJAbMQi' )  251          self
. assertIsPlaylist ( result
)  252          self
. assertEqual ( result
[ 'id' ],  'm7m0jJAbMQi' )  253          self
. assertEqual ( result
[ 'title' ],  'Driving' )  254          self
. assertEqual ( len ( result
[ 'entries' ]),  24 )  256      def  test_rutube_channel ( self
):  258          ie 
=  RutubeChannelIE ( dl
)  259          result 
=  ie
. extract ( 'http://rutube.ru/tags/video/1409' )  260          self
. assertIsPlaylist ( result
)  261          self
. assertEqual ( result
[ 'id' ],  '1409' )  262          self
. assertTrue ( len ( result
[ 'entries' ]) >=  34 )  264      def  test_multiple_brightcove_videos ( self
):  265          # https://github.com/rg3/youtube-dl/issues/2283  268          result 
=  ie
. extract ( 'http://www.newyorker.com/online/blogs/newsdesk/2014/01/always-never-nuclear-command-and-control.html' )  269          self
. assertIsPlaylist ( result
)  270          self
. assertEqual ( result
[ 'id' ],  'always-never-nuclear-command-and-control' )  271          self
. assertEqual ( result
[ 'title' ],  'Always/Never: A Little-Seen Movie About Nuclear Command and Control : The New Yorker' )  272          self
. assertEqual ( len ( result
[ 'entries' ]),  3 )  274      def  test_GoogleSearch ( self
):  276          ie 
=  GoogleSearchIE ( dl
)  277          result 
=  ie
. extract ( 'gvsearch15:python language' )  278          self
. assertIsPlaylist ( result
)  279          self
. assertEqual ( result
[ 'id' ],  'python language' )  280          self
. assertEqual ( result
[ 'title' ],  'python language' )  281          self
. assertEqual ( len ( result
[ 'entries' ]),  15 )  283      def  test_generic_rss_feed ( self
):  286          result 
=  ie
. extract ( 'http://phihag.de/2014/youtube-dl/rss.xml' )  287          self
. assertIsPlaylist ( result
)  288          self
. assertEqual ( result
[ 'id' ],  'http://phihag.de/2014/youtube-dl/rss.xml' )  289          self
. assertEqual ( result
[ 'title' ],  'Zero Punctuation' )  290          self
. assertTrue ( len ( result
[ 'entries' ]) >  10 )  292      def  test_ted_playlist ( self
):  295          result 
=  ie
. extract ( 'http://www.ted.com/playlists/who_are_the_hackers' )  296          self
. assertIsPlaylist ( result
)  297          self
. assertEqual ( result
[ 'id' ],  '10' )  298          self
. assertEqual ( result
[ 'title' ],  'Who are the hackers?' )  299          self
. assertTrue ( len ( result
[ 'entries' ]) >=  6 )  301      def  test_toypics_user ( self
):  303          ie 
=  ToypicsUserIE ( dl
)  304          result 
=  ie
. extract ( 'http://videos.toypics.net/Mikey' )  305          self
. assertIsPlaylist ( result
)  306          self
. assertEqual ( result
[ 'id' ],  'Mikey' )  307          self
. assertTrue ( len ( result
[ 'entries' ]) >=  17 )  309      def  test_xtube_user ( self
):  312          result 
=  ie
. extract ( 'http://www.xtube.com/community/profile.php?user=greenshowers' )  313          self
. assertIsPlaylist ( result
)  314          self
. assertEqual ( result
[ 'id' ],  'greenshowers' )  315          self
. assertTrue ( len ( result
[ 'entries' ]) >=  155 )  317      def  test_InstagramUser ( self
):  319          ie 
=  InstagramUserIE ( dl
)  320          result 
=  ie
. extract ( 'http://instagram.com/porsche' )  321          self
. assertIsPlaylist ( result
)  322          self
. assertEqual ( result
[ 'id' ],  'porsche' )  323          self
. assertTrue ( len ( result
[ 'entries' ]) >=  2 )  325              e 
for  e 
in  result
[ 'entries' ]  326              if  e
[ 'id' ] ==  '614605558512799803_462752227' )  327          dl
. add_default_extra_info ( test_video
,  ie
,  '(irrelevant URL)' )  328          dl
. process_video_result ( test_video
,  download
= False )  330              'id' :  '614605558512799803_462752227' ,  332              'title' :  '#Porsche Intelligent Performance.' ,  333              'thumbnail' :  're:^https?://.*\.jpg' ,  334              'uploader' :  'Porsche' ,  335              'uploader_id' :  'porsche' ,  336              'timestamp' :  1387486713 ,  337              'upload_date' :  '20131219' ,  339          expect_info_dict ( self
,  EXPECTED
,  test_video
)  341      def  test_CSpan_playlist ( self
):  345              'http://www.c-span.org/video/?318608-1/gm-ignition-switch-recall' )  346          self
. assertIsPlaylist ( result
)  347          self
. assertEqual ( result
[ 'id' ],  '342759' )  349              result
[ 'title' ],  'General Motors Ignition Switch Recall' )  350          whole_duration 
=  sum ( e
[ 'duration' ]  for  e 
in  result
[ 'entries' ])  351          self
. assertEqual ( whole_duration
,  14855 )  353      def  test_aol_playlist ( self
):  357              'http://on.aol.com/playlist/brace-yourself---todays-weirdest-news-152147?icid=OnHomepageC4_Omg_Img#_videoid=518184316' )  358          self
. assertIsPlaylist ( result
)  359          self
. assertEqual ( result
[ 'id' ],  '152147' )  361              result
[ 'title' ],  'Brace Yourself - Today \' s Weirdest News' )  362          self
. assertTrue ( len ( result
[ 'entries' ]) >=  10 )  364      def  test_TeacherTubeClassroom ( self
):  366          ie 
=  TeacherTubeClassroomIE ( dl
)  367          result 
=  ie
. extract ( 'http://www.teachertube.com/view_classroom.php?user=rbhagwati2' )  368          self
. assertIsPlaylist ( result
)  369          self
. assertEqual ( result
[ 'id' ],  'rbhagwati2' )  370          self
. assertTrue ( len ( result
[ 'entries' ]) >=  20 )  372  if  __name__ 
==  '__main__' :