Google スプレッドシートにコンテンツが追加されたタイミングで、Google Apps Script (GAS) を使用して WordPress にメール経由で投稿する方法

前提条件

  1. WordPress サイト: メール経由で投稿を受け付けるための設定が必要です。
  2. Google スプレッドシート: 投稿内容を管理するシート。
  3. Google Apps Script (GAS): スクリプトを作成して自動化を行います。

ステップ 1: WordPress のメール投稿設定

WordPress にメールで投稿するには、専用のプラグインを使用するのが一般的です。以下はその一例です。

プラグインのインストールと設定

  1. Postie プラグインのインストール
  • WordPress の管理画面にログインします。
  • 「プラグイン」 > 「新規追加」で「Postie」を検索し、インストールして有効化します。
  1. Postie の設定
  • 「設定」 > 「Postie」に移動します。
  • メールサーバーの設定を行います(受信メールアドレス、サーバー情報、認証情報など)。
  • 投稿に使用するメールアドレスを設定します。
  • セキュリティ設定を適切に行い、信頼できる送信者のみが投稿できるようにします。

注意: メールでの投稿はセキュリティリスクが伴うため、信頼できる送信元からのみ許可する設定を行ってください。

ステップ 2: Google スプレッドシートの準備

  1. スプレッドシートの作成
  • 新しいスプレッドシートを作成します。
  • 投稿に必要な情報(タイトル、本文、カテゴリなど)を入力するためのカラムを作成します。
  1. スプレッドシートの構造例 A列: タイトル B列: 本文 C列: カテゴリ D列: 投稿済み 例: サンプル投稿 これはサンプルの投稿内容です。 ニュース 未投稿

ステップ 3: Google Apps Script (GAS) の作成

  1. スクリプトエディタの開く
  • スプレッドシートのメニューから「拡張機能」 > 「Apps Script」を選択します。
  1. スクリプトの記述

以下は、スプレッドシートに新しい行が追加されたときにメールを送信する基本的なスクリプトの例です。

function sendEmailToWordPress(e) {
  // トリガーから取得するデータ
  var sheet = e.range.getSheet();
  var row = e.range.getRow();

  // ヘッダー行をスキップ
  if (row === 1) return;

  var title = sheet.getRange(row, 1).getValue();
  var body = sheet.getRange(row, 2).getValue();
  var category = sheet.getRange(row, 3).getValue();

  // 投稿済みか確認
  var posted = sheet.getRange(row, 4).getValue();
  if (posted === '投稿済み') return;

  // メールの送信先と設定
  var emailAddress = 'your-wordpress-email@example.com'; // Postie で設定したメールアドレス
  var subject = title;
  var message = body + "\n\nカテゴリ: " + category;

  // メールの送信
  MailApp.sendEmail(emailAddress, subject, message);

  // 投稿済みに更新
  sheet.getRange(row, 4).setValue('投稿済み');
}

function createTrigger() {
  var ss = SpreadsheetApp.getActive();
  ScriptApp.newTrigger('sendEmailToWordPress')
    .forSpreadsheet(ss)
    .onEdit()
    .create();
}
  1. スクリプトの説明
  • sendEmailToWordPress: スプレッドシートが編集されたときに呼び出される関数。新しい投稿が追加された場合にメールを送信します。
  • createTrigger: トリガーを作成する関数。初回のみ実行してトリガーを設定します。
  1. トリガーの設定
  • スクリプトエディタの左側メニューから「トリガー」アイコンをクリックします。
  • 「トリガーを追加」ボタンをクリックし、以下のように設定します。
    • 関数を選択: sendEmailToWordPress
    • デプロイメントを選択: Head
    • イベントソースを選択: スプレッドシートから
    • イベントタイプを選択: 編集時
  • 設定を保存します。

注意: createTrigger 関数は初回のみ実行してトリガーを設定するために使用します。スクリプトエディタで createTrigger を実行してください。

ステップ 4: テストと確認

  1. テスト投稿の作成
  • スプレッドシートに新しい行を追加し、タイトル、本文、カテゴリを入力します。
  • 「投稿済み」列が自動的に「投稿済み」に更新され、指定したメールアドレスにメールが送信されます。
  1. WordPress での確認
  • WordPress の管理画面にログインし、新しい投稿がメール内容に基づいて作成されていることを確認します。

追加の考慮事項

  • エラーハンドリング: スクリプトにエラーチェックを追加して、メール送信に失敗した場合の処理を行うと良いでしょう。
  • セキュリティ: メール送信元を制限し、不正な投稿を防ぐための追加のセキュリティ対策を検討してください。
  • 投稿のカスタマイズ: メールのフォーマットを工夫することで、WordPress 側での投稿スタイルを調整できます。Postie の設定を活用して、タイトルやカテゴリの指定方法をカスタマイズしてください。

代替案: WordPress REST API を使用する

メールによる投稿ではなく、WordPress の REST API を使用して直接投稿する方法もあります。こちらの方法はより柔軟でセキュアですが、設定がやや複雑です。必要に応じて以下の手順を検討してください。

  1. WordPress の REST API 設定
  • アプリケーションパスワードを作成し、API アクセス用の認証情報を取得します。
  1. GAS スクリプトの作成
  • HTTP リクエストを使用して、投稿データを直接 WordPress に送信します。
function postToWordPressAPI(e) {
  var sheet = e.range.getSheet();
  var row = e.range.getRow();

  if (row === 1) return;

  var title = sheet.getRange(row, 1).getValue();
  var content = sheet.getRange(row, 2).getValue();
  var category = sheet.getRange(row, 3).getValue();

  var apiUrl = 'https://your-wordpress-site.com/wp-json/wp/v2/posts';
  var username = 'your_username';
  var appPassword = 'your_app_password';

  var headers = {
    "Authorization": "Basic " + Utilities.base64Encode(username + ":" + appPassword),
    "Content-Type": "application/json"
  };

  var payload = {
    "title": title,
    "content": content,
    "status": "publish",
    "categories": [getCategoryId(category)]
  };

  var options = {
    "method": "post",
    "headers": headers,
    "payload": JSON.stringify(payload),
    "muteHttpExceptions": true
  };

  var response = UrlFetchApp.fetch(apiUrl, options);
  var result = JSON.parse(response.getContentText());

  if (response.getResponseCode() === 201) {
    sheet.getRange(row, 4).setValue('投稿済み');
  } else {
    sheet.getRange(row, 4).setValue('投稿失敗: ' + result.message);
  }
}

function getCategoryId(categoryName) {
  // カテゴリ名から ID を取得するロジックを実装
  // 例: あらかじめカテゴリ名と ID のマッピングを用意する
  var categories = {
    "ニュース": 1,
    "ブログ": 2,
    // 他のカテゴリ...
  };
  return categories[categoryName] || 1; // デフォルトは 1
}

注意: REST API を使用する場合、セキュリティを確保するためにアプリケーションパスワードの管理や HTTPS の使用を徹底してください。

まとめ

以上の手順に従うことで、Google スプレッドシートに新しいコンテンツが追加された際に、Google Apps Script を使用して自動的に WordPress にメール経由で投稿することが可能です。