Первый скребок экрана Python и сценарий SMTP не будут оцениваться должным образом - PullRequest
0 голосов
/ 22 марта 2012

Вот мой сценарий с очищенными личными битами.

import urllib, urllib2, cookielib

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
resp3 = opener.open('https://www.mynexia.com/login')
resp4 = resp3.read().split('input name=\"authenticity_token\" type=\"hidden\" value=\"')
resp5 = resp4[1].split('\" /></div>')
login = 'website username'
password = 'website pass'
authenticity_token = resp5
login_data = urllib.urlencode({'login' : login, 'password' : password,'authenticity_token' : authenticity_token})
opener.open('https://www.mynexia.com/session', login_data)
resp = opener.open('https://www.mynexia.com/houses/ourstaticaccountpage/climate')
resp1 = resp.read().split('<div class=\"temperature\"><span>')
resp2 = resp1[1].split('</span></div>')

int(resp2[0])


if resp2[0] > 75:

    import smtplib
    import string
    SUBJECT = "Temperature is rising!"
    TO = "helpdesk@whoever.blah"
    FROM = "me@gmail.com"
    text = "Temperature is " + resp2[0]
    BODY = string.join((
        "From: %s" % FROM,
        "To: %s" % TO,
        "Subject: %s" % SUBJECT,
        "",
        text
        ), "\r\n")
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.ehlo()
    server.starttls()
    server.ehlo()
    server.login("me@gmail.com", "gmailpass")
    server.sendmail(FROM, [TO], BODY)

elif resp2[0] <= 75:

    import smtplib
    import string
    SUBJECT = "Temperature is ok"
    TO = "helpdesk@whereever.blah"
    FROM = "me@gmail.com"
    text = "Temperature is " + resp2[0]
    BODY = string.join((
        "From: %s" % FROM,
        "To: %s" % TO,
        "Subject: %s" % SUBJECT,
        "",
        text
        ), "\r\n")
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.ehlo()
    server.starttls()
    server.ehlo()
    server.login("me@gmail.com", "gmailpass")
    server.sendmail(FROM, [TO], BODY)

Он работает нормально, за исключением того, что всегда оценивает resp2[0] как > 75 независимо от его значения.Смысл этого сценария заключается в том, чтобы предупредить меня, когда в комнате, где работают некоторые чувствительные машины, становится теплее, чем на 75 градусов.Веб-сайт, с которого я работаю, позволяет отправлять оповещения только в том случае, если он превышает 90. К тому времени я рискую отключить машины, поэтому я хотел предупредить себя раньше.Я собираюсь запускать его с помощью cronjob каждые 15 минут, и как только я получу правильную инструкцию if-else, я просто собираюсь <= dump в файл журнала вместо отправки «Всеок бдить. "Любые предложения о том, почему я не в базовой математике?Есть проблема с моим <code>int(resp2[0])?Разве это не база 10 по умолчанию?

Ответы [ 2 ]

0 голосов
/ 22 марта 2012

Вы пытались зарегистрировать значение resp2 [0], чтобы увидеть, какие значения вы получаете? Простой

print resp2[0]

во время отладки ...

0 голосов
/ 22 марта 2012

resp2 - это список строк . Строка больше, чем целое число. Вам нужно позвонить int на это перед сравнением.

На самом деле, я вижу, что вы звоните int - но вы ничего не делаете с результатом. Выполнение int(resp2[0]) не преобразует содержимое resp2[0] в целое число. Это просто возвращает преобразованное значение. Если вы ничего не назначаете, это просто отбрасывается. Вам необходимо присвоить ее новой переменной, а затем использовать эту переменную в ваших операторах if.

...