GoogleAppsScriptからCloudflareのAPIでキャッシュを削除する

CloudflareのキャッシュをGoogleAppsScriptから削除する例です。

Zone IDの入手

  1. [Cloudflare] > [サイト]
    • サイトの概要ページへ移動
  2. [Overview] > [API] > [Zone ID]
    • 記載されている英数字の文字列

API Keyの入手

  1. [Cloudflare] > [サイト]
    • サイトの概要ページへ移動
  2. [Overview] > [API] > [Get your API token]
    • API Tokensページへ移動
  3. [API Keys] > [Global API Key] > [View]
    • パスワードを入力するとAPI Keyが表示されます
    • ここで入手できるAPI KeyがX-Auth-Keyです
    • ちなみにX-Auth-Emailは、登録メールアドレスです

※許可範囲を限定できるため、API KeyよりもAPI Tokenを使用すべきです

API Tokenの入手

  1. [Cloudflare] > [サイト]
    • サイトの概要ページへ移動
  2. [Overview] > [API] > [Get your API token]
    • API Tokensページへ移動
  3. [API Tokens] > [Create Token]
    • 許可項目を限定したトークンを作成できます
    • 次の設定とすることでキャッシュを削除できるトークンを作成できます
      • [Permissions] > [Zone][Cache Purge][common.purge]

curlを利用してキャッシュを削除する

Linux(API Keyを使用する例)

curl -X POST "https://api.cloudflare.com/client/v4/zones/${ZoneID}/purge_cache" \
     -H "Content-Type:application/json" \
     -H "X-Auth-Key: ${APIKey}" \
     -H "X-Auth-Email: ${Email}" \
     --data '{"purge_everything":true}'

※${ZoneID}, ${APIKey}, ${Email}を置換える

Windows(API Tokenを使用する例)

curl -X POST "https://api.cloudflare.com/client/v4/zones/${ZoneID}/purge_cache" ^
     -H "Content-Type:application/json" ^
     -H "Authorization: Bearer ${APIToken}" ^
     --data "{\"files\":[\"https://www.bugbugnow.net/\"]}"

※${ZoneID}, ${APIToken}を置換える
※Windows標準では、curlが入っていないため別途インストールする必要があります

全ページのキャッシュを削除する

// Cloudflareの全キャッシュ削除
function deleteCacheAll() {
  var zoneid = '${ZoneID}';
  var apikey = '${APIKey}';
  var email = '${Email}';
  var data = "{\"purge_everything\":true}";
  var url = 'https://api.cloudflare.com/client/v4/zones/'+zoneid+'/purge_cache';
  var options = {
    method: "POST",
    headers:{
      "Content-Type": "application/json",
      "X-Auth-Key": apikey,
      "X-Auth-Email": email
    }, 
    payload: data
  };
  var res = UrlFetchApp.fetch(url, options);
  //Logger.log(res.getContentText());
};

※${ZoneID}, ${APIKey}, ${Email}を置換える

特定ページのキャッシュを削除する

// Cloudflareの個別ファイルキャッシュ削除(最大30個)
function deleteCacheFiles(files) {
  var zoneid = '${ZoneID}';
  var apitoken = '${APIToken}';
  var data = "{\"files\":"+JSON.stringify(files)+"}";
  var url = 'https://api.cloudflare.com/client/v4/zones/'+zoneid+'/purge_cache';
  var options = {
    method: "POST",
    headers:{
      "Content-Type": "application/json",
      "Authorization": "Bearer "+apitoken
    }, 
    payload: data
  };
  var res = UrlFetchApp.fetch(url, options);
  //Logger.log(res.getContentText());
};
// 例
// var files = ['https://www.bugbugnow.net/', 'https://www.bugbugnow.net/2018/03/windows10.html'];
// deleteCacheFiles(files);

※${ZoneID}, ${APIToken}を置換える

参考