Appearance
ADM-008 Xツイートまとめ(メイン)管理画面
概要
- X ツイートの検索・取得、要約生成、下書き投稿作成、取得結果の保存・読込・削除などを 複数ステップの UI で行う管理画面。
- WordPress トップレベルメニュー(
add_menu_page)として登録。pageslug は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_summary | Gemini 要約生成。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 RuntimeException | JSON エラー+ログ | [TwitterSummaryAdminPage][ajax_*] |