Skip to content

ADM-008 Xツイートまとめ(メイン)管理画面 ​

概要 ​

  • X ツイートの検索・取得、要約生成、下書き投稿作成、取得結果の保存・読込・削除などを 複数ステップの UI で行う管理画面。
  • WordPress トップレベルメニュー(add_menu_page)として登録。page slug は twitter-summary。操作の多くは admin-ajax 経由。
  • Bearer Token は ADM-009(設定画面)、Gemini API Key は ADM-032 で管理するオプションを参照する。

外部インターフェース ​

管理画面 URL ​

項目値
URL/wp-admin/admin.php?page=twitter-summary
メニュー名Xツイートまとめ
権限画面表示・全 AJAX: manage_options

admin-ajax(HTTP 契約) ​

すべて POST /wp-admin/admin-ajax.php。nonce は POST パラメータ nonce を twitter_summary_admin で検証(AdminAjaxNonceTrait)。

action 値説明主な権限
fetch_tweetsツイート検索取得。search_type(user|keyword), search_query, max_results。1 件以上なら既定名で自動保存manage_options
generate_summaryGemini 要約生成。tweets_json(JSON 文字列)、任意 search_query(ホール推定用)manage_options
twitter_summary_create_post通常投稿の下書き作成。post_title, summary, tweet_ids(JSON 配列)manage_options
twitter_summary_save_tweets取得ツイートの名前付き保存。自動保存失敗時の再試行用manage_options
twitter_summary_list_saved_tweets保存済み一覧取得manage_options
twitter_summary_load_saved_tweets保存済みからツイート本文を復元manage_options
twitter_summary_delete_saved_tweets保存済み削除manage_options
twitter_summary_generate_editorial_memo編集部メモ生成(Gemini)。対象日の差枚スナップショットをプロンプトへ渡すmanage_options

保存済みセットの閲覧・一覧は ADM-027(twitter-summary-saved-list)を正とする。メイン画面 Step 2 からは保存済み一覧ページへリンクする。

POST パラメータの細目は TwitterSummaryAdminPage の各 ajax_* メソッドコメントを正とする。保存件数上限(保存メタデータ)は最大 20 件(超過時は古いものから削除しメッセージに反映)。

fetch_tweets は X API の従量課金を踏まえ、サーバー側クールダウン(成功時 30 秒、402 時 5 分、429 時 15 分)を適用する。クールダウン中は JSON エラーで message と cooldown_seconds を返す。成功時も cooldown_seconds を含める。

取得成功かつ正規化後 1 件以上のとき、保存名 {YYYYMMDD}_{search_query} で同一リクエスト内に自動保存する。再取得は上書きせず新規セットを追加する。成功 JSON は saved(id / name / message)または null(0 件・保存失敗)と、失敗時の save_error を含む。取得自体は保存失敗でも success とする。load_set による保存済み読込は自動保存しない。twitter_summary_save_tweets は自動保存失敗時の手動再試行用。name / source_query は varchar(255) に切り詰めて保存する。

要約・編集部メモの信憑性 ​

generate_summary と twitter_summary_generate_editorial_memo は、独立した投稿者数が多い同一主張ほど高く扱い、対象日の機種別差枚スナップショットと方向が照合できる主張だけ一致・矛盾を判定する。設定確定・抽選・イベント・閉店などは未検証とする。差枚が取れないときはスナップショット空で要約自体は落とさない。search_query とツイート本文からホール名を推定し、ヒットしたホールだけ(無ければ全ホール)の上位・下位差枚をプロンプトへ渡す。差枚参照データの対象日以外の稼働について述べた主張も未検証とする。

独立した投稿者を判定できるよう、プロンプトの各ツイートに 表示名 (@username) 形式の投稿者を付ける(X API 取得時は includes.users、保存済み読込は保存済みの投稿者情報から引く。引けないときは不明と明示)。編集部メモの claims は保存前にサーバー側で補正する。差枚参照データが空なら match / conflict を unverifiable に戻し、support_count はセット内の異なる投稿者数(@username 基準。不明な投稿は 1 件ずつ別人扱い)を上限にする。

設定画面への導線 ​

  • Twig に admin.php?page=twitter-summary-settings への URL を渡す(実際の slug は ADM-009 参照)。

エラー ​

条件ユーザー向け挙動メッセージ / ログ
nonce 不正JSON エラー認証失敗
Bearer 未設定JSON エラーTwitterSummaryMessages::TOKEN_MISSING
Gemini キー未設定(要約時)JSON エラーTwitterSummaryMessages::LLM_KEY_MISSING
X API 429 等JSON エラーレート制限メッセージ。cooldown_seconds 付き
X API 402(クレジット不足)JSON エラーTwitterSummaryMessages::CREDITS_DEPLETED。cooldown_seconds 付き
X API 連打防止クールダウンJSON エラーTwitterSummaryMessages::API_COOLDOWN。cooldown_seconds 付き
外部 API RuntimeExceptionJSON エラー+ログ[TwitterSummaryAdminPage][ajax_*]