17 de fevereiro de 2008

eye of the tiger <=> you've got e-mail

Andava a deambular pelo site da MAKE e deparei-me com um post interessante sobre um notificador de e-mails físico [1].
O notificador consiste em acender um candeeiro todo pipi quando existem mensagens por ler na caixa de correio do GMail. A implementação é simples e demonstra o que se pode fazer com a plataforma de prototipagem arduino[2] e um pouco de imaginação.

Esta é a minha resposta a este projecto, e consiste em tocar uma musiquita (Eye of the Tiger rules) no portátil em vez de acender o candeeiro.
Este script é baseado em [1] e verifica se tenho mensagens novas a partir do Atom feed da minha inbox :
#!/usr/bin/env python
import urllib2, re, sys
from play_wav import playWAV

#Settings - Change these to match your account details
USERNAME="username@gmail.com"
PASSWORD="password"

PROTO="https://"
SERVER="mail.google.com"
PATH="/gmail/feed/atom"

# Get Gmail Atom feed
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, SERVER, USERNAME, PASSWORD)
authhandler = urllib2.HTTPBasicAuthHandler(passman)
opener = urllib2.build_opener(authhandler)
urllib2.install_opener(opener)
page = urllib2.urlopen(PROTO + SERVER + PATH)

# Find the mail count line
for line in page:
count = line.find("fullcount")
if count > 0: break

# Extract the mail count as an integer
newmails = int(re.search('\d+', line).group())

# If new mails, play the song to me
if newmails > 0:
playWAV('eye_of_the_tiger.wav')
else: "nopes - nobody likes you"

O seguinte script disponibiliza a função playWAV usada no script anterior e depende do módulo PyMedia[3].

#! /usr/bin/env python
import sys

def playWAV( fname ):
import pymedia.audio.sound as sound
import time, wave
f= wave.open( fname, 'rb' )
sampleRate= f.getframerate()
channels= f.getnchannels()
format= sound.AFMT_S16_LE
snd1= sound.Output( sampleRate, channels, format )
s= ' '
while len( s ):
s= f.readframes( 1000 )
snd1.play( s )

# Since sound module is not synchronous we want everything
# to be played before we exit
while snd1.isPlaying(): time.sleep( 0.05 )

# --------------------------------------------------------------------------
# Play a wav file through the sound object
# http://pymedia.org/
if __name__== '__main__':
if len( sys.argv )!= 2:
print "Usage: play_wav "
else:
playWAV( sys.argv[ 1 ] )

Tal como referido em [1], este script pode ser adicionado a um crontab para correr periodicamente. Claro que ouvir o "Eye of the Tiger" sempre que existe correio novo pode ser cansativo mas isso fica ao gosto de cada um, em alternativa usa-se uma playlist e variam-se as músicas :D

ps. "#$"#%& não consigo postar código sem perder a indentação!
ps2. ainda mais interessante é usar um ficheiro de som com a voz sensual de uma gaja

[1]. how to make a physical gmail notifier
[2]. Arduino.
[3]. PyMedia

2 comentários:

Šaяa disse...

Ehhh Ehhh tas um gada geek!!! :p
Isso nem parece teu!Ehehehehe :)

mouro disse...

o quê?
não mde digas que não gostas do eye of the tiger?!?!?!?

;)