Dbox Timer-Steuerung mit Hilfe von tvtv.de

Das Original Benutzerinterface Neutrino-SD incl. zapit, sectionsd, yWeb etc...
PublicBenemy
Neugieriger
Neugieriger
Beiträge: 10
Registriert: Sonntag 21. August 2005, 14:35

Dbox Timer-Steuerung mit Hilfe von tvtv.de

Beitrag von PublicBenemy »

Zunächst mal -- ich weiß ehrlich gesagt nicht, in welchem Bereich des Forums ich das hätte hier unterbringen soll. Falls ich hier falsch bin -- großes Sorry, bitte verschiebt es an einen passenderen Ort, wenn ich mich grob vertan haben sollte.

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');}}
Der Code vom PHP-Parser (bitte nicht lachen, das geht sicherlich eleganter):

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
entsprechend angepaßt werden.

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)
PublicBenemy
Neugieriger
Neugieriger
Beiträge: 10
Registriert: Sonntag 21. August 2005, 14:35

hm ...

Beitrag von PublicBenemy »

bin ich denn der einzige, der tvtv.de nutzt?
petgun
Tuxboxer
Tuxboxer
Beiträge: 5001
Registriert: Montag 11. November 2002, 15:26

Re: hm ...

Beitrag von petgun »

PublicBenemy hat geschrieben:bin ich denn der einzige, der tvtv.de nutzt?
..sieht so aus. Du greifst mit ein paar Tricks, einen Service ab fuer den Andere _teuer_ bezahlen muessen...meinst Du das waere legal?