Ankündigung

Einklappen
Keine Ankündigung bisher.

[mmh] Mappingbeispiel Commandserver XBMC

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [mmh] Mappingbeispiel Commandserver XBMC

    Hallo,

    kann mir jemand helfen wie ich die Daten der folgenden Abfrage in mmh als Liste darstellen kann.
    Komme mit den Mapping und Parser Optionen nicht klar.

    20:38:06.211 - network: udp message from xxx.xxx.xxx.xxx, size 79 bytes
    20:38:06.211 - parser: parsing sequence: <XBMC><VIDEODATENBANK=select%20c00%20from%20movie% 20where%20c07%20=1998></XBMC>
    20:38:06.212 - parser: command: XBMC - VIDEODATENBANK=select%20c00%20from%20movie%20where %20c07%20=1998
    20:38:06.212 - parser: reply sequence: <XBMC>VIDEODATENBANK=|OK</XBMC>
    20:38:06.217 - commandserver: http send: GET /xbmcCmds/xbmcHttp?command=queryvideodatabase(select%20c00%2 0from%20movie%20where%20c07%20=1998) HTTP/1.1
    20:38:06.223 - network: message parsed
    20:38:06.229 - commandserver: translated reply sequence: <XBMC><html>\0x0A<record><field>What Dreams May Come</field></record><record><field>Lock, Stock and Two Smoking Barrels</field></record></html>\0x0A|OK</XBMC>

    Es soll folgende Rückmeldung ausgegeben werden:

    <XBMC><VIDEODATENBANK=What Dreams May Come|Lock, Stock and Two Smoking Barrels|OK</XBMC>

    Klaus

    #2
    Ne echte Kniffel Aufgabe, wer die löst kriegt einen ausgegeben

    sollte aber machbar sein nur mußt Du Dich einen Moment gedulden, da recht busy und unsere ATV Schnittstelle fertig ist und ich mit meinem Editor durch bin.

    Generell ist unsere Anbindung für XBMC nur ein Schnellschuss aus einem Kundenprojekt. Die Anbindung dient eigentlich nur zur Steuerung eines XBMC Clients.

    Für die direkte Steuerung der Inhalte, wie Du es ja möchtest, werden wir ein AddOn bauen müssen um die XBMC request's korrekt in unserem Statusport zu posten...

    LG

    Kommentar


      #3
      Ok hartnäckig bleiben

      Im xbmc commandserver habe ich unter Mappings folgendes definiert:

      [MAPPINGS]
      <html>\0x0A<record><field>\*</field></record></html>\0x0A;VIDEODATENBANK

      Damit erhalte ich die gewünschte Rückmeldung sofern es sich um einen Datensatz handelt.
      Abfrage Filme von James Cameron in der Datenbank
      <XBMC>VIDEODATENBANK=Titanic|OK</XBMC>

      Abfrage Filme von Guy Ritchie in der Datenbank
      <XBMC>VIDEODATENBANK=Lock, Stock and Two Smoking Barrels</field></record><record><field>Snatch.</field></record><record><field>RocknRolla|OK</XBMC>

      Wie kann man die tags von der Rückmeldung ausschließen und alle Datensätze zwischen den beiden </record><record als Liste an mmh übergeben.

      Gewünschtes Ergebnis
      <XBMC>VIDEODATENBANK=Lock, Stock and Two Smoking Barrels|Snatch.|RocknRolla|OK</XBMC>

      Konnte in der Doku kein Beispiel zu Listen finden außer iTunes Listen und Folder Listen bei denen man nicht sieht wie es funktioniert.

      Klaus

      Kommentar


        #4
        versuche mal so:

        [MAPPINGS]
        <record><field>\*</field></record></html>;VIDEODATENBANK

        LG

        Kommentar


          #5
          Nach 30 Minuten Brainstorming mit Sascha kommen wir auf folgende Lösung:

          <record><field>\*</field></record></html>;VIDEODATENBANK;;;{%r</field></record><record><field>,|}

          Wie heißt es doch so schön, entdecke die Möglichkeiten....

          Sascha hat es ausprobiert, Ergebnis:

          <TEST>VIDEODATENBANK=What Dreams May Come|Lock, Stock and Two Smoking Barrels|OK</TEST>



          <TEST>, weil Sascha's CServer so benannt

          Fragen ?

          LG

          Kommentar


            #6
            Super Support! Funktioniert.

            Beim Verstehen hapert es noch...

            {Map String};{mmh-Bezeichnung};{Action};ONCHANGE;{Bedingung}


            <record><field>\*</field></record></html>;VIDEODATENBANK;;;{%r</field></record><record><field>,|}

            Map String=OK
            mmh-Bezeichnung=OK
            Action=keine
            ONCHANGE=keine
            Bedingung=?

            </field></record><record><field> wird durch | ersetzt

            Das funktioniert nur mit %r

            In der Doku steht was mit \% ignoriert beliebig viele Zeichen...

            Was macht %r

            Würdet ihr mir das erklären?

            Klaus

            Kommentar


              #7
              Map String=OK
              mmh-Bezeichnung=OK
              Action=keine
              ONCHANGE=keine
              Bedingung=?
              Ich bin stolz auf Dich... wenigstens mal jemand der das Handbuch liest

              "Bedingung=" ist korrekterweise eine Formatoption ähnlich Regex...

              Handbuch Kapitel 4.4.1 Seite (33) ...

              %r steht für "replace" und ersetzt entsprechend Zeichenketten... in Deinem Fall hast das ja richtig erkannt.

              Wird auch gern genommen um Werte zu berechnen wenn zB bei komischen Protokollen wie dem Russound die Lautstärke in HEX und dann noch in einem Bereich von 00h - 32h kommt und Du das in 0-100% wandeln möchtest... oder eben die ekligen %20 bei Webabfragen durch Leerzeichen ersetzen möchtest... oder, oder, oder....

              LG

              Kommentar


                #8
                Hallo,

                die HTTP API von XBMC soll von JSON-RPC abgelöst werden. Ist es möglich in der aktuellen Version einen Commandserver für die neue Schnittstelle zu XBMC zu erstellen?

                Im Terminal kann man die Daten per Skript abfragen.

                Python Skript zur Abfrage der Daten:

                import json
                import httplib, urllib
                import sys

                for arg in sys.argv:
                print arg

                url = 'http://localhost:8080'
                jsonrpcurl = url + '/jsonrpc'

                if len(sys.argv) > 2:
                postdata = '{"jsonrpc": "2.0", "method": "' + sys.argv[1] + '", "params": ' + sys.argv[2] + ', "id": "1"}'
                else:
                postdata = json.dumps({'jsonrpc': "2.0", 'method': sys.argv[1], 'id': "1"})

                print postdata

                respdata = urllib.urlopen(jsonrpcurl, postdata).read()
                print respdata

                Im Terminal kann man dann mit:

                python /Pfad zum Skript/xbmc.py VideoLibrary.GetMovies

                zum Beispiel alle Filme der Videodatenbank abfragen oder die 10 zuletzt hinzugefügten Filme etc.

                python /Pfad zum Skript/xbmc.py VideoLibrary.GetRecentlyAddedMovies '{ "start": 0, "end": 10 }'

                Die Ausgabe sieht dann so aus:

                { "start": 0, "end": 10 }
                {"jsonrpc": "2.0", "method": "VideoLibrary.GetRecentlyAddedMovies", "params": { "start": 0, "end": 10 }, "id": "1"}
                {
                "id" : "1",
                "jsonrpc" : "2.0",
                "result" : {
                "end" : 10,
                "movies" : [
                {
                "file" : "/Volumes/Videos/ZUSAMMEN IST MAN WENIGER ALLEIN (2007)/TITLE01-ANGLE1.VOB",
                "label" : "Ensemble, c'est tout",
                "movieid" : 227,
                "thumbnail" : "special://masterprofile/Thumbnails/Video/f/f8f60d30.tbn"
                ...

                Eine Liste aller commands erhält man durch JSONRPC.Introspect

                Es ist ein POST HTTP REQUEST...

                Wie kriegt man die Daten nach mmh?

                Klaus

                Kommentar


                  #9
                  Habe versucht mit einem Commandserver auf ein Socket (Perl Script) zu verbinden und kann dort auch die Befehle absetzen. Erhalte aber kein Feedback. Kriegt der Commandserver überhaupt irgendwas mit oder muss man im Perl Script die Ausgabe wieder an den Commandserver schicken? Wenn ja wie?

                  Commandserver:

                  [CONFIG];
                  ACTIVE;YES
                  SERVERIP;xxx.xxx.xxx.xxx
                  SERVERPORT;8222
                  SERVERMODE;ASCII
                  SERVERTIMEOUT;NONE
                  SERVERPROTOCOL;UDP
                  MATCHING=FULL


                  [COMMANDS];
                  SEND;\#;
                  Filme;Filme
                  25;25
                  TV;TV
                  ALBEN;Alben
                  INTERPRET;Interpret
                  SONGS;Songs

                  [MAPPINGS]

                  --------------------------------------------------------------------------------------

                  Perl Script:

                  # Server Program
                  use IO::Socket::INET;
                  print ">> XBMC JSON <<\n";


                  # Create a new socket
                  $MySocket=new IO::Socket::INET->new(LocalPort=>8222,Proto=>'udp');

                  # Keep receiving messages from client
                  $def_msg="\nReceiving message from client.....\n";
                  while(1)
                  {
                  $MySocket->recv($text,128);
                  if($text ne '')
                  {
                  if ($text=~/Filme/) {
                  system('python /Users/kb/Desktop/xbmc.py VideoLibrary.GetMovies');

                  }

                  {
                  if ($text=~/25/) {
                  system('python /Users/kb/Desktop/xbmc.py VideoLibrary.GetRecentlyAddedMovies');

                  }

                  {
                  if ($text=~/TV/) {
                  system('python /Users/kb/Desktop/xbmc.py VideoLibrary.GetTVShows');

                  }
                  {
                  if ($text=~/Alben/) {
                  system('python /Users/kb/Desktop/xbmc.py AudioLibrary.GetAlbums');

                  }
                  {
                  if ($text=~/Interpret/) {
                  system('python /Users/kb/Desktop/xbmc.py AudioLibrary.GetArtists');

                  }
                  {
                  if ($text=~/Songs/) {
                  system('python /Users/kb/Desktop/xbmc.py AudioLibrary.GetSongs');

                  }

                  print "\nReceived message '", $text,"'\n";
                  }
                  }
                  }
                  }
                  }
                  }
                  }

                  Klaus

                  Kommentar

                  Lädt...
                  X