WhoKnowsBot é um robô social. Ele foi desenvolvido como um estudo de caso sobre desenvolvimento de componentes de software associados a computação por humanos (human computation). O estudo é parte do projeto PIBIC-CNPq coordenado pelo prof. Lesandro Ponciano e conduzido pelo aluno bolsista Arthur Vinicius Soares, no curso Bacharelado em Sistemas de Informação da Pontifícia Universidade Católica de Minas Gerais (PUC Minas). O projeto foi executado entre Agosto de 2017 e Julho de 2018.
De forma geral, o robô possui duas funcionalidades principais que podem ser acionadas pelo usuário: atribuição e agregação. Pela funcionalidade de atribuição (escalonamento), o usuário informa ao robô um tópico e o robô responde ao usuário quem (entre as pessoa que seguem o usuário no twitter) mais fala sobre aquele tópico no twitter. Pela funcionalidade de agregação, o usuário informa ao robô um tópico e o robô responde ao usuário quantas (entre as pessoa o usuário segue no twitter) falaram sobre aquele tópico no twitter.
Há uma instância do robô ativa em https://twitter.com/whoknowsbot Informações sobre como conversar com o robô e explicações sobre as respostas dele estão em https://drive.google.com/file/d/1jhFCTByFLM2uOGsqa_BUB0BR9FarKnlV/view.
Abaixo estão mais informações sobre a implementação do robô.
Em twitter_connection.py atribuir valores às variáveis:
- consumerKey - consumerSecret - accessToken - accessTokenSecret
Essas informações estão disponíveis na página para desenvolvedores do Twitter https://apps.twitter.com:
ex:
consumerKey = 'XXXXXXXXXXXXXXXXXXXXXXXXX' consumerSecret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' accessToken = '0000000000-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' accessTokenSecret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
A partir desse momento o script já está pronto para executar.
Deve ser executado o arquivo main.py, responsável por chamar todos os métodos e arquivos durante a execução.
Este script está em um loop ifinito. Quando necessário, deve-se interrompê-lo manualmente.
Com o script executando, sempre que uma novas menções são direcionadas à conta do Twitter associado às variáveis definidas acima, inicia-se a análise de cada menção individualmente.
OBS: Por conta de limites da API, a verificação de novas menções ocorrem de 1 em 1 minuto.
Quando não há novas menções o script hiberna por 1 minutos, e verifica novamente novas menções
A função listener() é a primeira função a ser chamada no script.
Ela é responsável pela coleta de novas menções, e determinar qual a próxima função a ser chamada de acordo com o conteúdo da menção.
Para cada menção que é coletada, a string com seu conteúdo é quebrada, e verifica-se se o termo que o usuário utilizou. As opções padrões são limitadas ao uso dos termos QUEMSABE e QUANTOSSABEM.
A forma como será decidido qual fluxo seguir pode ser personalizada conforme o uso que será dado ao script.
Essa análise foca em descobrir quantos amigos falaram sobre um termo.
É feita a coleta das publicações de quem o mencionador segue (amigos), que foram criadas até 7 dias precedentes ao início da análise e que possuem em seu conteúdo um termo especificado na menção. A função how_many_knows(self, mention) busca quais amigos utilizaram o termo em seus tweets e faz uma contagem desses amigos.
Veja abaixo o diagrama de sequência que representa essa análise:
Essa análise foca em descobrir quem é o melhor seguidor para responder algo sobre um termo.
É feita a coleta das publicações de quem segue o mencionador (seguidores), que foram criadas até 7 dias precedentes ao início da análise e que possuem em seu conteúdo um termo especificado na menção. A da função who_knows(self, mention) busca quais seguidores utilizaram o termo em seus tweets.
Em seguida, busca-se a publicação mais antiga, que servirá de referência para selecionar o melhor seguidor.
Para cada seguidor é feito o cálculo de uma pontuação que representa sua aptidão para responder alguma pergunta sobre o termo especificado. Sua pontuação aumenta a cada publicação que possui o termo, conforme a fórmula abaixo:
- Pw é pontuação do seguidor w; - a é publicação do seguidor w; - Tw,a é o timestamp da publicação a; - T* é o timestamp da publicação mais antiga - now é timestamp no momento da decisão de escalonamento (horário do sistema).
Ao final é retornado o seguidor com a melhor pontuação.
Veja abaixo o diagrama de sequência que representa essa análise:
Após a análise de cada menção, o mencionador é respondido, conforme o resultado opções dispiníveis no arquivo mentions_replies.py, podendo ser:
Para análise do tipo QUANTOSSABEM:
- reply_mention_how_many(self, mention_id, term, user, users_amount)
Para análise do tipo QUEMSABE:
- reply_mention_who_know(self, mention_id, term, user, suitable_user)
Ou para menções em formato inválido:
- reply_invalid_tweet(self, mention_id, user)