Seite 1 von 1

jsonrps Abfrage Kodi Datenbank

Verfasst: Donnerstag 17. März 2016, 08:27
von sveni_lee
da mich miracle173 freundlich darauf hingewiesen hat, das die Frage nichts mehr mit meinen
ersten Tread zu haz ( was völlig kerrekt ist), mache ich hier einen neuen Tread auf.

Ich möchte gern die 'imdbnumber' einer TVShow in Kodi einem TVShow-Namen('tvshowname' zuordner.
Also ich habe den Namen der TVShow ('sorttitle' in der Kodi-DB) und möchte die dazugehörige
imdb-ID ('imdbnumber' in der Kodi-DB) auslesen...

beides befindet sich in der Tabelle TVShow in der Video99.db...

lt. der Kodi.wiki

Code: Alles auswählen

JSON Schema Description
{
  "params": [
    {
      "$ref": "Library.Id",
      "name": "tvshowid",
      "required": true
    },
    {
      "$ref": "Video.Fields.TVShow",
      "name": "properties"
    }
  ],
  "description": "Retrieve details about a specific tv show",
  "returns": {
    "properties": {
      "tvshowdetails": {
        "$ref": "Video.Details.TVShow"
      }
    },
    "type": "object"
  }
}

Code: Alles auswählen

{
  "id": "Video.Details.TVShow",
  "properties": {
    "sorttitle": {
      "type": "string",
      "default": ""
      
},
    "imdbnumber": {
      "type": "string",
      "default": ""
    }
  },
  "extends": "Video.Details.Item"
}      
also habe ich meine Abfrage wie folgt aufgebaut:

Code: Alles auswählen

def TVShowName2TVShowID(tvshowname):
    query = {
           "jsonrpc": "2.0",
           "method": "VideoLibrary.GetTVShowDetails",
            "params": {"limits": {"start": 0, "end": 200}},
            "id": "Video.Details.TVShow"
            }
    res = json.loads(xbmc.executeJSONRPC(json.dumps(query, encoding='utf-8')))
  
    if 'result' in res and 'tvshow' in res['result']:
        res = res['result'].get('tvshow')
        for tvshow in res:
            if tvshowname.lower () in tvshow['sorttitle'].lower():
                debug("SerienPlaner found  imdb-ID %s" % (tvshow['sorttitle']))
                return tvshow['imdbnumber']
    return 0
ich bekomme als result aber immer nur 0

Re: jsonrps Abfrage Kodi Datenbank

Verfasst: Donnerstag 17. März 2016, 09:57
von BlackJack
@sveni_lee: Dann solltest Du herausfinden warum das so ist. :-) Zum Beispiel könntest Du Dir das erste `res` (ist übrigens ungünstig Namen so kryptisch abzukürzen und dann auch noch in der gleichen Funktion Werte mit unterschiedlicher Bedeutung zu binden) mal ausgeben lassen und schauen ob das der Struktur entspricht die Du erwartest und ob die Daten die Du suchst vielleicht tatsächlich nicht enthalten sind.

Re: jsonrps Abfrage Kodi Datenbank

Verfasst: Donnerstag 17. März 2016, 10:32
von sveni_lee
also müsste ich mir das komplette resutat ausgeben lassen..

Code: Alles auswählen

def TVShowName2TVShowID(tvshowname):
    query = {
           "jsonrpc": "2.0",
           "method": "VideoLibrary.GetTVShowDetails",
            "params": {"limits": {"start": 0, "end": 200}},
            "id": "Video.Details.TVShow"
            }
    res = json.loads(xbmc.executeJSONRPC(json.dumps(query, encoding='utf-8')))
    debug("Result TVShowName2TVShowID :"+res)
das gibt dann folgendes aus...

Code: Alles auswählen

Result TVShowName2TVShowID :{u'jsonrpc': u'2.0', u'id': u'Video.Details.TVShow', u'error': {u'message': u'Invalid params.', u'code': -32602, u'data': {u'method': u'VideoLibrary.GetTVShowDetails', u'stack': {u'message': u'Missing parameter', u'type': u'integer', u'name': u'tvshowid'}}}}
also fehlt da wohl ein parameter
ich würde ja u' 'name' nehmen aber

Code: Alles auswählen

def TVShowName2TVShowID(tvshowname):
    query = {
           "jsonrpc": "2.0",
           "method": "VideoLibrary.GetTVShowDetails",
            "params": {"limits": {"start": 0, "end": 200}, "name": tvshowname},
            "id": "Video.Details.TVShow"
            }
    res = json.loads(xbmc.executeJSONRPC(json.dumps(query, encoding='utf-8')))
    debug("Result TVShowName2TVShowID :"+str(res))
    return 0
bingt den selben fehler....

Re: jsonrps Abfrage Kodi Datenbank

Verfasst: Donnerstag 17. März 2016, 11:01
von BlackJack
@sveni_lee: Du liest die Fehlermeldung falsch. Da fehlt ein Parameter mit dem Namen 'tvshowid' vom Typ 'integer'. Die RPC-Methode will offenbar die ID der Fernsehsendung als Argument haben. Und zwar *zwingend* wenn man sich die API-Dokumentation zu VideoLibrary.GetTVShowDetails anschaut. Das ist der falsche Aufruf für Deine Zwecke. Du verwechselst das anscheinend mit VideoLibrary.GetTVShows.

Re: jsonrps Abfrage Kodi Datenbank

Verfasst: Donnerstag 17. März 2016, 11:45
von sveni_lee
und wieder hast Du mir den entscheidenen hinweis gegeben... :D

folgendes liefert mir jetzt ein Ergebniss:

Code: Alles auswählen

def TVShowName2TVShowID(tvshowname):
    json_query = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetTVShows", "params": {"properties": ["title", "imdbnumber"], "sort": { "method": "title" } }, "id": 1}')
    json_query = unicode(json_query, 'utf-8', errors='ignore')
    json_response = json.loads(json_query)
    debug("### %s" % json_response)
    return 0
Ergebnis:

Code: Alles auswählen

### {u'jsonrpc': u'2.0', u'id': 1, u'result': {u'limits': {u'start': 0, u'total': 81, u'end': 81}, u'tvshows': [{u'imdbnumber': u'76290', u'tvshowid': 21, u'title': u'24', u'label': u'24'}, {u'imdbnumber': u'73200', u'tvshowid': 43, u'title': u'Airwolf', u'label': u'Airwolf'}, {u'imdbnumber': u'77398', u'tvshowid': 18, u'title': u'Akte X', u'label': u'Akte X'}, {u'imdbnumber': u'73981', u'tvshowid': 67, u'title': u'Aladdin', u'label': u'Aladdin'}, {u'imdbnumber': u'78020', u'tvshowid': 63, u'title': u'ALF', u'label': u'ALF'}, {u'imdbnumber': u'210841', u'tvshowid': 13, u'title': u'Alphas', u'label': u'Alphas'}, {u'imdbnumber': u'257655', u'tvshowid': 42, u'title': u'Arrow', u'label': u'Arrow'}, {u'imdbnumber': u'75682', u'tvshowid': 6, u'title': u'Bones', u'label': u'Bones'}, {u'imdbnumber': u'81189', u'tvshowid': 75, u'title': u'Breaking Bad', u'label': u'Breaking Bad'}, {u'imdbnumber': u'79033', u'tvshowid': 41, u'title': u'Captain Future', u'label': u'Captain Future'}, {u'imdbnumber': u'83462', u'tvshowid': 78, u'title': u'Castle', u'label': u'Castle'}, {u'imdbnumber': u'253826', u'tvshowid': 4, u'title': u'Cinderella 87', u'label': u'Cinderella 87'}, {u'imdbnumber': u'258171', u'tvshowid': 20, u'title': u'Continuum', u'label': u'Continuum'}, {u'imdbnumber': u'281551', u'tvshowid': 81, u'title': u'CSI Cyber', u'label': u'CSI Cyber'}, {u'imdbnumber': u'76148', u'tvshowid': 8, u'title': u'Dark Angel', u'label': u'Dark Angel'}, {u'imdbnumber': u'229281', u'tvshowid': 46, u'title': u'Das Dschungelbuch (2011)', u'label': u'Das Dschungelbuch (2011)'}, {u'imdbnumber': u'79637', u'tvshowid': 7, u'title': u'Das Verschwundene Zimmer', u'label': u'Das Verschwundene Zimmer'}, {u'imdbnumber': u'192171', u'tvshowid': 16, u'title': u'Die Avengers: Die m\xe4chtigsten Helden der Welt', u'label': u'Die Avengers: Die m\xe4chtigsten Helden der Welt'}, {u'imdbnumber': u'73518', u'tvshowid': 36, u'title': u'Die Biene Maja', u'label': u'Die Biene Maja'}, {u'imdbnumber': u'79498', u'tvshowid': 27, u'title': u'Die Fantastischen Vier mit neuen Abenteuern', u'label': u'Die Fantastischen Vier mit neuen Abenteuern'}, {u'imdbnumber': u'76081', u'tvshowid': 68, u'title': u'Die Gummib\xe4renbande', u'label': u'Die Gummib\xe4renbande'}, {u'imdbnumber': u'80745', u'tvshowid': 48, u'title': u'Die M\xe4rchenbraut', u'label': u'Die M\xe4rchenbraut'}, {u'imdbnumber': u'129631', u'tvshowid': 25, u'title': u'Die Peanuts', u'label': u'Die Peanuts'}, {u'imdbnumber': u'83496', u'tvshowid': 53, u'title': u'Die R\xfcckkehr der M\xe4rchenbraut', u'label': u'Die R\xfcckkehr der M\xe4rchenbraut'}, {u'imdbnumber': u'159431', u'tvshowid': 33, u'title': u'Die S\xe4ulen der Erde', u'label': u'Die S\xe4ulen der Erde'}, {u'imdbnumber': u'261202', u'tvshowid': 70, u'title': u'Dragons - Die Reiter von Berk', u'label': u'Dragons - Die Reiter von Berk'}, {u'imdbnumber': u'71932', u'tvshowid': 55, u'title': u'Ein Colt f\xfcr alle F\xe4lle', u'label': u'Ein Colt f\xfcr alle F\xe4lle'}, {u'imdbnumber': u'77748', u'tvshowid': 52, u'title': u'Ein Duke kommt selten allein', u'label': u'Ein Duke kommt selten allein'}, {u'imdbnumber': u'81661', u'tvshowid': 26, u'title': u'Es war einmal... Amerika', u'label': u'Es war einmal... Amerika'}, {u'imdbnumber': u'79158', u'tvshowid': 38, u'title': u'Es war einmal... Das Leben', u'label': u'Es war einmal... Das Leben'}, {u'imdbnumber': u'79849', u'tvshowid': 30, u'title': u'Es war einmal... Der Mensch', u'label': u'Es war einmal... Der Mensch'}, {u'imdbnumber': u'81153', u'tvshowid': 24, u'title': u'Es war einmal... Der Weltraum', u'label': u'Es war einmal... Der Weltraum'}, {u'imdbnumber': u'83005', u'tvshowid': 11, u'title': u'Es war einmal... Die Entdeckung unserer Welt', u'label': u'Es war einmal... Die Entdeckung unserer Welt'}, {u'imdbnumber': u'82342', u'tvshowid': 10, u'title': u'Es war einmal... Entdecker und Erfinder', u'label': u'Es war einmal... Entdecker und Erfinder'}, {u'imdbnumber': u'121361', u'tvshowid': 12, u'title': u'Game of Thrones', u'label': u'Game of Thrones'}, {u'imdbnumber': u'274431', u'tvshowid': 74, u'title': u'Gotham', u'label': u'Gotham'}, {u'imdbnumber': u'248736', u'tvshowid': 29, u'title': u'Grimm', u'label': u'Grimm'}, {u'imdbnumber': u'119861', u'tvshowid': 15, u'title': u'Grisu, der kleine Drache', u'label': u'Grisu, der kleine Drache'}, {u'imdbnumber': u'82927', u'tvshowid': 32, u'title': u'Heidi', u'label': u'Heidi'}, {u'imdbnumber': u'247897', u'tvshowid': 35, u'title': u'Homeland', u'label': u'Homeland'}, {u'imdbnumber': u'75760', u'tvshowid': 23, u'title': u'How I Met Your Mother', u'label': u'How I Met Your Mother'}, {u'imdbnumber': u'81318', u'tvshowid': 31, u'title': u'Knight Rider (2008)', u'label': u'Knight Rider (2008)'}, {u'imdbnumber': u'253323', u'tvshowid': 54, u'title': u'LEGO Ninjago Meister des Spinjitzu', u'label': u'LEGO Ninjago Meister des Spinjitzu'}, {u'imdbnumber': u'72854', u'tvshowid': 14, u'title': u'Lexx', u'label': u'Lexx'}, {u'imdbnumber': u'263365', u'tvshowid': 80, u'title': u"Marvel's Agents of S.H.I.E.L.D.", u'label': u"Marvel's Agents of S.H.I.E.L.D."}, {u'imdbnumber': u'75361', u'tvshowid': 9, u'title': u'Max Headroom', u'label': u'Max Headroom'}, {u'imdbnumber': u'289590', u'tvshowid': 76, u'title': u'Mr Robot', u'label': u'Mr Robot'}, {u'imdbnumber': u'72108', u'tvshowid': 1, u'title': u'Navy CIS', u'label': u'Navy CIS'}, {u'imdbnumber': u'164301', u'tvshowid': 64, u'title': u'Nikita (2010)', u'label': u'Nikita (2010)'}, {u'imdbnumber': u'248835', u'tvshowid': 69, u'title': u'Once Upon a Time', u'label': u'Once Upon a Time'}, {u'imdbnumber': u'84994', u'tvshowid': 19, u'title': u'Pettersson und Findus', u'label': u'Pettersson und Findus'}, {u'imdbnumber': u'82818', u'tvshowid': 22, u'title': u'Pippi Langstrumpf', u'label': u'Pippi Langstrumpf'}, {u'imdbnumber': u'80971', u'tvshowid': 40, u'title': u'Prinzessin Fantaghiro', u'label': u'Prinzessin Fantaghiro'}, {u'imdbnumber': u'77526', u'tvshowid': 51, u'title': u'Raumschiff Enterprise', u'label': u'Raumschiff Enterprise'}, {u'imdbnumber': u'71470', u'tvshowid': 57, u'title': u'Raumschiff Enterprise - Das n\xe4chste Jahrhundert', u'label': u'Raumschiff Enterprise - Das n\xe4chste Jahrhundert'}, {u'imdbnumber': u'281630', u'tvshowid': 66, u'title': u'Scorpion', u'label': u'Scorpion'}, {u'imdbnumber': u'76022', u'tvshowid': 45, u'title': u'SeaQuest DSV', u'label': u'SeaQuest DSV'}, {u'imdbnumber': u'268156', u'tvshowid': 79, u'title': u'Sense8', u'label': u'Sense8'}, {u'imdbnumber': u'76648', u'tvshowid': 34, u'title': u'Sex and the City', u'label': u'Sex and the City'}, {u'imdbnumber': u'269578', u'tvshowid': 37, u'title': u'Sleepy Hollow', u'label': u'Sleepy Hollow'}, {u'imdbnumber': u'73750', u'tvshowid': 3, u'title': u'Spider-Man', u'label': u'Spider-Man'}, {u'imdbnumber': u'95101', u'tvshowid': 58, u'title': u'Spuk im Hochhaus', u'label': u'Spuk im Hochhaus'}, {u'imdbnumber': u'97741', u'tvshowid': 49, u'title': u'Spuk unterm Riesenrad', u'label': u'Spuk unterm Riesenrad'}, {u'imdbnumber': u'72073', u'tvshowid': 50, u'title': u'Star Trek - Deep Space Nine', u'label': u'Star Trek - Deep Space Nine'}, {u'imdbnumber': u'283468', u'tvshowid': 71, u'title': u'Star Wars Rebels', u'label': u'Star Wars Rebels'}, {u'imdbnumber': u'78901', u'tvshowid': 44, u'title': u'Supernatural', u'label': u'Supernatural'}, {u'imdbnumber': u'80379', u'tvshowid': 2, u'title': u'The Big Bang Theory', u'label': u'The Big Bang Theory'}, {u'imdbnumber': u'279121', u'tvshowid': 61, u'title': u'The Flash', u'label': u'The Flash'}, {u'imdbnumber': u'74996', u'tvshowid': 47, u'title': u'The Marvel Superheroes', u'label': u'The Marvel Superheroes'}, {u'imdbnumber': u'82459', u'tvshowid': 17, u'title': u'The Mentalist', u'label': u'The Mentalist'}, {u'imdbnumber': u'71824', u'tvshowid': 56, u'title': u'The Real Ghostbusters', u'label': u'The Real Ghostbusters'}, {u'imdbnumber': u'263677', u'tvshowid': 65, u'title': u'The Returned', u'label': u'The Returned'}, {u'imdbnumber': u'268591', u'tvshowid': 73, u'title': u'The Tomorrow People', u'label': u'The Tomorrow People'}, {u'imdbnumber': u'72860', u'tvshowid': 77, u'title': u'Tom und Jerry', u'label': u'Tom und Jerry'}, {u'imdbnumber': u'205901', u'tvshowid': 72, u'title': u'Transformers: Prime', u'label': u'Transformers: Prime'}, {u'imdbnumber': u'258480', u'tvshowid': 28, u'title': u'TRON: Der Aufstand', u'label': u'TRON: Der Aufstand'}, {u'imdbnumber': u'270633', u'tvshowid': 39, u'title': u'True Detective', u'label': u'True Detective'}, {u'imdbnumber': u'94971', u'tvshowid': 60, u'title': u'V - Die Besucher', u'label': u'V - Die Besucher'}, {u'imdbnumber': u'95491', u'tvshowid': 62, u'title': u'Vampire Diaries', u'label': u'Vampire Diaries'}, {u'imdbnumber': u'81643', u'tvshowid': 5, u'title': u'Wickie und die starken M\xe4nner', u'label': u'Wickie und die starken M\xe4nner'}, {u'imdbnumber': u'272521', u'tvshowid': 59, u'title': u'Wickie und die starken M\xe4nner (2013)', u'label': u'Wickie und die starken M\xe4nner (2013)'}]}}
das bedeutet ich muß jetzt noch einen Filter einbauen der nur den Abzufragenen TVShownamen beinhaltet...

Re: jsonrps Abfrage Kodi Datenbank

Verfasst: Donnerstag 17. März 2016, 12:02
von sveni_lee
at least kommt das dabei heraus...

Code: Alles auswählen

def TVShowName2TVShowID(tvshowname):
    query = {
            "jsonrpc": "2.0",
            "method": "VideoLibrary.GetTVShows",
            "params": {
                "properties": ["originaltitle", "imdbnumber"]
            },
            "id": "libTvShows"
            }
    try:
        json_result = json.loads(xbmc.executeJSONRPC(json.dumps(query, encoding='utf-8')))
        if 'result' in json_result and 'tvshows' in json_result['result']:
            json_result = json_result['result']['tvshows']
            for tvshow in json_result:
                if tvshow['label'] == tvshowname:
                    return tvshow['imdbnumber']
        return False
    except Exception:
        xbmc.log('JSON query returns an error')
        return False
danke auch für die Hilfe aus dem Kodinerds Forum...

Re: jsonrps Abfrage Kodi Datenbank

Verfasst: Donnerstag 17. März 2016, 12:44
von BlackJack
@sveni_lee: `False` ist hier ein komischer weil sehr überraschender Rückgabewert. Wenn eine Funktion `False` liefert, erwartet man eigentlich, dass sie in gegenteiligen Fällen `True` liefert und keine Zeichenkette. `None` wäre angebrachter.

Re: jsonrps Abfrage Kodi Datenbank

Verfasst: Donnerstag 17. März 2016, 13:27
von sveni_lee
Richtig...

es ist logischer zu als False weil der der wert ja nicht existiert und somit None ist...

danke für den Hinweis... (besser man lernt es gleich richtig, später bekommt man das nicht mehr aus dem kopf)