XBMC - O teu primeiro addon - 5 - Função de pesquisa


Olá a todos! Espero que estes tutoriais vos estejam a motivar o suficiente para começarem a desenvolver o vosso primeiro addon.

O último post desta sequência de tutoriais de desenvolvimento terminou com um novo desafio/nova temática a abordar: As funções de pesquisa.



Definir e implantar uma função de pesquisa

Apesar de "à primeira vista" esta parecer uma das funcionalidades mais difíceis de concretizar, na maioria dos casos, esta é na realidade uma das funções mais fáceis de construir. Não esquecer que nesta fase do tutorial, temos já a função listar_vídeos definida, a qual recebe como argumento um determinado endereço url onde se encontram listados os vídeos.
Devemos em primeiro lugar, adicionar uma nova entrada ao menu inicial (CATEGORIES()) que "aponte" o XBMC para um novo modo que ainda não esteja definido. Uma vez nesse modo, o XBMC chamará a função de pesquisa.
Apesar de no tutorial 2 ter suprimido o modo 2 (e este estar livre de momento), definiremos a função de pesquisa no modo 3 para não complicar!
A função CATEGORIES() ficará então definida desta forma:


   
def CATEGORIES():
 addDir('VIDEOS','http://www.maisfutebol.iol.pt/videos',1,addonfolder + artfolder + 'tv.png')
 addDir('PESQUISAR','http://www.maisfutebol.iol.pt/videos',3,addonfolder + artfolder + 'tv.png')

Por outro lado, na parte final do addon.py (em modos), definam o modo 3 a chamar uma determinada função (neste caso pesquisa()).



 
elif mode==3:
        print ""
        pesquisa()

Importa, neste momento perceber o que acontece quando fazemos uma pesquisa no site. No vosso browser, abram o site de vídeos do maisfutebol e pesquisem por uma palavra totalmente aleatória. A título de exemplo, procurei por Cardozo :)

A pesquisar:

Resultados:

Atentem no endereço que ficou definido após a pesquisa: http://www.maisfutebol.iol.pt/videos.html?q=Cardozo

Experimentem alterar essa variável passada através do endereço por outra palavra à vossa escolha:



E agora atentem no nome do primeiro vídeo e olhem para o código fonte.


Estas entradas parecem-vos familiares? É isso mesmo...são idênticas à da função listar_videos(url). É fácil perceber como vamos fazer isto...

Definimos uma função pesquisa() que nos permita escrever um parâmetro de pesquisa no teclado do XBMC e que com esse valor defina um novo url ('http://www.maisfutebol.iol.pt/videos?q=' + parametro_de_pesquisa). Uma vez definido esse novo url, chamamos a função listar vídeos com esse url!

Para facilitar a vossa compreensão desta função, comentei todas as linhas de código (tudo o que começar por # não é executado pelo python e assume apenas valor informativo). A parte que importa, é a que está definida a partir de url = (...); deverá ser esta a parte que deverão alterar para um novo addon. 
É importante também referir que forçamos a variável parameto_pesquisa a ser adicionada ao endereço sob a forma de string. Isto acontece porque em python, apenas é possível somar variáveis do mesmo tipo.
Por exemplo, se não forçassem essa variável a ser uma string e pesquisassem por "1", a variável parametro_pesquisa seria uma variável do tipo int (numero inteiro). Ao somar "http://www.maisfutebol.iol.pt/videos.html?q=" (uma string) a parametro_pesquisa (um inteiro) teríamos um erro de script. Como tal, convém sempre forçar a variável a ser transformada em string, mesmo que ela à partida seja já uma string.


 
def pesquisa():
 keyb = xbmc.Keyboard('', 'Escreva o parâmetro de pesquisa') #Chama o keyboard do XBMC com a frase indicada
 keyb.doModal() #Espera ate que seja confirmada uma determinada string
        if (keyb.isConfirmed()): #Se a entrada estiver confirmada (isto e, se carregar no OK)
                search = keyb.getText() #Variavel search fica definida com o conteudo do formulario
                parametro_pesquisa=urllib.quote(search) #parametro_pesquisa faz o quote da expressao search, isto é, escapa os parametros necessarios para ser incorporado num endereço url
  url = 'http://www.maisfutebol.iol.pt/videos.html?q=' + str(parametro_pesquisa) #nova definicao de url. str força o parametro de pesquisa a ser uma string
  listar_videos(url) #chama a função listar_videos com o url definido em cima

Se tudo correr bem, no XBMC deveremos conseguir fazer pesquisas.





Infelizmente, não conseguimos obter os resultados que pretendíamos. Isso acontece porque a regular expression da função listar_videos(url) é ligeiramente diferente daquela que necessitaríamos neste caso. Olhem para a imagem abaixo e facilmente reparam que no segundo caso não existe texto no parametro alt="".




Na realidade, quando trabalhando com regular expressions deveremos sempre simplificá-las ao máximo para garantir a compatibilidade com qualquer tipo de resultado. A experiência diz que, quanto mais complexo seja o código...maior é a probabilidade deste falhar. Devemos SEMPRE simplificar aquilo que pode ser simplificado.

Na função listar_videos(url) alterem a linha da regular expression:


 
 match=re.compile('<li><a class="" href="(.+?)"><span class="player"></span><img src="(.+?)"\n                                alt=".+?" />(.+?)<br /><em>(.+?)</em></a></li>').findall(codigo_fonte)

para:


 
 match=re.compile('<li><a class="" href="(.+?)"><span class="player"></span><img src="(.+?)"\n.+?alt=.+?/>(.+?)<br /><em>(.+?)</em></a></li>').findall(codigo_fonte)

E agora sim...




...a função passou a ser compatível com os resultados de pesquisa e também com o menu "VIDEOS" que já estava definido nos tutoriais anteriores:


Como de costume, podem fazer o download do addon.py actualizado (como referência) AQUI.

No próximo tutorial, vamos falar acerca das traduções.

Até breve,

Miguel Borges de Freitas



1 comentário:

  1. Boa tarde, não estou a conseguir obter os ficheiros utilizados na criação destes tutoriais.

    ResponderEliminar