Imprimir esta página Imprimir esta página Enviar a página a uma amigo Enviar a página a uma amigo

NCLua Tweet

NCLua Tweet – Cliente de Twitter para TV Digital

O NCLua Tweet é o primeiro cliente de Twitter para o Sistema Brasileiro de TV Digital (SBTVD), desenvolvido com as linguagens NCL e Lua, disponibilizado livremente. A aplicação está em fase beta, e ainda há muito o que desenvolver. Mas a interface atual dá uma idéia de tudo o que será possível. Pretendo atualizar a aplicação sempre que tiver um tempinho. Assim, fique de olha nesta página.

A aplicação atualmente apenas exibe as mensagens do timeline do usuário no Twitter, permite fazer retweets, ver as mensagens de um usuário específico e enviar tweets. O login e senha devem ser informados dentro do arquivo twitter.config.lua. Não se preocupou em criptografar os dados nesse arquivo. Assim, o usuário e a senha estarão em claro nesse arquivo (pelo menos por enquanto :) ).

É utilizada a classe TCP disponibilizada pelo Francisco. A versão da classe, disponibilizada com os fontes da aplicação, está totalmente documentada.

Foi implementado um módulo específico para conexões HTTP (http.lua), que utiliza a classe TCP mencionada anteriormente. O módulo possui funções para envio de requisições HTTP, com a possibilidade de uso de autenticação básica. Para essa autenticação, foi necessário o uso de funções para conversão de strings de e para base64. Para isso, foi utilizado o módulo base64. O módulo HTTP também permite o download de arquivos.

Todas as funções do módulo http precisam ser chamadas dentro de uma co-rotina, pelo menos por enquanto (ou eternamente, caso não descubra como fazer diferente :) ). Mas está tudo explicado na documentação da classe, dentro da pasta doc, contendo um exemplo de utilização.

Como a API do Twitter é baseada em HTTP (REST) e retorna respostas em XML, foi necessário o uso do módulo LuaXML para trabalhar com arquivos XML, convertendo estes para tabelas lua, o que facilita imensamente a manipulação dos dados. A versão disponibilizada, atualizada para Lua 5.x, foi baseada em uma implementação antiga do módulo LuaXML, não compatível com tal versão de lua.

Outra necessidade foi a utilização da biblioteca Entities2AccentedChars para converter códigos HTML de caracteres acentuados e especiais, para seus respectivos caracteres, para que aparecesse na tela, os caracteres acentuados, e não seus códigos HTML. A biblioteca foi estendida para incluir códigos HTML de caracteres para o charset ISO-8859-1, em formato como à que representa à (sendo à em código HTML). As mensagens do Twitter são todas codificadas em HTML no padrão ISO-8859-1.

Outro módulo implementado foi o config. Ele facilita o uso de arquivos lua como arquivos de configuração (uma das finalidades da linguagem lua). O módulo criado automatiza o processo de carregamento e salvamento de dados de configuração em arquivos lua.

Existe apenas um método implementado para acesso à API REST do Twitter, apesar de já ter um esqueleto para quase todos os métodos da mesma. O que há implementado da API foi feito de forma orientada a objetos. Assim, é necessário instanciar um objeto da classe Twitter para poder usar, como pode ser visto em main.lua.

Todo o código da aplicação, incluindo quase todos os módulos de terceiros e todos os módulos implementados, estão documentados. Toda a documentação está disponível na pasta doc, gerados com o LuaDoc.

Pré-Requisitos

É recomendado a utilização do Ginga Virtual STB 0.11.2 rev 23 ou superior. A versão anterior do Ginga VSTB possuia algumas dificuldades para acesso à rede a partir da VM, normalmente necessitando de configurações na interface de rede da mesma.

Antes de usar o NCLua Tweet na VM, verifique se a mesma está acessando a rede local/internet (usando ping, telnet, wget, curl ou qualquer comando similar). Para isto, fundamentalmente, na tela inicial da VM deve ser exibido o IP da mesma. Caso não esteja conseguindo acesso à rede, tente alterar o modo da interface de rede da VM de bridge para NAT ou vice-versa (é necessário reiniciar a VM após tal alteração).

ARTIGO NO BLOG DA AOC

Veja artigo sobre o NCLua Tweet no Blog da AOC.

BUGS CONHECIDOS

Na Ginga VM, dentro de um script NCLua, não estão sendo reconhecidas as teclas de função para simular os botões coloridas do controle remoto, é necessário associar outras teclas a estes botões. Assim, o seguinte mapeamento para eles é como segue:

Botão Vermelho (F1):   R, r
Botão Verde (F2): G, g
Botão Amarelo (F3): Y, y
Botão Azul (F4): B, b

Assim, executando a aplicação na Ginga VM, nas telas que permitem digitar texto, o uso das teclas R, r, G, g, Y, y, B e b pode fazer com que a aplicação exerça comportamento estranho. Por exemplo, se você tentar escrever a palavra Yahoo na tela de envio de Tweet, verá que a aplicação se comportará de forma incorreta, pois o pressionamento da tecla Y representa o mesmo que o acionamento do botão amarelo (Yellow), para voltar à tela anterior. No entanto, não era esse o objetivo quando você pressionou Y para escrever a palavra Yahoo.

Em Set-top Boxes reais não há esse efeito colateral, no entanto, é necessário remover do código, dentro da função handler no arquivo main.lua, o tratamento destas letras.

ATUALIZAÇÕES/DOWNLOADS

Versão 0.6 beta

Agora é possível dar reply em uma mensagem, pressionando o botão verde do controle remoto (F3, G ou g na Ginga VM).

Atualizado módulo http, que agora codifica em URL-Encode, parâmetros a serem passados na requisição HTTP, via POST ou GET. As funções do módulo recebem tanto uma tabela com a lista de parâmetros no formato paramName=value (que será URL-Encoded) ou uma string já com os parâmetros na forma que devem ser enviados via HTTP (que já devem estar URL-Encoded).

Versão 0.5.1 beta

Todo o código do arquivo main.lua foi refatorado, pois a aplicação estava crescendo e o código deste arquivo estava ficando muito extenso. Assim, pode-se observar que, nessa versão, alguns novos arquivos lua apareceram. Como a aplicação agora possui diferentes formulários (telas) que são acessados à medida que o usuário utiliza os botões no controle remoto, para cada formulário foi criado um arquivo lua separado, contendo as funções que gerenciam a interface do mesmo. Todas as funções do arquivo main.lua foram colocadas em uma tabela e nome main. Assim, agora as funções lá existentes são chamadas com main:nomeDaFuncao(parametros)

Atualizado módulo http, que agora suporta mais parâmetros no envio de uma requisição. Simplificado exemplo de uso das funções deste módulo.

Agora é possível enviar tweets. Na tela principal da aplicação, pode-se pressionar o botão amarelo (F3, Y ou y na Ginga VM) para acessar a tela de envio de tweets. Lá, basta escrever a mensagem e depois pressionar o botão OK no controle remoto (Enter na Ginga VM). Se você estiver usando um controle remoto real, deverá entrar com o texto usando o teclado numérico do controle, assim como faz no telefone celular. Para apagar um caractere use a seta para esquerda. Para dar espaço use a seta para direita. Se estiver executando a partir da Ginga VM, pode usar o teclado convencional. Para inserir números deverá usar o teclado numérico assim como faz no celular (pressionando o botão várias vezes), pois não sei se há uma forma de detectar a existência de um teclado, e assim, desabilitar o uso do teclado numérico para entrada também de caracteres alfabéticos, deixando o mesmo exclusivamente para entrada de números.  Mesmo na Ginga VM, não dá pra usar backspace para apagar um caractere. A aplicação trava (e não é só com esta, em outras que testei trava também) ao pressionar tal tecla. O espaço não é reconhecido na Ginga VM, assim como as teclas de função também não são.

Foi criada um classe TextField para entrada de dados, baseada nos exemplos do tutorial de NCLua. O código foi adequado ao paradigma OO e foram feitas algumas melhorias, como possibilidade de ter um campo com múltiplas linhas, quebra automática de texto, entrada de dados pelo teclado convencional, adição de propriedade maxLenght, entre outras melhorias.

Adicionados mais códigos html de caracteres acentuados no módulo Entities2AccentedChars.

Versão 0.4 beta

Incluído suporte a retweet de mensagens, por meio pressionamento do botão azul do controle remoto (F4, B ou b na Ginga VM). Nenhum feedback está sendo fornecido atualmente. Para conferir, acesse a sua página no Twitter.

Pressionando o botão OK (Enter) durante a exibição de uma mensagem, será carregado o timeline do usuário da mensagem atual. Para voltar pressione o botão amarelo do controle remoto (F3, Y ou y na Ginga VM).

Atualizado módulo http, tendo incluído suporte a requisições HTTP com método POST. Porém, ainda não é possível enviar um conteúdo no corpo da mensagem.

Dúvidas, críticas, sugestões e contribuições (como a criação de melhores imagens para os botões, ou disponibilização de outras sob licença Creative Commons, citando fonte) são bem vindas.

Licença

Doações

Suporte o desenvolvimento e melhorias no projeto. Faça uma doação.


Outros Projetos

Veja outros projetos de TV Digital aqui.

  1. Marcelo
    29, abril, 2010 em 00:09 | #1

    Olá Manoel, tenho acompanhado suas aplicações e tenho achado muito interessante e tem ajuda a mim e meu grupo bastante. sobre esse projeto fiquei com uma dúvida na biblioteca Entities2AccentedChars. Ela por acaso resolveria aquele problema dos caracteres encontrados naquela aplicação a qual você pega um xml d rss com as notícias do uol? Pois, nela os caracteres especiais não são mostrados normalmente na tela.
    Enfim estou gostando muito do trabalho e espero que futuramente possamos trocar informações sobre a TV digital em geral.
    Obrigado desde já.
    Marcelo

  2. 29, abril, 2010 em 00:40 | #2

    Olá Marcelo. Primeiramente obrigado. Bem, a biblioteca citada pode resolver nos casos em que for utilizada codificação HTML para os caracteres acentuados. Mas nos casos em que os caracteres acentuados não estão codificados em HTML, tendo sido inseridos normalmente, os mesmos não serão exibidos na aplicação quando o charset não for UTF-8.

    O RSS da Globo e do R7 são em UTF-8, assim, vão exibir normalmente os acentos. O da uol tá fora do ar agora. Mas acho que o mesmo é ISO-8859-1, assim, não mostrará os acentos.

    Observei que o RSS da Globo que usei como exemplo mudou de endereço. Apesar de ter sido feito um redirecionamento do mesmo, a aplicação não trata isso.

    Em um cenário real, os fornecedores do RSS devem criar o mesmo com charset UTF-8, se quiserem que os mesmos sejam usados em aplicações NCL/Lua.

  3. Marcelo
    29, abril, 2010 em 00:53 | #3

    A certo, de toda forma você sabê se tem alguma biblioteca que trata o ISO-8859-1? na sua aplicação com o rss da uol percebo que no seu vídeo postado na página do mesmo está ok, porém, ao rodar aqui os problemas com os caracteres existem.

  4. Marcelo
    29, abril, 2010 em 01:04 | #4

    A desculpe, na verdade você está usando o do R7 no vídeo, porem um xml ao qual alterei a palicação para que lesse ele e mostrasse na tela o charset sim eh UTF-8 e ainda assim existe os problemas com os caracteres.

  5. 29, abril, 2010 em 07:35 | #5

    @Marcelo
    Pelo que sei, pra TV digital, só UTF. Tem uma biblioteca chamada iconv, mas não dá para usar em TVD.

  6. 29, abril, 2010 em 07:37 | #6

    @Marcelo
    Me manda o link do RSS. O mesmo pode estar usando codificação HTML para os caracteres acentuados.

  7. Marcelo
    29, abril, 2010 em 12:08 | #7

    200.131.219.196/rioshweb/resposta.xml

  8. 29, abril, 2010 em 14:25 | #8

    Apesar de no cabeçalho do XML estar informando que é UTF-8, baixando o XML e abrindo nos editores para Linux (que todos suportam UTF), os caracteres acentuados estão sendo exibidos incorretamente. Logo, o problema é no arquivo e não na aplicação.

  1. 10, março, 2010 em 18:37 | #1