1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Notion API × AWS】 Lambda で RSS から記事を取得し Notion に自動登録する仕組みを作ってみた

Posted at

この記事は、個人ブログで公開していた内容を技術記事向けに再構成・加筆したものです。
本記事の内容は執筆時点の情報をもとにしています。
AWS や Notion API の仕様は変更される可能性があるため、
実装時は最新の公式ドキュメントをご確認ください。

はじめに

技術記事やニュースを Notion に集約して管理したい と思い、
RSS フィードから記事を取得し、AWS Lambda + Notion API を使って
自動で Notion データベースに登録する仕組み を作ってみました。

この記事では、

  • RSS を定期取得する仕組み
  • AWS Lambda での実装方法
  • Notion API でのデータ登録方法

を 実装ベースで 紹介します。

この記事でできること

  • RSS フィードを定期的に取得
  • 新着記事を AWS Lambda で処理
  • Notion データベースに自動登録
  • タグ付きで記事管理

Notionへの登録内容

notion_list.png

notion_detail.png

全体構成

aws.drawio.png

  1. EventBrideで1時間毎に、Lambdaを起動する
  2. LambdaがAWS Systems ManagerからRSS情報を取得する
  3. 取得したRSSから前回取得した記事以降に、更新された記事タイトルと記事URLを取得する
  4. 取得した記事URLにアクセスして、スクレイピングを行う
  5. AWS Sercrets ManagerからNotionの接続情報を取得する
  6. 記事タイトル・記事URL・記事内容・記事のタグをNotionに送信
  7. Notionに記事が登録される

使用技術

  • AWS Lambda(AWS SAM)
  • EventBridge Scheduler
  • AWS Secrets Manager
  • AWS Systems Manager Parameter Store
  • Notion API
  • feedparser
  • BeautifulSoup

事前準備

Notion側

Notion integrationを作成

Notion APIでNotionのデータベースに記事を登録するには、インテグレーションを作成する必要があります。
下記リンクにアクセスし、「New Integration」からインテグレーションを作成します。
インテグレーションを作成したらInternal Integration Tokenをコピーして控えてください。
後程、AWS Secrets Managerに登録する際、必要になります。

integration.png

ワークスペースにインテグレーションを招待

Notionページにインテグレーションを招待する必要があります。
招待することで、Notion APIと連携が可能になります。

notion_Invite.png

データベースIDを取得する

当機能は、データベースに書き込みを行いますので、データベースIDを取得する必要があります。
ページ内に作成したデータベースしたら共有でリンクをコピーしてください。
URLの「?v」の前にある文字列部分がデータベースIDになりますので、控えてください。

https://www.notion.so/{workspace_name}/{database_id}?v={view_id}

後程、AWS Secrets Managerに登録する際、必要になります。

AWS側

AWS System Managerの設定

FireShot-Capture-007-AWS-Systems-Manager-Parameter-Store-ap-northeast-1.console.aws_.amazon.com_.png

下記を作成する

  • パラメータ名:RSSURLList
  • 利用枠:標準
  • タイプ:文字列
  • データ型:text
  • 値 (下記json参照)
  • url:記事の取得先URL
  • tag:Notionに記事登録時のタグ名称
{
  "rsslist": [
    {
      "url": "https://aws.amazon.com/jp/about-aws/whats-new/recent/feed/",
      "tag": "AWS",
      "name":"AWSの最新情報"
    },
    {
      "url": "https://aws.amazon.com/jp/blogs/news/feed/",
      "tag": "AWS",
      "name":"Amazon Web Services ブログ"
    },
    {
      "url": "https://qiita.com/tags/aws/feed",
      "tag": "AWS",
      "name":"Qiita - AWS"
    },
    {
      "url": "https://qiita.com/tags/docker/feed",
      "tag": "Docker",
      "name":"Qiita - Docker"
    },
    {
      "url": "https://qiita.com/tags/python/feed",
      "tag": "Python",
      "name":"Qiita - Python"
    },
    {
      "url": "https://dev.classmethod.jp/feed/",
      "tag": "技術ブログ",
      "name":"クラスメソッド"
    },
    {
      "url": "https://zenn.dev/feed",
      "tag": "技術ブログ",
      "name":"Zenn - トレンド"
    },
    {
      "url": "https://zenn.dev/topics/aws/feed",
      "tag": "AWS",
      "name":"Zenn - AWS"
    },
    {
      "url": "https://zenn.dev/topics/docker/feed",
      "tag": "Docker",
      "name":"Zenn - Docker"
    },
    {
      "url": "https://zenn.dev/topics/python/feed",
      "tag": "Python",
      "name":"Zenn - Python"
    }
  ]
}

Secret Manegerの設定

notion_sercrets.png

  • シークレットのタイプ:その他のシークレットのタイプ
  • キー/値のペア
  • NOTION_TOKEN:Integration Token
  • DATABASE_ID:データベースID
  • 暗号化キー:DefaultEncryptionKey

Lambdaの実装

ソースコードはこちら

RSS取得と解析

下記の記事を参考にRSS取得と解析は実装しています。

RSS取得

AWS System ManagerからRSS取得先を取得します。

RSS解析

feedparserを使い記事を解析します。
現在時刻と記事の公開日を比較し、1時間経過した記事を取得対象としています。

Secret Maneger

Secret Manegerからの取得ロジックについては、下記の記事を参考にしました。

シークレットの取得

取得したいシークレットキーを引数に指定することで、シークレットの値を取得しています。

Notion登録とスクレイピング

スクレイピング

PythonでNotion APIを扱うため、「Notion SDK for Python」と
Notion登録前に記事の内容をスクレイピングするため、「BeautifulSoup」を利用しています。

targetTagsに設定されている値がスクレイピングの対象になります。
対象のタグにあったNotionのリクエストBodyを作り上げ、リクエストしています。

Notion登録

NotionへのリクエストBodyは、公式リファレンスを参照

Lambda・ポリシー・ロール

起動時間とポリシーとロールは、template.yamlに記述しています。

ビルド・実行・デプロイ

コマンド

sam build
sam local invoke NotionRegisterFunction --event events/event.json
sam deploy --guided

デプロイ結果

lambda.png

EventBridge

EventBridge-1.png

Role

Role.png

Policy

Policy.png

まとめ

AWS Lambda と Notion API を組み合わせることで、

  • 記事収集を自動化
  • 情報整理のコスト削減
  • Notion をナレッジハブとして活用
    が可能になります。

RSS × Notion × AWS は応用範囲が広く、
個人開発・業務効率化どちらにもおすすめです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?