
Meu novo queridinho de programação é um raspberrypi. Tenho feito coisas interessantes com ele usando Python. E em breve teremos a PyCon Sweden acontecendo por aqui. Então resolvi criar um robôzinho de twitter pra postar snapshots da apresentação. Pretendo colocar minha webcam externa nele (uso pros hangouts) e deixar ele pegando as imagens da conferência e postando.
No script a mensagem é estática, mas eu pretendo alterar para algo que pegue uma lista com horários, nomes e temas pra deixar tudo junto na postagem. Vai ficar interessante.
O código parcialmente feito, que veio o obamawatch, é esse aqui:
#! /usr/bin/python -u
# -*- coding: utf-8 -*-
"""
Based in:
http://stackoverflow.com/questions/15870619/python-webcam-http-streaming-and-image-capture
"""
SAVEDIR = "/tmp"
import pygame
import pygame.camera
import time
import sys
import os
import twitter
import ConfigParser
configuration = "/home/helio/.twitterc"
def TweetPhoto():
"""
"""
print "Pygame init"
pygame.init()
print "Camera init"
pygame.camera.init()
# you can get your camera resolution by command "uvcdynctrl -f"
cam = pygame.camera.Camera("/dev/video1", (1280, 720))
print "Camera start"
cam.start()
time.sleep(1)
print "Getting image"
image = cam.get_image()
time.sleep(1)
print "Camera stop"
cam.stop()
timestamp = time.strftime("%Y-%m-%d_%H%M%S", time.localtime())
year = time.strftime("%Y", time.localtime())
filename = "%s/%s.jpg" % (SAVEDIR, timestamp)
print "Saving file %s" % filename
pygame.image.save(image, filename)
cfg = ConfigParser.ConfigParser()
print "Reading configuration: %s" % configuration
if not os.path.exists(configuration):
print "Failed to find configuration file %s" % configuration
sys.exit(1)
cfg.read(configuration)
cons_key = cfg.get("TWITTER", "CONS_KEY")
cons_sec = cfg.get("TWITTER", "CONS_SEC")
acc_key = cfg.get("TWITTER", "ACC_KEY")
acc_sec = cfg.get("TWITTER", "ACC_SEC")
print "Autenticating in Twitter"
# App python-tweeter
# https://dev.twitter.com/apps/815176
tw = twitter.Api(
consumer_key = cons_key,
consumer_secret = cons_sec,
access_token_key = acc_key,
access_token_secret = acc_sec
)
print "Posting..."
tw.PostMedia(status = "Testing python twitter and PostMedia() for #pyconse timestamp=%s" % timestamp,
media = filename)
print "Removing media file %s" % filename
os.unlink(filename)
if __name__ == '__main__':
try:
TweetPhoto()
except KeyboardInterrupt:
sys.exit(0)
Acabei usando /dev/video1 pois estava testando a webcam no laptop, que já tem outra webcam interna e quando rebootei com a câmera externa, acabou jogando a dele pra esse device.
Outra melhoria que implementei foi a de mover os tokens de autenticação pra um arquivo externo e ler via ConfigParser(). Assim fica mais limpo o código e possível de enviar pro github (e sem mandar suas chaves privadas junto :).