Auswertungen ...

hi,

hier ist es… nur kurz getestet, aber scheint zu laufen.

[code]{-------------------------------------------------------------------------------
LogItemsToFile.mls - Notification Script for mAirList

Writes some information about broadcasted items to a file.

Author: Torben Weibert torben@weibert.de
Date: 2007-01-07

edited by Michael Schäl public@michael-schael.de
Date: 2008-02-04

See http://www.mAirList.com for further information.
-------------------------------------------------------------------------------}

procedure Log(Item: IPlaylistItem; prefix : String);
var
Source : string;
Target : string;
listener : string;
temp: string;
i: integer;
n:integer;
sl: TStringList;
begin
//Listeneranzahl holen
Source := HTTPGet(‘http://stream.irgendwas.de:7000/7.html’);
i:=1;
n:=1;
while(i<Length(Source)) do begin
Target:=Copy(Source, i, 6);
if(Target = ‘’) then begin
Target:=Copy(Source, i+6, 10); //den html-code ausblenden
while (n<Length(Target)) do begin
temp:=Copy(Target,n,1);
if (temp=’,’) then begin //zahl separieren
listener:= Copy(Target,1,2);
n:=Length(Target); //schleife soll aufhören
end;
n:=n+1;
end;
i:=Length(Source); //schleife soll aufhören
end;
i:=i+1;
end;
sl := TStringList.Create;

// wrap loading in a try…except block in case the file does not exist
try
sl.LoadFromFile(‘c:\log.txt’);
except
end;
sl.Append(prefix+FormatDateTime(‘yyyymmdd hh:nn:ss’, now)+’ : ‘+Item.GetTitle+’ - ‘+Item.GetArtist+’ ___ Listener: '+ listener);
sl.SaveToFile(‘c:\log.txt’);
sl.Free;
end;

procedure OnPlayerStart(PlayerControl: IPlayerControl; Item: IPlaylistItem);
begin
Log(Item, ‘[start]’);
end;

procedure OnPlayerStop(PlayerControl: IPlayerControl; Item: IPlaylistItem);
begin
Log(Item, ‘[stop ]’);
end;

begin
end.[/code]

grüße, michi

edit: ach ja, das ganze ist ein notificatin-script… wie du das einbindest, weisst du oder?

So spontan grade nicht, da muß ich mich aber sowiso noch rein lesen, hab den I/ Warrior und die “Ampel” vom HolGer “geerbt”. Um das EOF zu steuern, brauch ich ja auch ein Notification script. Das logging script hab ich die Tage auch grad erst “wieder” gefunden.

  1. Kleinigkeiten hab ich aber doch noch, kann ich die Logdatei (C:\log.txt) nach dem aktuellen Datum und Uhrzeit des ersten Eintrags benennen? Kann man mehr wie nur einen Server einbinden?

Trotzdem erst mal vielen Dank so weit!

So spontan grade nicht, da muß ich mich aber sowiso noch rein lesen, hab den I/ Warrior und die “Ampel” vom HolGer “geerbt”. Um das EOF zu steuern, brauch ich ja auch ein Notification script. Das logging script hab ich die Tage auch grad erst “wieder” gefunden.[/quote]

Also, du packst das Script von mir in eine Textdatei und benennst es irgendwas.mls … dann gehst du ins mAirList-config und trägst das Script unter “Benachrichtigungsscripts” ein.

Uhrzeit des ersten Eintrags geht so weit ich weiss nicht(zumindest nicht ohne rumzutricksen :wink: ), aber Datum ist kein problem:

[code]{-------------------------------------------------------------------------------
LogItemsToFile.mls - Notification Script for mAirList

Writes some information about broadcasted items to a file.

Author: Torben Weibert torben@weibert.de
Date: 2007-01-07

edited by Michael Schäl public@michael-schael.de
Date: 2008-02-04

See http://www.mAirList.com for further information.
-------------------------------------------------------------------------------}

procedure Log(Item: IPlaylistItem; prefix : String);
var
Source : string;
Target : string;
listener : string;
temp: string;
i: integer;
n:integer;
sl: TStringList;
begin
//Listeneranzahl holen
Source := HTTPGet(‘http://stream.irgendwas.de:7000/7.html’);
i:=1;
n:=1;
while(i<Length(Source)) do begin
Target:=Copy(Source, i, 6);
if(Target = ‘’) then begin
Target:=Copy(Source, i+6, 10); //den html-code ausblenden
while (n<Length(Target)) do begin
temp:=Copy(Target,n,1);
if (temp=‘,’) then begin //zahl separieren
listener:= Copy(Target,1,2);
n:=Length(Target); //schleife soll aufhören
end;
n:=n+1;
end;
i:=Length(Source); //schleife soll aufhören
end;
i:=i+1;
end;
sl := TStringList.Create;

// wrap loading in a try…except block in case the file does not exist
try
sl.LoadFromFile(‘c:\log_’+FormatDateTime(‘yyyymmdd’, now)+‘.txt’);
except
end;
sl.Append(prefix+FormatDateTime(‘yyyymmdd hh:nn:ss’, now)+’ : ‘+Item.GetTitle+’ - ‘+Item.GetArtist+’ ___ Listener: ‘+ listener);
sl.SaveToFile(‘c:\log_’+FormatDateTime(‘yyyymmdd’, now)+’.txt’);
sl.Free;
end;

procedure OnPlayerStart(PlayerControl: IPlayerControl; Item: IPlaylistItem);
begin
Log(Item, ‘[start]’);
end;

procedure OnPlayerStop(PlayerControl: IPlayerControl; Item: IPlaylistItem);
begin
Log(Item, ‘[stop ]’);
end;

begin
end.[/code]

Diese Veränderung ist jetzt ungetestet :wink:

Ja sicher geht das. wieviele willst du denn einbinden?

grüße, michi

Hi Michi,
vielen Dank für Deine Arbeit!

Das mit dem Notification script ist wirklich so einfach? Ich dachte man müsste das irgendwie in die Vorlage einbinden, wo Torben schon reichlich mögliche Events eingetragenhat. Da hätte ich ja glatt selber drauf kommen können :wink:

Datum reicht erstmal für die Logdatei, ich hatte mir schon gedacht, dass Du das Datum bei jedem Eintrag abfragst bevor du ihn in die Datei schreibst. Da würde für jeden Logeintrag eine eigene Datei erstellt werden (mit Uhrzeit eben), hab ich das richtig verstanden? Irgendwie muß ich das ja auch mal in meinen Kopf bekommen.

Im Moment müssten es 4 Server sein, deren Userzahl zusammen gerechnet werden muß.
Greetz
Malte

[quote=“shorty.xs, post:24, topic:4484”]Hi Michi,
vielen Dank für Deine Arbeit![/quote]
Kein Problem.

Jo, ich hab mir halt die 2 rausgepickt, die du dafür brauchst: ( OnPlayerStart, OnPlayerStop ).

Richtig, es wird erst geschaut, ob der Pfad, der im Script angegeben ist, vorhanden ist, wenn nicht, wird eine neue Datei erzeugt.
Das Problem ist, dass ich im Script nicht ohne weiteres die Uhrzeit des ersten Liedes an diesem Tag rausbekommen kann…Ich kann aber auch keinen sinn dahinter entdecken, in den Dateiname die Uhrzeit des ersten Liedes zu schreiben :wink:

Ich lass mir mal was einfallen…

grüße, michi

so, dort, wo es in den kommentaren steht, musst du eventuell ein paar Werte ändern. Das Script ist, so wie es da steht, auf 4 server eingestellt, du musst also nur die adressen ändern.

[code]{-------------------------------------------------------------------------------
LogItemsToFile.mls - Notification Script for mAirList

Writes some information about broadcasted items to a file.

Author: Torben Weibert torben@weibert.de
Date: 2007-01-07

edited by Michael Schäl public@michael-schael.de
Date: 2008-02-04

See http://www.mAirList.com for further information.
-------------------------------------------------------------------------------}

procedure Log(Item: IPlaylistItem; prefix : String);
var
Source : string;
Target : string;
listener : string;
temp: string;
i: integer;
n:integer;
sl: TStringList;
url : array[0…3] of string; // hier [0…<anzahl der server -1>] einfügen
summe: integer;
url_laenge: integer;
z:integer;
begin
summe:=0;
url_laenge:=4; // Hier die Anzahl der Server angeben
//---->hier die serveradressen angeben.
url[0] :=‘http://adresse1:port/7.html’ ;
url[1] :=‘http://adresse2:port/7.html’ ;
url[2] :=‘http://8adresse3:port/7.html’ ;
url[3] :=‘http://adresse4:port/7.html’ ;
//Listeneranzahl holen
for z:=0 to url_laenge -1 do begin
Source := HTTPGet(url[z]);
i:=1;
n:=1;
while(i<Length(Source)) do begin
Target:=Copy(Source, i, 6);
if(Target = ‘’) then begin
Target:=Copy(Source, i+6, 10); //den html-code ausblenden
while (n<Length(Target)) do begin
temp:=Copy(Target,n,1);
if (temp=’,’) then begin //zahl separieren
listener:= Copy(Target,1,2);
n:=Length(Target); //schleife soll aufhören
end;
n:=n+1;
end;
i:=Length(Source); //schleife soll aufhören
end;
i:=i+1;
end;
summe:=summe+StrToInt(listener);
end;
sl := TStringList.Create;

// wrap loading in a try…except block in case the file does not exist
try
sl.LoadFromFile(‘c:\log_’+FormatDateTime(‘yyyymmdd’, now)+’.txt’);
except
end;
sl.Append(prefix+FormatDateTime(‘yyyymmdd hh:nn:ss’, now)+’ : ‘+Item.GetTitle+’ - ‘+Item.GetArtist+’ ___ Listener: ‘+ intToStr(summe));
sl.SaveToFile(‘c:\log_’+FormatDateTime(‘yyyymmdd’, now)+’.txt’);
sl.Free;
end;

procedure OnPlayerStart(PlayerControl: IPlayerControl; Item: IPlaylistItem);
begin
Log(Item, ‘[start]’);
end;

procedure OnPlayerStop(PlayerControl: IPlayerControl; Item: IPlaylistItem);
begin
Log(Item, ‘[stop ]’);
end;

begin
end.[/code]

michi

Ich bekomme eine Socket error “acces denied”.
Brauche ich Admin Rechte, hab’s jetzt nur mit einem “normalen” User probiert.

Keine ahnung, kann schon sein…

Welchen Pfad hast du denn genommen?

Poste doch mal das script mit den server-adressen , also genau das, was im moment nicht funktioniert, dann probier ichs mal…

(wenn du es nicht posten willst wegen den adressen, kannst du es mir auch mailen: public@michael-schael.de )

michi