Skip to content

Instantly share code, notes, and snippets.

@nilcolor
Forked from bobuk/speetter.py
Created October 20, 2011 19:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nilcolor/1302006 to your computer and use it in GitHub Desktop.
Save nilcolor/1302006 to your computer and use it in GitHub Desktop.
Говорилка
# -*- coding: utf-8 -*-
# получить twitter можно командой `pip install twitter`
import sys;reload(sys);sys.setdefaultencoding('utf-8')
import twitter
import time
import commands, itertools
consumer_key = ...
consumer_secret = ...
access_key = ...
access_secret = ...
# Как получить ключи можно почитать на http://dev.twitter.com
class Twitter:
def __init__(self):
self.read_state()
self.api = twitter.Twitter(auth=twitter.OAuth(access_key, access_secret, consumer_key, consumer_secret))
def read_state(self):
try:
with open('/var/tmp/speetter.state', 'r') as fl:
(self.since_id, self.since_reply) = map(int, fl.read().split(','))
except ValueError:
print 'oooPs?'
self.since_id, self.since_reply = 1, 1
def write_state(self):
with open('/var/tmp/speetter.state', 'w') as fl:
fl.write('%d,%d' % (self.since_id, self.since_reply))
def get_replies(self):
r = self.api.statuses.mentions(since_id = self.since_reply)
if not r:
return []
self.since_reply = max(r, key = lambda x: x.get('id')).get('id')
return reversed(r)
def get_timeline(self):
r = self.api.statuses.friends_timeline(since_id = self.since_id, retweets=True)
if not r:
return []
self.since_id = max(r, key = lambda x: x.get('id')).get('id')
return reversed(r)
def news(self, callback):
# for status in itertools.chain(self.get_replies(), self.get_timeline()): # if you want full timeline
for status in self.get_replies():
st = status.get('user').get('name').encode('utf-8') + " пишет " + status.get('text').encode('utf-8')
callback(st)
self.write_state()
def say(st):
res = []
for x in str(st).split(' '):
if not x.startswith('http'):
res.append(x)
else:
res.append(' (ссылка) ')
st = ' '.join(res)
st =st.replace('@NilColor', 'Нилколор')\
.replace(':)', '(улыбка)').replace(':-)', '(улыбка)')\
.replace(':(', '(печаль)').replace(':-(', '(печаль)')
print st
commands.getoutput("say -v Milena '%s'" % st)
t = Twitter()
while True:
print 'refresh since ', t.since_id
t.news(say)
time.sleep(90)
@nilcolor
Copy link
Author

say -v Milena '%s' -- так оно точно будет говорить по-русски. Даже если интерфейс английский или еще какой.

@nilcolor
Copy link
Author

подогнал скрипт под pip install twitter и заодно решил слушать только реплаи =)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment