опрос вопрос pystackexchange

опрос вопрос pystackexchange

07.05.2011 05:51:27 Просмотров 18 Источник

Итак, я довольно новичок в 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, он сначала прав, но не обновляется, если меняется мой представитель. В идеале-да. Любая помощь очень ценится. Заранее спасибо.

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/5918627/pystackexchange-polling-issue#comment6815756_5918627
проклятое форматирование, я исправлю его, голый со мной. Извиняюсь.
https://stackoverflow.com/questions/5918627/pystackexchange-polling-issue#comment6815787_5918627
Кажется, есть некоторые ошибки отступа, вы должны исправить свой код в цикле while. Когда вы говорите, что опрос не работает правильно, что вы ожидаете от него, каково текущее поведение?
https://stackoverflow.com/questions/5918627/pystackexchange-polling-issue#comment6815805_5918627
я не думаю, что есть какие-либо ошибки отступа в фактическом коде, я не привык к форматированию stackoverflows. В настоящее время, если вы печатаете REP, он сначала прав, но не обновляется, если меняется мой представитель. В идеале-да.
https://stackoverflow.com/questions/5918627/pystackexchange-polling-issue#comment6815835_5918627
Вы должны исправить ошибки отступа в своем сообщении, чтобы люди были более склонны помогать.
https://stackoverflow.com/questions/5918627/pystackexchange-polling-issue#comment6815859_5918627
Я работаю над этим. Извиняюсь. Есть ли более простой способ вставить код? Я печатаю четыре пробела на каждой строке, это кажется глупым.
https://stackoverflow.com/questions/5918627/pystackexchange-polling-issue#comment6815883_5918627
Вы можете использовать кнопку {} формат кода на выделениях текста, чтобы отступить его правильно все сразу.

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

zeekay

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 минут.

https://stackoverflow.com/questions/5918627/pystackexchange-polling-issue/5918711#comment6843699_5918711
Это тоже не работает, попробуйте сами. И убедитесь, что вы проверяете, что он делает, когда ваша репутация меняется. :Д