AWS LambdaでContentfulの記事を取得する(Python)

2021.03.20

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Contentfulの更新をHookにLambdaを起動してコンテンツを取得することがあったので、その方法を紹介します。

実装

Python パッケージインストール

pip install contentful

Pythonコード

# -*- coding: utf-8 -*-

from contentful import Client
import os

ctfl_space_id = os.environ['CONTENTFUL_SPACE_ID']
ctfl_cda_key = os.environ['CONTENTFUL_ACCESS_TOKEN']
ctfl_env = os.environ['CONTENTFUL_ENVIRONMENT']
ctfl_entry_id = os.environ['CONTENTFUL_ENTORY_ID']

def lambda_handler(event, context):
client = Client(
ctfl_space_id,
ctfl_cda_key,
environment=ctfl_env
)

entry = client.entry(ctfl_entry_id)
return entry.fields()

Lambdaに環境変数登録

ContentfulのDelivery APIトークンなどはLambdaの環境変数に格納します。

  • CONTENTFUL_SPACE_ID ... ContentfulのSpace IDを入力
  • CONTENTFUL_ACCESS_TOKEN ... Contentfulの[API Keys]からCDA(Content Delivery API)を発行して入力
  • CONTENTFUL_ENVIRONMENT ... デフォルトのままであれば master で大丈夫です
  • CONTENTFUL_ENTORY_ID ... Entry編集画面の右サイドバー[info]から取得できます。

ちなみにContentful側はこんな↓モデリングにしています。

以上の準備が完了し、Lambda関数を実行すると、以下のようなjsonが帰ってくるはず。

{'title': '記事のタイトル', 'slug': 'sample-post-slug', 'thumbnail': , 'content_md': '## 記事の見出し\n記事の本文。'}

Content modelは特に指定せずに、エントリーID一発指定で行けるのがいい感じ。

ContentfulのCMA(Content Management API)を使って言語的な処理をPythonでして再格納とかできますね。

参考URL

https://www.contentful.com/developers/docs/python/tutorials/getting-started-with-contentful-and-python/

https://contentful.github.io/contentful.py/