GASからWordPressの「手動実行URL」を呼び出す― しずかなニュースの開発記録

小さなプロダクト

 前回の記事では、GASで作ったJSONフィードを、WordPress側の自作プラグインから取りに行き、投稿として保存する仕組みを作りました。

  • GAS:ニュース一覧をHTMLに整形し、JSONとして返す
  • WordPressプラグイン:GASのJSONを取得して投稿 or 固定ページに反映
  • 実行方法:ブラウザで実行URLを開く

(→「GAS×WordPressで自動投稿を実現する― しずかなニュースの開発記録」)

ここまでで「WordPress側からGASにアクセスする仕組み」は整いましたが、これだけでは自動実行ができません。

この記事では、WordPressプラグイン側に用意した

https://example.com/?gas_pull_run=1&key=xxxx

のような 手動実行URLを、GASから自動で呼び出す仕組み を作り、Apps Script の時間トリガーで定期実行する方法を紹介します。


今回やること

この記事でやることは、次の 2 つです。

  1. GASからURLを呼び出すコードを用意
  2. Apps Scriptの「時間主導型トリガー」で定期実行を設定

前回までにプラグインが導入済みで、ブラウザから

https://example.com/?gas_pull_run=1&key=xxxx

を呼び出すと、しずかなニュースの投稿が更新される前提で進めます。


GASプロジェクト側の準備

次に、GAS側に「WordPressの手動実行URLを呼び出す」ためのコードを追加します。

このプロジェクトには、WordPressプラグインを呼び出すための次の 2 つの関数を用意します。

  • refreshnews():更新を1回実行する補助的な関数
  • runWpPullOnce(id):URLを組み立て、UrlFetchApp で実行するメインの関数

1. GASコード全体

実際に使用しているコードは次のとおりです。

function refreshnews() {
  // 投稿設定ID(投稿設定シートの列)。通常は 1 列目を指定
  var id = 1;
  runWpPullOnce(id);
}

// 例:
// https://example.com/?gas_pull_run=1&key=...&id=1
function runWpPullOnce(id) {
  // あなたのWordPressサイトのURL
  var base = 'https://example.com/';

  // プラグイン内で定義した GAS_TOKEN と同じ値を指定
  var token = 'tkn_*****';

  // 末尾のスラッシュ有無を吸収しつつ、クエリ文字列を連結
  var url = base.replace(/\/?$/, '/') +
            '?gas_pull_run=1&key=' + encodeURIComponent(token) +
            (id ? '&id=' + encodeURIComponent(String(id)) : '');

  // WordPressの手動実行URLを呼び出す
  var res = UrlFetchApp.fetch(url, {
    method: 'get',
    followRedirects: true,
    muteHttpExceptions: true,
    // headers: { 'User-Agent': 'GAS-Pull/1.0' } // 任意
  });

  // ステータスコードとレスポンス本文をログへ出力
  var code = res.getResponseCode();
  var body = res.getContentText();
  Logger.log(code + ' ' + body);

  // 想定通りのレスポンスでなければエラーとして扱う
  if (code !== 200 || body.indexOf('GAS pull executed') === -1) {
    throw new Error('WP実行に失敗: ' + code + ' / ' + body);
  }
}

2. コードのポイント解説

base(サイトURL)
var base = 'https://example.com/';
  • あなたのWordPressサイトのURLを指定します。
  • 末尾のスラッシュ有無は replace(/\/?$/, '/') で吸収しているので、 https://example.com / https://example.com/ のどちらでもOKです。
token(認証用キー)
var token = 'tkn_...';
  • プラグイン側で define('GAS_TOKEN', '...') として定義した値と同じ文字列を指定します。
URLの組み立て
var url = base.replace(/\/?$/, '/') +
          '?gas_pull_run=1&key=' + encodeURIComponent(token) +
          (id ? '&id=' + encodeURIComponent(String(id)) : '');
  • gas_pull_run=1key=token を必須パラメータとして付与
  • id が指定されていれば、&id=1 のように追加
  • encodeURIComponent() で念のためURLエンコードしています
UrlFetchApp.fetch
var res = UrlFetchApp.fetch(url, {
  method: 'get',
  followRedirects: true,
  muteHttpExceptions: true,
});
  • UrlFetchApp.fetch() でWordPressのURLにGETリクエストを送信
  • followRedirects: true でリダイレクトにも追従
  • muteHttpExceptions: true にしておくことで、ステータスコードが 200 以外でも例外ではなくレスポンスとして受け取れます(ログ出力後に自前でエラー判定するため)。
レスポンスチェック
var code = res.getResponseCode();
var body = res.getContentText();
Logger.log(code + ' ' + body);

if (code !== 200 || body.indexOf('GAS pull executed') === -1) {
  throw new Error('WP実行に失敗: ' + code + ' / ' + body);
}
  • HTTPステータスコードと、レスポンス本文をログに記録
  • 200 以外、または本文に GAS pull executed が含まれない場合はエラーとして扱い、throw しています
  • トラブル時にログを見れば、WordPress側のエラーメッセージも確認できます

手動実行で動作確認する

まずは、GASのエディタから「手動で 1 回だけ」実行して、正しく動くか確認しておきます。

  1. Apps Script エディタを開く
  2. 上部の関数プルダウンから refreshnews を選択
  3. ▶(実行)ボタンをクリック
  4. 初回実行時は認証ダイアログが出るので許可
  5. メニュー「表示」→「ログ」から実行結果を確認

ログに例えば

200 GAS pull executed. (id=1)

といった行が残っていれば、WordPress側まで処理が届いていると判断できます。

同時に、WordPress管理画面の「投稿」一覧を開き、しずかなニュースの記事が更新されているかも確認しておきましょう。


Apps Scriptの時間トリガーで定期実行する

動作確認ができたら、いよいよ 定期実行 に進みます。ここでは、GASの「時間主導型トリガー」を使って、refreshnews() を自動で呼び出す設定を行います。

1. UIから時間トリガーを設定する

  1. Apps Script エディタ右側の「時計アイコン(トリガー)」をクリック
  2. 「トリガーを追加」ボタンをクリック
  3. 次のように設定
  • 実行する関数を選択:refreshnews
  • 実行するデプロイ:Head(通常はそのまま)
  • イベントのソースを選択:時間主導型
  • 時間ベースのトリガーのタイプ:
    • 例)時間ベースのタイマー
  • 時間の間隔:
    • 例)1時間ごと / 6時間ごと / 1日1回 など

 4.「保存」をクリック

これで、しずかなニュースの定期更新ができるようになります。時間トリガーの設定は難しくないため、一度設定してしまえば後は自動で動作します。

まとめ

今回は、GASからWordPressプラグインの「手動実行URL」を呼び出し、Apps Script の時間トリガーを使って定期的に更新処理を行う方法を紹介しました。

今回の定期処理の仕組みは、サイトの更新だけでなく、他の用途にもそのまま応用できます。

  • RSS収集処理の定期実行
  • サマリー生成・記事要約などの自動処理

今回紹介した仕組みを土台に、必要に応じて通知機能の追加や運用フローの整理など、少しずつ拡張していくことで、より安定した更新環境を作ることができます。