Möchten Sie eine Zusammenfassung der neuesten Nachrichten aus einem RSS- oder Atom-Feed erhalten? Möchten Sie sie im Markdown-Format, in einem Microsoft Word-Dokument oder auf einem E-Ink-Gerät sehen? Hier ist das richtige Tool für Sie.
Diese Anwendung wird als AWS Lambda-Funktion bereitgestellt. Die Funktion lädt die neuesten Einträge aus einem RSS- oder Atom-Feed herunter, lädt den verlinkten Inhalt herunter, extrahiert Text und erstellt eine Zusammenfassung. Die Ausgabe wird im JSON-Format in einen S3-Bucket geschrieben. Das S3-Objekt ermöglicht öffentliches Lesen, sodass es problemlos auf ein externes Gerät heruntergeladen werden kann.
Anweisungen zum lokalen Ausführen und Testen der Lambda-Funktion finden Sie am Ende.
Hier ist ein Beispiel für die Struktur der JSON-Datei:
{
"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... "
},
...
]
}
Standardmäßig ist die Lambda-Funktion so geplant, dass sie früh am Tag, Montag bis Freitag, ausgeführt wird, um die Nachrichten zu aktualisieren.
Die URL des RSS-Feeds, der Cron-Zeitplan zum Ausführen der Funktion und spezielle Anweisungen, die der Zusammenfassungsaufforderung hinzugefügt werden können, können in der AWS SAM-Vorlagendatei ( template.yaml
) bearbeitet werden.
Bearbeiten Sie zunächst die SAM-Vorlagendatei ( template.yaml
):
RSS_LINK
verweist auf die neuesten AWS-Ankündigungen.RSS_LINK
verwendet werden.ScheduleExpression
in Klammern.SPECIAL_INSTRUCTIONS
hinzufügen, die der an das Modell übergebenen Eingabeaufforderung hinzugefügt werden. Mithilfe dieser speziellen Anleitung können Sie die Zusammenfassung an Ihre Bedürfnisse anpassen. Erstellen Sie dann im Verzeichnis sam-get-news
die Anwendung und stellen Sie sie mit diesem Befehl bereit:
sam build && sam deploy
Bestätigen Sie die Bereitstellung, wenn Sie dazu aufgefordert werden.
Rufen Sie die News-URL aus der Ausgabe des Befehls sam deploy
ab.
Sie können die JSON-Dokumente mit curl
oder wget
über die News-URL herunterladen. Zum Beispiel:
curl https://BUCKET-NAME.s3.REGION.amazonaws.com/news.json
Aktualisieren Sie im Markdown
Verzeichnis die NEWS_URL
in der Datei markdown_news.py
auf die Ausgabe des Befehls sam deploy
.
Führen Sie dann das Skript run.sh
aus, um Nachrichten in mehreren Formaten zu erstellen.
Das run.sh
-Skript verwendet Pandoc, um die Markdown-Ausgabe des markdown_news.py
-Skripts in HTML, Microsoft Word und PDF zu konvertieren. Befolgen Sie die Anweisungen auf der Pandoc-Website, um das Tool zu installieren.
Die PDF-Ausgabe ist in run.sh
standardmäßig auskommentiert, da hierfür zusätzliche PDF-Tools installiert werden müssen.
Der größte Teil des MicroPython-Codes im RaspberryPiPico
Ordner ist spezifisch für das E-Ink-Display-Modell. Weitere Informationen zum E-Ink-Display finden Sie hier.
Um das Skript auf dem Mikrocontroller bereitzustellen, laden Sie die Open-Source-IDE für Einsteiger von Thonny Python für Ihr Betriebssystem herunter.
Damit der Mikrocontroller die JSON-Datei aus dem S3-Bucket herunterladen kann, müssen Sie diese Datei öffentlich machen. Dazu müssen Sie die Datei „template.yaml“ aktualisieren.
Fügen Sie zunächst die folgenden Eigenschaften zur Ressource „NewsBucket“ hinzu (Ihr AWS-Konto lässt diese Konfiguration möglicherweise nicht zu):
Properties :
PublicAccessBlockConfiguration :
BlockPublicPolicy : false
RestrictPublicBuckets : false
Fügen Sie dann die folgende Ressourcenrichtlinie hinzu (Name und Pfad der Datei sollten mit denen in der Umgebungsvariablen OUTPUT_FILE
identisch sein):
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'
Verbinden Sie den Raspberry Pi Pico über USB mit dem Laptop. Verwenden Sie dann den Thonny-Editor, um das MycroPython-Skript display_news.py
auf dem Gerät zu kopieren und auszuführen. Aktualisieren Sie im Skript die URL der Datei news.json
sowie den Namen und das Passwort des WLAN-Netzwerks, mit dem der Raspberry Pi Pico W eine Verbindung herstellt, um die Datei herunterzuladen.
Dies ist der allgemeine Architekturablauf dieses Tools:
Der Code der Lambda-Funktion kann über die Befehlszeile ausgeführt werden, um lokale Tests zu vereinfachen. Um die Lambda-Funktion lokal auszuführen, müssen Sie eine virtuelle Umgebung ( venv
) erstellen und einige Abhängigkeiten installieren.
Erstellen Sie im Hauptverzeichnis des Projekts eine virtuelle Umgebung:
python3 -m venv .venv
Aktivieren Sie dann die virtuelle Umgebung:
source .venv/bin/activate
Installieren Sie im Verzeichnis Lambda/sam-get-news/get-news
alle Abhängigkeiten:
pip install -r requirements.txt
Definieren Sie die von der Lambda-Funktion verwendete Umgebungsvariable:
export RSS_LINK=https://aws.amazon.com/about-aws/whats-new/recent/feed/
export OUTPUT_BUCKET= < YOUR_BUCKET >
export OUTPUT_FILE=news.txt
Jetzt können Sie die Funktion lokal ausführen:
python app.py
Wenn die Funktion beendet wird, können Sie die Ausgabe im S3-Bucket mit der AWS CLI sehen:
aws s3 cp s3:// ${OUTPUT_BUCKET} / ${OUTPUT_FILE} - | more