Metadata agent voor Nederlandstalige filmbeschrijvingen
De MovieMeter metadata agent is een secundaire agent en werkt in combinatie met de Plex Movie of The Movie Database agent. MovieMeter haalt Nederlandstalige titels, beschrijvingen, genre informatie, rating en poster op van www.moviemeter.nl
Na installatie kun je in de Plex Media Server instellingen de MovieMeter agent activeren en indien nodig omhoog schuiven in de lijst met agents.
Let op: Reeds bestaande film bibliotheken waar je MovieMeter informatie bij wilt verkrijgen zullen door middel van de Refresh All Metadata optie geüpdatet moeten worden.
Hoi!
Ik heb James tientallen vragen gesteld over de agents (er is namelijk nog helemaal geen documentatie) :) Daarnaast zijn de IMDb, TVRage, Wikipedia en de door Oncleben geschreven [Ciné-Passion](http://forums.plexapp.com/index.php?/topic/16388-french-metadata-agent-released/) agents goede voorbeelden om naar te kijken.
Laat je vooral niet afschrikken door het feit dat sommige agents een paar honderd regels code zijn. Dit heeft vooral te maken met hoe de informatie gezocht moet worden. Als in verschillende HTML pagina's naar gegevens gezocht moet worden (zoals bij IMDb) levert dat meer code op. Wanneer de bronwebsite een API ter beschikking stelt (zoals moviemeter.nl) die nette in XML of JSON ingedeelde gegevens teruggeeft, scheelt dat aanzienlijk.
Je kunt het MovieMeter Python script inzien op [Github](https://github.com/plexinc-agents/MovieMeter.bundle) ('t is maar 37 regels code). De *__init__* en *get_session_key* methodes zijn 'extra' (*__init__* is alleen nodig als je 'm nodig hebt ;) en *get_session_key* is in dit geval gebruikt omdat de MovieMeter XML-RPC API een sessie_key nodig heeft en het handig is als deze opgevraagd kan worden via een methode.
De MovieMeter agent draagt informatie bij aan de IMDb agent, het is dus geen volwaardige agent. Ik heb me nog niet verdiept in hoe deze werken en wat de verschillen precies zijn. Een agent is altijd een afgeleide class van de base class *Agent.Movies* of *Agent.TV_Shows*, dus:
class AfgeleideClassNaam(BaseClassNaam):
De class heeft minimaal twee methodes, genaamd *search* en *update*.
Ik ben een Python/OOP n00b, maar hopelijk heb je wat aan deze info (dit is v0.1, meest recente versie op Github):
# MovieMeter Metadata Agent<br />
from time import time # Importeer time, dit hebben we nodig om de huidige tijd (als Unix timestamp) te kunnen vergelijken met de "geldig tot"-waarde voor de session_key die we terug krijgen uit de MovieMeter API<br />
<br />
MM_ENDPOINT_URI = 'http://www.moviemeter.nl/ws' # De XML-RPC url waar we de informatie aanvragen doen<br />
MM_API_KEY = 'yx77z030250ckrqo2j3z4f7x7e4w7hv8' # Een unieke API key (zie http://www.moviemeter.nl/site/registerclient/)<br />
<br />
def Start():<br />
HTTP.CacheTime = CACHE_1DAY # Cache opgehaalde gegevens voor 1 dag (in dit geval wordt dit niet gebruikt, omdat we met XML-RPC werken)<br />
<br />
class MovieMeterAgent(Agent.Movies):<br />
name = 'MovieMeter'<br />
languages = ['nl']<br />
primary_provider = False<br />
contributes_to = ['com.plexapp.agents.imdb'] # Geeft aan dat deze agent informatie bijdraagt aan de IMDb agent<br />
<br />
def __init__(self): # De constructor<br />
Agent.Movies.__init__(self) # Roept de constructor van de base class aan (omdat we de constructor niet willen overschrijven)<br />
self.proxy = XMLRPC.Proxy(MM_ENDPOINT_URI) # XMLRPC.Proxy is nieuw in framework v2 en is een handig laagje om de standaard Python xmlrpc module heen (http://docs.python.org/library/xmlrpclib.html)<br />
self.valid_till = 0<br />
<br />
def search(self, results, media, lang):<br />
mm_id = self.proxy.film.retrieveByImdb(self.get_session_key(), media.primary_metadata.id) # Spreekt de methode film.retrieveByImdb aan, met als input een geldige session_key (verkregen via de get_session_key methode) en het IMDb film id (bijv "tt01234567"). Het film id is al door de IMDb agent opgezocht<br />
if mm_id != None:<br />
results.Append(MetadataSearchResult(id = mm_id, score = 100))<br />
<br />
def update(self, metadata, media, lang):<br />
response = self.proxy.film.retrieveDetails(self.get_session_key(), int(metadata.id)) # Spreekt de methode film.retrieveDetails aan om filmdetails op te halen<br />
if response != None:<br />
metadata.summary = response['plot'] # Plaats het Nederlandstalige plot in 'metadata.summary', deze wordt door Plex gebruikt<br />
<br />
def get_session_key(self):<br />
if self.valid_till < int(time()): # Controleer of onze session_key nog geldig is<br />
response = self.proxy.api.startSession(MM_API_KEY) # Zo niet, haal een nieuwe op met behulp van de methode api.startSession en de API key<br />
self.session_key = response['session_key']<br />
self.valid_till = int(response['valid_till'])<br />
<br />
return self.session_key
sorry maar ik snap niet goed hoe de installatie precies moet. Na download heb ik een zip bestand, en na uitpakken een zip.cpgz bestand. Dat lijkt dus in een lus te draaien en niet uitgepakt te geraken. In welke map moet die terechtkomen? Bij info provider settings staat die er dus voorlopig nog niet tussen
Gek dat het bestand als .zip gezien wordt bij het downloaden. Gelukkig heb je de oplossing gevonden. Voor iedereen die ook tegen dit probleem aanloopt: de volledige bestandsnaam moet zijn "MovieMeter.plexapp"
Ik ben niet degene die de Agent gemaakt heeft, dat is sander1.
Als de IMDB agent eruit ligt, dan werkt niets. De moviemeter agent neemt namelijk alleen de beschrijving van de film voor zijn rekening, de rest komt voor een groot deel van imdb…
Sander bedankt voor deze zeer waardevolle MovieMeter agent. Ik ben nog niet over naar Plex 0.9 mede omdat er nog geen MovieMeter agent bestond en ik op dit moment al mijn films in Plex 0.85 met Nederlands plot heb staan.
Dus jouw agent gaat voor mij nu betekenen dat ik kan gaan updaten. Sander nogmaals bedankt voor de mooie plugins en agent die je voor ons maakt en waar je een hoop tijd en energie in steekt voor de Nederlandse community.
Ook heel erg bedankt namens mijn meisje :rolleyes: