📧

特定の用語が含まれている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 http.client

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

# HTTPヘッダーの設定
headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json"
}

# JSONファイルの読み込み
with open('templates.json', 'r') as f:
    templates = json.load(f)

matching_templates = []

# SendGrid APIにリクエストを送信する関数
def send_request(template_id, version_id):
    conn = http.client.HTTPSConnection("api.sendgrid.com")
    endpoint = f"/v3/templates/{template_id}/versions/{version_id}"

    # GETリクエストの送信
    conn.request("GET", endpoint, headers=headers)

    # レスポンスの取得
    response = conn.getresponse()
    data = response.read().decode('utf-8')

    conn.close()
    return response.status, json.loads(data)

# テンプレートごとにAPIリクエストを送信
for template in templates.get('templates', []):
    for version in template.get('versions', []):
        status_code, details = send_request(template['id'], version['id'])
        if status_code == 200:
            if SEARCH_TERM in details.get('html_content', '') or SEARCH_TERM in details.get('plain_content', ''):
                matching_templates.append(template['id'])

# マッチしたテンプレート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