опрос вопрос pystackexchange
Итак, я довольно новичок в python, и сегодня у меня была идея сделать скрипт, который опрашивает stackoverflow для моей репутации, и когда он меняется, он отправляет электронное письмо, которое отправляется на мой телефон в виде текста.
Часть электронной почты работает, но по какой-то причине я не могу получить правильный опрос, поэтому я решил, что посмотрю, может быть, вы, ребята, захотите попробовать.
Вот мой код:
import sys
from stackauth import StackAuth
from stackexchange import Site, StackOverflow
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email import Encoders
import os
import time
gmail_user = "email@gmail.com"
gmail_pwd = "password"
def mail(to, subject, text):
msg = MIMEMultipart()
msg['From'] = gmail_user
msg['To'] = to
msg['Subject'] = subject
msg.attach(MIMEText(text))
mailServer = smtplib.SMTP("smtp.gmail.com", 587)
mailServer.ehlo()
mailServer.starttls()
mailServer.ehlo()
mailServer.login(gmail_user, gmail_pwd)
mailServer.sendmail(gmail_user, to, msg.as_string())
# Should be mailServer.quit(), but that crashes...
mailServer.close()
old_rep = None
while True:
user_id = 731221 if len(sys.argv) < 2 else int(sys.argv[1])
print 'StackOverflow user %d\'s accounts:' % user_id
stack_auth = StackAuth()
so = Site(StackOverflow)
accounts = stack_auth.associated(so, user_id)
REP = accounts[3].reputation
print REP
if REP != old_rep:
old_rep = REP
mail("email@email.com","REP",str(REP))
time.sleep(10)
В настоящее время, если вы печатаете REP, он сначала прав, но не обновляется, если меняется мой представитель. В идеале-да. Любая помощь очень ценится. Заранее спасибо.






Ответы - опрос вопрос pystackexchange / pystackexchange polling issue

07.05.2011 06:13:14
Это упрощенный пример, который будет цикл правильно:
import time
from stackauth import StackAuth
from stackexchange import Site, StackOverflow
rep = None
while True:
stack_auth = StackAuth()
so = Site(StackOverflow)
accounts = stack_auth.associated(so, 641766) # using my id
so_acct = filter(lambda x: x.on_site.api_endpoint.endswith('api.stackoverflow.com'), accounts)[0] # filtering my accounts so I only check rep on stackoverflow
if rep != so_acct.reputation:
rep = so_acct.reputation
print rep
# send e-mail
time.sleep(30)
Я добавил строку для фильтрации учетных записей, чтобы она проверяла только вашу репутацию на соответствующем сайте. Вы использовали индекс, Я понятия не имею, является ли это стабильным или нет, я бы предположил, что нет. Опрос каждые 10 секунд (как в исходном примере) может быть немного много, может быть, сделать что-то более разумное, как каждые 5 минут? Вам действительно нужно до минуты обновление вашей репутации? Подумайте о том, чтобы просто написать это как задание cron и запустить его каждые 5, 10, 15 минут.
