2014-07-29 00:31:33 +02:00
# coding: utf-8
from __future__ import unicode_literals
from . common import InfoExtractor
2014-07-29 05:59:47 +02:00
from . . utils import (
int_or_none ,
2016-09-07 23:07:50 +08:00
remove_end ,
2014-07-29 05:59:47 +02:00
)
2014-07-29 00:31:33 +02:00
class GameStarIE ( InfoExtractor ) :
2016-09-08 18:29:05 +07:00
_VALID_URL = r ' https?://(?:www \ .)?gamestar \ .de/videos/.*,(?P<id>[0-9]+) \ .html '
2017-04-10 23:08:37 +02:00
_TESTS = [ {
2014-07-29 00:31:33 +02:00
' url ' : ' http://www.gamestar.de/videos/trailer,3/hobbit-3-die-schlacht-der-fuenf-heere,76110.html ' ,
' md5 ' : ' 96974ecbb7fd8d0d20fca5a00810cea7 ' ,
' info_dict ' : {
' id ' : ' 76110 ' ,
' ext ' : ' mp4 ' ,
' title ' : ' Hobbit 3: Die Schlacht der Fünf Heere - Teaser-Trailer zum dritten Teil ' ,
2016-09-07 23:07:50 +08:00
' description ' : ' Der Teaser-Trailer zu Hobbit 3: Die Schlacht der Fünf Heere zeigt einige Szenen aus dem dritten Teil der Saga und kündigt den... ' ,
2017-01-02 20:08:07 +08:00
' thumbnail ' : r ' re:^https?://.* \ .jpg$ ' ,
2016-09-07 23:07:50 +08:00
' timestamp ' : 1406542020 ,
2014-07-29 00:31:33 +02:00
' upload_date ' : ' 20140728 ' ,
' duration ' : 17
2017-04-10 23:08:37 +02:00
} ,
} , {
# control characters in JSON-LD (description field)
' url ' : ' http://www.gamestar.de/videos/rain-world-gameplay-trailer-stellt-das-sandbox-spiel-vor,92640.html ' ,
' md5 ' : ' 97e530c2c4e3d0d666e039f675656071 ' ,
' info_dict ' : {
' id ' : ' 92640 ' ,
' ext ' : ' mp4 ' ,
' title ' : ' Rain World - Gameplay-Trailer stellt das Sandbox-Spiel vor ' ,
' description ' : ' Der Trailer zum Sandbox-Spiel \xa0 Rain World stellt anhand von Gameplay-Szenen die wichtigsten Elemente etwas genauer vor. \n Der Spieler... ' ,
' thumbnail ' : r ' re:^https?://.* \ .jpg$ ' ,
' timestamp ' : 1490697540 ,
' upload_date ' : ' 20170328 ' ,
' duration ' : 72
} ,
} ]
2014-07-29 00:31:33 +02:00
def _real_extract ( self , url ) :
2015-01-23 01:34:24 +01:00
video_id = self . _match_id ( url )
2014-07-29 00:31:33 +02:00
webpage = self . _download_webpage ( url , video_id )
url = ' http://gamestar.de/_misc/videos/portal/getVideoUrl.cfm?premium=0&videoId= ' + video_id
2016-09-07 23:07:50 +08:00
# TODO: there are multiple ld+json objects in the webpage,
# while _search_json_ld finds only the first one
json_ld = self . _parse_json ( self . _search_regex (
r ' (?s)<script[^>]+type=([ " \' ])application/ld \ +json \ 1[^>]*>(?P<json_ld>[^<]+VideoObject[^<]+)</script> ' ,
2017-04-10 22:47:24 +02:00
webpage , ' JSON-LD ' , group = ' json_ld ' ) , video_id , strict = False )
2016-09-07 23:07:50 +08:00
info_dict = self . _json_ld ( json_ld , video_id )
info_dict [ ' title ' ] = remove_end ( info_dict [ ' title ' ] , ' - GameStar ' )
2014-07-29 00:31:33 +02:00
2016-09-07 23:07:50 +08:00
view_count = json_ld . get ( ' interactionCount ' )
2014-07-29 05:59:47 +02:00
comment_count = int_or_none ( self . _html_search_regex (
2017-04-11 00:15:58 +02:00
r ' <i[^>]+class=([ " \' ])[a-zA-Z0-9_ \ - ]*comment-text[a-zA-Z0-9_ \ - ]* \ 1[^>]*></i><span[^>]*>(?P<comment_count>[0-9]+)</span> ' ,
webpage , ' comment_count ' , group = ' comment_count ' , fatal = False ) )
2014-07-29 00:31:33 +02:00
2016-09-07 23:07:50 +08:00
info_dict . update ( {
2014-07-29 00:31:33 +02:00
' id ' : video_id ,
' url ' : url ,
' ext ' : ' mp4 ' ,
' view_count ' : view_count ,
' comment_count ' : comment_count
2016-09-07 23:07:50 +08:00
} )
return info_dict