Skip to content

Instantly share code, notes, and snippets.

@pelletier
Created September 7, 2010 15:24
Show Gist options
  • Save pelletier/568525 to your computer and use it in GitHub Desktop.
Save pelletier/568525 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
This is a simple Twitter to email script.
You need:
- An SMTP server (such as Sendgrid.net).
- A Redis server.
- Python.
Don't forget:
- pip install redis
- pip install twitter
- replace every XXX with a correct value
Author:
Thomas Pelletier (@kizlum)
thomas@pelletier.im
http://thomas.pelletier.im/
License:
MIT (see http://opensource.org/licenses/mit-license.php)
"""
from email.mime.text import MIMEText
from os import path
import smtplib
import time
from twitter.oauth_dance import oauth_dance
from twitter.oauth import read_token_file
import twitter
import redis
from utfmail import sendmail
#: Refresh interval in seconds
REFRESH_INTERVAL = 120
#: Email to forward to
TO_EMAIL = 'XXX'
#: From email
FROM_EMAIL = 'XXX'
#: Twitter consumer key
CONSUMER_KEY = "rqA7lf6RyLewRcotlHsA"
#: Twitter secret key
CONSUMER_SECRET = "7cgflVkQpULjvjl1nhtaSqne2QQR3yKYKKmQwpln5Y"
#: File to store tokens in
TOKEN_FILE = path.join(path.dirname(path.abspath(__file__)), ".oauth_tokens")
#: Application name
APP_NAME = "mailingtwit"
#: SMTP server name
SMTP_HOST = "XXX"
#: STMP server port
SMTP_PORT = 587
#: SMTP server login
SMTP_LOGIN = "XXX"
#: STMP server password
SMTP_PASSWORD = "XXX"
#: Redis server name
REDIS_HOST = "XXX"
#: Redis database number
REDIS_DB = "3"
#: Redis base key
REDIS_BASE = "mailingtwit"
class MailingTwit(object):
def __init__(self, **kwargs):
self.refresh_interval = kwargs.get('refresh_interval', 120)
self.redis = redis.Redis(host = REDIS_HOST,
db = REDIS_DB)
if not path.exists(TOKEN_FILE):
self.boot_oauth()
oauth_token, oauth_token_secret = read_token_file(TOKEN_FILE)
self.oauth = twitter.OAuth(oauth_token,
oauth_token_secret,
CONSUMER_KEY,
CONSUMER_SECRET)
self.twitter = twitter.Twitter(auth=self.oauth,
api_version=1,
domain='api.twitter.com')
def boot_oauth(self):
oauth_dance(APP_NAME,
CONSUMER_KEY,
CONSUMER_SECRET,
TOKEN_FILE)
def run(self):
while True:
self.timeline = self.twitter.statuses.home_timeline()
print "* Refresh *"
smtp_server = smtplib.SMTP(SMTP_HOST, SMTP_PORT)
smtp_server.ehlo()
smtp_server.starttls()
smtp_server.login(SMTP_LOGIN, SMTP_PASSWORD)
for element in self.timeline:
if not self.redis.sismember('%s:done' % REDIS_BASE, element['id']):
name = element['user'].get('name', '')
screen_name = element['user'].get('screen_name', '')
text = element.get('text', '')
final_text = "%s (@%s)\n\n%s" % (name, screen_name, text)
print final_text
subject = "[Mailingtwit] %s status" % name
from_email = '%s <%s>' % (screen_name, FROM_EMAIL)
sendmail(smtp_server, from_email,
TO_EMAIL,
subject,
final_text)
self.redis.sadd('%s:done' % REDIS_BASE, element['id'])
smtp_server.quit()
time.sleep(REFRESH_INTERVAL)
if __name__ == '__main__':
t2m = MailingTwit(
refresh_interval = 300,
)
t2m.run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment