📧

特定の用語が含まれているSendGridテンプレートを抽出する方法

2023/09/19に公開

課題

会社の電話番号やサービス名の変更時、もしくは特定のキャンペーンフレーズが含まれているテンプレートを特定したい時、SendGridダッシュボードでテンプレートを1つ1つ開いてサーチすると時間が掛かる上に事故が起こりやすい。

要約

Pythonプログラムを用意して上記手順を自動実行する。

必要なもの

  • SendGrid API キーの値(SG.xxxxxxx.xxxxxxxxxxxxxx)
  • サーチしたい用語(例 06-1234-5678、早期登録キャンペーン、プレミアム会員など)

手順

以下のシェルスクリプトを実行してローカル環境に全テンプレート情報を取得する。

% curl -X GET "https://api.sendgrid.com/v3/templates?generations=dynamic" -H "Authorization: Bearer SG.xxxxxxx.xxxxxxxxxxxxxx" > templates.json

以下のように全テンプレートの情報がJSON形式で保存される。

{
  "templates": [
    {
      "id": "d-xxxxxxxxxxx",
      "name": "entry-complete",
      "generation": "dynamic",
      "updated_at": "2023-09-06 06:46:35",
      "versions": [
        {
          "id": "xxxxxx-xxxxx-xxxxx",
          "template_id": "d-xxxxxxxxxxx",
          "active": 1,
          "name": "entry-complete",
          "generate_plain_content": true,
          "subject": "会員登録完了",
          "updated_at": "2023-09-06 06:49:42",
          "editor": "code",
          "thumbnail_url": ""
        }
      ]
    },
    {
      "id": "d-xxxxxxxxxxx",
      "name": "contact-complete",
      "generation": "dynamic",
      "updated_at": "2023-09-06 06:46:35",
      "versions": [
        {
          "id": "xxxxxx-xxxxx-xxxxx",
          "template_id": "d-xxxxxxxxxxx",
          "active": 1,
          "name": "contact-complete",
          "generate_plain_content": true,
          "subject": "問い合わせ完了",
          "updated_at": "2023-09-06 06:49:42",
          "editor": "code",
          "thumbnail_url": ""
        }
      ]
    }
  ]
}

自動実行用のPythonプログラムファイルを作成する。

import json
import requests

API_KEY = "SG.xxxxxxx.xxxxxxxxxxxxxx"
SEARCH_TERM = "プレミアム特典"

headers = {
    "Authorization": f"Bearer {API_KEY}"
}

with open('templates.json', 'r') as f:
    templates = json.load(f)

matching_templates = []

for template in templates.get('templates', []):
    for version in template.get('versions', []):
        response = requests.get(
            f"https://api.sendgrid.com/v3/templates/{template['id']}/versions/{version['id']}", headers=headers)
        if response.status_code == 200:
            details = response.json()
            if SEARCH_TERM in details.get('html_content', '') or SEARCH_TERM in details.get('plain_content', ''):
                matching_templates.append(template['id'])

print("Matching template IDs:")
for template_id in matching_templates:
    print(template_id)

Pythonプログラムを実行する。

サーチしたい用語が含まれているテンプレートIDだけが出力される。

t-tomo :: ~ » python3 search_term_in_templates.py

Matching template IDs:
d-xxxxxxxxxx1
d-xxxxxxxxxx2
d-xxxxxxxxxx3
t-tomo :: ~ »
O-KUN Tech Blog

Discussion