Acionar um LED pelo Twitter

Hoje irei demonstrar pra vocês uma brincadeira que fiz usando o Raspberry.
Estava em casa, sábado de madrugada sem sono, resolvi brincar com o Raspberry até pegar no sono. Resultado disso foi que além de não ter pego no sono, fiquei cada vez mais entusiasmado.
Mas enfim vamos ao que interessa!!!
Iremos utilizar o diagrama e a conexão do LED do primeiro posto sobre como ligar o LED  aqui.

Primeiro passo é ir no site do Twitter (https://twitter.com/apps). Se já estiver logado irá abrir igual abaixo, caso não, faça o login no seu Twitter (clique nas imagens para abrir maior)

new_app

Clicando no “Create New App”, irá abrir uma tela que você irá digitar o nome do seu aplicativo, descrição e um site (esse site é obrigatório, mas para o nosso caso não é importante, pode digitar igual a imagem abaixo.
create_app

Após a confirmação dos termos, clique no botão para criar o APP. Se tudo der certo ele irá entrar em uma tela com 4 abas, clique na “Keys and Access Tokens”

keys_tokens

Clique em “Create my access token”

create_tokenSe tudo deu certo você terá as informações do seu token corretamente:
token_criado
Feito tudo isso, iremos em nosso Raspberry. e a primeira coisa que iremos fazer é a instalação do Tweepy, que é a biblioteca que utilizaremos para a comunicação com o Twitter no Python.

Faremos o seguinte:
Abra o lxterminal:

sudo apt-get update && sudo apt-get install python-setuptools 
sudo easy_install tweepy

No meu Raspberry a instalação do tweetpy pelo easy_install não funcionou. Caso no seu não funcione faça o seguinte comando:

sudo easy_install pip
sudo pip install tweepy

Assim que terminar a instalação você já poderá utilizar a biblioteca Tweetpy no seu Python.

 

Como disse acima, utilizaremos o nosso LED no GPIO18 para piscar.
Fiz um script que a hashtag que será pesquisada é passada por parâmetro, para ficar mais simples o uso:
Irei gravar um arquivo texto contendo a data do último Tweet, pois assim não entrará em um loop infinito com somente uma hashtag, então gravamos e comparamos se o Tweet atual tem data diferente da que temos conosco:

import RPi.GPIO as GPIO         
import sys,  time, tweepy , os
GPIO.setmode(GPIO.BOARD)   
GPIO.setwarnings(False)    
GPIO.setup(18, GPIO.OUT) 
if not (os.path.isfile('tweets.txt')):
  f = open('tweets.txt','w');
  f.write('0');
  f.close();

# == Informações para autenticar no OAUTH ==
consumer_key= 'MINHACHAVECUSTOMER_TWITTER'
consumer_secret= 'SENHA SECRET'


access_token= 'TOKEN DE ACESSO'
access_token_secret= 'SENHA'

print "Procurando por: "+sys.argv[1]

while True:
  auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
  auth.set_access_token(access_token, access_token_secret)	
  for x in range(1,6):
    api = tweepy.API(auth)
    searchValue = '%23'+sys.argv[1];
    public_tweets = api.search(searchValue) 
    if (public_tweets):
      tweet = public_tweets[0]
      ultimaPublicacao = str(tweet.created_at);
      print "Ultima Publicacao em : " + ultimaPublicacao
      f = open('tweets.txt','r');	
      data = f.read()
      f.close();
      if(ultimaPublicacao != data):
        print ultimaPublicacao+ " -- " + data
        print "NOVO TWEEETTTT!!!!!!!!!!!!!"
        GPIO.output(18, GPIO.HIGH) 
        time.sleep(0.2);
        GPIO.output(18, GPIO.LOW) 
        time.sleep(0.2);
        GPIO.output(18, GPIO.HIGH) 
        time.sleep(0.2);
        GPIO.output(18, GPIO.LOW) 
        time.sleep(0.2);
        GPIO.output(18, GPIO.HIGH) 
        time.sleep(0.2);
        GPIO.output(18, GPIO.LOW) 
        time.sleep(0.2);
        GPIO.output(18, GPIO.HIGH) 
        time.sleep(0.2);
        GPIO.output(18, GPIO.LOW) 
        time.sleep(0.2);
        f = open('tweets.txt','w');
        f.write(ultimaPublicacao);
        f.close();
        time.sleep(60);
      else:
        print "Nada novo encontrado";
        time.sleep(60);

Coloquei um sleep de 60 segundos pois o Twitter tem uma série de restrições com relação a várias buscas com curto espaço de tempo então o comando será testado a cada 1 minuto. Também coloquei um for x in range dentro do While True, pois também o Twitter expira a chave de conexão a cada X minutos, então a cada 5 pesquisas eu refaço a autenticação, assim evita que a conexão seja espirada.

Salvamos o arquivo em alguma pasta da nossa escolha e  colocamos permissão de escrita nela (eu costumo fazer chmod 777 NOMEDAPASTA)

feito isso podemos executar :
sudo python seuarquivo.py SUAHASHTAG , porém a SUAHASHTAG será sem o #.

Feito isso pode postar no seu Twitter ou qualquer pessoa qualquer mensagem com a   hashtag escolhida que o LED irá piscar.

Espero que tenham gostado.