I dag tager vi endnu et teknisk indlæg, denne gang med et kig på XBMC’s JSON-RPC interface. Som jeg efterhånden har omtalt en del gange så har XBMC flere indbyggede databaser med information om film, tv-serier og musik. Informationen i disse databaser bliver som udgangspunkt brugt i XBMC’s brugerflade men det er også muligt at trække dem ud og det er faktisk også muligt at modificere dem. Det kan fx være via den indbyggede webserver, men også via JSON-RPC API’et.
JSON-RPC er en standard til remote procedure calls og XBMC har således bygger et interface ved hjælp af denne standard. Den letteste måde at kalde JSON-RPC interfacet på er efter min mening via en Python addon, men det er også muligt via et HTTP GET eller POST kald.
Dette HTTP request henter titlen på en tilfældig film. Hvis ikke du kører XBMC på samme PC så skal du udskifte localhost delen i URL’en.
http://localhost:8080/jsonrpc?request={%22jsonrpc%22%3A%222.0%22%2C%22id%22%3A1%2C%22method%22%3A%22VideoLibrary.GetMovies%22%2C%22params%22%3A{%22limits%22%3A{%22end%22%3A1}%2C%22sort%22%3A{%22method%22%3A%22random%22}}}
Selve JSON-RPC requestet er URL encoded men kan ses i en mere let læselig form herunder. method angiver hvilket kald vi ønsker – i dette tilfælde henter vi filminformationer ud, begrænset til ét element og sorteret tilfældigt.
{
"id" : 1,
"jsonrpc" : "2.0",
"method" : "VideoLibrary.GetMovies",
"params" : {
"limits" : {"end" : 1},
"sort" : {"method" : "random"}
}
}
JSON-RPC responset kommer ud i samme JSON format som requestet. I dette tilfælde får vi filmtitlen ud og XBMC’s database ID for filmen. Det er muligt at få en hel række andre informationer ud om hver film. XBMC’s wiki har en grundig beskrivelse af JSON-RPC interfacet i Frodo.
{
"id" : 1,
"jsonrpc" : "2.0",
"result" : {
"limits" : {"end" : 1, "start" : 0, "total" : 11},
"movies" : [
{"label" : "The Invention of Lying", "movieid" : 11}
]
}
}
XBMC’s wiki har en bedre guide til JSON-RPC API interfacet.
Jeg arbejder blandt andet på at opdateret min Movie Quiz addon til at bruge JSON-RPC API’et i XBMC. Det løser en hel masse problemer og jeg slipper blandt andet for at skulle arbejde med både SQLite og MySQL i addon’en samt en væsentlig lettere håndtering af fanart, thumbnails, etc.