NEWS
SOLVED [gelöst]Frage: Wer hat die "Tagesschau in 100s" eingebunden?
-
Hallo,
ich habe das Problem, das das Video noch während der Wiedergabe beendet wird. Hat da einer eine Idee woran es liegen könnte ? Vielen Dank.
Standard HTML widget :
<video src='{javascript.0.tagesschau.tagesschau100SekundenVideo}' width='279' height='175' poster='{javascript.0.tagesschau.tagesschau100SekundenImg}' onmouseover="dataset.over=true; controls=true" onmouseout="delete dataset.over;if(paused)controls=false;" onplay="controls=true" onpause="if(!dataset.over&&!dataset.focus)controls=false" onfocusin="dataset.focus=true; controls=true" onfocusout="delete dataset.focus;if(paused)controls=false;"><div>Das Video konnte nicht geladen werden!</div></video>
var logging = false; var jsInstance = 'javascript.'+ instance + '.'; createState(jsInstance + 'tagesschau.tagesschau100SekundenVideo','', { name: 'Videolink zu Tagesschau in 100s', desc: 'geparster Link aus tagesschau.de', type: 'string' }); createState(jsInstance + 'tagesschau.tagesschau100SekundenImg','', { name: 'Bildlink zu Tagesschau in 100s', desc: 'geparster Link aus tagesschau.de', type: 'string' }); var idVIDEO = jsInstance + 'tagesschau.tagesschau100SekundenVideo'; var idIMG = jsInstance + 'tagesschau.tagesschau100SekundenImg'; var link = 'http://www.tagesschau.de/100sekunden/'; function findeURL () { var request = require('request'); try { request(link, function (error, response, body) { if (!error && response.statusCode == 200) { var video_url; var img_url; var bodyTextVideo1 = '<meta name="twitter:player:stream" content="', bodyTextVideo2 = '<meta name="twitter:player:stream:content_type"'; var bodyTextImg1 = '<meta name="twitter:image:src" content="', bodyTextImg2 = '<meta name="twitter:card"'; var startVideo = body.search(bodyTextVideo1) + bodyTextVideo1.length; var endVideo = body.search(bodyTextVideo2); var startImg = body.search(bodyTextImg1) + bodyTextImg1.length; var endImg = body.search(bodyTextImg2); if (logging) log('startVideo: ' + startVideo); if (logging) log('endVideo: ' + endVideo); if (logging) log('startImg: ' + startImg); if (logging) log('endImg: ' + endImg); var tmpVideo = ((startVideo != -1) && (endVideo != -1) ) ? body.slice(startVideo, endVideo) : 'Fehler beim Ausschneiden'; var tmpImg = ((startImg != -1) && (endImg != -1) ) ? body.slice(startImg, endImg) : 'Fehler beim Ausschneiden'; tmpVideo = tmpVideo.trim(); tmpImg = tmpImg.trim(); tmpVideo = tmpVideo.substr(0, tmpVideo.length - 10); video_url = tmpVideo + ".webl.h264.mp4"; img_url = tmpImg.substr(0, tmpImg.length - 3); setState(idVIDEO, video_url); setState(idIMG, img_url); } else { log('Error in Tagesschau100Sekunden: ' + error, 'error'); } }); } catch (e) { log('Error in Tagesschau100Sekunden: ' + e, 'error'); } } schedule("*/5 * * * *", findeURL); findeURL();
-
Hallo,
ich habe im letzten Post ja nur das Ergebnis gezeigt, nicht den Weg dahin. Wird hier nachgeholt:
Wie oben erwähnt, ändert sich der Link zur aktuellsten Version der Sendung ständig. Deshalb nutze ich dieses Skript, um den Link zeitgesteuert zu aktualisieren. Das Skript legt einen Datenpunkt "VIS.URL.Tagesschau" an. Den brauche ich später in VIS.
Neue Version vom 11.11.2018
/* VIS Tagesschau_Link parsed die Seite https://www.tagesschau.de/100sekunden/ und sucht nach der URL zum aktuellsten Video 02.03.2016 erstellt von pix 15.03.2016 zu Javascript Instanz 1 gewechselt 24.09.2016 umbenannt in VIS_Link_Tagesschau 11.11.2018 Skript angepasst und optimiert */ const fC = false; // forceCreation für createState() const logging = false; const instanz = 'javascript.1.'; const idURL = instanz + 'VIS.URL.Tagesschau'; // ab hier nix mehr ändern const link = "http://www.tagesschau.de/100sekunden/"; createState(idURL,"", fC, { name: "Link zu Tagesschau in 100s", desc: "geparster Link aus tagesschau.de", type: "string", role: "text.url" }); function findeURL () { let request = require('request'); let film_url; try { request(link, function (error, response, body) { if (!error && response.statusCode == 200) { // kein Fehler, Inhalt in body //log(body); // HTML Code der Webseite: Inhalt zwischen und speichern let text1 = " Wir bieten dieses Video in folgenden Formaten zum Download an: ", text2 = " **Hinweis:** Falls die Videodatei beim Klicken nicht automatisch gespeichert wird, können Sie mit der rechten Maustaste klicken und 'Ziel speichern unter ...' auswählen. "; let start = body.search(text1) + text1.length; let ende = body.search(text2); if (logging) log("Startposition: " + start); if (logging) log("Endposition: " + ende); let zwischenspeicher = ((start != -1) && (ende != -1) ) ? body.slice(start,ende) : "Fehler beim Ausschneiden"; if (logging) log("Zwischenspeicher: " + zwischenspeicher); let text3 = "//download", text4 = ".websm.h264.mp4"; let start2 = body.search(text3); let ende2 = body.search(text4); if (logging) log("Startposition2: " + start2); if (logging) log("Endposition2: " + ende2); let zwischenspeicher2 = ((start2 != -1) && (ende2 != -1) ) ? body.slice(start2,ende2) : "Fehler beim Ausschneiden 2"; if (logging) log(zwischenspeicher2); film_url = "http:" + zwischenspeicher2 + ".webl.h264.mp4"; setState(idURL, film_url); if (logging) log ("URL: " + film_url); } else { // Error beim Einlesen log(error, 'error'); } }); // Ende request } catch (fehler) { log("Fehler (try): " + fehler, "error"); } } // Ende findeURL schedule("8 */1 * * *", findeURL); // jedeStunde um 8 nach voll setTimeout(findeURL, 2000);
ALTE VERSION VON 2016
/* VIS Tagesschau_Link parsed die Seite https://www.tagesschau.de/100sekunden/ und sucht nach der URL zum aktuellsten Video erstellt: 02.03.2016 von pix 15.03.2016 zu Javascript Instanz 1 gewechselt */ var logging = false; var instanz = 'javascript.1.'; // ab hier nix mehr ändern createState('VIS.URL.Tagesschau','', { name: 'Link zu Tagesschau in 100s', desc: 'geparster Link aus tagesschau.de', type: 'string' }); var idURL = instanz + 'VIS.URL.Tagesschau'; var link = 'http://www.tagesschau.de/100sekunden/'; var film_url; function findeURL () { var optin = true; var request = require('request'); if (optin) try { request(link, function (error, response, body) { if (!error && response.statusCode == 200) { // kein Fehler, Inhalt in body //log(body); // HTML Code der Webseite: Inhalt zwischen und speichern var text1 = ' Wir bieten dieses Video in folgenden Formaten zum Download an: ', text2 = ' **Hinweis:** Falls die Videodatei beim Klicken nicht automatisch gespeichert wird, können Sie mit der rechten Maustaste klicken und "Ziel speichern unter ..." auswählen. '; var start = body.search(text1) + text1.length; var ende = body.search(text2); if (logging) log('Startposition: ' + start); if (logging) log('Endposition: ' + ende); var zwischenspeicher = ((start != -1) && (ende != -1) ) ? body.slice(start,ende) : 'Fehler beim Ausschneiden'; if (logging) log(zwischenspeicher); var text3 = 'http://download', text4 = '.websm.h264.mp4'; var start2 = body.search(text3); var ende2 = body.search(text4); if (logging) log('Startposition: ' + start2); if (logging) log('Endposition: ' + ende2); var zwischenspeicher2 = ((start2 != -1) && (ende2 != -1) ) ? body.slice(start2,ende2) : 'Fehler beim Ausschneiden'; if (logging) log(zwischenspeicher2); film_url = zwischenspeicher2 + '.webl.h264.mp4'; setState(idURL, film_url); } else { // Error beim Einlesen log(error, 'error'); } }); // Ende request } catch (fehler) { log('Fehler (try): ' + fehler, 'error'); } } // Ende findeURL schedule("8 */1 * * *", findeURL); // jedeStunde um 8 nach voll findeURL();
Jetzt muss in VIS noch ein Widget mit Dialog gebaut werden, das bei Tastendruck den Dialog öffnet, in welchem dann das Video läuft:
[{"tpl":"tplMetroTileDialogStatic","data":{"visibility-cond":"==","visibility-val":1,"hover":false,"transform":"true","bg_class":"bg-darkCyan","icon_class":"","icon_badge":"","badge_bg_class":"","brand_bg_class":"","dialog_draggable":"true","dialog_icon_class":"icon-film","gestures-offsetX":0,"gestures-offsetY":0,"name":"Tagesschau","label":"tagesschau in 100s","html":"\n<video src="\"{javascript.1.VIS.URL.Tagesschau}\"" width="\"950\"" height="\"543\"" \nposter="\"video-standbild.jpg\"" autobuffer/autoplay/\ncontrols="">\n\nSchade – hier käme ein Video, wenn Ihr \nBrowser HTML5 Unterstützung hätte, wie z.B. der \naktuelle Firefox\n\n</video>","dialog_width":"960","dialog_height":"623","dialog_title":"Tagesschau in 100s","dialog_flat":true,"dialog_shadow":true,"dialog_modal":true,"icon_src":"/vis.0/iPad/img/tagesschau100_logo_base.png","icon_height":"22","icon_width":"96","icon_top":"50","icon_left":"24","dialog_icon_src":"","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false},"style":{"left":"428px","top":"8px","z-index":"20"},"widgetSet":"metro"}]
Der Link zum Video ist im Widget als {Binding} hinterlegt. Die Größen sind für ein iPad Air Landscape ausgelegt.
Wenn ich Zeit habe, teste ich noch andere Sendungen von anderen Sendern.
Gruß
Pix
EDIT: Neues Skript vom 11.11.2018 im Spoiler
-
-
Und wer auch noch den TagesschauStream sehen will, kann dieses (auf die Schnelle) erweiterte Skript nutzen.
Es legt 2 Datenpunkte an:
mp4 Datei für tagesschau in 100s
html-Link für StreamDazu zwei Widgets für die Anzeige in VIS
Gruß
PixEDIT: Ja, in der Modal-Box vom Stream steht noch 100s, kann man ja selbst ändern
-
Klasse @pix
Einen hab ich aber, wie kann ich eine angepasste Lautstärke mit übergeben.
Habe aus dem alten VIS dies übernommen bei HTML<script> var vid = document.getElementById("Video"); vid.volume = 0.1; </script>
aber darauf reagiert es nicht.
-
@nashra Hallo Ralf,
dazu kann ich leider nichts sagen.
Die 100s-Lösung ist ja eine Videodatei, deren Adresse über Regexp aus dem Quellcode der Seite extrahiert wird. Die Lautstärke-Regelung sollte da der Browser übernehmen.
Der Stream ist eine HTML-Seite, die auf tagesschau.de liegt. Auch der wird per Regexp gefunden, aber er ist mitiframe
einzubinden. Vielleicht kann man die Lautstärke im Code irgendwo hinterlegen. Dieser Stream fiel mir auf, als ich die 100s-Sache mal wieder updaten musste. Habe ihn noch nicht so ganz sauber eingebaut, aber es funktioniert.Pix
-
ich nutze das hier - da ist volume control mit dem neuen script von pix
<div> <video id="Movie" src='{javascript.0.tagesschau.tagesschau100SekundenVideo}' width='600' height='338' poster='{javascript.0.tagesschau.tagesschau100SekundenImg}' onmouseover="dataset.over=true; controls=true" onmouseout="delete dataset.over;if(paused)controls=false;" onplay="controls=true" onpause="if(!dataset.over&&!dataset.focus)controls=false" onfocusin="dataset.focus=true; controls=true" onfocusout="delete dataset.focus;if(paused)controls=false;"><div>Schade geht nicht</div></video> </div> <script> var vid = document.getElementById("Movie"); vid.volume = 0.8; </script>
-
@pix ich habe mir deine widgets zur Tagesschau importiert. Wo muss ich dort denn die Url Hinterlegen das es funktioniert ? In Objekt ID oder Inhalte ID nimmt er die Url nicht.
-
@novregen die steht doch schon drin, ausser du hast den Pfad geändert, dann musst du es bei html anpassen
-
@crunchip ok danke das habe ich gefunden stand auf javascript1 deshalb hat es nicht funktioniert.
Wie bekomme ich es denn hin, das hier als Bild das Video angezeigt wird ? Jetzt wird nur ein bild gezeigt.
So würde ich es gerne haben
-
@novregen Die möchtest das aktuelle Livebild sehn? Das wird nicht gehen und falls doch wüsste ich nicht wie.
-
@pix
Hallo Pix, vorab erst Mal Danke für dieses Script und die Zeit, die du in die Entwicklung gesteckt hast.Das Script hat bislang unauffällig seinen Dienst verrichtet. Seit zwei Tagen erhalte ich nun aber folgende Fehlermeldung im Log:
2022-01-19 08:42:34.342 - info: javascript.0 (4199) Stop script script.js.common.VIS.Tagesschau_100s_aktueller_Link 2022-01-19 08:42:38.801 - info: javascript.0 (4199) Start javascript script.js.common.VIS.Tagesschau_100s_aktueller_Link 2022-01-19 08:42:38.807 - info: javascript.0 (4199) script.js.common.VIS.Tagesschau_100s_aktueller_Link: registered 0 subscriptions and 1 schedule 2022-01-19 08:42:40.963 - info: javascript.0 (4199) script.js.common.VIS.Tagesschau_100s_aktueller_Link: HTML: https://www.tagesschau.de/multimedia/livestreams/livestream-3-105~player.html 2022-01-19 08:42:41.005 - error: javascript.0 (4199) Error in request callback: TypeError: Cannot read property '0' of null
Der Fehler steht in Verbindung mit dem Linkabruf.
Hast du eine Idee, wie man den Fehler beheben kann?
Danke und Gruß
-
-
@bahnuhr hier selber fehler...
-
-
@xbit sagte in [gelöst]Frage: Wer hat die "Tagesschau in 100s" eingebunden?:
Habe auch diesen Fehler im Log.
Auch der Link zur Tagesschau ist auf dem stand vom 18.01.2022 geblieben, also kein neues Video am 19.01 und 20.01
Aktualisiert wird es bei mir einwandfrei.
Video kommt auch.Nur halt der error im log.
-
bei mir nur der normale Tagesschau Link, der Tagesschau100sec Link nicht
-
@xbit Läuft es bei dir wieder mit dem aktualisieren vom video?
-
ich habe den fehler gefunden:
Javascript:
/* VIS Tagesschau_Link parsed die Seite https://www.tagesschau.de/100sekunden/ und sucht nach der URL zum aktuellsten Video {1} 02.03.2016 erstellt von pix 15.03.2016 zu Javascript Instanz 1 gewechselt 24.09.2016 umbenannt in VIS_Link_Tagesschau 11.11.2018 Skript angepasst und optimiert 03.05.2021 Skript angepasst tagesschau 100s mp4 tagesschau Stream HTML-Link {1} todo: axios statt request() und etwas schöner machen {1} {1} */ const fC = false; // forceCreation für createState() const logging = true; const instanz = '0_userdata.0.'; const idURL = instanz + 'Tagesschau'; const idURL100s = instanz + 'Tagesschau100s'; // ab hier nix mehr ändern createState(idURL,"", fC, { name: "HTML-Seite mit Tagesschau-Stream", desc: "geparster Link aus tagesschau.de", type: "string", role: "text.url" }); createState(idURL100s,"", fC, { name: "Link zu Tagesschau in 100s", desc: "geparster Link aus tagesschau.de", type: "string", role: "text.url" }); function findeURL () { let request = require('request'); let film_url; try { // Tagesschau in 100s const link = "http://www.tagesschau.de/100sekunden/"; let regexp = /https:\/\/media\.tagesschau\.de\/video\/\d*\/\d*\/TV-\d*-\d*-\d*\.webxxl\.h264\.mp4/gm; request(link, function (error, response, body) { if (!error && response.statusCode == 200) { let result_arr = regexp.exec(body); film_url = result_arr[0]; setState(idURL100s, film_url); if (logging) log ("URL: " + film_url); } else { // Error beim Einlesen log(error, 'error'); } }); // Ende request } catch (fehler) { log("Fehler (try): " + fehler, "error"); } // nicht schön, aber nochmal für Stream let stream_url; try { //Tagesschau Stream als HTML const link = "https://www.tagesschau.de/multimedia/livestreams/"; let regexp = /https:\/\/www\.tagesschau\.de\/multimedia\/livestreams\/livestream-\d*-\d*~player\.html/gm; request(link, function (error, response, body) { if (!error && response.statusCode == 200) { let result_arr = regexp.exec(body); stream_url = result_arr[0]; setState(idURL, stream_url); if (logging) log ("HTML: " + stream_url); } else { // Error beim Einlesen log(error, 'error'); } }); // Ende request } catch (fehler) { log("Fehler (try): " + fehler, "error"); } } // Ende findeURL schedule("8 */1 * * *", findeURL); // jedeStunde um 8 nach voll setTimeout(findeURL, 2000);
-
@bug77 Prima nur bekomme ich immer einen fehler wen ich den script rein kopiere und starten möchte. von wo bis wo muss ich den script kopieren?
Bin noch blutiger anfänger. Sorry -
Saubere Arbeit es geht wieder Besten Dank
@Conchulio-1 alles im schwarzen Fenster von Zeile 1 bis 165