пятница, 8 июня 2012 г.

Новостной граббер для Kindle 3

Итак, скрипт второй. Kindle 3 wifi+3G - воистину гиковое устройство и не только потому, что в нем есть бесплатный интернет (что даёт уже не плохие возможности), но и потому, что amazon придумал и реализовал очень интересный сервис. При покупке книги вы регистрируетесь на amazon, за вашей книгой закрепляется электронная почта блабла@kindle.com, при посылке книг на которую они(книги) преобразуются в читабельный формат (в основном *.mobi). Отсюда можем сделать вывод, что слать на адрес мы можем не только книги, но и новости, анекдоты, цитаты, твиты и многое другое. Лично мне было бы очень удобно каждое утро просматривать хабраленту, смотреть погоду и читать баш и все это с одного тычка и в автобусе(а главное - бесплатно). Сказано-сделано, код прилагается :)

Для начала необходима привязка вашей основной почты(у меня на яндексе) с почтой на http://www.amazon.com/. Можете переслать пару-тройку файликов, чтобы проверить что все работает. Кстати, вся фишка сервиса от amazon в том, что книги должны быть именно прикреплены к электронному письму, а не быть текстом внутри него. Поэтому напишем простенький скриптик, который собирает информацию с хабра, башорга и сайта с погодой, запишем все это в файл и отошлем. PROFIT!

Все три сайта имеют RSS, поэтому не будем мудрить и воспользуемся данной услугой, тем более есть замечательная библиотека под Python - feedparser.

Функция для получения тайтла RSS -новости и самой новости.
def getRSS(nameURL, tittleRSS):
    d=feedparser.parse(nameURL)
    s=tittleRSS+"\n"
    for e in d.entries:
        s+=e.title.upper()+"\n\n"+e.description+"\n\n"
    return s 

Тупая функция парсинга bash.im, удаляем теги, которые присутсвуют внутри текста:
def parseBash(Bash):
    tmp=''
    answerstr=''
    for i in Bash.split(' '):
        flag=0
        if '<br' in i:
           tmp=i.replace('<br', '\n')
           flag=1
        if '/>' in i:
           tmp=i.replace('/>', '')
           flag=1
        if '&quot;' in i:
           tmp=i.replace('&quot;', '')
           flag=1
        if '/><br' in i:
           tmp=i.replace('/><br', '')
           flag=1 
        if flag==0: tmp=i
        answerstr+=tmp+' '
    return answerstr

Функция парсинга для хабра аналогична, только теги немного другие, поэтому приводить фрагмент не буду, исходник будет прикреплен позже.

Функция компановки файла и отправки с вашего основного ящика на ящик блабла@kindle.com:

def sendMessage(fromaddr, toaddrs, username, passwordmail):
    import smtplib
    import mimetypes
    from email.mime.multipart import MIMEMultipart
    from email.mime.application import MIMEApplication
    COMMASPACE = ', '
    path = 'dailyInfo.txt'
    msg = MIMEMultipart()
    msg['Subject'] = str(datetime.datetime.now())
    msg['From'] = fromaddr
    msg['To'] = COMMASPACE.join (toaddrs)
    msg.preamble = 'You will not see this in a MIME-aware mail reader.\n'

    attach = MIMEApplication (open(path, 'rb').read())
    attach.add_header ('Content-Disposition', 'attachment', filename=path)
    msg.attach (attach)
    server = smtplib.SMTP('smtp.yandex.ru:587')
    server.starttls()
    server.login(username,passwordmail)
    server.sendmail(fromaddr, toaddrs, msg.as_string())
    server.quit()
 
Ну и собственно код функции main():
         nameURLNews='http://habrahabr.ru/rss/hubs/' 
         nameURLBash='http://bash.im/rss/'
         nameURLWeather='http://rp5.ru/rss/6036/ru'
         fromaddr="_____" # адрес основной почты
         toaddrs="_____@kindle.com"#киндловской
         username="____" #логин от основного ящика
         passwordmail="_____"#пароль для основного ящика
         weather=getRSS(nameURLWeather, '---------WEATHER--------')
         habr=getRSS(nameURLNews, '---------NEWS--------')
         bash=getRSS(nameURLBash, '---------BASH.IM--------\n')
         outputInfo=weather+parseHabr(habr)+parseBash(bash)
         f=codecs.open('dailyInfo.txt', 'w', encoding='utf-8')
         f.write(outputInfo)
         sendMessage(fromaddr, toaddrs, username, passwordmail)
        
Вот и все, осталось написать небольшого демона, который будет в определенное время делать рассылку и все.
Кстати, кто хочет присоединится к моей небольшой рассылке, вы можете указать мою электронную почту rapter2006@ya.ru в списке доступных адресов для вашего KIndle на сайте amazon, и к вам будут приходить новые новости. Удачи :)

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

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