domenica 17 maggio 2009

Creare un plugin per XBMC parte 1


Creare un plugin per XBMC come avevo spiegato (male) è semplice. Scendiamo nel pratico:

voglio  vedere la diretta web dei canali rai con XBMC.

Dopo avere scaricato il tutorial dal sito di XBMC lo scompattiamo e creiamo una cartella dal nome Rai.tv in:

~/.xbmc/plugins/video/ (Linux)

~/Library/Application Support/XBMC/plugins/video/ (Mac)

c:\Program Files\XBMC\plugins\video\ (Windows).

copiamo il file default.py ed il file test.py presenti nel tutorial nella cartella che abbiamo creato. 

Come già indicato in numerosi post come ad esempio qui recuperiamo la lista dei link che ci occorrono.

Se non vogliamo correre rischi ed utilizzare la lista più recente, si può, spulciando il sorgente della pagina www.rai.tv, cercare la variabile channelXmlPath che ci fornirà il link del file xml che contiene gli indirizzi delle dirette (sottochiave <url> di <videoUnit name="nome del canale - full" type="RaiTv Diretta Full Video">).

Per verificare il collegamento apriamo con un editor il file test.py. 

Alla variabile url assegnamo  un link (ad esempio Rai1) http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=983 e aggiungiamo dopo la riga response.close() la riga print link affinchè test.py sia così:


import urllib2,urllib,re


url='http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=983'


req = urllib2.Request(url)

req.add_header('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3')

response = urllib2.urlopen(req)

link=response.read()

response.close()

print link

match=re.compile('Regular expression here').findall(link)

print match


Salviamo, apriamo il terminale (o il prompt dei comandi) ci rechiamo nella directory del plugin (cd ~/Library/Application Support/XBMC/plugins/video/Rai.tv)

digitiamo python test.py e vediamo cosa stampa su schermo la nostra print:

<ASX VERSION="3.0">     <ENTRY>        <REF HREF="http://www.banneradmin.rai.it/ads/siparietti/buona_visioneMed_Progautopromo.wmv" />     </ENTRY>  </ASX>

Se proviamo ad aprire con vlc il link ottenuto (http://www.banneradmin.rai.it/ads/siparietti/buona_visioneMed_Progautopromo.wmv) vedremo solo un banner di buona visione e  null'altro. Questo perchè dobbiamo anche modificare lo User Agent inviato al sito della rai utilizzando quello di Mozilla di una qualsiasi distribuzione linux:

req.add_header('User-Agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.6) Gecko/2009020911 Ubuntu/8.10 (intrepid) Firefox/3.0.6')

Otterremo questa risposta:

<ASX VERSION="3.0">  <ENTRY><REF HREF="mms://livestream.rai.it.edgestreams.net/reflector:64084?auth=daEcyc4agdPaTcNbSaGbAdPcKb6d4aldjdV-bkecTK-b4-ElxuxHo&aifp=V001" />  </ENTRY>  </ASX>

Abbiamo ottenuto un link mms!

Per estrarre il link mms della diretta da comunicare al plugin di XBMC dobbiamo utilizzare una regex, ma prima solitamente elimino spazi, tabulatori, ritorni a capo superflui per potermi concentrare sulla espressione più agevolmente. Quindi procediamo a sostituire la riga link=response.read() con:

link = ''

for line in response.read().split( '\n' ):

    link += line.lstrip().rstrip()

link = link.replace( '\r', '' ).replace( '\t', '' ).replace( '\n', '' )

Otterremo così:

<ASX VERSION="3.0"><ENTRY><REF HREF="mms://livestream.rai.it.edgestreams.net/reflector:64084?auth=daEcfd4cgdEatbAblddaQbEb8azdhdqaVae-bkec_a-b4-FmxwxHn&aifp=V001" /></ENTRY></ASX> che è molto più leggibile.

L'espressione che fa al caso nostro è <ASX VERSION="3.0"><ENTRY><REF HREF="(.+?)" /></ENTRY></ASX> e la inseriamo nella funzione re.compile('expr').findall(link)

match=re.compile('<ASX VERSION="3.0"><ENTRY><REF HREF="(.+?)" /></ENTRY></ASX>').findall(link) e estraiamo il link trovato.

if match:

for url in match:

print url + '\r'

eliminiamo le righe print link e print match. test.py dovrebbe ora avere la seguente fisionomia:


#!/usr/bin/python


import urllib2,urllib,re


url='http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=983'


req = urllib2.Request(url)

req.add_header('User-Agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.6) Gecko/2009020911 Ubuntu/8.10 (intrepid) Firefox/3.0.6')

response = urllib2.urlopen(req)

link = ''

for line in response.read().split( '\n' ):

    link += line.lstrip().rstrip()

link = link.replace( '\r', '' ).replace( '\t', '' ).replace( '\n', '' )

response.close()

match=re.compile('<ASX VERSION="3.0"><ENTRY><REF HREF="(.+?)" /></ENTRY></ASX>').findall(link)

if match:

for url in match:

print url + '\r'

(in grassetto le parti modificate del file test.py originale).

python test.py  stamperà sullo schermo mms://livestream.rai.it.edgestreams.net/reflector:64084?auth=daEcfd4cgdEatbAblddaQbEb8azdhdqaVae-bkec_a-b4-FmxwxHn&aifp=V001 che possiamo provare ad aprire con vlc per verificare il collegamento.

Ora che abbiamo link e regex possiamo passare alla sviluppo del plugin vero e proprio.....

1 commento:

  1. Ciao, potresti aiutarmi a fare un plugin che estragga i link megavideo da linkstreaming.com?

    RispondiElimina