Appearance
有料記事 AI データ取得ツール
有料記事の AI 考察生成および編集画面 AI 相談(Claude Tool Use / Gemini Function Calling)が呼ぶデータ取得ツールの契約を定義する。生成サービス・相談サービス・admin-ajax・編集画面・設定画面の画面仕様は対象外(相談 UI・履歴は paid-article-ai-chat-design.md)。
配置
| 項目 | 値 |
|---|---|
| ディレクトリ | core_src/Service/paid_article_ai_generation/Tools/ |
| Dispatcher | AiToolDispatcher(PaidArticleAiToolDispatcherInterface) |
| 呼び出し元 | PaidArticleAiGenerationService(一括/単欄生成)、PaidArticleAiChatService(編集画面相談) |
| Tool 契約 | PaidArticleAiToolInterface / PaidArticleAiContextualToolInterface |
| 共通日付・ホール | PaidArticleAiToolDateRange |
| 共通 JSON | PaidArticleAiToolJson |
| エラー文言 | PaidArticleAiToolCopy |
Dispatcher
AiToolDispatcher は登録済み Tool を name() で引き、Claude Tool Use の tool_use を実行する。
| メソッド | 入力 | 出力 |
|---|---|---|
definitions() | なし | Claude Messages API の tools 配列(name / description / input_schema) |
dispatch(name, arguments) | ツール名と引数オブジェクト | Tool の戻り JSON 文字列 |
set_post_context(post_id, target_month, field) | 生成対象の投稿 ID・対象月(YYYY-MM)・生成中の target_field | なし。PaidArticleAiContextualToolInterface 実装へ転送する |
set_selected_halls(halls|null) | AI 相談で選択したホール slug 一覧。null / 空は制約なし | なし |
clear_selected_halls() | なし | なし。選択ホール制約を解除する |
投稿コンテキスト:
post_id/ 対象月 / 生成中フィールドは 呼び出し側サービスがバインドする。LLM の tool 引数にはpost_idを含めない。PaidArticleAiGenerationServiceは対象月を解決した直後、LLM 呼び出しの前にset_post_context()する。PaidArticleAiChatServiceも対象月を解決した直後にset_post_context()する。対象欄が複数のときは第 3 引数を空文字、単一のときはそのtarget_fieldを渡す。- コンテキスト付き Tool は
PaidArticleAiContextualToolInterfaceを実装する。通常の Tool には転送しない。 - 日別記事専用の
DailyArticleAiToolDispatcherはこのカタログとは別契約であり、有料記事の生成・相談からは呼び出さない。
AI 相談のホール制約:
PaidArticleAiChatServiceは送信処理の間だけset_selected_halls()し、終了時にclear_selected_halls()する。- 制約があるとき、
dispatchはinput_schema.propertiesにhallsがある Tool について、引数のhallsが省略・空・選択外を含む場合に UI 選択ホールへ交差または置換する(選択外へ広げない)。 - 制約が無いとき(一括生成・CLI / MCP)は従来どおり
PaidArticleAiToolDateRange::parse_optional_halls()が省略・空を全日別記事対象ホールとして扱う。
エラー方針:
| 条件 | 戻り JSON | 例外 | ログ |
|---|---|---|---|
| 未登録のツール名 | {"error":"unknown_tool"} | 投げない | なし |
| Tool 実行中の例外 | {"error":"tool_execution_failed"} | 外へ出さない | error_log にツール名と例外メッセージ |
| 引数不正(各 Tool 内) | {"error":"<日本語メッセージ>"} | 投げない | なし |
共通制約
全ツールで共通する入力・出力ルール。
| 項目 | 契約 |
|---|---|
date_from | 必須(期間指定ツール)。Y-m-d。開始日は終了日以前 |
date_to | 必須(期間指定ツール)。Y-m-d |
date | 必須(fetch_birthday_machine_results)。単一日 Y-m-d |
min_count | 任意(fetch_hall_avg_samai_ranking)。延べ台数下限。0 以上の整数。省略時は除外なし |
limit | 任意(fetch_hall_avg_samai_ranking)。ホールごとの上位件数。1〜50。省略時 20 |
| 期間上限 | 開始日・終了日を含む最大 62 日 |
| ホール slug | island / espasu / bigapple のみ。uno は不正 |
target_month | fetch_next_month_machines / fetch_target_month_articles。有料記事の対象月 YYYY-MM |
| 不正引数 | 例外にせず {"error":"..."} |
| JSON エンコード | JSON_UNESCAPED_UNICODE と JSON_UNESCAPED_SLASHES |
日付不正時の error 文言:
| 条件 | error |
|---|---|
| 形式不正・開始 > 終了 | date_from と date_to は Y-m-d 形式で、開始日が終了日以前である必要があります。 |
単一 date 不正 | date は Y-m-d 形式で指定してください。 |
| 62 日超 | 期間は62日以内にしてください。 |
単一 hall 不正 | hall は island / espasu / bigapple のいずれかを指定してください。 |
halls 配列不正 | halls は island / espasu / bigapple の配列で指定してください。 |
target_month 不正 | target_month は YYYY-MM 形式で指定してください。 |
kishu / kishu_ids 未指定 | kishu または kishu_ids のいずれかを指定してください。 |
kishu 不正 | kishu は空でない文字列の配列で指定してください。 |
kishu_ids 不正 | kishu_ids は 1 以上の整数の配列で指定してください。 |
include_daily 不正 | include_daily は boolean(または 0/1 / true/false)で指定してください。 |
min_count 不正 | min_count は 0 以上の整数で指定してください。 |
limit 不正 | limit は 1〜50 の整数で指定してください。 |
ツール一覧
| name | クラス | データ源 | ホール引数 |
|---|---|---|---|
fetch_daily_considerations | DailyConsiderationFetchTool | 公開済み daily_article の考察 post meta(DailyArticleConsiderationMetaKeys)。HTML はプレーンテキスト化 | 任意の単一 hall。省略時は全日別記事対象ホール |
fetch_hall_daily_results | HallDailyResultTool | 日×ホールの機種別サマリ。合計差枚ランキング上位 10 機種 | 任意の halls 配列。省略または空なら全日別記事対象ホール |
fetch_period_kishu_samai | PeriodKishuSamaiTool | SC-010 相当の期間差枚(PeriodSamaiSummaryService)。指定機種の期間合計・平均・日数・台数・任意で日別 | 任意の halls 配列。省略または空なら全日別記事対象ホール |
resolve_kishu_name | ResolveKishuNameTool | 共通 ArticleAiKishuNameResolver で略称・通称を正式名称 / kishu_id へ解決(差枚は取得しない) | なし |
fetch_hall_avg_samai_ranking | HallAvgSamaiRankingTool | PUB-005 / SC-016 と同じ PeriodKishuSamaiRankingService。平均差枚降順。min_count で延べ台数除外 | 任意の halls 配列。省略または空なら全日別記事対象ホール |
fetch_event_info | EventInfoFetchTool | db_Link_day(LinkDayRepositoryInterface)。EventMasterRepository は使わない | 任意の halls 配列。省略または空なら全日別記事対象ホール |
fetch_next_month_machines | NextMonthMachinesTool | PaidArticleNextMonthMachinesServiceInterface::resolve_rows(編集画面「来月の導入台」と同じ一覧) | なし |
fetch_birthday_machine_results | BirthdayMachineResultsTool | SC-005 相当の誕生日機種結果(BirthDayMachineResultService) | 任意の halls 配列。省略または空なら全日別記事対象ホール |
fetch_kishu_count_delta | KishuCountDeltaTool | SC-015 相当の機種台数前日比(KishuCountDeltaListService) | 任意の halls 配列。省略または空なら全日別記事対象ホール |
fetch_what_days_by_period | WhatDaysByPeriodTool | 掲載実績: espasu_what_day_manual + kousatsu_date。マスタ: WhatDayMasterRepository::select_visible | なし |
fetch_dates_by_what_day | DatesByWhatDayTool | 同上(名称から日付逆引き) | なし |
fetch_target_month_articles | TargetMonthPaidArticlesTool | 対象月(YYYY-MM)を明示指定して公開済み有料記事の保存済み考察を返す(投稿コンテキスト不要) | なし |
fetch_paid_article_sections | CurrentArticleSectionsTool | 同じ有料記事の保存済み考察(PaidArticleAiTargetField 許可リスト)。未保存エディタ内容は見えない | なし(投稿は生成サービスがバインド) |
fetch_past_paid_articles | PastPaidArticlesTool | 対象月の相対指定で過去号の公開済み有料記事を 1 件ずつ引き、保存済み考察を返す | なし(投稿と対象月は生成サービスがバインド) |
fetch_hall_x_posts | HallXPostsTool | X API v2 の投稿(店舗調査)。契約は 店舗調査 AI ツール | 任意の halls 配列。キーワード未指定時の検索語 |
investigate_hall_with_grok | HallGrokInvestigationTool | Grok(xAI)x_search による調査要約。契約は同上 | 任意の halls 配列。プロンプトにホール名を入れる |
店舗調査ツール(fetch_hall_x_posts / investigate_hall_with_grok)は core_src/Service/hall_investigation/ に置き、日別記事 AI 相談の DailyArticleAiToolDispatcher にも同じインスタンスを登録する。入出力・エラー・レート制限は 店舗調査 AI ツール を正とし、本書の共通制約(62 日上限・ホール slug)と同じ範囲で解釈する。
fetch_daily_considerations
公開済み日別記事の考察本文(ホール別の前半・後半)を返す。
入力
| フィールド | 必須 | 型 | 説明 |
|---|---|---|---|
date_from | はい | string | 開始日(Y-m-d) |
date_to | はい | string | 終了日(Y-m-d) |
hall | いいえ | string | island / espasu / bigapple。省略時は全日別記事対象ホール |
出力
成功時:
| フィールド | 型 | 説明 |
|---|---|---|
items | array | 考察が空でない日×ホールの配列 |
items[].date | string | 考察日(Y-m-d) |
items[].hall | string | ホール slug(引数契約。本文には使わない) |
items[].hall_name | string | 日本語のホール名(HallEnum::to_japanese()) |
items[].pre | string | 前半考察(プレーンテキスト) |
items[].after | string | 後半考察(プレーンテキスト) |
依存: DailyArticleConsiderationRepositoryInterface、WordPressPostMetaReaderInterface。
fetch_hall_daily_results
日×ホールごとに合計差枚ランキング上位 10 機種を返す。
入力
| フィールド | 必須 | 型 | 説明 |
|---|---|---|---|
date_from | はい | string | 開始日(Y-m-d) |
date_to | はい | string | 終了日(Y-m-d) |
halls | いいえ | array | ホール slug の配列。省略または空なら全日別記事対象ホール |
出力
成功時:
| フィールド | 型 | 説明 |
|---|---|---|
items | array | ランキング対象行がある日×ホールの配列(未登録の日は省略) |
items[].date | string | 対象日(Y-m-d) |
items[].hall | string | ホール slug(引数契約。本文には使わない) |
items[].hall_name | string | 日本語のホール名(HallEnum::to_japanese()) |
items[].machines | array | 上位 10 機種以下(少なければ 10 未満。順位昇順) |
items[].machines[].kishu | string | 機種名 |
items[].machines[].count | number | 台数 |
items[].machines[].avg_samai | number | 平均差枚 |
items[].machines[].total_samai | number | 合計差枚 |
依存: DailyArticleKishuSingleDaySummaryRepositoryInterface。
fetch_period_kishu_samai
指定機種の期間合計差枚・平均差枚・集計日数・延べ台数を返す。日次トップ 10 外の機種も取得できる。kishu(機種名または通称・略称)と kishu_ids(マスタ ID)は少なくとも一方必須。両方指定時は OR。
kishu は共通の ArticleAiKishuNameResolver でマスタ ID へ解決し、差枚取得は 解決済み kishu_ids で照合する(マスタ正式名称と日別表記の不一致で空結果にしない)。参照データ源は機種マスタ name、ヒートマップ略称 heatmap_abbreviation、機種表示マッピング data_kishu。完全一致のあと部分一致を行い、複数件に当たった場合は決め打ちせず ambiguous を返す。kishu 側が未解決でも、同時に有効な kishu_ids があれば ID 側のみで取得を続行する(OR)。
入力
| フィールド | 必須 | 型 | 説明 |
|---|---|---|---|
date_from | はい | string | 開始日(Y-m-d) |
date_to | はい | string | 終了日(Y-m-d) |
halls | いいえ | array | ホール slug の配列。省略または空なら全日別記事対象ホール |
kishu | 条件付き | array | 機種名/通称/略称の配列。kishu_ids と少なくとも一方必須 |
kishu_ids | 条件付き | array | 機種マスタ ID(1 以上の整数)の配列。kishu と少なくとも一方必須 |
include_daily | いいえ | boolean | 日別内訳を含めるか。省略時は true |
出力
成功時:
| フィールド | 型 | 説明 |
|---|---|---|
status | string | ok |
items | array | データがあるホール×機種の配列(無い組み合わせは省略) |
items[].hall | string | ホール slug |
items[].hall_name | string | 日本語のホール名 |
items[].kishu | string | 機種名 |
items[].kishu_id | number|null | 機種マスタ ID。不明なときは null |
items[].total_samai | number | 期間合計差枚(SC-010 total_coins と同定義) |
items[].avg_samai | number | 台毎平均差枚(SC-010 avg_coins_per_unit と同定義) |
items[].day_count | number | 集計日数(データがある distinct 日付数) |
items[].aggregated_count | number | 延べ台数(SC-010 aggregated_count と同定義) |
items[].daily | array | 日別内訳(include_daily が false のときは無し) |
items[].daily[].date | string | 日付(Y-m-d) |
items[].daily[].total_samai | number | その日の合計差枚 |
items[].daily[].count | number | その日の台数 |
items[].daily[].avg_samai | number | その日の平均差枚 |
機種名が未解決・曖昧なとき(差枚は取得しない):
| フィールド | 型 | 説明 |
|---|---|---|
status | string | unresolved または ambiguous |
items | array | 常に空配列 |
query | string | 解決できなかった(または曖昧だった)入力機種名 |
candidates | array | 候補の正式名称(最大 5)。無い場合は空配列 |
依存: PeriodSamaiSummaryServiceInterface(get_grouped_summaries_with_daily)、ArticleAiKishuNameResolver。
resolve_kishu_name
機種名または通称・略称を、共通の ArticleAiKishuNameResolver でマスタ正式名称と kishu_id へ解決する。差枚は取得しない。他ツールへ正式名称 / ID を渡す前の事前解決用。参照データ源・完全一致→部分一致・曖昧時の候補返却は fetch_period_kishu_samai の kishu 解決と同一。管理画面 AI・WP-CLI / Cursor MCP の双方に登録する。
入力
| フィールド | 必須 | 型 | 説明 |
|---|---|---|---|
kishu | はい | string | 機種名または通称・略称(1 件) |
出力
| フィールド | 型 | 説明 |
|---|---|---|
status | string | ok / ambiguous / unresolved |
names | array | 解決できた正式名称(ok 時は 1 件)。それ以外は空配列 |
kishu_ids | array | 解決できたマスタ ID(ok 時は 1 件)。それ以外は空配列 |
candidates | array | 曖昧・未解決時の候補正式名称(最大 5)。ok 時は空配列 |
query | string | 入力した機種指定(trim 後) |
kishu が空でない文字列でないときは error(kishu は空でない文字列で指定してください。)。
依存: ArticleAiKishuNameResolver。
fetch_hall_avg_samai_ranking
指定期間のホール別・機種別平均差枚ランキングを返す。集計は PUB-005 / SC-016 と同じ PeriodKishuSamaiRankingService。少台数除外は延べ台数(aggregated_count)に対する min_count で行う。WP-CLI / Cursor MCP 専用(管理画面 AI 生成の definitions() には載せない)。
入力
| フィールド | 必須 | 型 | 説明 |
|---|---|---|---|
date_from | はい | string | 開始日(Y-m-d) |
date_to | はい | string | 終了日(Y-m-d) |
halls | いいえ | array | ホール slug の配列。省略または空なら全日別記事対象ホール |
min_count | いいえ | integer | 延べ台数の下限。未満は除外。省略時は除外しない。暦月通しの目安 100、半月程度 50 |
limit | いいえ | integer | ホールごとの上位件数。省略時 20、上限 50 |
出力
成功時:
| フィールド | 型 | 説明 |
|---|---|---|
date_from | string | 開始日(Y-m-d) |
date_to | string | 終了日(Y-m-d) |
min_count | number|null | 指定した下限。省略時は null |
limit | number | ホールごとの上限件数 |
halls | array | 要求ホール順の配列 |
halls[].hall | string | ホール slug |
halls[].hall_name | string | 日本語のホール名 |
halls[].items | array | 平均差枚降順。データ無しは空配列(エラーにしない) |
halls[].items[].rank | number | ホール内順位(1 始まり) |
halls[].items[].kishu | string | 機種名 |
halls[].items[].avg_samai | number | 平均差枚 |
halls[].items[].total_samai | number | 合計差枚 |
halls[].items[].aggregated_count | number | 延べ台数 |
halls[].items[].count_on_period_end | number | 期間末日の台数 |
依存: PeriodKishuSamaiRankingServiceInterface。
fetch_event_info
db_Link_day に記録されたホール別イベント名を返す。イベントマスタは参照しない。
入力
| フィールド | 必須 | 型 | 説明 |
|---|---|---|---|
date_from | はい | string | 開始日(Y-m-d) |
date_to | はい | string | 終了日(Y-m-d) |
halls | いいえ | array | ホール slug の配列。省略または空なら全日別記事対象ホール |
出力
成功時:
| フィールド | 型 | 説明 |
|---|---|---|
items | array | イベントがある日×ホールの配列 |
items[].date | string | 対象日(Y-m-d) |
items[].hall | string | ホール slug(引数契約。本文には使わない) |
items[].hall_name | string | 日本語のホール名(HallEnum::to_japanese()) |
items[].events | array | イベント名(文字列)の配列 |
依存: LinkDayRepositoryInterface。
fetch_next_month_machines
編集画面の「来月の導入台」と同じ翌月導入台一覧を返す。入力の target_month は有料記事の対象月であり、返るのはその翌月の導入予定機種。
入力
| フィールド | 必須 | 型 | 説明 |
|---|---|---|---|
target_month | はい | string | 有料記事の対象月(YYYY-MM)。翌月の導入台を返す |
出力
成功時:
| フィールド | 型 | 説明 |
|---|---|---|
machines | array | 導入日・機種名順の一覧 |
machines[].machine_name | string | 機種名(紐付け済みは機種マスタ表示名、未紐付けはスクレイプ名) |
machines[].release_date | string | 導入日(空のときは —) |
依存: PaidArticleNextMonthMachinesServiceInterface。
fetch_birthday_machine_results
指定日の誕生日キャラクターと関連機種の台数・差枚・回転(ホール別)を返す。日別記事 SC-005(BirthDayMachineResultService::get_data_with_daily_results)と同じデータ源。誕生日マスタが無い日は空配列で成功する(error にしない)。
入力
| フィールド | 必須 | 型 | 説明 |
|---|---|---|---|
date | はい | string | 対象日(Y-m-d) |
halls | いいえ | array | ホール slug の配列。省略または空なら全日別記事対象ホール |
出力
成功時:
| フィールド | 型 | 説明 |
|---|---|---|
date | string | 要求した対象日(Y-m-d) |
actual_data_date | string | サービスが採用した基準日(Y-m-d) |
has_result_data | boolean | 対象日に差枚等の結果があるか |
characters | array | 当該月日の誕生日キャラ一覧(ピックアップ相当) |
characters[].divi | string | キャラ誕 / 声優誕 |
characters[].character | string | キャラクター名 |
characters[].actor | string | 声優名 |
characters[].original_work | string | 原作タイトル |
characters[].title | string | 紐付け機種名 |
machine_results | array | 統計ありの関連機種行(ホール別) |
machine_results[].divi | string | キャラ誕 / 声優誕 |
machine_results[].character | string | キャラクター名 |
machine_results[].original_work | string | 原作タイトル |
machine_results[].title | string | 機種名 |
machine_results[].hall | string|null | ホール slug |
machine_results[].machine_count | number|null | 台数 |
machine_results[].total_coins | number|null | 合計差枚 |
machine_results[].average_rotation | number|null | 平均回転 |
machine_results[].machine_count_reference_date | string|null | 台数基準日(Y-m-d) |
依存: BirthDayMachineResultServiceInterface。
fetch_what_days_by_period
指定期間のエスパス〇〇の日を返す。掲載実績の正本は日別記事 post meta espasu_what_day_manual(JSON 文字列配列)と考察日 kousatsu_date。db_daily_article_what_day は使わない。
入力
| フィールド | 必須 | 型 | 説明 |
|---|---|---|---|
date_from | はい | string | 開始日(Y-m-d)。最大 62 日 |
date_to | はい | string | 終了日(Y-m-d) |
mode | いいえ | string | published(既定)/ master / both。掲載実績・マスタ・両方を選択 |
出力
成功時:
| フィールド | 型 | 説明 |
|---|---|---|
items | array | 名称がある日× source の配列(空の日は省略) |
items[].date | string | 考察日またはカレンダー日(Y-m-d) |
items[].source | string | published または master |
items[].names | array | 〇〇の日名称の配列 |
依存: DailyArticleConsiderationRepositoryInterface、WordPressPostMetaReaderInterface、WhatDayMasterRepositoryInterface。
fetch_dates_by_what_day
〇〇の日の名称(部分一致)から、掲載実績および/またはマスタ上の該当日を返す。
入力
| フィールド | 必須 | 型 | 説明 |
|---|---|---|---|
name | はい | string | 名称(前後空白除去。空不可) |
mode | いいえ | string | published(既定)/ master / both |
year | いいえ | int | 対象年(YYYY) |
date_from | いいえ | string | 開始日(Y-m-d)。date_to とセット。上限 366 日 |
date_to | いいえ | string | 終了日(Y-m-d) |
期間の決め方: year のみはその年の 1/1〜12/31。date_from/date_to はその範囲。両方あるときは交差。どちらも無いときは直近 366 日(current_time( 'Y-m-d' ) 基準)。
出力
成功時:
| フィールド | 型 | 説明 |
|---|---|---|
query | string | 正規化した検索語 |
items | array | 一致行 |
items[].date | string | 該当日(Y-m-d) |
items[].source | string | published または master |
items[].matched_name | string | 一致した名称 |
items[].mmdd | number|null | マスタ行のみ。月日整数 |
items[].yyyymmdd | number|null | マスタ行のみ。特定日 8 桁 |
依存: DailyArticleConsiderationRepositoryInterface、WordPressPostMetaReaderInterface、WhatDayMasterRepositoryInterface。
fetch_target_month_articles
対象月(YYYY-MM)を明示指定し、その月の公開済み有料記事の保存済み考察を返す。投稿コンテキスト(set_post_context)は不要。WP-CLI / Cursor MCP 専用(管理画面 AI 生成の definitions() には載せない。CLI 専用 Dispatcher 経由でのみ実行する)。
fetch_past_paid_articles(相対月・現在投稿除外・生成サービスがコンテキストバインド)とは役割が異なる。
入力
| フィールド | 必須 | 型 | 説明 |
|---|---|---|---|
target_month | はい | string | 有料記事の対象月(YYYY-MM) |
出力
成功時:
| フィールド | 型 | 説明 |
|---|---|---|
articles | array | 最大 1 件(該当月の公開記事) |
articles[].target_month | string | 対象月 |
articles[].post_id | int | null | 見つかった投稿 ID。無いときは null |
articles[].issue_number | string|null | 号数。無いときは null |
articles[].sections | array | PaidArticleAiArticleSectionsReader と同じ考察一覧 |
依存: WordPressPostMetaReaderInterface / get_posts。
fetch_paid_article_sections
同じ有料記事の他の考察欄(保存済み post meta)をプレーンテキストで返す。生成中の欄は is_current で区別する。未保存のエディタ内容は見えない(保存済み meta のみ)。特定機種結果は新キー(paid_article_section_smr_*)を優先し、空なら旧 paid_article_section_tm_* にフォールバックする。
post_id は LLM 引数に含めない。生成サービスが set_post_context() でバインドする。未バインド時は {"error":"生成対象の投稿がバインドされていません。"}。
入力
| フィールド | 必須 | 型 | 説明 |
|---|---|---|---|
| (なし) | — | — | properties は空オブジェクト。PHP の [] を JSON のリストにしない。post_id は渡させない |
Gemini Function Calling へ渡すときは parameters.properties をマップ(JSON オブジェクト)にする。空でも [] ではなく {}。リストだと HTTP 400(Cannot bind a list to map for field 'properties')になる。
出力
成功時:
| フィールド | 型 | 説明 |
|---|---|---|
items | array | 本文が空でない考察欄の配列 |
items[].target_field | string | PaidArticleAiTargetField の許可キー |
items[].label | string | 欄ラベル |
items[].text | string | 考察本文(HTML はプレーンテキスト化) |
items[].is_current | boolean | 生成中の欄なら true。current_field が空のときは付与しない |
依存: WordPressPostMetaReaderInterface、PaidArticleAiArticleSectionsReader。
fetch_past_paid_articles
現在号の対象月から見て先月・先々月などの過去号の考察を返す。見つからない月はエラーにせず空で含める。現在の生成対象投稿は exclude する。
post_id と対象月は LLM 引数に含めない。生成サービスがバインドする。未バインド時は {"error":"生成対象の投稿がバインドされていません。"}。
未保存のエディタ内容は見えない(保存済み meta のみ)。
入力
| フィールド | 必須 | 型 | 説明 |
|---|---|---|---|
months_ago | はい | array | 整数の配列。1=先月、2=先々月。値は 1〜12、重複なし、最大 3 件。JSON の 1.0 や "1" も整数として受け付ける |
不正時の error: months_ago は 1〜12 の整数を最大3件、重複なく指定してください。
出力
成功時:
| フィールド | 型 | 説明 |
|---|---|---|
articles | array | months_ago の順。見つからない月も含む |
articles[].target_month | string | 過去号の対象月(YYYY-MM) |
articles[].post_id | number|null | 公開済み投稿 ID。無ければ null |
articles[].issue_number | string|null | 号数。無ければ null |
articles[].sections | array | 考察一覧(target_field / label / text) |
検索条件は PaidArticleTemplateService::resolve_adjacent_month_link と同じ(paid_article・publish・TARGET_MONTH・ID 昇順 1 件・現在投稿を除外)。
依存: WordPressPostMetaReaderInterface、PaidArticleAiArticleSectionsReader。
呼び出し側
生成サービスと相談サービスは対象月解決後に set_post_context() し、PaidArticleAiToolDispatcherInterface::definitions() を Claude / Gemini の tools に渡し、tool 呼び出しを dispatch() する。欄ごと生成(EP-021)・一括生成(EP-022)・編集画面相談(EP-029)が同じ管理画面カタログを使う。一括時および相談で複数欄選択時の current_field は空。本ドキュメントはツール層の契約のみを扱う(相談 UI・履歴は paid-article-ai-chat-design.md)。
WP-CLI(slot-kouryaku paid-article-tool)と Cursor MCP は PaidArticleAiCliToolDispatcherInterface を使う。こちらは非 Contextual の Tool(fetch_hall_daily_results / fetch_period_kishu_samai / resolve_kishu_name / fetch_hall_avg_samai_ranking / fetch_event_info / fetch_daily_considerations / fetch_next_month_machines / fetch_birthday_machine_results / fetch_kishu_count_delta / fetch_what_days_by_period / fetch_dates_by_what_day / fetch_hall_x_posts / investigate_hall_with_grok)に加え fetch_target_month_articles / check_local_data_coverage を登録し、管理画面生成の definitions() とは分離する(fetch_birthday_machine_results / fetch_kishu_count_delta / fetch_what_days_by_period / fetch_dates_by_what_day / resolve_kishu_name / fetch_hall_x_posts / investigate_hall_with_grok は管理画面 AI 側にも登録する。fetch_hall_avg_samai_ranking は CLI / MCP のみ)。