📧
特定の用語が含まれているSendGridテンプレートを抽出する方法
課題
会社の電話番号やサービス名の変更時、もしくは特定のキャンペーンフレーズが含まれているテンプレートを特定したい時、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 :: ~ »
Discussion