Horários
Para obter os horários foi feito web crawling, armazenando os dados numa base de dados (após parsing dos mesmos) e permitindo pesquisa sobre esta a partir de um Web service (SOAP).
Crawling
Para fazer web crawling foi utilizada a ferramenta Scrapy. Este permite fazer web crawling e extracção de dados estruturados, que depois poderá ser usado para um vasto tipo de aplicações. Foi desenvolvido em Python.
Para começar é preciso criar um novo projecto scrapy usando o comando “scrapy startproject horarios”.
Isto cria os ficheiros e pastas necessários.
scrapy.cfg (ficheiro de configuração do projecto)
horarios/ (módulo de python do projecto)
horarios/items.py (define os items a construir)
horarios/pipelines.py (ficheiro de pipelines do projecto)
horarios/settings.py (ficheiro de propriedades do projecto)
horarios/spiders/ (directório no qual são colocados os “spiders” criados)
Os Items são “containers” que irão guardar a informação obtida. Os itens são definidos em item.py.
A classe que vai percorrer as páginas e extrair a informação é chamada spider. É definida inicialmente uma lista de hiperligações a pesquisar, das quais vão ser extraídos os itens.
Um spider tem que ter obrigatoriamente três atributos:
name (identifica o spider)
start_url (onde é iniciado o processo de craling)
Método parse que irá ser chamado com o objecto Response obtido de cada URL.
O spider é o que vai fazer crawling às páginas da MoveAveiro chama-se horario_spider.py.
Este ficheiro trata de ler o conteúdo das páginas, fazer o parsing deste e guardar os dados na base de dados.
Para iniciar o processo de crawling usa-se o comando: scrapy crawl hor.org, sendo hor.org o nome do spider.
Parsing
Neste exemplo são seleccionadas todas as colunas pertencentes à classe “excel” e é extraído o seu conteúdo/texto.
Base de Dados
Para a base de dados foi usado o SQLite. SQLite é uma biblioteca open-source de software que permite construir uma base de dados SQL que não necessita de servidor ou configurações complicadas.
Actualização da Base de Dados
Para evitar a leitura constante da página, é agendado o crawling para as 17h de cada dia. Para isso é usado o ficheiro crontab do linux:
00 17 * * * linda sh /home/linda/ua/es/horarios/s.sh
O ficheiro s.sh inicia o processo de crawling. O spider obtém o hash da página e guarda numa base de dados só com uma tabela para esse fim. Cada vez que é executado compara o novo hash com o guardado anteriormente, extraindo apenas a nova informação se o hash for diferente. Desta forma é apenas actualizada a base de dados dos horários se a página tiver sido alterada.
Web Service SOAP
Para a pesquisa na base de dados foi implementado um web service SOAP, utilizando a biblioteca do python soaplib. Este Web service obtém a hora actual e retorna a hora do próximo autocarro para a paragem pretendida.
A versão final do que será o serviço de localização geográfica encontra-se disponível hoje. Como já foi esclarecido no post anterior relacionado com este tema, o cliente portador do terminal Android desloca-se pelas ruas, e quando a distância entre a sua posição actual e a posição anterior for maior que 100 metros, a sua actualização é actualizada no servidor.
Está a ser utilizado o protocolo XMPP para o envio da mensagem do terminal para o servidor. Esta mensagem consiste num campo IMEI (número de identificação único do terminal) e de dois campos, latitude e longitude. Optou-se pela utilização do serviço Openfire como servidor, pois facilita consideravelmente a sua configuração e possui uma interface web bastante intuitiva para a sua manipulação.
Sempre que o servidor recebe uma nova mensagem de um terminal, são validados os campos desta. É efectuada uma pesquisa na base de dados para determinar se o IMEI já se encontra presente. Caso afirmativo, a posição é refrescada; caso contrário, é criada uma nova entrada com o novo IMEI e as respectivas coordenadas.
A informação da localização de um determinado utilizador pode ser adquirida utilizando o RESTful web service criado para esse efeito. Para adquirir os dados me formato JSON, basta fazer um GET para
http://localhost:8080/DriveMeGeoServerWe
Um possível futuro passo consiste em adicionar segurança a este tipo de pedidos, visto que desta forma basta o conhecimento do IMEI para a obtenção da localização.
Terminal adquire nova posição.
Servidor actualiza a posição na base de dados MySQL.
Utilizando o web service para adquirir o objecto JSON.
Utilizando o web service para adquirir a localização em formato XML.
Neste momento já se conseguiu colocar o OpenIMS a redireccionar as mensagens SIP INVITE para o Sailfin, sendo assim possivel desviar a chamada para a Media Gateway.
"Next steps:"
António Pinho
Carlos Guimarães
Um dos requisitos para o sistema do DriveMe corresponde ao conhecimento da posição geográfica do utilizador num dado momento. Só assim será possível agregar a informação que realmente interessa, no que respeita à filtração de horários.
Foi escolhido o sistema operativo Android 2.2 para desenvolver esta aplicação visto ser OpenSource e facilitar o acesso ao hardware do dispositivo, neste caso o GPS. Para tal recorreu-se ao emulador disponível em http://developer.android.com/sdk/index.h
Para a implementação optou-se pelo uso do protocolo XMPP para o envio das coordenadas, assim como do IMEI que permite associar ao dispositivo. A biblioteca utilizada foi a Smack. Numa primeira fase tentou-se sem sucesso o uso da biblioteca em http://www.igniterealtime.org/projects/s
Assim sendo, uma ligação ao "talk.google.com" é realizada com um id definido (neste caso uma conta GMail activa). São adquiridas as coordenadas e o IMEI, e colocadas numa string XML. Esta string é enviada posteriormente para o endereço destino.
Na imagem seguinte o emulador adquire a nova posição, e a mensagem é enviada logo de seguida para o chat do GMail.
após algum esforÁo foi possÌvel finalmente efectuar uma chamada entre 2 clientes SIP IMS, com o open-ims core a correr.
Foram utilizados 2 computadores ( um deles tinha uma máquina virtual a correr o open-ims ) e cada um deles tinha um cliente Sip IMS instalado ( MONSTER e Mercuro Bronze).
No final a alice e o bob conseguiram falar um com o outro!
Arquitectura
FHoSS a correr
Portal WEB de configuração do FHoSS
ICSCF a correr
PCSCF a correr
SCSCF a correr
Mercuro com a chamada já estabelecida
MONSTER a receber o pedido de chamada
MONSTER com a chamada estabelecida
António Pinho
Carlos Guimarães
Para a elaboração deste projecto, foi constituída a seguinte equipa:
Serviço de chamadas - Carlos Guimarães e António Pinho;
Geo-localização - José Melo;
Serviços SMS - Diogo Teles;
Consulta dos horários dos autocarros (Scrapper) - Linda Velte.

“DriveMe” um projecto a ser desenvolvido na cadeira de "Engenharia de Serviços". Este projecto tem como objectivo facilitar o acesso a transportes públicos por pessoas invisuais. Para apresentar este serviço e a sua arquitectura foi feita uma pequena apresentação, onde são apresentados os objectivos, a arquitectura e os serviços da solução encontrada:
. Scrapper
. Geo Localização - Concluí...
. Geo Localização - Cliente...
. Equipa e atribuição de ta...