前回の記事では、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 つです。
- GASからURLを呼び出すコードを用意
- 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=1とkey=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 回だけ」実行して、正しく動くか確認しておきます。
- Apps Script エディタを開く
- 上部の関数プルダウンから
refreshnewsを選択 - ▶(実行)ボタンをクリック
- 初回実行時は認証ダイアログが出るので許可
- メニュー「表示」→「ログ」から実行結果を確認
ログに例えば
200 GAS pull executed. (id=1)
といった行が残っていれば、WordPress側まで処理が届いていると判断できます。
同時に、WordPress管理画面の「投稿」一覧を開き、しずかなニュースの記事が更新されているかも確認しておきましょう。
Apps Scriptの時間トリガーで定期実行する
動作確認ができたら、いよいよ 定期実行 に進みます。ここでは、GASの「時間主導型トリガー」を使って、refreshnews() を自動で呼び出す設定を行います。
1. UIから時間トリガーを設定する
- Apps Script エディタ右側の「時計アイコン(トリガー)」をクリック
- 「トリガーを追加」ボタンをクリック
- 次のように設定
- 実行する関数を選択:
refreshnews - 実行するデプロイ:
Head(通常はそのまま) - イベントのソースを選択:時間主導型
- 時間ベースのトリガーのタイプ:
- 例)時間ベースのタイマー
- 時間の間隔:
- 例)1時間ごと / 6時間ごと / 1日1回 など
4.「保存」をクリック
これで、しずかなニュースの定期更新ができるようになります。時間トリガーの設定は難しくないため、一度設定してしまえば後は自動で動作します。
まとめ
今回は、GASからWordPressプラグインの「手動実行URL」を呼び出し、Apps Script の時間トリガーを使って定期的に更新処理を行う方法を紹介しました。
今回の定期処理の仕組みは、サイトの更新だけでなく、他の用途にもそのまま応用できます。
- RSS収集処理の定期実行
- サマリー生成・記事要約などの自動処理
今回紹介した仕組みを土台に、必要に応じて通知機能の追加や運用フローの整理など、少しずつ拡張していくことで、より安定した更新環境を作ることができます。
