Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Shoutcast Radio mit Suchfunktion [Update 29.07.2015]
#1
Hallöchen

Ich möchte hier jetzt einmal das erste von vielen Scripten veröffentlichen.
Ich habe es gestern Abend noch fertig gemacht und hoffe es funktioniert auch dauerhaft problemlos...

Es ist ein Script für ein Radio welches den Landstream ändern kann.
Nutzbar für normale Besitzer und auch für Gruppenland zum deeden.

Das Radio nutzt die Shoutcast Website um nach den Streams zu suchen.
Verbesserungsvorschläge und so sind gern gesehen Smile

Ps: Das Radio speichert die Einstellungen, die man in ihm macht, in der Datenbank meines Servers. Das mache ich darum, weil Opensim auch mal den Scriptspeicherinhalt verlieren kann (selbst erlebt).
Wer das also nicht möchte möge das Script bitte nicht nutzen.

PHP-Code:
integer Channel;
integer Offset 0;
integer AccessRole 0;
key LastUser;
key SearchRequest;
key URLRequest;

list 
LastPlayed = [""""];

list 
Stations;
list 
Buttons;
list 
URLs;


string StorageID "RADIO";
string StorageURL "https://kubwa.de/_opensim/storage.php";

list 
Settings = [];
key SettingsRequestID NULL_KEY;


string getSetting(string Name)
{
    
integer i;
    for (
0llGetListLength(Settings); ++i)
    {
        list 
Temp llParseString2List(llList2String(Settingsi), ["="], []);
        if (
llToLower(llList2String(Temp0)) == llToLower(Name))
         {return 
llList2String(Temp1);}
    }
    return 
"";
}

setSetting(string Namestring Data)
{
    
integer i;
    for (
0llGetListLength(Settings); ++i)
    {
        list 
Temp llParseString2List(llList2String(Settingsi), ["="], []);
        if (
llToLower(llList2String(Temp0)) == llToLower(Name))
        {
            
Settings llListReplaceList(Settings, [llToLower(Name) + "=" Data], ii);
            
saveSettings();
            return;
        }
    }
    
Settings Settings + [llToLower(Name) + "=" Data];
    
saveSettings();
}

saveSettings()
{
    
doStorageRequest("settings"llDumpList2String(Settings"\n"));
}

key doStorageRequest(string Namestring Data)
{
    
string Method "get";
    if (
Data != "")
     {
Method "set";}
    return 
llHTTPRequest(StorageURL "?cmd=" Method "&id=" StorageID + (string)llGetKey() + "&name=" Name,
                         [
HTTP_METHOD"POST",
                          
HTTP_VERIFY_CERTFALSE,
                          
HTTP_MIMETYPE"application/x-www-form-urlencoded"],
                          
"data=" llEscapeURL(Data));
}


SetText(string Text)
{
    
llSetText(Text, <111>, 1);
}


string GetAccessText()
{
    
string Name "Besitzer";
    if (
AccessRole == 1)
     {
Name "Gruppe";}
    if (
AccessRole == 2)
     {
Name "Jeder";}
    return 
"Zugriff auf Menü hat " Name;
}


default
{
    
state_entry()
    {
        
SetText("Laden...");
        
Channel = -llRound(llFrand(500000) + 5000);
        list 
ObjDetails llGetObjectDetails(llGetKey(), [OBJECT_OWNER]);
        if (
llList2Key(ObjDetails0) != NULL_KEY)
         {
llSetObjectDesc((string)llGetOwner());}
        
llWhisper(0"Willkommen. Bitte klicke das Radio an um ein Menü zu erhalten");
        if (
llGetLandOwnerAt(llGetPos()) != llGetOwner())
         {
llWhisper(0"ACHTUNG: Das Land, auf dem ich stehe, gehört jemand anderem oder einer Gruppe. " +
                       
"Gehört das Land einer Gruppe dann deede das Radio bitte dieser gruppe.");}
        
SettingsRequestID doStorageRequest("settings""");
    }
    
http_response(key IDinteger Status, list Metastring Data)
    {
        if (
ID != SettingsRequestID)
         {return;}
        
Settings llParseString2List(Data, ["\n"], []);
        
AccessRole = (integer)getSetting("access");
        
LastPlayed llParseString2List(getSetting("last"), ["|"], []);
        
Stations llParseString2List(getSetting("stations"), ["|"], []);
        
Buttons llParseString2List(getSetting("buttons"), ["|"], []);
        
URLs llParseString2List(getSetting("urls"), ["|"], []);
        if (
llGetListLength(LastPlayed) < 2)
         {
LastPlayed = [""""];}
        
state Off;
    }
}


state Off
{
    
on_rez(integer Dummy)
     {
llResetScript();}
    
state_entry()
    {
        
SetText("Aus");
        
llSetParcelMusicURL("");
        
llListen(Channel""NULL_KEY"");
    }
    
touch_start(integer total_number
    {
        if ((
AccessRole == && (string)llDetectedKey(0) == llGetObjectDesc()) ||
            (
AccessRole == && (llSameGroup(llDetectedKey(0)) || (string)llDetectedKey(0) == llGetObjectDesc())) ||
            
AccessRole == 2)
         {
llDialog(llDetectedKey(0), "Radio offline\n \n" GetAccessText(), ["-Reset-""-An-""Zugriff"], Channel);}
    }
    
listen(integer channelstring namekey idstring choice)
    {
        if (
choice == "-Reset-")
         {
llResetScript();}
        if (
choice == "-An-")
         {
state On;}
        if (
choice == "Zugriff")
         {
llDialog(id"Zugriff setup\n\nWer darf auf das Radio Menü zugreifen?", ["Besitzer""Gruppe""Jeder"], Channel);}
        if (
choice == "Besitzer")
        {
            
AccessRole 0;
            
setSetting("access", (string)AccessRole);
            
llWhisper(0"Zugriff nur für Besitzer");
        }
        if (
choice == "Gruppe")
        {
            
AccessRole 1;
            
setSetting("access", (string)AccessRole);
            
llWhisper(0"Zugriff für Gruppe");
        }
        if (
choice == "Jeder")
        {
            
AccessRole 2;
            
setSetting("access", (string)AccessRole);
            
llWhisper(0"Zugriff für jeden");
        }
    }
}


state On
{
    
on_rez(integer Dummy)
     {
llResetScript();}
    
state_entry() 
    {
        
SetText("On");
        
llListen(Channel""NULL_KEY"");
        
        if (
llList2String(LastPlayed1) != "")
        {
            
llSetParcelMusicURL(llList2String(LastPlayed1));
            
SetText(llList2String(LastPlayed0));
        }
    }
    
touch_start(integer total_number
    {
        if ((
AccessRole == && (string)llDetectedKey(0) == llGetObjectDesc()) ||
            (
AccessRole == && (llSameGroup(llDetectedKey(0)) || (string)llDetectedKey(0) == llGetObjectDesc())) ||
            
AccessRole == 2)
        {
            
Offset 0;
            if (
llGetListLength(Buttons) > 5)
            {
                list 
Btns = ["<< Zurück""-Aus-""Weiter >>""-Suchen-"" "" "] + llList2List(ButtonsOffsetOffset 5);
                
llDialog(llDetectedKey(0), "Wähle einen Sender oder suche\n \n" GetAccessText(), BtnsChannel);
            }
            else
            {
                list 
Btns = [" ""-Aus-"" ""-Suchen-"" "" "] + Buttons;
                
llDialog(llDetectedKey(0), "Wähle einen Sender oder suche\n \n" GetAccessText(), BtnsChannel);
            }
        }
    }
    
http_response(key IDinteger Status, list Metastring Data)
    {
        if (
SearchRequest == ID)
        {
            
SetText(llList2String(LastPlayed0));
            
Stations = [];
            
Buttons = [];
            
URLs = [];
            
integer i;
            list 
Temp llParseString2List(Data, ["\n"], []);
            if (
llList2String(Temp0) == "STATIONS")
            {
                for (
1llGetListLength(Temp); ++i)
                {
                    list 
Tmp llParseString2List(llList2String(Tempi), ["|"], []);
                    
Stations Stations + [llList2String(Tmp0)];
                    
Buttons Buttons + [llGetSubString(llList2String(Tmp0), 012)];
                    
URLs URLs + [llList2String(Tmp1)];
                }
            }
            
setSetting("stations"llDumpList2String(Stations"|"));
            
setSetting("buttons"llDumpList2String(Buttons"|"));
            
setSetting("urls"llDumpList2String(URLs"|"));
            
Offset 0;
            if (
llGetListLength(Buttons) > 5)
            {
                list 
Btns = ["<< Zurück""-Aus-""Weiter >>""-Suchen-"" "" "] + llList2List(ButtonsOffsetOffset 5);
                
llDialog(LastUser"Wähle einen Sender oder suche\n \n" GetAccessText(), BtnsChannel);
            }
            else
            {
                list 
Btns = [" ""-Aus-"" ""-Suchen-"" "" "] + Buttons;
                
llDialog(LastUser"Wähle einen Sender oder suche\n \n" GetAccessText(), BtnsChannel);
            }
        }
        
        if (
URLRequest == ID)
        {
            list 
Temp llParseString2List(Data, ["\n"], []);
            if (
llList2String(Temp0) == "URL")
            {
                
LastPlayed = [llList2String(LastPlayed0), llList2String(Temp1)];
                
llSetParcelMusicURL(llList2String(Temp1));
                
setSetting("last"llDumpList2String(LastPlayed"|"));
                
SetText(llList2String(LastPlayed0));
            }
            else
            {
                
SetText("Fehler");
                
llWhisper(0"Beim Abrufen der Streamadresse ist ein Fehler aufgetreten.");
            }
        }
    }
    
listen(integer Chanstring Namekey IDstring Choice)
    {
        
integer u llListFindList(Buttons, [Choice]);
        
        if (
Choice == "-Aus-")
         {
state Off;}
        else if (
Choice == "<< Zurück")
        {
            
Offset Offset 5;
            if (
Offset 0)
            {
                
Offset llFloor(llGetListLength(Buttons) / 5) * 5;
                if (
Offset >= llGetListLength(Buttons) - 1)
                 {
Offset Offset 5;}
            }
            list 
Btns = ["<< Zurück""-Aus-""Weiter >>""-Suchen-"" "" "] + llList2List(ButtonsOffsetOffset 5);
            
llDialog(ID"Wähle einen Sender oder suche\n \n" GetAccessText(), BtnsChannel);
        }
        else if (
Choice == "Weiter >>")
        {
            
Offset Offset 5;
            if (
Offset >= llGetListLength(Buttons))
             {
Offset 0;}
            list 
Btns = ["<< Zurück""-Aus-""Weiter >>""-Suchen-"" "" "] + llList2List(ButtonsOffsetOffset 5);
            
llDialog(ID"Wähle einen Sender oder suche\n \n" GetAccessText(), BtnsChannel);
        }
        else if (
Choice == "-Suchen-")
         {
llTextBox(ID"Bitte gib deinen Suchbegriff ein:"Chan);}
        else if (
> -1)
        {
            
SetText("Vorbereiten...");
            
llWhisper(0"Ändere Sender zu " llList2String(Stationsu) + "...");
            
LastPlayed = [llList2String(Stationsu), llList2String(URLsu)];
            
URLRequest llHTTPRequest("http://os.kubwa.de/shoutcast.php?v=2&cmd=url&s=" llEscapeURL(llList2String(URLsu)), [HTTP_METHOD"GET"], "");
        }
        else
        {
            if (
Choice != " ")
            {
                
LastUser ID;
                
llWhisper(0"Suche...");
                
SetText("Suche...");
                
SearchRequest llHTTPRequest("http://os.kubwa.de/shoutcast.php?v=2&cmd=search&s=" llEscapeURL(Choice), [HTTP_METHOD"GET"], "");
            }
        }
    }

Zitieren
#2
boah, ich denke, das is was, was ich suche.... Mist, dass ich das heut abend net gleich ausprobieren kann.

Ähm, kannst mir auch ein Backgammon-Board scripten? Die Regeln musses net kennen, Hauptsache, ziehen und rauswerfen geht :-D
Pubertät is nix gegen das, was einem im Alter widerfährt!


dorenas-world.de:8002:bella klara
Zitieren
#3
Muss ich mal schauen.
Ich weis nichtmal was Backgammon ist XD

Werde mich da mal reinlesen... Mein Mensch Ärgere dich nicht ist auch fast fertig Tongue
Zitieren
#4
Kartenspiel wäre auch super *gg
Tschöö

Bogus | PinguinsReisen.de
Zitieren
#5
(23.06.2014, 18:32)Kubwa schrieb: Muss ich mal schauen.
Ich weis nichtmal was Backgammon ist XD

Werde mich da mal reinlesen... Mein Mensch Ärgere dich nicht ist auch fast fertig Tongue

Wennze das kannst, kannst auch Backgammon, lach
Is nicht so, das wir keine Wünsche haben können Big Grin
Mensch-Ärger-Dich hab ich auch scho mal probiert. Aber ich bin ja höchstens Unerhilfsscriptrina...
Pubertät is nix gegen das, was einem im Alter widerfährt!


dorenas-world.de:8002:bella klara
Zitieren
#6
So, hier nochmal eine akute Begründung wieso das Radio über meinen Webserver läuft:
Shoutcast hat Gestern Nacht anscheinend wieder einmal die Website umgebaut. Daher musste ich eben das Parsing der Suchergebnisse komplett neu schreiben.

Das werde ich auch in Zukunft machen damit das Radio funktioniert.
Allerdings zeigt das, das diese Schnittstelle zentralisiert werden muss damit nicht plötzlich alle Radios funktionsuntüchtig sind.
Zitieren
#7
dem Radio findet nix....
Pubertät is nix gegen das, was einem im Alter widerfährt!


dorenas-world.de:8002:bella klara
Zitieren
#8
Radio mit Suchfunktion ist ne klasse Sache... Muss ich auch mal testen.
DeReOS Grid - http://dereos.org
Zitieren
#9
(26.06.2014, 10:28)Klarabella Karamell schrieb: dem Radio findet nix....

Was gibst du denn in die Suchmaske ein?
Wenn er zu viele Ergebnisse findet nibbelt er ab, dann bekomme ich keine Daten von Shoutcast. Ich bin da dran und schaue woran es liegt.
Suche icg z.b. nach pop dann bekomme ich nix, weil >5000 ergebnisse.
Suche ich nach top40 bekomme ich was.
Zitieren
#10
ich hab gesucht unter anderen: coltrane, hr3, pink, so genau weiss ich das nicht mehr
Pubertät is nix gegen das, was einem im Alter widerfährt!


dorenas-world.de:8002:bella klara
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste