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:
<li><a
class="" href="/videos/video/13901725/1"><span
class="player"></span><img
src="http://www.maisfutebol.iol.pt/multimedia/oratvi/multimedia/imagem/id/13901385/180x135"
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.
Já lá está:
2 - Adiciona um menu de página seguinte à listagem
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á:
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 ></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:
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...
E fazemos novamente mais um ciclo idêntico àqueles que estamos fartos de fazer...
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:
E por artes mágicas...já temos a directoria de página seguinte:
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...
<div class="paginator"><span>Página <strong>2</strong> de 26</span><a class="link-next" href="/videos/3">Página Seguinte ></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 ></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 ></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=(.+?)&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 ></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: