четверг, 7 июня 2012 г.

Скрипт, отлавливающий изменения на странице вконтакте

Первый скриптик самый простой. Некоторые группы вконтакте или конкретные люди могут организовывать розыгрыши призов. Они выкладывают сообщение -  вы должны быстренько среагировать на него и что-то получить :) Или же немного другая ситуация - вы очень ждете новых постов вашего друга, и вам бы очень хотелось, чтобы если что-то изменилось на его стене, вам пришло письмо на электронную почту.
Собственно скрипт этим и занимается, при изменении страницы друга(или группы) он отсылает, что она изменена, и шлет оповещение на почту. Как вы понимаете, потом это сообщение можно послать на мобильник или на другой электронный носитель, чем мы и займемся в следующий раз, а сейчас скрипт в студию:


Функция отправки сообщения.
 def sendMessage(text, fromaddr, toaddrs, username, passwordmail):
        if len(text) == 0:
                print "Empty message"
                return
        import smtplib
        from email.mime.multipart import MIMEMultipart
        from email.mime.text import MIMEText
        msg = MIMEMultipart('alternative')
        msg['Subject'] = "Vkontake_Frend"
        msg['From'] = fromaddr
        msg['To'] = toaddrs

        mime_text = MIMEText(text, 'plain', 'utf-8')
        msg.attach(mime_text)
        server = smtplib.SMTP('smtp.yandex.ru:587')#ПОРТ ЯНДЕКСА
        server.starttls()
        server.login(username,passwordmail)
        server.sendmail(fromaddr, toaddrs, msg.as_string())
        server.quit()

 Инициализация вконтакте (вы должны понимать, что при попытке получения страницы друга/группы без регистрации, получите лишь страницу привествия, что не радует). Используем библиотеку mechanize, которая замечательно работает с куками.
def initVK():
    br = mechanize.Browser()
    cj = cookielib.LWPCookieJar()
    br.set_cookiejar(cj)
    br.set_handle_equiv(True)
    br.set_handle_gzip(True)
    br.set_handle_redirect(True)
    br.set_handle_referer(True)
    br.set_handle_robots(False)
    br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
    br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
    br.open('http://vk.com')
    br.select_form(nr=0)
    br.form['email'] = "___" #ваш е-mail
    br.form['pass'] = "___"#ваш пароль
    br.submit()
    return br

Получение кода html-странички:
def getHTML(br, stranica):
    br.open(stranica)
    html = br.response().read()
    return html

А теперь собственно сам быдло-код проверки новых сообщений:
tek=[]
    pred=[]
    j=0
    kk=initVK()
    while True:
        a=getHTML(kk, '____')#сюда вносим адрес друга/группы
        a=list(a.split('\n'))
               for i in a:
           if ('<div class="wall_text"><a class="author" href="/____">' in i) : #во href вносим имя пользователя вконтакте, href="/rapter"
           tek.append(i)
           if j==0:
                pred=tek[:]
                j=1  
           else:
             if tek!=pred:
                 print "Были изменения!"
                 pred=tek[:]
                 sendMessage("Были изменения!", fromaddr, toaddrs, username, passwordmail)
             else: print "Изменений не было!"
        tek=[]
        time.sleep(60)      
 К слову сказать, здесь используется smtp сервер яндекса, но никто не запрещает использовать вам любой другой - гуглите.

Вот собственно и все, удачных доработок :) 

Комментариев нет:

Отправить комментарий