1
0
mirror of https://codeberg.org/polarisfm/youtube-dl synced 2024-12-02 05:07:55 +01:00

[binustv] Add new extractor

This commit is contained in:
Reinhart Previano Koentjoro 2020-03-26 17:42:17 +07:00
parent 049c0486bb
commit 6549db78f2
5 changed files with 163 additions and 0 deletions

View File

@ -0,0 +1,111 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>[Headline] Gerakan #StayForUs Mulai Menggema di Laman Media</title>
<meta name="title" content="[Headline] Gerakan #StayForUs Mulai Menggema di Laman Media">
<meta name="keywords" content="FILM, NEWS , BERITA, MEDIA, ONLINE"/>
<meta name="image" content="https://i.ytimg.com/vi/mjH-3DDJLmU/default.jpg">
<link rel="shortcut icon" href="https://static.bedigital.co.id/data/image/binustv-favicon.ico" type="image/x-icon">
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta http-equiv="Content-Language" content="id" />
<meta property="og:type" content="website" />
<meta property="og:description" content="BINUS TV adalah sebuah aplikasi yang dirancang untuk membiarkan semua orang menjadi PEMIRSA SMART dengan membiarkan semua orang
interaktif menikmati alternatif informatif & amp; program menghibur dari berita untuk berbicara show, musik untuk kuliner, film & amp; permainan ulasan untuk tutorial." />
<meta property="og:url" content="http://binus.bedigital.co.id/share/video/7/65156/headline-gerakan-stayforus-mulai-menggema-di-laman-media">
<meta property="og:title" content="[Headline] Gerakan #StayForUs Mulai Menggema di Laman Media">
<meta property="og:image" content="https://static.bedigital.co.id/data/file/binus/Download-binus.png">
<meta property="og:image:alt" content="Binus TV - Official Binus TV App">
<meta property="fb:app_id" content="1693000680736448" />
<meta name="twitter:title" content="[Headline] Gerakan #StayForUs Mulai Menggema di Laman Media" />
<meta name="twitter:image:src" content="https://static.bedigital.co.id/data/file/binus/Download-binus.png" />
<meta name="twitter:description" content="BINUS TV adalah sebuah aplikasi yang dirancang untuk membiarkan semua orang menjadi PEMIRSA SMART dengan membiarkan semua orang
interaktif menikmati alternatif informatif & amp; program menghibur dari berita untuk berbicara show, musik untuk kuliner, film & amp; permainan ulasan untuk tutorial." />
<link rel="stylesheet" type="text/css" href="https://binus.bedigital.co.id/data/css/stylesharecontent.css">
<link rel="stylesheet" type="text/css" href="https://binus.bedigital.co.id/data/css/awesome/css/font-awesome.min.css">
<script type="text/javascript">
function getParameterByName(name, url) {
if (!url) url = window.location.href;
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
var utmsource = getParameterByName('utm_source');
var utmmedium = getParameterByName('utm_medium');
var utmterm = getParameterByName('utm_term');
var sosmed = '';
var target = '';
if (utmmedium.toLowerCase() == 'android' || utmmedium.toLowerCase() == 'ios' || utmmedium.toLowerCase() == 'iphone' ) {
sosmed = utmsource.toLowerCase();
target = location.pathname;
if (utmterm != null && utmterm != '') {
target += '?nickname=' + utmterm;
}
}
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-122185811-1', 'auto');
ga('set', 'appName', 'Binus TV');
ga('send', {
hitType: 'pageview',
page: location.pathname
});
if (sosmed != null && sosmed != '') {
ga('send', {
hitType: 'social',
socialNetwork: sosmed,
socialAction: 'Share-Video',
socialTarget: target
});
}
ga('send', 'screenview', {screenName: 'Share'});
</script>
</head>
<body class="">
<div id="area" class="sharevideo">
<ul class="">
<div class="share-video">
<li>
<div class="img" style="background: url('https://i.ytimg.com/vi/mjH-3DDJLmU/default.jpg') no-repeat;background-size: cover;">
<a href="#" title="[Headline] Gerakan #StayForUs Mulai Menggema di Laman Media">
<span><i class="fa fa-play-circle" aria-hidden="true"></i></span>
<span class="duration" style="background-color: #000000; color: #ffffff; font-size: 10pt; position: absolute; right: 0; bottom: 0;">01:10</span>
</a>
</div>
<h2 class="title">
<span class="sharetype">VIDEO: VOD</span></br>
<a href="#" title="[Headline] Gerakan #StayForUs Mulai Menggema di Laman Media">[Headline] Gerakan #StayForUs Mulai Menggema di Laman Media</a>
</h2>
<div class="clear"></div>
</li>
</div>
</ul>
</div>
<div class="appstore-bar">
<span>Dapatkan Aplikasi <font color="red"><b>BINUSTV</b></font></span>
<div class="appstore-row">
<div id="small-img" class="col-xs-12 col-sm-12 col-md-12 col-lg-12 center">
<a href="https://play.google.com/store/apps/details?id=com.bedigital.binustv">
<img src="https://static.bedigital.co.id/data/image/download-at-googleplay.png" class="img-responsive inline-block" alt="BINUSTV at GooglePlay"/>
</a><!--
<a href="">
<img src="https://static.bedigital.co.id/data/image/download-at-appstore.png" class="img-responsive inline-block" alt="BINUSTV at AppStore"/>
</a>!-->
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1 @@
{"display_id": "mjH-3DDJLmU", "extractor": "BinusTVApp", "playlist": null, "protocol": "https", "description": "BINUS TV adalah sebuah aplikasi yang dirancang untuk membiarkan semua orang menjadi PEMIRSA SMART dengan membiarkan semua orang\r\ninteraktif menikmati alternatif informatif & amp; program menghibur dari berita untuk berbicara show, musik untuk kuliner, film & amp; permainan ulasan untuk tutorial.", "format": "0 - unknown", "url": "https://youtube.com/watch?v=mjH-3DDJLmU", "extractor_key": "BinusTVApp", "title": ["[Headline] Gerakan #StayForUs Mulai Menggema di Laman Media"], "id": "mjH-3DDJLmU", "ext": "unknown_video", "fulltitle": ["[Headline] Gerakan #StayForUs Mulai Menggema di Laman Media"], "webpage_url": "https://binus.bedigital.co.id/app/share/video/7/65156/headline-gerakan-stayforus-mulai-menggema-di-laman-media", "uploader": "BINUS TV", "_filename": "test_BinusTVApp_mjH-3DDJLmU.unknown_video", "format_id": "0", "http_headers": {"Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.7", "Accept-Language": "en-us,en;q=0.5", "Accept-Encoding": "gzip, deflate", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.47 Safari/537.36"}, "playlist_index": null, "webpage_url_basename": "headline-gerakan-stayforus-mulai-menggema-di-laman-media"}

View File

@ -0,0 +1,16 @@
<!doctype html><html style="font-size: 10px;font-family: Roboto, Arial, sans-serif; " lang="en-US"><head><meta http-equiv="origin-trial" data-feature="Web Components V0" data-expires="2020-10-23" content="AhbmRDASY7NuOZD9cFMgQihZ+mQpCwa8WTGdTx82vSar9ddBQbziBfZXZg+ScofvEZDdHQNCEwz4yM7HjBS9RgkAAABneyJvcmlnaW4iOiJodHRwczovL3lvdXR1YmUuY29tOjQ0MyIsImZlYXR1cmUiOiJXZWJDb21wb25lbnRzVjAiLCJleHBpcnkiOjE2MDM0ODY4NTYsImlzU3ViZG9tYWluIjp0cnVlfQ=="><meta http-equiv="origin-trial" data-feature="Web Components V0" data-expires="2020-10-27" content="Av2+1qfUp3MwEfAFcCccykS1qFmvLiCrMZ//pHQKnRZWG9dldVo8HYuJmGj2wZ7nDg+xE4RQMQ+Ku1zKM3PvYAIAAABmeyJvcmlnaW4iOiJodHRwczovL2dvb2dsZS5jb206NDQzIiwiZmVhdHVyZSI6IldlYkNvbXBvbmVudHNWMCIsImV4cGlyeSI6MTYwMzgzNjc3MiwiaXNTdWJkb21haW4iOnRydWV9"><meta http-equiv="origin-trial" data-feature="Web Components V0" data-expires="2021-01-08" content="AixUK+8UEShlt6+JX1wy9eg+XL+eV5PYSEDPH3C90JNVbIkE1Rg1FyVUfu2bZ/y6Pm1xbPLzuwHYHjv4uKPNnA4AAABqeyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXByb2QuY29tOjQ0MyIsImZlYXR1cmUiOiJXZWJDb21wb25lbnRzVjAiLCJleHBpcnkiOjE2MTAwNjQ0MjMsImlzU3ViZG9tYWluIjp0cnVlfQ=="><meta http-equiv="origin-trial" data-feature="Web Components V0" data-expires="2021-03-09" content="AhHpq2nUT6fqP0Kmkq49EWIcl2P1LK1ceU05BoiVnWi8ZIWDdmX/kMwL+ZtuC3oIf0tns8XnO5fm946JEzPVEwgAAABqeyJvcmlnaW4iOiJodHRwczovL2MuZ29vZ2xlcnMuY29tOjQ0MyIsImZlYXR1cmUiOiJXZWJDb21wb25lbnRzVjAiLCJleHBpcnkiOjE2MTIyMjM5OTksImlzU3ViZG9tYWluIjp0cnVlfQ=="><script >var ytcfg = {d: function() {return (window.yt && yt.config_) || ytcfg.data_ || (ytcfg.data_ = {});},get: function(k, o) {return (k in ytcfg.d()) ? ytcfg.d()[k] : o;},set: function() {var a = arguments;if (a.length > 1) {ytcfg.d()[a[0]] = a[1];} else {for (var k in a[0]) {ytcfg.d()[k] = a[0][k];}}}};window.ytcfg.set('EMERGENCY_BASE_URL', "\/error_204?client.name=1\u0026client.version=2.20200325.03.01\u0026level=ERROR\u0026t=jserror");</script>
<script >var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.arrayIteratorImpl=function(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}};$jscomp.arrayIterator=function(a){return{next:$jscomp.arrayIteratorImpl(a)}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;
$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)};$jscomp.getGlobal=function(a){a=["object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global,a];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");};$jscomp.global=$jscomp.getGlobal(this);$jscomp.SYMBOL_PREFIX="jscomp_symbol_";
$jscomp.initSymbol=function(){$jscomp.initSymbol=function(){};$jscomp.global.Symbol||($jscomp.global.Symbol=$jscomp.Symbol)};$jscomp.SymbolClass=function(a,b){this.$jscomp$symbol$id_=a;$jscomp.defineProperty(this,"description",{configurable:!0,writable:!0,value:b})};$jscomp.SymbolClass.prototype.toString=function(){return this.$jscomp$symbol$id_};
$jscomp.Symbol=function(){function a(c){if(this instanceof a)throw new TypeError("Symbol is not a constructor");return new $jscomp.SymbolClass($jscomp.SYMBOL_PREFIX+(c||"")+"_"+b++,c)}var b=0;return a}();
$jscomp.initSymbolIterator=function(){$jscomp.initSymbol();var a=$jscomp.global.Symbol.iterator;a||(a=$jscomp.global.Symbol.iterator=$jscomp.global.Symbol("Symbol.iterator"));"function"!=typeof Array.prototype[a]&&$jscomp.defineProperty(Array.prototype,a,{configurable:!0,writable:!0,value:function(){return $jscomp.iteratorPrototype($jscomp.arrayIteratorImpl(this))}});$jscomp.initSymbolIterator=function(){}};
$jscomp.initSymbolAsyncIterator=function(){$jscomp.initSymbol();var a=$jscomp.global.Symbol.asyncIterator;a||(a=$jscomp.global.Symbol.asyncIterator=$jscomp.global.Symbol("Symbol.asyncIterator"));$jscomp.initSymbolAsyncIterator=function(){}};$jscomp.iteratorPrototype=function(a){$jscomp.initSymbolIterator();a={next:a};a[$jscomp.global.Symbol.iterator]=function(){return this};return a};
$jscomp.iteratorFromArray=function(a,b){$jscomp.initSymbolIterator();a instanceof String&&(a+="");var c=0,e={next:function(){if(c<a.length){var d=c++;return{value:b(d,a[d]),done:!1}}e.next=function(){return{done:!0,value:void 0}};return e.next()}};e[Symbol.iterator]=function(){return e};return e};
$jscomp.polyfill=function(a,b){if(b){var c=$jscomp.global;a=a.split(".");for(var e=0;e<a.length-1;e++){var d=a[e];d in c||(c[d]={});c=c[d]}a=a[a.length-1];e=c[a];b=b(e);b!=e&&null!=b&&$jscomp.defineProperty(c,a,{configurable:!0,writable:!0,value:b})}};window.yterr=window.yterr||!0;window.unhandledErrorMessages={};window.unhandledErrorCount=0;
window.onerror=function(a,b,c,e,d){d||(d=Error(),d.message=a,d.fileName=b,d.lineNumber=c,isNaN(e)||(d.columnNumber=e));b=String(d.message);if(!(!d.message||b in window.unhandledErrorMessages||5<=window.unhandledErrorCount)){window.unhandledErrorCount+=1;window.unhandledErrorMessages[b]=!0;a=new Image;window.emergencyTimeoutImg=a;a.onload=a.onerror=function(){delete window.emergencyTimeoutImg};d={msg:b,type:"UnhandledWindow"+d.name,file:d.fileName,line:d.lineNumber,stack:(d.stack||"").substr(0,500)};
b=[window.ytcfg.get("EMERGENCY_BASE_URL","https://www.youtube.com/error_204?t=jserror&level=ERROR")];for(var f in d)(c=d[f])&&b.push(f+"="+encodeURIComponent(c));a.src=b.join("&")}};
(function(){function a(f){var g=this._nativePrototypes[f];if(!g){g=Object.create(this.getNativePrototype(f));for(var l=Object.getOwnPropertyNames(window.Polymer.Base),k=0,h;k<l.length&&(h=l[k]);k++)if(!window.Polymer.BaseDescriptors[h])try{g[h]=window.Polymer.Base[h]}catch(m){throw Error("Error while copying property: "+h+". Tag is "+f);}try{Object.defineProperties(g,window.Polymer.BaseDescriptors)}catch(m){throw Error("Polymer define property failed for "+Object.keys(g));}this._nativePrototypes[f]=
g}return g}function b(f){window.onerror(f,window.location.href,0,0,Error(Array.prototype.join.call(arguments,",")))}var c=window.Polymer,e=function(f){!c._ytIntercepted&&window.Polymer.Base&&(c._ytIntercepted=!0,window.Polymer.Base._getExtendedNativePrototype=a,window.Polymer.Base._error=b,window.Polymer.Base._warn=b);return c.apply(this,arguments)},d=Object.getOwnPropertyDescriptor(window,"Polymer");Object.defineProperty(window,"Polymer",{set:function(f){d&&d.set&&d.get?(d.set(f),c=d.get()):c=f;
"function"==typeof c&&Object.defineProperty(window,"Polymer",{value:c,configurable:!0,enumerable:!0,writable:!0})},get:function(){return"function"==typeof c?e:c},configurable:!0,enumerable:!0})})();
</script>
<script >window.ShadyCSS = {disableRuntime: true};window.ShadyDOM = {force: true};window.ShadyDOM.preferPerformance = true;window.ShadyDOM.noPatch = true;window.Polymer = (window.Polymer || {});window.Polymer.legacyOptimizations = true;</script><link rel="shortcut icon" href="https://s.ytimg.com/yts/img/favicon-vfl8qSV2F.ico" type="image/x-icon" ><link rel="icon" href="https://s.ytimg.com/yts/img/favicon_32-vflOogEID.png" sizes="32x32" ><link rel="icon" href="https://s.ytimg.com/yts/img/favicon_48-vflVjB_Qk.png" sizes="48x48" ><link rel="icon" href="https://s.ytimg.com/yts/img/favicon_96-vflW9Ec0w.png" sizes="96x96" ><link rel="icon" href="https://s.ytimg.com/yts/img/favicon_144-vfliLAfaB.png" sizes="144x144" ><title>YouTube</title><script >var ytcsi = {gt: function(n) {n = (n || '') + 'data_';return ytcsi[n] || (ytcsi[n] = {tick: {},info: {}});},now: (window.performance && window.performance.timing &&window.performance.now && window.performance.timing.navigationStart) ?function() {return window.performance.timing.navigationStart +window.performance.now();} :function() {return (new Date()).getTime();},tick: function(l, t, n) {ticks = ytcsi.gt(n).tick;var v = t || ytcsi.now();if (ticks[l]) {ticks['_' + l] = (ticks['_' + l] || [ticks[l]]);ticks['_' + l].push(v);}ticks[l] = v;},info: function(k, v, n) {ytcsi.gt(n).info[k] = v;},setStart: function(s, t, n) {ytcsi.info('yt_sts', s, n);ytcsi.tick('_start', t, n);}};(function(w, d) {ytcsi.setStart('dhs', w.performance ? w.performance.timing.responseStart : null);var isPrerender = (d.visibilityState || d.webkitVisibilityState) == 'prerender';var vName = (!d.visibilityState && d.webkitVisibilityState)? 'webkitvisibilitychange' : 'visibilitychange';if (isPrerender) {ytcsi.info('prerender', 1);var startTick = function() {ytcsi.setStart('dhs');d.removeEventListener(vName, startTick);};d.addEventListener(vName, startTick, false);}if (d.addEventListener) {d.addEventListener(vName, function() {ytcsi.tick('vc');}, false);}function isGecko() {if (!w.navigator || !w.navigator.userAgent) {return false;}var ua = w.navigator.userAgent;return ua.indexOf('Gecko') > 0 &&ua.toLowerCase().indexOf('webkit') < 0 &&ua.indexOf('Edge') < 0 &&ua.indexOf('Trident') < 0 &&ua.indexOf('MSIE') < 0;}if (isGecko()) {var isHidden = (d.visibilityState || d.webkitVisibilityState) == 'hidden';if (isHidden) {ytcsi.tick('vc');}}var slt = function(el, t) {setTimeout(function() {var n = ytcsi.now();el.loadTime = n;if (el.slt) {el.slt();}}, t);};w.__ytRIL = function(el) {if (!el.getAttribute('data-thumb')) {if (w.requestAnimationFrame) {w.requestAnimationFrame(function() {slt(el, 0);});} else {slt(el, 16);}}};})(window, document);</script><link rel="preload" href= "https://i.ytimg.com/generate_204" as="fetch"> <script >if (window.ytcsi) {window.ytcsi.tick("lpcs", null, '');}(function() {window.ytplayer = {};ytcfg.set({"PAGE_CL":302690752,"INNERTUBE_CONTEXT_CLIENT_NAME":1,"ASYNC_APP_ATTACH":true,"PLAYER_CSS_URL":"\/yts\/cssbin\/player-vfln4y3jp\/www-player-webp.css","EXPERIMENT_FLAGS":{"kevlar_settings_advanced":true,"client_streamz_web_flush_count":100,"kevlar_playback_associated_queue":true,"kevlar_log_native_right_click_ve":true,"is_part_of_any_user_engagement_experiment":true,"kevlar_nitrate_driven_tooltips":true,"kevlar_playlist_drag_handles":true,"kevlar_mini_guide_width_threshold":791,"desktop_image_companion_wta_support":true,"polymer_cold_home_preload":true,"disable_forced_discovery_ad_removal_on_web":true,"ignore_empty_xhr":true,"kevlar_prepare_player_on_miniplayer_activation":true,"live_cha

View File

@ -0,0 +1,34 @@
# coding: utf-8
from __future__ import unicode_literals
import re
from .common import InfoExtractor
# BINUS TV uses YouTube to host videos. However, it uses additional private APIs for other features (i.e. comments).
# This script only uses URLs from the BINUS TV Android app share API (https://binus.bedigital.co.id/app/share/video/).
# Videos from the main BINUS TV website (https://www.binus.tv/video/) can still be extracted using generic extractor.
class BinusTVAppIE(InfoExtractor):
_VALID_URL = r'(?:https?://)?(?:www\.)?binus\.bedigital\.co\.id/app/share/video/[^\/]+/[^\/]+/(?P<id>[^/?\0]+)'
_TEST = {
'url': 'https://binus.bedigital.co.id/app/share/video/7/65156/headline-gerakan-stayforus-mulai-menggema-di-laman-media',
'info_dict': {
'id': 'mjH-3DDJLmU',
'ext': 'mp4',
'title': '[Headline] Gerakan #StayForUs Mulai Menggema di Laman Media',
'upload_date': '20200323',
'description': 'md5:a602c6fba2e474a0d5844489fe42f689',
'uploader': 'BINUSTV Channel',
'uploader_id': 'ChannelBINUSTV'
},
}
def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url)
video_id = mobj.group('id')
webpage = self._download_webpage(url, video_id)
youtube_id = self._search_regex(r'https:\/\/i.ytimg.com\/vi\/([0-9A-Za-z-_]{11})\/default.jpg', webpage, 'youtube_id')
# Returns the YouTube video
return self.url_result(youtube_id, ie='Youtube')

View File

@ -107,6 +107,7 @@ from .bilibili import (
BilibiliAudioAlbumIE,
BiliBiliPlayerIE,
)
from .binustv import BinusTVAppIE
from .biobiochiletv import BioBioChileTVIE
from .bitchute import (
BitChuteIE,