この記事は公開されてから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でして再格納とかできますね。