自動投稿の前の環境チェック|PythonとREST APIとWordPressの版を外から確かめる

PCのスクリプトからWordPressへ記事を送る自動投稿のツールは、手元のPythonの版、サイトのREST API、WordPressとPHPの版がそろっていないと動きません。買ってから「動かない」と分かるのを避けるには、買う前に、外から確かめられることを確かめておくのが近道です。この記事では、ログインせずに確かめられる項目をまとめて調べるPythonを作り、当サイトで実行した結果を載せます。

(確認:当サイトのAmazon Auto Postsの動作環境(Python 3.12以上・WordPress 6.8以上・PHP 8.1以上・REST APIが使えること)。実行:2026年10月22日、Windows 11・Python 3.13で、当サイト realine.net に対して実行)

確かめる項目と方法

項目 外から分かるか 方法
Pythonの版 分かる(自分のPC) スクリプトの中で sys.version_info を見る
HTTPS 分かる サイトのURLが https:// か。アプリケーションパスワードはHTTPSが前提(アプリケーションパスワードが表示されない)
REST APIの入口 分かる /wp-json/ がHTTP 200で、namespaces に wp/v2 がある
記事の一覧 分かる /wp-json/wp/v2/posts がHTTP 200。WAFなどで止められていると403になる
WordPressの版 場合による フィード(/feed/)の generator に版が出ていれば読める
PHPの版 分からない 管理画面の「ツール」→「サイトヘルス」→「情報」→「サーバー」

コード:まとめて確かめる

# 自動投稿ツールを入れる前に、手元のPythonとWordPressの外から見える状態を確かめる(読み取りのみ・ログイン不要)
# 使い方: python wp_env_precheck.py https://example.com
import sys
import json
import re
import urllib.request
import urllib.error

NEED_PY = (3, 12)      # 求められるPythonの版(Amazon Auto Postsの動作環境)
NEED_WP = (6, 8)       # 求められるWordPressの版
TIMEOUT = 20
UA = {'User-Agent': 'Mozilla/5.0 (env-precheck)'}


def get(url):
    req = urllib.request.Request(url, headers=UA)
    try:
        with urllib.request.urlopen(req, timeout=TIMEOUT) as r:
            return r.status, r.read().decode('utf-8', 'replace')
    except urllib.error.HTTPError as e:
        return e.code, ''
    except (urllib.error.URLError, TimeoutError) as e:
        return None, str(e)


def mark(ok):
    return 'OK  ' if ok else 'NG  '


site = (sys.argv[1] if len(sys.argv) > 1 else 'https://realine.net').rstrip('/')

py = sys.version_info[:2]
print(mark(py >= NEED_PY) + f'Python {py[0]}.{py[1]}({NEED_PY[0]}.{NEED_PY[1]}以上が必要)')
print(mark(site.startswith('https://')) + f'HTTPSのURL: {site}')

code, body = get(site + '/wp-json/')
ns = []
if code == 200:
    try:
        ns = json.loads(body).get('namespaces', [])
    except json.JSONDecodeError:
        pass
print(mark('wp/v2' in ns) + f'REST APIの入口 /wp-json/: HTTP {code}、wp/v2 {"あり" if "wp/v2" in ns else "なし"}')

code, body = get(site + '/wp-json/wp/v2/posts?per_page=1&_fields=id')
print(mark(code == 200) + f'記事の一覧 /wp-json/wp/v2/posts: HTTP {code}')

# WordPressの版は、フィードの generator に出ていれば読める(消しているサイトもある)
code, body = get(site + '/feed/')
m = re.search(r'wordpress\.org/\?v=(\d+)\.(\d+)', body)
if m:
    wp = (int(m.group(1)), int(m.group(2)))
    print(mark(wp >= NEED_WP) + f'WordPress {wp[0]}.{wp[1]}({NEED_WP[0]}.{NEED_WP[1]}以上が必要。フィードの表示から)')
else:
    print('??  WordPressの版: フィードに表示なし(管理画面のダッシュボードで確かめる)')
print('--  PHPの版は外からは分からない(管理画面の「ツール」→「サイトヘルス」→「情報」→「サーバー」で確かめる)')

実行の結果(realine.net)

OK  Python 3.13(3.12以上が必要)
OK  HTTPSのURL: https://realine.net
OK  REST APIの入口 /wp-json/: HTTP 200、wp/v2 あり
OK  記事の一覧 /wp-json/wp/v2/posts: HTTP 200
OK  WordPress 7.1(6.8以上が必要。フィードの表示から)
--  PHPの版は外からは分からない(管理画面の「ツール」→「サイトヘルス」→「情報」→「サーバー」で確かめる)
  • 手元のPythonは3.13で、3.12以上を満たしていた
  • REST APIの入口と記事の一覧は、どちらもHTTP 200。外からの読み取りは止められていない
  • WordPressの版は、フィードの表示から7.1と読めた
  • PHPの版は外からは分からないため、管理画面で確かめる

NGが出た時の見方

このスクリプトで分からないこと

  • 投稿の権限:記事の作成には、アプリケーションパスワードなどでの認証が要る。このスクリプトは読み取りだけで、書き込みは試していない
  • 自分のPCからだけ止められる場合:別の回線やVPN経由だと、結果が違うことがある。実際に使うPCで実行する
  • プラグインの相性:ほかのプラグインがREST APIを書き換えている場合の動き

投稿を試した後のエラーの見分け方はWordPress自動投稿でよくあるエラーと切り分け方にあります。WordPressの動作環境の全体はWordPressの動作環境にまとめています。

まとめ

  • 自動投稿のツールを入れる前に、Pythonの版・HTTPS・REST APIの入口と記事の一覧・WordPressの版を、ログインせずに確かめられる
  • PHPの版と投稿の権限は外から分からないため、管理画面と実際の投稿の試しで確かめる
  • 実際に使うPCから実行する。回線によって結果が違うことがある

本記事は、当サイトでの実行の結果にもとづく確認の手順です。Amazonの商品記事を自動で作るツールの動作環境はAmazon Auto Posts 導入前に確認することにまとめています。