Zum Thema: Ich finde tvtv.de als Programmzeitschriften-Ersatz gar nicht schlecht. Cool fände ich's, wenn man damit direkt Dbox-Timer setzen könnte. Darum hab ich mir mal was zusammengebäschdelt und würde Euch um Feedback bitten.
Mein Ansatz: Wenn man die Sender-Übersicht von tvtv.de vor sich hat, kann man mit der Maus auf so eine Sendung klicken und erhält Detail-Informationen. Diese Detail-Information schleuse ich an ein PHP-Skript weiter und lasse dort die relevanten Informationen (Sender, Datum, Startzeit, Stopzeit) herausparsen.
Okay, arg viel weiter bin ich bisher noch nicht gekommen. Ich wollte aber auch noch nicht zu viel Arbeit investieren, da hier ja möglicherweise gleich einer angelatscht kommt und sagt "och, das wär aber auch vieeeeel einfacher gegangen" ...
Im Detail:
Wenn man mit der Maus über so eine Sendung in der Übersicht von tvtv.de drüberfährt, erscheint in der Status-Zeile des Browsers so eine Geschichte:
javascript:parent.sd('12345678');
Die achtstellige ID in der Klammer da gebe ich das Abfrage-Fenster von meinem Bookmarklet ein. Das sucht mir anschließend den Pfad des Popup-Fensters mit den Detailinformationen raus. Der Prozeß gestaltet sich etwas aufwendiger, weil die Jungs von tvtv.de ganz vertrackte Pfade, Frames und Sessions benutzen (oder aber ich das alles nur nicht so richtig durchschaut habe ...)
Schließlich wird eine PHP-Seite aufgerufen, die dann daraus die notwendigen Informationen herausfiltert.
Das Bookmarklet habe ich im Firefox (1.0.7, WinXP) gebaut -- im IE funktoniert es leider nicht. Kann sein, daß es zu groß ist (der IE 6 läßt nur Bookmarklets mit 508 Zeichen zu, ich hab meins auf Teufel komm raus nicht kleiner bekommen), oder er mit irgendwelchen Befehlen nicht klar kommt.
Der Code vom Bookmarklet:
Code: Alles auswählen
javascript:try{if(a=top.frames[1].frames[1].frames[1].document.forms['show_form'].action) throw 'y';}catch(m){if(m=='y'){i=prompt('Sendungs-ID:');if(i==null){}else if((i=='')||isNaN(i)){alert('ungültige ID');}else{w=window.open(a+'?sendung='+i,'z','menubar=no,scrollbars=yes,resizable=no,status=yes,width=500,height=500');function x(c){try{if(a=w.document.getElementsByName('detail_content')[0].src) throw 'y';}catch(n){if(n=='y'){if (a.indexOf('http://www.tvtv.de/cgi-bin/WebObjects/EPG.woa')==0){w.document.location.href='http://www.example.com/tvtvparser.php?url=' + encodeURIComponent(w.document.getElementsByName('detail_content')[0].src);w.focus();return;}else{alert('Daten-URL von tvtv.de geändert');w.close();return;}}else{if(c>5){alert('Timeout');w.close();return;}}}finally{c++;}setTimeout('x(' + c + ')', 500);}x(0);}}else{alert('tvtv.de nicht geöffnet');}}
Code: Alles auswählen
<?php
// definitions for parser
$starttag_station = 'id="detail-box-station"><b>';
$endtag_station = '</b></td>';
$starttag_showstart = 'id="box-small-light">Beginn: ';
$endtag_showstart = ' Uhr</td>';
$starttag_showend = 'id="box-small-light">Ende: ';
$endtag_showend = ' Uhr</td>';
$starttag_datum = '</span><br><span id="fb-b10">';
$endtag_datum = '</span></td>';
$tvtvbegin = 'http://www.tvtv.de/cgi-bin/WebObjects/EPG.woa';
// nur starten, wenn URL übergeben wurde und diese auf tvtv.de zeigt
if (($url = $_REQUEST["url"]) && (strpos($url,$tvtvbegin) === 0)) {
$dateiinhalt = file_get_contents($url);
$station = substr($dateiinhalt,strpos($dateiinhalt,$starttag_station)+strlen($starttag_station));
$station = substr($station,0,strpos($station,$endtag_station));
echo "Station: $station<br>";
$showstart = substr($dateiinhalt,strpos($dateiinhalt,$starttag_showstart)+strlen($starttag_showstart));
$showstart = substr($showstart,0,strpos($showstart,$endtag_showstart));
echo "Showstart: $showstart<br>";
$showend = substr($dateiinhalt,strpos($dateiinhalt,$starttag_showend)+strlen($starttag_showend));
$showend = substr($showend,0,strpos($showend,$endtag_showend));
echo "Showend: $showend<br>";
$datum = substr($dateiinhalt,strpos($dateiinhalt,$starttag_datum)+strlen($starttag_datum));
$datum = substr($datum,0,strpos($datum,$endtag_datum));
echo "Datum: $datum<br>";
} else {
echo 'falscher Aufruf.';
}
?>
Die PHP-Seite muß natürlich auf einem Server liegen, der PHP kann -- im Bookmarklet muß der Pfad dahin bei
Code: Alles auswählen
http://www.example.com/tvtvparser.php
Wie ich schon in anderen Beiträgen bemerkte, sind meine Linux-Kenntnisse seeeeeehr rudimentär. Möglicherweise läßt sich mein umständliches PHP-Parsing ja irgendwie mit einem ausgefuchsten Bash-Skript und wget viel einfacher gestalten? Dann könnte man das nämlich direkt mit der Box machen und bräuchte nicht noch Zugriff auf einen PHP-Server.
Was meint ihr so dazu?
Anm: Da steht überall in meinem Beitrag nixskript, obwohl ich natürlich was anderes eingegeben hab. Damit das Bookmarklet funktioniert, muß da am Anfang stehen: j a v a s c r i pt (ohne die ganzen Abstände)