Хотите получать сводку последних новостей из каналов RSS или Atom? Хотите ли вы просмотреть их в формате Markdown, в документе Microsoft Word или на устройстве с электронными чернилами? Вот инструмент для вас.
Это приложение развертывается как функция AWS Lambda. Функция загружает самые последние записи из канала RSS или Atom, загружает связанный контент, извлекает текст и составляет сводку. Вывод записывается в формате JSON в корзину S3. Объект S3 разрешает общедоступное чтение, поэтому его можно легко загрузить на внешнее устройство.
См. инструкции в конце о том, как запустить и протестировать функцию Lambda локально.
Вот пример структуры файла JSON:
{
"title" : " Recent Announcements " ,
"entries" : [
{
"title" : " Amazon SageMaker Model Registry announces support for private model repositories " ,
"link" : " https://... " ,
"summary" : " Amazon SageMaker Model Registry now supports... "
},
{
"title" : " Announcing memory optimized Amazon EC2 R7a bare metal instances " ,
"link" : " https://... " ,
"summary" : " Amazon announces general availability... "
},
...
]
}
По умолчанию функция Lambda запускается в начале дня, с понедельника по пятницу, для обновления новостей.
URL-адрес RSS-канала, расписание cron для запуска функции и специальные инструкции, которые можно добавить в приглашение суммирования, можно редактировать в файле шаблона AWS SAM ( template.yaml
).
Сначала отредактируйте файл шаблона SAM ( template.yaml
):
RSS_LINK
по умолчанию указывает на самые последние объявления AWS.RSS_LINK
.ScheduleExpression
cron в круглых скобках.SPECIAL_INSTRUCTIONS
, которые добавляются в приглашение, передаваемое в модель. Вы можете использовать эти специальные инструкции, чтобы адаптировать сводку к вашим потребностям. Затем в каталоге sam-get-news
соберите и разверните приложение с помощью этой команды:
sam build && sam deploy
Подтвердите развертывание, когда вас спросят.
Получите URL-адрес новостей из выходных данных команды sam deploy
.
Вы можете загрузить документы JSON, используя curl
или wget
по URL-адресу новостей. Например:
curl https://BUCKET-NAME.s3.REGION.amazonaws.com/news.json
В каталоге Markdown
обновите NEWS_URL
в файле markdown_news.py
, указав выходные данные команды sam deploy
.
Затем запустите сценарий run.sh
, чтобы создать новости в нескольких форматах.
Скрипт run.sh
использует Pandoc для преобразования вывода Markdown сценария markdown_news.py
в HTML, Microsoft Word и PDF. Следуйте инструкциям на сайте Pandoc, чтобы установить инструмент.
Вывод PDF по умолчанию закомментирован в run.sh
поскольку для этого требуется установить дополнительные инструменты PDF.
Большая часть кода MicroPython в папке RaspberryPiPico
предназначена для модели дисплея с электронными чернилами. Более подробную информацию о дисплее e-ink можно найти здесь.
Чтобы развернуть скрипт на микроконтроллере, загрузите Thonny Python IDE с открытым исходным кодом для начинающих для вашей операционной системы.
Чтобы микроконтроллер мог загружать файл JSON из корзины S3, вам необходимо сделать этот файл общедоступным. Для этого вам необходимо обновить файл «template.yaml».
Сначала добавьте следующие свойства к ресурсу NewsBucket (ваша учетная запись AWS может не разрешить эту конфигурацию):
Properties :
PublicAccessBlockConfiguration :
BlockPublicPolicy : false
RestrictPublicBuckets : false
Затем добавьте следующую политику ресурсов (имя и путь к файлу должны быть такими же, как в переменной среды OUTPUT_FILE
):
NewsBucketPolicy :
Type : AWS::S3::BucketPolicy
Properties :
Bucket : !Ref NewsBucket
PolicyDocument :
Statement :
- Effect : Allow
Principal : ' * '
Action : s3:GetObject
Resource : !Sub 'arn:aws:s3:::${NewsBucket}/news.json'
Подключите Raspberry Pi Pico через USB к ноутбуку. Затем с помощью редактора Thonny скопируйте и запустите на устройстве сценарий MycroPython display_news.py
. В сценарии обновите URL-адрес файла news.json
, а также имя и пароль сети Wi-Fi, к которой Raspberry Pi Pico W будет подключаться для загрузки файла.
Вот общий архитектурный процесс этого инструмента:
Код функции Lambda можно запустить из командной строки, чтобы упростить локальное тестирование. Чтобы запустить функцию Lambda локально, вам необходимо создать виртуальную среду ( venv
) и установить несколько зависимостей.
В основном каталоге проекта создайте виртуальную среду:
python3 -m venv .venv
Затем активируйте виртуальную среду:
source .venv/bin/activate
В каталоге Lambda/sam-get-news/get-news
установите все зависимости:
pip install -r requirements.txt
Определите переменную среды, используемую функцией Lambda:
export RSS_LINK=https://aws.amazon.com/about-aws/whats-new/recent/feed/
export OUTPUT_BUCKET= < YOUR_BUCKET >
export OUTPUT_FILE=news.txt
Теперь вы можете запустить функцию локально:
python app.py
Когда функция завершается, вы можете увидеть выходные данные в корзине S3 с помощью интерфейса командной строки AWS:
aws s3 cp s3:// ${OUTPUT_BUCKET} / ${OUTPUT_FILE} - | more