ヤマムギ

growing hard days.

*

Feedlyのフィードを自動でSlackへ投稿する(AWS Lambda , Amazon DynamoDB)

   

やりたいこと

Feedlyで共有したいフィードに特定のタグを付けます。
特定のタグがついたフィードは自動的にSlackへ投稿されます。

実現方法

FeedlyのAPIを使ってダイレクトでSlackへ投稿すればいいのですが、単純にそれをすると投稿が重複する可能性があるので、間にAmazon DynamoDBを挟みました。

(1) 5分ごとにAmazon CloudWatchスケジュールで実行されるLambdaが過去30分にFeedlyで特定のタグがつけられたフィードを取得して、Amazon DynamoDBに格納します。

(2) Amazon DynamoDBのストリームにより実行されたLambdaがレコードを受け取って、Slackへ投稿します。

パーティションキーをFeedlyのfeed_idにすることで同じフィードがDynamoDBに格納されないようにしました。

この方法だと、RSSリーダーを変更するときや増やすときは、(1)の機能だけ変更するか追加するかでいいので変化を考えやすいと思いました。

動作

例えばスマートフォンアプリのFeedlyでフィードに特定のタグを付けると、

5分間隔ぐらいでSlackに投稿されます。

ソースコード

  • Python 3.6.1

ソースコードはGitHubにあります。

2つのディレクトリにLambda_Functionをそれぞれ入れているので、ご利用される場合はそれぞれでzipを作成して、Lambda関数を設定してください。

feedly_to_dynamo

Feedlyで特定のタグがつけられたフィードを取得して、Amazon DynamoDBに格納します。

環境変数

  • FEEDLY_URL : FeedlyのAPI URLです。
  • FEEDLY_TOKEN : Feedlyのトークンです。
  • DYNAMO_TABLE : Amazon Dynamodbのテーブル名
  • INTERVAL_MINUTE : 何分前に登録されたフィードから取得するか、指定しない場合は7日前から取得します。
  • FEED_COUNT : 取得するフィードの最大数を指定。指定しない場合は100。
  • ERROR_SLACK_URL : エラー発生時に通知したいSlackのWebhook Incoming URL
  • ERROR_SLACK_CHANNEL : エラー発生時に通知したいSlackのチャンネル
  • LOG_LEVEL : ログレベル。指定しない場合はERROR。
FeedlyのAPI URLの例

https://cloud.feedly.com/v3/streams/contents?streamId=user/userid/tag/tagname
詳しくはFeedlyのAPIのドキュメントを見てください。

Feedlyのトークン

FeedlyのAPIのドキュメント Developer Access Token内のStart hereリンクから取得してください。

コード抜粋 Feed取得

コード抜粋 DynamoDB格納

dynamo_to_slack

Amazon DynamoDBのストリームにより実行されたLambdaがレコードを受け取って、Slackへ投稿します。

環境変数

  • SLACK_URL : 投稿先のSLACKのWebhook Incoming URL
  • SLACK_CHANNEL : 投稿先のSlackのチャンネル
  • ERROR_SLACK_URL : エラー発生時に通知したいSlackのWebhook Incoming URL
  • ERROR_SLACK_CHANNEL : エラー発生時に通知したいSlackのチャンネル
  • LOG_LEVEL : ログレベル。指定しない場合はERROR。

コード抜粋

DynamoDBの設定

  • パーティションキー : id

トリガー

トリガーにLambda関数を指定します。

参考 DynamoDB ストリーム イベント


最後までお読みいただきましてありがとうございました!

「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。

「AWS認定資格試験テキスト AWS認定AIプラクティショナー」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。

 - AWS, Python , , , ,

  関連記事

EC2 Auto Scalingグループでインスタンスの更新を実行

このブログのAMI、起動テンプレートを更新して、EC2 Auto Scaling …

「JAWS-UG DE&I AWS re:Invent 2024 recap サーバーレス ハンズオン」でサポーターしてきました

JAWS-UG DE&I開催の「AWS re:Invent 2024 r …

AWS Expert Online at JAWS-UG首都圏エリアに参加して「Amazon EC2 スポットインスタンス再入門」を聞いてきた

AWS Expert Onlineという勉強会がありまして、AWS ソリューショ …

CloudFormationスタックポリシーでスタック更新を防止する

CloudFormationのスタックにスタックポリシーを設定することによって、 …

Azure AD SSOからAWS SSOに統合するための提供情報

Azure AD SSO担当者に送る情報をこちらの記事を見て確認しました。 チュ …

DynamoDB IAMポリシーで特定項目だけを許可する

検証記録です。 対象テーブル 書籍のサンプルで作ったこちらです。 所属バンドの楽 …

「AWS認定試験対策 AWS クラウドプラクティショナー」の出版が確定したのでAmazon著者セントラルに登録した

初の執筆本、「AWS認定試験対策 AWS クラウドプラクティショナー」の出版が確 …

AWS DeepLens開封の儀

去年(2019年)7月にamazon.co.jpでDeepLens買えますやんっ …

AWS Lambda(Python3.7)でPandocを実行する

昨日まで(AWS Batch) 昨日までは、Pandocを実行して、S3バケット …

API Gateway 作成済REST APIの定義をSwaggerの形式でエクスポート

SAMで似たようなAPIを作りたくて、エクスポートしました。 Swaggerは、 …