XBMC - O teu primeiro Addon - 3 - (resposta aos 1ºs desafios)


Se estão recordados, terminei o post anterior com alguns desafios:

-Adiciona a data ao menu dos vídeos

-Adiciona um sub-menu (addDir) de "Página seguinte" na listagem de vídeos
-Escapa o passo intermédio de "encontrar fontes" fazendo a "ponte" entre o modo 1 e o "addLink"

Neste post, apresenta-se a resolução/solução destes “desafios”.

Atenção: O ficheiro python que devem trabalhar é o que se encontra no fim do primeiro post: http://enen92.aminhacasadigital.com/addon.py




1 - Adiciona a data ao menu dos vídeos

Esta é facil!
Pegando mais uma vez no exemplo do trecho do código fonte:


alt="Guardiola em Munique: «Uma honra imensa»" />Guardiola em Munique: «Uma honra imensa»<br /><em>2013-06-24</em></a></li>

Verificamos que a data em que o vídeo foi colocado está entre as tabs <em></em>. É portanto uma questão de "QUERO GUARDAR" e adicioná-la ao ciclo e ao addDir.


   
def listar_videos(url):
 codigo_fonte = abrir_url(url)
 match=re.compile('<li><a class="" href="(.+?)"><span class="player"></span><img src="(.+?)"\n                                alt=".+?" />(.+?)<br /><em>(.+?)</em></a></li>').findall(codigo_fonte)
 for url, img, titulo, data in match:
  addDir(titulo + '-' + data,'http://www.maisfutebol.iol.pt' + url,2,img)

Já lá está:




2 - Adiciona um menu de página seguinte à listagem


Resolver esta, implica pensar um pouco. Devemos procurar no codigo_fonte pelo código html do "link" da página seguinte e se esse existir, retirar o valor do endereço. Procuramos um trecho de código que seja sempre igual, qualquer que seja a página onde estamos. E olhem o que lá está:


<div class="paginator"><span>Página <strong>1</strong> de 26</span><a class="link-next" href="/videos/2">Página Seguinte &gt;</a></div>
<div class="pub-iol" style=


Neste caso estamos na página 1. O "link" de página seguinte tem associado o endereço url da página seguinte...a 2. Se tivermos na pagina 2. Iremos encontrar:


<div class="paginator"><span>Página <strong>2</strong> de 26</span><a class="link-next" href="/videos/3">Página Seguinte &gt;</a></div>
<div class="pub-iol" style=


Logo se recorrermos à regular expression que está na linha abaixo, retiramos o valor da página seguinte! Qualquer que seja a página em que estamos...


   
match = re.compile('.*.+?href="(.+?)">Página Seguinte &gt;</a></div>\n.+?<div class="pub-iol"').findall(codigo_fonte)

E fazemos novamente mais um ciclo idêntico àqueles que estamos fartos de fazer...



   
for url_proxima_pagina in match:
  addDir('Proximo >>','http://www.maisfutebol.iol.pt' + url_proxima_pagina,1,'')

E é questão de adicionar à parte final da função que tínhamos feito (fora do ciclo que lá está!). A função fica assim:



   
def listar_videos(url):
 codigo_fonte = abrir_url(url)
 match=re.compile('<li><a class="" href="(.+?)"><span class="player"></span><img src="(.+?)"\n                                alt=".+?" />(.+?)<br /><em>(.+?)</em></a></li>').findall(codigo_fonte)
 for url, img, titulo, data in match:
  addDir(titulo + '-' + data,'http://www.maisfutebol.iol.pt' + url,2,img)
 match = re.compile('.*.+?href="(.+?)">Página Seguinte &gt;</a>').findall(codigo_fonte)
 for url_proxima_pagina in match:
  addDir('Proximo >>','http://www.maisfutebol.iol.pt' + url_proxima_pagina,1,'')

E por artes mágicas...já temos a directoria de página seguinte:





3 - Escapa o passo intermédio de procurar fontes tal que o vídeo possa ser reproduzido directamente

Esta também é simples. Temos de suprimir o modo 2 e chamar a função addLink logo no modo 1, isto é, na função listar_videos(url). Desta forma, ao invés de adicionar uma directoria que chame uma nova função (no passado encontrar_videos(url)) vamos incorporar grande parte do código desta função na função listar_videos(url).

Ora vejam a função final. Simples...

   
def listar_videos(url):
 codigo_fonte = abrir_url(url)
 match=re.compile('<li><a class="" href="(.+?)"><span class="player"></span><img src="(.+?)"\n                                alt=".+?" />(.+?)<br /><em>(.+?)</em></a></li>').findall(codigo_fonte)
 for url, img, titulo, data in match:
  codigo_fonte_pagina_de_video = abrir_url('http://www.maisfutebol.iol.pt' + url)
  match = re.compile('.*file=(.+?)&amp;streamer=(.+?)amp;config.+?\n.+?<meta http-equiv="X-UA-Compatible"').findall(codigo_fonte_pagina_de_video)
  for ficheiro, streamer in match:
   ficheiro = ficheiro.replace('%3A',':')
   streamer = streamer.replace('%3A',':')
   streamer = streamer.replace('%2F','/')
   #nesta altura streamer = rtmp://video1.iol.pt/vod&
   match = re.compile('rtmp://(.+?)/(.+?)&').findall(streamer)
   for rtmp,app in match:  
    addLink(titulo,'rtmp://' + rtmp + ':80/' + app + '/' + ficheiro,img)
        # Parte do codigo para o "link" da pagina seguinte
 match = re.compile('.*.+?href="(.+?)">Página Seguinte &gt;</a></div>\n.+?<div class="pub-iol"').findall(codigo_fonte)
 for url_proxima_pagina in match:
  addDir('Proximo >>','http://www.maisfutebol.iol.pt' + url_proxima_pagina,1,'')


Podem fazer o download do addon.py final aqui:



Próximos desafios:

- Coloquem uma imagem personalizada nos menus do addon
- Alterem o tipo de vista da listagem de vídeos para thumbnails
(Não foi abordado, olhem para o codigo fonte dos outros addons)

Até breve,

Miguel Borges de Freitas

0 Comments: