Auch ich habe ein paar kleine Anpassungen gemacht, auf Basis der zuvor geposteten Scripte. Für mich war wichtig, dass es eben nicht automatisch abspielt und das jeweilige Cover des aktuellen Videos angezeigt wird, bevor ich es manuell abspielen lasse. Dazu ist das Script nun um eine Extraktion des Bildlinks erweitert (mit zusätzlichem Datenpunkt).
Hier das Script:
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();
Der Cron-Job ist hier auf alle 5 Minuten eingestellt, damit er das Bild (falls ich das Video während des Abspielens gestoppt habe) wieder resetet.
Das Ganze habe ich dann, wie viele vor mir auch, in ein HTML Widget mit folgendem Inhalt gepackt:
<video 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>Das Video konnte nicht geladen werden!</div></video>
Da ich die Controls hässlich finde, blende ich sie aus, solange ich das Video nicht abspielen lasse (mittels "Mouseover-Listener").
Danke in diesem Sinne an all die Vorarbeit!