Created
September 7, 2010 15:24
-
-
Save pelletier/568525 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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) | |
[email protected] | |
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