2011-02-08 5 views
0

Я немного экспериментирую на Python. Я создаю скрипт, который проверяет rss-канал для новых элементов, а затем отправляет заголовок и ссылку на элементы по электронной почте. У меня есть сценарий для работы на определенном уровне: когда он запустится, он получит ссылку + заголовок новейшего элемента и отправит его по электронной почте, независимо от того, будет ли он отправлен по электронной почте этот файл уже или нет. Мне нужно добавить 2 вещи: способ сразу получить несколько элементов (и отправить их по электронной почте один за другим), а также проверить, были ли они отправлены. Как мне это сделать? Я использую feedparser, это то, что у меня до сих пор:Заголовок электронной почты и ссылка из rss-feed и отправьте их по электронной почте

d = feedparser.parse('http://feedparser.org/docs/examples/rss20.xml') 
link = d.entries[0].link 
title = d.entries[0].title 

, а затем пару линий, которые посылают по электронной почте с «ссылка» и «название» в там. Я знаю, что мне нужно будет использовать Etag, но не смогли бы разобраться, как и как отправить электронные письма 1 на 1?

ответ

0

для части синтаксического анализа, вы можете рассмотреть следующие рекомендации в этом вопросе относительно How to detect changed and new items in an RSS feed?. В принципе, вы можете хэшировать содержимое каждой записи и использовать ее как идентификатор.

Например, при первом запуске вашей программы он вычисляет хэш каждой записи, сохраняет этот хеш и отправляет эти новые записи по почте. В следующем прогоне он перефразирует содержимое каждой записи и сравнивает эти хэши с теми, которые были найдены ранее (для этого вы должны использовать какую-то базу данных или, по крайней мере, словарь/список в памяти при разработке с уже проанализированными и отправленными записями) , Если ваша программа обнаруживает хэши, которые не сгенерированы на предыдущих запусках, она будет собирать новое электронное письмо и отправлять его с помощью «новых» записей.

Что касается вашей сборной электронной почты, то может помочь вопрос Sending HTML email in Python. Просто не забудьте отправить только текст и версию html.

+0

Разве это не ETag, по сути, сам хэш? Так что, если я сохраню это, у меня будет такой же результат, как и хэширование любой другой вещи? И отправка электронной почты не проблема, у меня это отсортировано. Единственное, что я не знаю, как это сделать, - отправить электронные письма 1 на 1. Сейчас я могу получить его только для отправки по электронной почте 1 раз, используя новейший элемент в rss-фиде. – HankSmackHood

+0

Вы сказали, что вы можете отправлять только одно электронное письмо за один раз, с помощью нового элемента, и тахат, который вы хотите отправлять по почте один за другим. Вы имеете в виду, что если есть еще один новый предмет, вы не можете знать, кто он? –

+0

Если я ошибаюсь, этаг представляет весь канал, то есть, сравнивая два этика, вы можете знать, что фид изменился, но вы не знаете, какие каналы являются новыми. Вы можете использовать etags, чтобы узнать, изменился ли канал, и как только вы узнаете, что он есть, вы проверяете записи фида для новых (используя технику хеширования по содержимому каждой записи). И для каждой новой записи для отправки вашей почты. –

0

Для простейшего метода см. Python smtplib documentation example. (Я не буду повторять код здесь.) Это все, что вам нужно для обычной отправки по электронной почте.

Для более удобного и более сложного содержимого электронной почты, также обратите внимание на email module python.

+0

Да, я знаю, у меня уже есть электронная почта. Это просто те части, которые я пока не могу заставить работать. – HankSmackHood