HTTPGet

hi torben,

ich habe ein Problem mit dem HTTPGet - Befehl:

Ziel: aktuellen Track auf der Website anzeigen, ohne Port 80 zum server durchzurouten…
umsetzung:
ein Notificationsscript schickt den aktuellen Track an ein php-script auf der website:

[code]var n: INotification;
pi: IPlaylistItem;

begin
n := GetNotification;

if (n.GetNotificationType = ntMask) then
SetNotificationTypes([ntPlayerStart])
else
if (n.GetNotificationType = ntPlayerStart) then begin
pi := IPlaylistItem(n.GetInterface(1));
SystemLog(HTTPGet(‘http://src.sthoerfunk.de/now/michi.php?artist=’ + pi.GetArtist + ‘&title=’ + pi.GetTitle));
SystemLog(‘artist=’ + pi.GetArtist + ‘&title=’ + pi.GetTitle);
end;
end.
[/code] (originalscript von radio80FM)
dort werden die Tracks dann in ein javascript integriert, und dann in die webseite integriert.

Jetzt habe Ich 2 Probleme:

  1. im LAN funktioniert’s wunderbar, doch wenn die adresse ins internet rausgeht, passiert folgendes: das erste mal (also beim ersten playerstart) wird das Script manchmal ausgeführt, dann aber komischerweise nichtmehr.
    woran könnte es liegen?
    wenn du es ausprobieren willst, angezeigt al html wird das ganze unter:
    http://src.sthoerfunk.de/now/index.html
    oder hab ich gar einen fehler im mls???

  2. Im LAN funktionierts ja wunderbar, nur wenn leerzeichen drin sind, wird der “get-befehl”(nenn ihn jetzt einfach mal so) nach diesem leerzeichen agebroichen… bsp:
    artist: Basement Jaxx title: Plug It In
    der “get befehl” sieht folgendermaßen aus: ?artist=Basement Jaxx&title=Plug It In
    im endeffekt steht dann auf der website: “Basement”
    wenn dich die get zeile im browser eingebe, funktionierts

während dem schreiben ist mir aufgefallen: der browser is so schlau, und macht aus leerzeichen “%20”, und mairlist nicht…

kannst du evtl mairlist auch so “schlau” machen?
habe mir überlegt, man könnte das auch mit mls machen…
gbts in “mls-sisch” so etwas ähnliches wie variable.charAt(stelle) und variable.length in java/javascript??

danke schonmal und grüße, michi

zu 1) Wird überprüft.

zu 2) Ich war davon ausgegangen, dass die HTTP-Komponente das von alleine macht. Ist aber offenbar nicht der Fall. Wird korrigiert.

Torben

hi, danke.

habe es nochmal getestet…

zu 1.
scheint so, als würde alles gut funktionieren, solange kein leerzeichen irgendwo ist. sobald ein leerzeichen auftaucht, bleibt das script hängen, und lässt sich danach auch nichtmehr starten…

vllt hilft das ja weiter…

wenn du wegen den tests noch die php und js datei haben willst, meldest dich einfach;-)

grüße, michi

Das mit den Leerzeichen hab ich jetzt korrigiert, wird in 1.5.49 drin sein.

Dass teilweise Anfragen “verschluckt” werden ist mir auch schonmal aufgefallen, ich konnte aber zunächst den Grund nicht ermitteln. Ich forsche mal weiter nach.

Torben

hi torben,

danke schön

grüße, michi

hi torben,

wie immer in rekordzeit…:slight_smile:

das script bleibt gerade auch nichtmehr hängen…:slight_smile:

sehr_freu
danke + grüße, michi

hi torben,

ich habe bezüglich punkt 1 etwas entdeckt/rausgefunden:

wenn keine Internetverbindung da ist, treten die selben symptome auf, d.h das script bleibt “hängen” und wird von da an nicht mehr ausgeführt…

habe mir gedacht, könnte ja sein, dass ich da mit try/except arbeiten muss…

[code]var n: INotification;
pi: IPlaylistItem;
begin
n := GetNotification;

if (n.GetNotificationType = ntMask) then
SetNotificationTypes([ntPlayerStart])
else
if (n.GetNotificationType = ntPlayerStart) then begin
pi := IPlaylistItem(n.GetInterface(1)); //http://localhost/now_playing
try
SystemLog(HTTPGet(‘server/update.php?artist=’ + pi.GetArtist + ‘&title=’ + pi.GetTitle));
except
SystemLog(‘keine Internetverbindung’);
end;
//SystemLog(‘artist=’ + pi.GetArtist + ‘&title=’ + pi.GetTitle);
end;
end.[/code]

seit dem bleibt das script nichtmehr hängen…und die geschichte mit den sonderzeichen hat sich ja eh geklärt seit der 49er…

liege ich mit der vermutung richtig?

grüße, michi

HTTPGet schmeißt tatsächlich eine Exception, wenn keine Verbindung hergestellt werden konnte. Je nach Grund (keine Verbindung, unbekannter Host, Rechner antwortet nicht, …) dauert das einige Sekunden. Wenn du die Exception nicht innerhalb des Scripts abfängst, bricht das Script ab, allerdings sollte mAirList die Exception dann abfangen und die Situation bereinigen. Evtl. ist da was kaputt. Ich forsche mal nach.

Torben