2011-05-07 2 views
0

그래서 저는 Python을 처음 접했을뿐입니다. 그리고 오늘 내 담당자를 위해 stackoverflow를 폴링하는 스크립트를 만드는 아이디어를 얻었습니다. 그리고 변경 사항이있을 때 이메일을 보내면 내 전화로 보내집니다. 본문.pystackexchange 폴링 문제

전자 메일을 보내는 부분이 작동하지만 어떤 이유로 나는 폴링 권한을 얻을 수 없으므로 아마 여러분들이 찌르기를 원한다면 내가 볼 수 있을지 결정했습니다.

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 protected]" 
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 protected]","REP",str(REP)) 
    time.sleep(10) 

당신이 REP를 인쇄하면 현재 그것은 바로 처음이지만, 내 담당자가 변경되면 나던 갱신 :

여기 내 코드입니다. 이상적입니다. 도움을 주시면 대단히 감사하겠습니다. 미리 감사드립니다.

+0

지긋 지긋한 서식을 지정하면 문제가 해결됩니다. 죄송합니다. – MikeVaughan

+0

들여 쓰기 오류가있는 것 같습니다. while 루프에서 코드를 수정해야합니다. 폴링이 제대로 작동하지 않는다고 말하면 무엇을 기대합니까? 현재의 행동은 무엇입니까? – zeekay

+0

실제 코드에 들여 쓰기 오류가 있다고 생각하지 않습니다. 서식을 지정하는 데 stackoverflows를 사용하지 않았습니다. 현재 REP를 인쇄하면 처음에는 적합하지만 내 담당자가 변경되면 업데이트되지 않습니다. 이상적입니다. – MikeVaughan

답변

1

이것은 간단한 예입니다 제대로 루프 것이다 :

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 분마다 실행하도록하십시오.

+0

이 중 하나가 작동하지 않습니다, 스스로 그것을보십시오. 담당자가 변경 될 때 수행 할 작업을 테스트하십시오. : D – MikeVaughan

+0

나는 그것을 시도했으나 효과가 있었다. – zeekay