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.
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
Boa tarde, não estou a conseguir obter os ficheiros utilizados na criação destes tutoriais.
ResponderEliminar