Optionskanäle über die nhttpd API abrufbar machen..

Wünsche, Anträge, Fehlermeldungen
arno-neutrinoTV
Einsteiger
Einsteiger
Beiträge: 108
Registriert: Freitag 14. April 2006, 11:21

Optionskanäle über die nhttpd API abrufbar machen..

Beitrag von arno-neutrinoTV »

Wäre es möglich eine neue Funktion in die nhttp-API einbinden welche ähnlich der zapto?getallpids alle aktuellen Unterkanäle zurückliefert? Das müsste man dann zwar als Anwendung in regelmässigem Abstand pollen (sofern man auf einem Kanal mit Unterkanäle ist), aber zumindest würde es überhaupt eine Möglichkeit geben dies zu tun. Erst dadurch wird es externen Programmen möglich die Unterkanäle richtig zuzuordnen und dynamisch anzeigen/ausblenden. (Ich denke das wäre auch für yjogol's yWeb Live interessant und natürlich für mein neutrinoTV).

Konkret stell ich mir folgende Funktion vor:

Code: Alles auswählen

>>>http://dbox/control/zapto?getallsubchannels
0x3008500f0 Portal
0x3008500f1 Cockpit

Es wird die Liste der Optinskanäle des aktuellen Kanals von Neutrino zurueckgegeben.
Jede Zeile wird von einem Enter (\n) von der Naechsten getrennt.
Eine Zeile enthaelt ein Programm.

Rueckgabe-Format: channel_id Programmname

Die channel_id dient als Handle fuer andere Operationen wie Zappen oder EPG.
Die channel_id ist eine 64 bit Hexadezimalzahl.

Beispiel:

>>>http://dbox/control/zapto?getallsubchannels
0x4008500d0 PREMIERE Direkt D0
0x4008500d1 PREMIERE Direkt D1
Das ist natürlich nur ein Vorschlag - falls einer der Enwickler eine bessere Idee mit dem gleichen Ziel hat wäre das natürlich genauso ok.

Pollen ist zwar grundsätzlich nicht schön, aber ich denke es wäre ein gehbarer Weg.

Ich kann den Aufwand dafür nicht einschätzen, da ich die sourcen von neutrino nicht gut genug kenne. Daher sollten die Entwickler sagen ob es sowas geben wird oder nicht - und man weiter ohne (oder nur über Umwege erreichbare) Optionskanäle bei externen Programmen leben muss.

Grüßle
A.
Grüßle
A.
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Beitrag von Houdini »

weiss jetzt nicht ob du alle details eines epg events bekommst, aber die Liste der Optionen ist in dem aktuellen EPG Event mit drin (i.e. der Linkage Descriptor)

Hab gerade geschaut, ist nicht mit drin
arno-neutrinoTV
Einsteiger
Einsteiger
Beiträge: 108
Registriert: Freitag 14. April 2006, 11:21

Beitrag von arno-neutrinoTV »

Du meintest sicherlich die Information, die man bekommt wenn das EPG vom Portal ausliest - ja da stehen zwar die Infos drin, ein Zuordnung zu Kanälen ist jedoch nicht möglich. Das format für den EPG so erweiteren dass es hier mit einer referenz dabei steht, wäre sicherlich möglich, würde m.E. die Sache aber wesentlich komplizierter machen. Der Grund ist der, das eine Anfrage mit der API Funktion "http://dbox/control/epg?id=16dcb" schon in der jetzigen Form nicht wirklich sauber parsbar ist. Lt Beschreibung trennt \n\n die Datensätze voneinander - leider kann \n\n an fast jeder anderen Stelle auftreteten und es gibt keinen sicheren weg, um festzustellen wann ein neuer Datensatz beginnt.

Da wir schon darüber reden.. wäre es nicht möglich speziell für die API-Funktion http://dbox/control/epg?id=<channel-id> anstatt dem datensatztrenner "\n\n" einfach einen wohldefinierten String zu verwenden?
Z.B. ähnlich wie man das bei Web-Multipart macht. Mein Vorschlag für eine sinnvolle Datensatztrennung anstatt "\n\n" folgendes verwenden:
"-------ewmyogtrhmlyqwyxxswrvwffsdfssergpuf\n" - sowas kommt im Text mit nahezu 100% Sicherheit nicht vor. (Natürlich kann es jeglicher andere nonsense-string sein :))
(Das wäre dann mein zweiter feature request in einem thread :) - würde das parsen des EPGs über die api wesentlich vereinfachen und dadurch effizienter machen, und sollte im Code eigentlich nur eine Ersetzung einer Zeile sein, nämlich anstatt printf("\n\n") eben das printf("----sadsfsd\n"))

Was meint ihr dazu?

Wenn das drin wäre, dann könnt ich mir auch vorstellen innerhalb der EPG Daten eines Kanals weitere parsbare Daten anzubieten..
Grüßle
A.
arno-neutrinoTV
Einsteiger
Einsteiger
Beiträge: 108
Registriert: Freitag 14. April 2006, 11:21

Beitrag von arno-neutrinoTV »

Ich habe mir mal die sourcen des nhttpd, speziell die controlapi.cpp genauer angesehen.

Für meinen zweiten feuture-request müsste man nur eine Zeile (wie schon gesagt) austauschen. Und zwar in der controlapi.cpp in der Funktion CControlAPI::EpgCGI. Kurz vor Ende der Funktion gibt es folgenden Code:

Code: Alles auswählen

else if (!(request->ParameterList["id"].empty()))
		{
			t_channel_id channel_id;
			sscanf(request->ParameterList["id"].c_str(),
			       SCANF_CHANNEL_ID_TYPE,
			       &channel_id);

			Parent->eList = Parent->Sectionsd->getEventsServiceKey(channel_id);
			CChannelEventList::iterator eventIterator;

			for (eventIterator = Parent->eList.begin(); eventIterator != Parent->eList.end(); eventIterator++)
			{
			CShortEPGData epg;

				if (Parent->Sectionsd->getEPGidShort(eventIterator->eventID,&epg))
				{
					request->printf("%llu %ld %d\n", eventIterator->eventID, eventIterator->startTime, eventIterator->duration);
					request->printf("%s\n",epg.title.c_str());
					request->printf("%s\n",epg.info1.c_str());
					request->printf("%s\n\n",epg.info2.c_str()); // <--- Markierung
				}
			}
			return true;

		}
Die markierte Zeile müsste mit

Code: Alles auswählen

request->printf("%s----------fvjnflkvodfjsaefgajodfjg\n\n",epg.info2.c_str());
ausgetauscht werden. Dadurch dass der "\n\n"-Teil erhalten bleibt wird es auch kein Problem mit alten Programmen geben (sofern überhaupt jmd ausser mir diese Funktion verwendet). In allen alten Programmen wird halt in der Erweiterten Info eines EPGs eben immer noch zusätzlich die Boundary, nämlich "----------fvjnflkvodfjsaefgajodfjg" angezeigt, allerdings werden sie trotzdem funktionieren das sie ja das alte "\n\n" doch finden. Neue Programme können nun aber präzise nach dem string suchen und habe kein Problem mehr mit "\n" innerhalb der EPG Daten...

Noch besser würde sich auch folgendes machen:

Code: Alles auswählen

request->printf("%s----------dklfjgdlkjgdfghasdffasd\n",epg.title.c_str());
request->printf("%s----------dklfjgdlkjgdfghasdffasd\n",epg.info1.c_str());
request->printf("%s----------fvjnflkvodfjsaefgajodfjg\n\n",epg.info2.c_str());
Damit kann man auch die einzelne Datenfelder ein-eindeutig auseinander halten. Allerdings würde das evtl bei alten Anwendungen tatsächlich stören, da diese nun den Titel einer Sendung z.B. mit "Tagesschau----------dklfjgdlkjgdfghasdffasd" angeben würden (aber wie schon gesagt, ich denke fast, dass speziell die Variante epg?id=<channel-id> von keinem Programm genutzt wird, weil sie eben schwer zu parsen ist) Andererseits ist diese Fukntion aber die beste Möglichkeit schnell mit nur einer Verbindung an den detailierten EPG einers Senders zu kommen)

Was denkt ihr? Würde das einer der devs einpflegen?

Mein request für /control/zapto?getallsubchannels besteht immer noch :)

Grüßle
A.
arno-neutrinoTV
Einsteiger
Einsteiger
Beiträge: 108
Registriert: Freitag 14. April 2006, 11:21

Beitrag von arno-neutrinoTV »

Sind meine Vorschläge den so abwegig?

Ich dacht, dass es sich um sinnvolle Erweiterungen handelt, die vmtl bei recht geringem Aufwand machbar sind (die notwendigen infos sind ja offensichtlich vorhanden)...

Gruss
A. :(
Grüßle
A.
r0b1n
Neugieriger
Neugieriger
Beiträge: 6
Registriert: Samstag 3. Juni 2006, 10:12

Beitrag von r0b1n »

Ich finde diese Vorschläge äußerst nützlich! Sollte unbedingt realisiert werden.
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Beitrag von Houdini »

@Arno
check das am besten mit yjogol ab
yjogol
Developer
Beiträge: 809
Registriert: Montag 4. Juli 2005, 18:45

Beitrag von yjogol »

Hi, ich habe die Realisierung noch nicht im Detail angeschaut, habe aber für yWeb 2.0 EPG an zwei Stellen auf XML erweitert, so das Bouquetliste und EPG mehr Informationen enthalten und wohldefiniert ist.

Code: Alles auswählen

Parameter: xml=true&channelid=<channel_id>|channelname=<channel name>[&details=true][&max=<max items>][&stoptime=<long:stop time>]
Rückgabe:
Liefert zum angegebenen channel (angegeben durch channel_id oder channel_name) das EPG als XML-Liste zurück.
Wird details=true angegeben, dann werden zusätzlich info1 and info2 mit ausgegeben.
Zur Begrenzung der Menge der Listeneinträge kann max für die Anzahl der Elemente oder
stoptime für die Uhrzeit bis zu der Angaben gemacht werden sollen, begrenzt werden.

Beispiel:
>>>http://192.168.0.15/control/epg?xml=true&channelid=44d00016dca&details=true&max=2
<?xml version="1.0" encoding="iso-8859-1"?>
<epglist>
<channel_id>44d00016dca</channel_id>
<channel_name><![CDATA[Das Erste]]></channel_name>
<prog>
	<eventid>309903955495411052</eventid>
	<eventid_hex>44d00016dcadd6c</eventid_hex>
	<start_sec>1148314800</start_sec>
	<start_t>18:20</start_t>

	<stop_sec>1148316600</stop_sec>
	<stop_t>18:50</stop_t>
	<duration_min>30</duration_min>
	<description><![CDATA[Marienhof]]></description>
	<info1><![CDATA[(Folge 2868)]]></info1>
	<info2><![CDATA[Sülo verachtet Constanze wegen ihrer Intrige. Luigi plündert das Konto und haut ab. Jessy will Carlos über ihre Chats aufklären.]]></info2>
</prog>
<prog>

	<eventid>309903955495411054</eventid>
	<eventid_hex>44d00016dcadd6e</eventid_hex>
	<start_sec>1148316600</start_sec>
	<start_t>18:50</start_t>
	<stop_sec>1148320200</stop_sec>
	<stop_t>19:50</stop_t>

	<duration_min>60</duration_min>
	<description><![CDATA[Großstadtrevier]]></description>
	<info1><![CDATA[239. Fenstergespenster]]></info1>
	<info2><![CDATA[Pech für Dirk Matthies: Da steigt er auf eine Leiter, weil ihn mal der Putzfimmel überkommt, und - knacks! - bricht eine Sprosse. Das Bein ist gebrochen, mehrere Rippen geprellt. Katja Metz versorgt ihn mit dem Nötigsten.]]></info2>
</prog>
</epglist>
und

Code: Alles auswählen

Handler: http://dbox/control/getbouquet

Parameter: bouquet=Bouquet Nr. und mode=TV|RADIO oder actual und und mode=TV|RADIO optional: xml=true
Rueckgabe:

Es werden alle Sender des Bouquets zurueckgeliefert
Wird actual mit angegeben, dann wird das Bouquet genommen, welches den aktuellen Sender als erstes enthält.
Nummer_des_Kanals channel_id Name_des_Senders

Beispiel:
>>>http://dbox/control/getbouquet?bouquet=2&mode=TV
20 12ee3 RTL Television
21 85002e SAT.1
22 850382 ProSieben
23 12ef4 RTL2
24 12f1c VOX

Wird xml=1 angegeben, dann wird die Liste im XML-Format zurückgegeben:
Beispiel:
>>>http://192.168.0.15/control/getbouquet?bouquet=3&xml=true
<?xml version="1.0" encoding="iso-8859-1"?>
<bouquetlist>
<bouquet>
	<bnumber>3</bnumber>
</bouquet>
<channel>
	<number>33</number>
	<id>44d00016dca</id>
	<name><![CDATA[Das Erste]]></name>
</channel>
<channel>
	<number>34</number>
	<id>44d00016dcd</id>
	<name><![CDATA[arte]]></name>
</channel>
</bouquetlist>
Das mit den Unterkanälen schau ich mir an.

Gruß
yjogol
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Beitrag von Houdini »

Houdini hat geschrieben:...die Liste der Optionen ist in dem aktuellen EPG Event mit drin (i.e. der Linkage Descriptor)
yjogol
Developer
Beiträge: 809
Registriert: Montag 4. Juli 2005, 18:45

Beitrag von yjogol »

Houdini hat geschrieben:
Houdini hat geschrieben:...die Liste der Optionen ist in dem aktuellen EPG Event mit drin (i.e. der Linkage Descriptor)
@arno
Ok, hab getallsubchannels eingebaut.
Auch mehrere Sendernamen für zapto,setTimer, EPG (war in einem anderen Thread von dir gewünscht) ist drin. Release ich bald.

@Houdini
Danke für den Tipp.

Gruß
yjogol
arno-neutrinoTV
Einsteiger
Einsteiger
Beiträge: 108
Registriert: Freitag 14. April 2006, 11:21

Beitrag von arno-neutrinoTV »

@yjogol:

Danke sehr. Die Erweiterung auf xml ist absolut sinnvoll! Dadurch wird das wohldefiniert, und es ist sauberer als mein Lösungsvorschlag (welcher ja auch als "einfache" Lösung gedacht war :) )

Hmm .. was ich nicht verstehe ist, wo war die bouquetabfrage nicht wohldefiniert - die war doch zeilenweise, oder? Bzw. andersumgefragt was bringt die xml-darstellung bei den Bouquets?

Wenn du was neues zu den Optionskanälen hast oder noch Fragen diesbezüglich, oder evtl ein besser Idee wie man die zu Verfügung stellen kann, ich bin jederzeit für eine Diskussion zu haben :)

Grüßle
A.
Grüßle
A.
arno-neutrinoTV
Einsteiger
Einsteiger
Beiträge: 108
Registriert: Freitag 14. April 2006, 11:21

Beitrag von arno-neutrinoTV »

yjogol hat geschrieben: @arno
Ok, hab getallsubchannels eingebaut.
Auch mehrere Sendernamen für zapto,setTimer, EPG (war in einem anderen Thread von dir gewünscht) ist drin. Release ich bald.
Danke vielmals :) Sobald du released werd ichs mir ansehen und die entprechende Funktion in neutrinoTV einbauen. Hast du es exakt nach meinem Vorschlag eingebaut oder ist dir noch etwas sinnvolleres eingefallen??

Vielen, vielen Dank!!!

Arno
Grüßle
A.
yjogol
Developer
Beiträge: 809
Registriert: Montag 4. Juli 2005, 18:45

Beitrag von yjogol »

arno-neutrinoTV hat geschrieben:@yjogol:
Hmm .. was ich nicht verstehe ist, wo war die bouquetabfrage nicht wohldefiniert - die war doch zeilenweise, oder? Bzw. andersumgefragt was bringt die xml-darstellung bei den Bouquets?
Das ist richtig, es geht aber um die Zeichendarstellung für UTF-8 versus ISO 8859-1 und um eine Vorbereitung zur Umstellung des yWebs in der Zukunft.
arno-neutrinoTV hat geschrieben:
yjogol hat geschrieben: @arno
Ok, hab getallsubchannels eingebaut.
Auch mehrere Sendernamen für zapto,setTimer, EPG (war in einem anderen Thread von dir gewünscht) ist drin. Release ich bald.
Danke vielmals :) Sobald du released werd ichs mir ansehen und die entprechende Funktion in neutrinoTV einbauen. Hast du es exakt nach meinem Vorschlag eingebaut oder ist dir noch etwas sinnvolleres eingefallen??

Vielen, vielen Dank!!!

Arno
Ich habs erstmal so eingebaut.

Gruß
yjogol