addashboard-cli 0.14.0 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/dist/commands/report.js +288 -0
- package/dist/commands/report.js.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/skills/ad-ops/SKILL.md +34 -2
- package/skills/ad-ops/ad-planner.html +12 -2
- package/skills/ad-ops/scripts/adops.sh +12 -0
- package/skills/ad-ops/scripts/assets_sync.py +277 -0
- package/skills/ad-ops/scripts/plan_lint.py +24 -0
- package/skills/ad-ops/scripts/test_assets_sync.py +132 -0
package/README.md
CHANGED
|
@@ -36,12 +36,17 @@ webgram freee <login|templates|issue> # freee
|
|
|
36
36
|
webgram review --team <伊藤T|松井T> [--week <YYYY-MM-DD>] # チーム週次レビュー取得 (省略時は先週)
|
|
37
37
|
webgram pl summary [--month YYYY-MM] # 予実サマリ(CV/コスト/売上/粗利/日次推移/案件別内訳/着地予測/目標、省略時は当月)
|
|
38
38
|
webgram pl projects [--month YYYY-MM] [--status <s>] [--platform <p>] # 案件別の予実明細
|
|
39
|
+
webgram report yda --account-id <id> [--level <l>] [--from --to] [--format csv] # YDA の日別実績(DB の値)。列の意味・比率の出し方は --help
|
|
40
|
+
webgram report smartnews --account-id <id> [--level <l>] [--from --to] [--format csv] # SmartNews の日別実績(DB の値)。列の意味・数え方は --help
|
|
41
|
+
webgram report google --account-id <id> [--level <l>] [--from --to] [--format csv] # Google の日別実績(DB の値)。列の意味・制約は --help
|
|
39
42
|
```
|
|
40
43
|
|
|
41
44
|
`<p>` = 対応媒体 (`yda` / `meta` / `google` / `smartnews` / `bytedance`)。`submit-plan` は **`yda` / `meta`** 対応(入稿計画JSON の `plan.platform` で自動判別、未記載は `yda` 扱い)。
|
|
42
45
|
`--resource` の媒体制約: `resources` は smartnews 非対応 / `media` は yda のみ(登録画像 mediaId)/ `image-library`・`video-library` は meta のみ(imageHash / videoId。`--account-id` は `act_` 付き)。
|
|
43
46
|
`pl summary` / `pl projects` は JSON をそのまま出力する(要約は呼び出し側の Claude Code が行う)。
|
|
44
47
|
|
|
48
|
+
`report` は DB に貯めた実績を日別の行で返す(期間の合計や比率は返さない)。列の意味・既定の期間・比率の出し方・行数の上限は `webgram report <媒体> --help`(`yda` / `smartnews` / `google`)に書いてあり、ここには書き写さない。
|
|
49
|
+
|
|
45
50
|
`review` はチーム × 週で全案件の週次レビュー(課題・今週のアクションプラン)を 1 回で取得する (JSON 出力)。`--week` 省略時は先週の月曜 (JST) を自動採用。要約は Claude Code / Codex (LLM) 側で行う。
|
|
46
51
|
|
|
47
52
|
入稿ボディ JSON の雛形と必須フィールドは [`fixtures/README.md`](./fixtures/README.md)。
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.REPORT_PLATFORMS = exports.REPORT_FORMATS = exports.REPORT_LEVELS = void 0;
|
|
4
|
+
exports.runReport = runReport;
|
|
5
|
+
exports.toCsv = toCsv;
|
|
6
|
+
exports.registerReportCommand = registerReportCommand;
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const apiClient_1 = require("../lib/apiClient");
|
|
9
|
+
const credentialStore_1 = require("../lib/credentialStore");
|
|
10
|
+
const apiError_1 = require("../lib/apiError");
|
|
11
|
+
/**
|
|
12
|
+
* webgram report <媒体> — DB に貯めた実績を日別の行で返す(#330)。
|
|
13
|
+
*
|
|
14
|
+
* エージェントは迷うと `--help` を読むので、列の意味・既定値・比率の出し方・上限は
|
|
15
|
+
* help に1か所だけ書く(スキルや README には書き写さない)。
|
|
16
|
+
*/
|
|
17
|
+
exports.REPORT_LEVELS = ['account', 'campaign', 'adgroup', 'ad'];
|
|
18
|
+
exports.REPORT_FORMATS = ['json', 'csv'];
|
|
19
|
+
exports.REPORT_PLATFORMS = ['yda', 'smartnews', 'google'];
|
|
20
|
+
/** 長い期間はサーバーの集計に時間がかかるので、既定の 15 秒より長く待つ */
|
|
21
|
+
const REPORT_TIMEOUT_MS = 120000;
|
|
22
|
+
async function runReport(input) {
|
|
23
|
+
let client;
|
|
24
|
+
try {
|
|
25
|
+
client = (input.clientFactory ?? apiClient_1.buildAuthedApiClient)(input.store);
|
|
26
|
+
}
|
|
27
|
+
catch (e) {
|
|
28
|
+
return { ok: false, error: e.message };
|
|
29
|
+
}
|
|
30
|
+
const params = { accountId: input.accountId };
|
|
31
|
+
if (input.campaignId)
|
|
32
|
+
params.campaignId = input.campaignId;
|
|
33
|
+
if (input.from)
|
|
34
|
+
params.from = input.from;
|
|
35
|
+
if (input.to)
|
|
36
|
+
params.to = input.to;
|
|
37
|
+
if (input.level)
|
|
38
|
+
params.level = input.level;
|
|
39
|
+
try {
|
|
40
|
+
const res = await client.get(`/api/report/${input.platform}`, {
|
|
41
|
+
params,
|
|
42
|
+
timeout: REPORT_TIMEOUT_MS,
|
|
43
|
+
});
|
|
44
|
+
const data = res.data;
|
|
45
|
+
// imageUrl は画像の代理 URL(/api/yahoo-media/...)の相対パスで入っている。
|
|
46
|
+
// スプシの =IMAGE() やブラウザでそのまま開けるよう、ログイン先を前に付ける
|
|
47
|
+
const endpoint = input.store.load()?.endpoint.replace(/\/+$/, '') ?? '';
|
|
48
|
+
for (const row of data.rows) {
|
|
49
|
+
if (typeof row.imageUrl === 'string' && row.imageUrl.startsWith('/')) {
|
|
50
|
+
row.imageUrl = endpoint + row.imageUrl;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return { ok: true, data };
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
return { ok: false, error: (0, apiError_1.describeApiError)(err) };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/** 行を CSV にする。null・undefined は空欄。ヘッダーは最初の行のキーの順 */
|
|
60
|
+
function toCsv(rows) {
|
|
61
|
+
if (rows.length === 0)
|
|
62
|
+
return '';
|
|
63
|
+
const header = Object.keys(rows[0]);
|
|
64
|
+
const cell = (v) => {
|
|
65
|
+
if (v === null || v === undefined)
|
|
66
|
+
return '';
|
|
67
|
+
// 配列(Google 広告の見出し・説明文など)は改行区切りで1セルにする(カンマだと文言の中のカンマと区別できない)
|
|
68
|
+
const s = Array.isArray(v) ? v.join('\n') : String(v);
|
|
69
|
+
return /[",\r\n]/.test(s) ? `"${s.replace(/"/g, '""')}"` : s;
|
|
70
|
+
};
|
|
71
|
+
return [header.join(','), ...rows.map((r) => header.map((k) => cell(r[k])).join(','))].join('\n') + '\n';
|
|
72
|
+
}
|
|
73
|
+
const YDA_HELP = `
|
|
74
|
+
行の単位:
|
|
75
|
+
1行=1日×--level の単位。実績のない日・単位の行は出ない(0 の行で埋めない)
|
|
76
|
+
名前の列は、その日の行に入っている値。途中で名前を変えると日によって違うので、期間でまとめるときは
|
|
77
|
+
ID(campaignId・adGroupId・adId)で束ね、名前は最後の日のものを使う
|
|
78
|
+
|
|
79
|
+
出力の列:
|
|
80
|
+
date 日付(JST)
|
|
81
|
+
platform yda
|
|
82
|
+
accountId〜adName account・campaign・adGroup・ad の ID と名前。--level の階層とその上の列を出す
|
|
83
|
+
(例:--level ad は campaign・adGroup の列も出す。--level campaign は adGroup・ad の列を出さない)
|
|
84
|
+
impressions / clicks IMP / クリック
|
|
85
|
+
cost 媒体の費用(消化金額、円)。手数料(マージン)は含まない
|
|
86
|
+
conversions CV(媒体)。MCV は含まない
|
|
87
|
+
mcv MCV(記事 LP から商品 LP への遷移)。null はその日の MCV を取得していない
|
|
88
|
+
(そのアカウントの取得を始めた日より前・最後に取得した日より後。同じ日の行はすべて null)。
|
|
89
|
+
取得期間の中で行のない単位は 0
|
|
90
|
+
imageUrl / linkUrl --level ad のときだけ。広告の画像(1枚目)とリンク先URL。日別の値ではなく、今わかっている
|
|
91
|
+
直近の値(途中でリンク先を変えた広告は、過去の期間も今のリンク先になる)
|
|
92
|
+
CV(全体)・SB遷移数は媒体の外のデータなので返さない
|
|
93
|
+
|
|
94
|
+
値の鮮度:
|
|
95
|
+
直近8日分は同期のたびに取り直すので、CV などが後から増えることがある。MCV は前日分を翌朝に取り直したあとは更新しない
|
|
96
|
+
|
|
97
|
+
比率の出し方:
|
|
98
|
+
期間の比率は合計どうしで割る(日ごとの比率を平均しない)。分母が 0 のときは計算しない
|
|
99
|
+
CTR=clicks/impressions CPC=cost/clicks CPA=cost/conversions CPO=CPA×1.25
|
|
100
|
+
遷移単価=cost/mcv 遷移率=mcv/clicks 記事CVR=conversions/mcv
|
|
101
|
+
MCV を使う比率は、mcv が null の日の行を分子・分母とも除いて計算する(null を 0 として足さない)
|
|
102
|
+
記事URLグループは linkUrl の ?ad= より前でまとめる
|
|
103
|
+
|
|
104
|
+
上限と長い期間:
|
|
105
|
+
10万行を超えるとエラー(途中までの行は返さない)。期間を短くするか、--campaign-id か上の --level で絞る
|
|
106
|
+
行が多いときは --format csv でファイルに保存し、スクリプトで集計する(行を文脈に読み込まない)
|
|
107
|
+
|
|
108
|
+
出力の形:
|
|
109
|
+
JSON:{ platform, level, from, to, rowCount, rows: [...] }。from / to は既定値を使ったときも実際の期間が入る
|
|
110
|
+
CSV:rows だけ。UTF-8、1行目がヘッダー、null は空欄
|
|
111
|
+
Windows PowerShell 5.1 の > は UTF-16 で書くので、| Out-File -Encoding utf8 ads.csv で保存する
|
|
112
|
+
エラーは stderr に「✗ 理由」を出して終了コード 1
|
|
113
|
+
|
|
114
|
+
例:
|
|
115
|
+
# 直近7日の広告別(判定表の元データ)
|
|
116
|
+
webgram report yda --account-id 1002570552 --format csv > ads.csv
|
|
117
|
+
# 半年分のキャンペーン別
|
|
118
|
+
webgram report yda --level campaign --account-id 1002570552 --from 2026-04-13 --to 2026-10-12 --format csv > cp.csv
|
|
119
|
+
`;
|
|
120
|
+
const SMARTNEWS_HELP = `
|
|
121
|
+
行の単位:
|
|
122
|
+
1行=1日×--level の単位。実績のない日・単位の行は出ない(0 の行で埋めない)。
|
|
123
|
+
行が無いことだけでは、実績ゼロと同期の取りこぼしを区別できない
|
|
124
|
+
広告(--level ad)より上の行は、広告の行の合計
|
|
125
|
+
費用が ¥0 の広告の行(四捨五入で0円)は出さず、上の行の合計にも入れない。配信していない日に
|
|
126
|
+
後から付いた CV・遷移は数えない(管理画面の広告一覧から判定ボードを作るのと同じ数え方)
|
|
127
|
+
名前の列は、その日の行に入っている値。期間でまとめるときは ID(campaignId・adGroupId・adId)で束ねる
|
|
128
|
+
|
|
129
|
+
出力の列:
|
|
130
|
+
date 日付(JST)
|
|
131
|
+
platform smartnews
|
|
132
|
+
accountId〜adName account・campaign・adGroup・ad の ID と名前。--level の階層とその上の列を出す。
|
|
133
|
+
accountName は SmartNews ではアカウント ID と同じ値
|
|
134
|
+
impressions インプレッション(Viewable)。管理画面の表示回数と同じ(通常の imp ではない)
|
|
135
|
+
clicks クリック
|
|
136
|
+
cost ご利用金額(管理画面の値、円)。代理店の手数料(マージン)は含まない
|
|
137
|
+
conversions 商品購入数(管理画面の「商品購入数」)
|
|
138
|
+
mcv 詳細ページ数(管理画面の「詳細ページ数」。記事 LP から商品 LP への遷移)
|
|
139
|
+
headline / description / imageUrl / linkUrl
|
|
140
|
+
--level ad のときだけ。広告の見出し・説明文・サムネイル・リンク先。日別の値ではなく、
|
|
141
|
+
今わかっている直近の値(途中で変えた広告は、過去の期間も今の値になる)
|
|
142
|
+
CV(全体)・ad-bridge の獲得件数は媒体の外のデータなので返さない
|
|
143
|
+
|
|
144
|
+
数え方(アトリビューション):
|
|
145
|
+
CV・遷移は「クリック後30日以内+広告を見てから1日以内(ビュースルー)」で数えた値。
|
|
146
|
+
クリックの日数は API の既定を使っている。管理画面ではアカウントごとに 30/14/7/1日 を選べ
|
|
147
|
+
(キャンペーン一覧 → 表示項目 → アトリビューションモデル)、設定が違うアカウントとは一致しない
|
|
148
|
+
|
|
149
|
+
値の鮮度:
|
|
150
|
+
直近7日分は30分ごとに取り直すので、CV などが後から増えることがある。それより前の日は更新しない
|
|
151
|
+
(クリックから時間がたって付いた CV が、管理画面より少なく出ることがある)
|
|
152
|
+
|
|
153
|
+
比率の出し方:
|
|
154
|
+
期間の比率は合計どうしで割る(日ごとの比率を平均しない)。分母が 0 のときは計算しない
|
|
155
|
+
CTR=clicks/impressions CPC=cost/clicks CPA=cost/conversions
|
|
156
|
+
遷移単価=cost/mcv 遷移率=mcv/clicks 記事CVR=conversions/mcv
|
|
157
|
+
|
|
158
|
+
上限と長い期間:
|
|
159
|
+
10万行を超えるとエラー(途中までの行は返さない)。期間を短くするか、--campaign-id か上の --level で絞る
|
|
160
|
+
行が多いときは --format csv でファイルに保存し、スクリプトで集計する(行を文脈に読み込まない)
|
|
161
|
+
|
|
162
|
+
出力の形:
|
|
163
|
+
JSON:{ platform, level, from, to, rowCount, rows: [...] }。from / to は既定値を使ったときも実際の期間が入る
|
|
164
|
+
CSV:rows だけ。UTF-8、1行目がヘッダー、null は空欄
|
|
165
|
+
Windows PowerShell 5.1 の > は UTF-16 で書くので、| Out-File -Encoding utf8 ads.csv で保存する
|
|
166
|
+
エラーは stderr に「✗ 理由」を出して終了コード 1
|
|
167
|
+
|
|
168
|
+
例:
|
|
169
|
+
# 直近7日の広告別(判定の元データ)
|
|
170
|
+
webgram report smartnews --account-id 1234567890 --format csv > ads.csv
|
|
171
|
+
# 今月のアカウント合計(日別)
|
|
172
|
+
webgram report smartnews --level account --account-id 1234567890 --from 2026-10-01 --to 2026-10-16
|
|
173
|
+
`;
|
|
174
|
+
const GOOGLE_HELP = `
|
|
175
|
+
行の単位:
|
|
176
|
+
1行=1日×--level の単位。実績のない日・単位の行は出ない(0 の行で埋めない)
|
|
177
|
+
account・campaign・adgroup Campaign テーブルの行(広告グループ×日)を合計した値
|
|
178
|
+
ad Creative テーブルの行(広告×日)
|
|
179
|
+
名前の列は、その日の行に入っている値。期間でまとめるときは ID(campaignId・adGroupId・adId)で束ねる
|
|
180
|
+
|
|
181
|
+
出力の列:
|
|
182
|
+
date 日付。広告アカウントのタイムゾーンでの日付(日本のアカウントは JST)。
|
|
183
|
+
--from / --to も同じタイムゾーンの日付として扱う
|
|
184
|
+
platform google
|
|
185
|
+
accountId〜adName account・campaign・adGroup・ad の ID と名前。--level の階層とその上の列を出す
|
|
186
|
+
impressions / clicks IMP / クリック
|
|
187
|
+
cost 媒体の費用(円)
|
|
188
|
+
conversions CV(媒体)
|
|
189
|
+
mcv 常に null。MCV はアドエビスで計測する値で、Google 広告のデータにはない
|
|
190
|
+
--level ad のときだけ:
|
|
191
|
+
headline / description 1つ目の見出し・説明文。画像広告では、headline に広告文ではなく広告名が入る
|
|
192
|
+
headlines / descriptions すべての見出し・説明文(CSV では改行でつないで1セルに入れる)
|
|
193
|
+
imageUrl / videoUrl / linkUrl
|
|
194
|
+
画像・動画・リンク先。日別の値ではなく、広告ごとに今わかっている直近の値
|
|
195
|
+
|
|
196
|
+
既知の制約:
|
|
197
|
+
Google の CV は小数になることがあるが、DB には整数に丸めて保存している。そのため管理画面の値とずれることがある
|
|
198
|
+
P-MAX キャンペーンは入らない
|
|
199
|
+
--level ad の合計は、上の階層の合計と少しずれることがある。Creative は1日1回の更新で、削除した広告の分も含まない
|
|
200
|
+
配信ステータスは返さない。webgram list --platform google --resource campaigns で確認する
|
|
201
|
+
管理画面の値と明らかに違うときや、値に違和感があるときは、ユーザーに開発者への報告を勧める
|
|
202
|
+
|
|
203
|
+
値の鮮度:
|
|
204
|
+
同期のたびに直近8日分を取り直すので、直近8日の値は後から変わることがある
|
|
205
|
+
更新の頻度:account〜adgroup(Campaign テーブル)は30分ごと、ad(Creative テーブル)は1日1回
|
|
206
|
+
|
|
207
|
+
比率の出し方:
|
|
208
|
+
期間の比率は合計どうしで割る(日ごとの比率を平均しない)。分母が 0 のときは計算しない
|
|
209
|
+
CTR=clicks/impressions CPC=cost/clicks CPA=cost/conversions
|
|
210
|
+
|
|
211
|
+
上限と長い期間:
|
|
212
|
+
10万行を超えるとエラー(途中までの行は返さない)。期間を短くするか、--campaign-id か上の --level で絞る
|
|
213
|
+
行が多いときは --format csv でファイルに保存し、スクリプトで集計する(行を文脈に読み込まない)
|
|
214
|
+
|
|
215
|
+
出力の形:
|
|
216
|
+
JSON:{ platform, level, from, to, rowCount, rows: [...] }。from / to は既定値を使ったときも実際の期間が入る
|
|
217
|
+
CSV:rows だけ。UTF-8、1行目がヘッダー、null は空欄
|
|
218
|
+
--level ad の headlines / descriptions のセルには改行が入る。ファイルの1行が1件とは限らないので、
|
|
219
|
+
行数で数えず CSV パーサーで読む
|
|
220
|
+
Windows PowerShell 5.1 の > は UTF-16 で書くので、| Out-File -Encoding utf8 ads.csv で保存する
|
|
221
|
+
エラーは stderr に「✗ 理由」を出して終了コード 1
|
|
222
|
+
|
|
223
|
+
例:
|
|
224
|
+
# 直近7日の広告別
|
|
225
|
+
webgram report google --account-id 8265446505 --format csv > ads.csv
|
|
226
|
+
# 今月のキャンペーン別(日別)
|
|
227
|
+
webgram report google --level campaign --account-id 8265446505 --from 2026-10-01 --to 2026-10-16
|
|
228
|
+
`;
|
|
229
|
+
const parseYmd = (v) => {
|
|
230
|
+
// 2026-02-30 のような実在しない日付もここで止める(サーバーまで送らない)
|
|
231
|
+
const d = new Date(v + 'T00:00:00Z');
|
|
232
|
+
if (!/^\d{4}-\d{2}-\d{2}$/.test(v) || Number.isNaN(d.getTime()) || d.toISOString().slice(0, 10) !== v) {
|
|
233
|
+
throw new commander_1.InvalidArgumentError('実在する日付を YYYY-MM-DD 形式で指定してください');
|
|
234
|
+
}
|
|
235
|
+
return v;
|
|
236
|
+
};
|
|
237
|
+
/** 媒体ごとの違い(表示名・help)。オプションと実行は共通 */
|
|
238
|
+
const PLATFORM_COMMANDS = {
|
|
239
|
+
yda: { label: 'YDA', help: YDA_HELP },
|
|
240
|
+
smartnews: { label: 'SmartNews', help: SMARTNEWS_HELP },
|
|
241
|
+
google: { label: 'Google', help: GOOGLE_HELP, accountIdHint: '(ハイフンなし。例 8265446505)' },
|
|
242
|
+
};
|
|
243
|
+
/** report コマンドを program に登録する。help の文面をテストで確かめられるよう index.ts から分けている */
|
|
244
|
+
function registerReportCommand(program) {
|
|
245
|
+
const report = program
|
|
246
|
+
.command('report')
|
|
247
|
+
.description('媒体の日別実績を返す(DB に貯めた値。使う前に webgram report <媒体> --help を読む)');
|
|
248
|
+
for (const platform of exports.REPORT_PLATFORMS) {
|
|
249
|
+
addPlatformCommand(report, platform, PLATFORM_COMMANDS[platform]);
|
|
250
|
+
}
|
|
251
|
+
return report;
|
|
252
|
+
}
|
|
253
|
+
function addPlatformCommand(report, platform, { label, help, accountIdHint = '' }) {
|
|
254
|
+
report
|
|
255
|
+
.command(platform)
|
|
256
|
+
.description(`${label} の日別実績を DB から返す(1行=1日×--level の単位。期間の合計や比率は返さない)`)
|
|
257
|
+
.requiredOption('--account-id <id>', `広告アカウント ID${accountIdHint}(一覧は webgram list --platform ${platform} --resource accounts)`)
|
|
258
|
+
.option('--campaign-id <id>', 'キャンペーン ID で絞る')
|
|
259
|
+
.option('--from <YYYY-MM-DD>', '開始日(JST、この日を含む。既定:--to の6日前。--to も省くと昨日までの7日間)', parseYmd)
|
|
260
|
+
.option('--to <YYYY-MM-DD>', '終了日(JST、この日を含む。既定:昨日)', parseYmd)
|
|
261
|
+
.addOption(new commander_1.Option('--level <level>', '行の単位').choices(exports.REPORT_LEVELS).default('ad'))
|
|
262
|
+
.addOption(new commander_1.Option('--format <format>', '出力形式').choices(exports.REPORT_FORMATS).default('json'))
|
|
263
|
+
.addHelpText('after', help)
|
|
264
|
+
.showHelpAfterError(`(webgram report ${platform} --help で使い方を表示)`)
|
|
265
|
+
.action(async (opts) => {
|
|
266
|
+
const store = new credentialStore_1.CredentialStore((0, credentialStore_1.defaultConfigDir)());
|
|
267
|
+
const result = await runReport({
|
|
268
|
+
store,
|
|
269
|
+
platform,
|
|
270
|
+
accountId: opts.accountId,
|
|
271
|
+
campaignId: opts.campaignId,
|
|
272
|
+
from: opts.from,
|
|
273
|
+
to: opts.to,
|
|
274
|
+
level: opts.level,
|
|
275
|
+
});
|
|
276
|
+
if (!result.ok || !result.data) {
|
|
277
|
+
console.error(`✗ ${result.error}`);
|
|
278
|
+
process.exit(1);
|
|
279
|
+
}
|
|
280
|
+
if (opts.format === 'csv') {
|
|
281
|
+
process.stdout.write(toCsv(result.data.rows));
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
console.log(JSON.stringify(result.data, null, 2));
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/commands/report.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -15,6 +15,7 @@ const ads_1 = require("./commands/ads");
|
|
|
15
15
|
const submission_1 = require("./commands/submission");
|
|
16
16
|
const status_1 = require("./commands/status");
|
|
17
17
|
const pl_1 = require("./commands/pl");
|
|
18
|
+
const report_1 = require("./commands/report");
|
|
18
19
|
const freee_1 = require("./commands/freee");
|
|
19
20
|
const review_1 = require("./commands/review");
|
|
20
21
|
const placements_1 = require("./commands/placements");
|
|
@@ -445,6 +446,8 @@ pl.command('projects')
|
|
|
445
446
|
process.exit(1);
|
|
446
447
|
}
|
|
447
448
|
});
|
|
449
|
+
// ──────────────────────────── 実績レポート ────────────────────────────
|
|
450
|
+
(0, report_1.registerReportCommand)(program);
|
|
448
451
|
// ──────────────────────────── freee 請求書 ────────────────────────────
|
|
449
452
|
const freee = program.command('freee').description('freee 請求書発行コマンド(allowlist 制限あり)');
|
|
450
453
|
freee
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/skills/ad-ops/SKILL.md
CHANGED
|
@@ -72,6 +72,32 @@ skills/ad-ops/scripts/adops.sh preflight yda <accountId>
|
|
|
72
72
|
* ユーザーの依頼にアカウント名・媒体が明示されていれば、確認を省いて既定として提示してよい
|
|
73
73
|
* ここで決まった `platform` / アカウント名は**以降の全分岐で使い回す。下流で再度聞かない**(旧 Step 3 の「入稿先アカウント名」はこのステップに前倒しした)
|
|
74
74
|
|
|
75
|
+
#### 媒体の素材を参照表に取り込む(アカウントが決まった直後・#161)
|
|
76
|
+
|
|
77
|
+
**サムネ取得より先に実行する。** 参照表を更新してから落とせば、増えた素材のサムネも同じ回で揃う。
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
skills/ad-ops/scripts/adops.sh assets-sync <platform> <accountId> # 差分を見るだけ
|
|
81
|
+
skills/ad-ops/scripts/adops.sh assets-sync <platform> <accountId> --write # 参照表へ反映する
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**参照表(`refs.media`)には「初回に作る」手順しか無く、後から増えた素材が入らない。** 媒体にはあるのにプランナーの素材一覧に出ない、という状態がこれで起きる(#325 は 1200×628 が入っていなかった例)。
|
|
85
|
+
|
|
86
|
+
判断の目安:
|
|
87
|
+
|
|
88
|
+
| 状況 | どうするか |
|
|
89
|
+
|---|---|
|
|
90
|
+
| 差分 0 件 | **何も言わずに次へ進む。** 参照表は最新 |
|
|
91
|
+
| 追加がある | **件数を伝えてから `--write` する。** 既存の番号・値は変更されない |
|
|
92
|
+
| 取得件数が上限(500)に達した | **書き込まない。** 全件取れていない可能性がある(ページング未対応)。その旨を伝えて先へ進む |
|
|
93
|
+
| 取得に失敗した(403 等) | **書き込まない。** 既存の参照表のまま先へ進む。入稿自体は従来どおりできる |
|
|
94
|
+
| 参照表がまだ無いアカウント | 先に「アカウント取込プロンプト」で作る(このコマンドは既存ファイルへの追記専用) |
|
|
95
|
+
|
|
96
|
+
* **既存の番号・値は絶対に変更しない。** 画像番号は広告名(`957c-jv_Cac_148`)と `creative=` に焼き込まれており、振り直すと過去の実績と突き合わせられなくなる
|
|
97
|
+
* **振り分けはファイル名ではなく実寸(`aspectRatio`)で行う。** 実測では `-1080` という名前の 96% が 600×600 で、名前は当てにならない
|
|
98
|
+
* **否認済み(`PRE_DISAPPROVED` / `POST_DISAPPROVED`)は取り込まない。** 入れると「選べるのに入稿で落ちる」状態になる
|
|
99
|
+
* 既存と違う mediaId が媒体にあった場合は**上書きせず報告する**。媒体側で差し替えられた可能性があるため、人が判断する
|
|
100
|
+
|
|
75
101
|
#### 素材のサムネを取得する(アカウントが決まった直後・#157)
|
|
76
102
|
|
|
77
103
|
**アカウントJSON にトップレベル `thumbs` が無ければ、確認せずに取得してよい。**
|
|
@@ -307,8 +333,8 @@ skills/ad-ops/scripts/adops.sh open meta <accountId> campaigns
|
|
|
307
333
|
|
|
308
334
|
| # | 画像ファイル | **解決後の絶対パス** | **実在** | 見出し | 説明文 | 広告名 | 最終リンク先URL |
|
|
309
335
|
| - | ------- | ------------ | ---- | --- | --- | --- | --------- |
|
|
310
|
-
| 1 | a.jpg | /
|
|
311
|
-
| 2 | b.png | /
|
|
336
|
+
| 1 | a.jpg | ~/Downloads/a.jpg | ✅ | … | … | 01c-… | https://… |
|
|
337
|
+
| 2 | b.png | ~/Downloads/b.png | ❌ | … | … | 02c-… | https://… |
|
|
312
338
|
|
|
313
339
|
**解決後の絶対パスと実在チェックを必ず表に入れる**(誤パスはここで殺す。`~` の展開結果もここで見える)。
|
|
314
340
|
|
|
@@ -905,6 +931,12 @@ npx -y addashboard-cli@latest list --platform yda --resource ads \
|
|
|
905
931
|
- モード: **新規**(12,000円/日・1CP=1AG=1広告を量産)/ **既存ASC**(5万〜10万円/日・まとめ入稿)/ 既存-広告グループ追加 / 既存-広告追加。
|
|
906
932
|
- **YDA のバナー(静止画・固定サイズ)は API 入稿に対応済**(2026-08-19 本番実機で `AdGroupAdService/add` 成功)。プランナーの広告行「広告タイプ」列で **レスポンシブ / バナー** を選ぶだけで、レスポンシブと同じ入稿計画JSON → `submit-plan` に乗る(**手入稿フラグという仕組みは存在しない**。過去のドキュメント記述だけが残っていた)。
|
|
907
933
|
- **画像プールは共用**: YDA のメディアはアカウントに1ライブラリだけで「バナー用/レスポンシブ用」の区分は無い。バナー行も参照表 `refs.media[画像番号].card` / `.sq` をそのまま引く(形式列 = 画像サイズ Card/SQ)。**広告タイプ(レスポンシブ/バナー)と 形式(Card/SQ)は独立した2軸**。
|
|
934
|
+
- **【重要】バナーに Card(1200×628) は使えない。使えるのは SQ だけ**(2026-10-13 確定・#161)。**Yahoo がバナー広告で 1.91:1 に対応していない**ためで、ツールの制約ではない:
|
|
935
|
+
- 公式の入稿規定でバナー(画像)の対応アスペクト比は 1:1 / 6:5 等。**1.91:1 はレスポンシブ側のサイズ**として載っている(広告事業部に確認済み)
|
|
936
|
+
- 実 API は `220115 Unexpected aspect ratio of an image.` で弾く。**dry-run は実 API を叩かないので通ってしまう**
|
|
937
|
+
- 本番実測(24アカウント・980広告)でも **BANNER_AD × 1200×628 は 0 件**。1200×628 を使う 322 件はすべて RESPONSIVE_AD で、バナーが使っているのは SQUARE_600(374件) と IAB_UAP_MEDIUM_RECTANGLE(42件) だけ
|
|
938
|
+
- **1200×628 を使いたいなら広告タイプをレスポンシブにする。** プランナーが書き出しの手前で止め(`BANNER_CARD_UNSUPPORTED`)、`adops.sh plan` の lint も ERROR で止める(二重)
|
|
939
|
+
- 2026-08-19 の実機検証で add に成功したバナーは **SQUARE_600 / 1080×1080**(コミット `f28e003`)。Card では試されていなかった
|
|
908
940
|
- **命名**: バナーはタイトル/説明文が存在しないので L 区間を出さない → `{画像番号}{c|s}-{paramCode}`(例 `957c-jv_Cac_148`)。レスポンシブは従来どおり `957c-45L60-jv_Cac_148`。
|
|
909
941
|
- 入稿計画JSON では `adType:"BANNER_AD"` が載り、`headlines` / `descriptions` / `principal` / `buttonText` は出さない(`adType` 省略時は `RESPONSIVE_AD` 扱い=旧プラン後方互換)。
|
|
910
942
|
- **YDA のレスポンシブ動画もプランナーから入稿できる**(2026-09-21・#324)。広告行の**形式列で「動画」**を選ぶ(広告タイプはレスポンシブのまま)。API 上は `RESPONSIVE_AD + mainMediaFormat:VIDEO`。
|
|
@@ -918,7 +918,7 @@ finalUrl = baseURL + paramCode + "?ad=" + paramCode + "&creative=" + …
|
|
|
918
918
|
(cli/test/unit/plannerVersion.test.ts が package.json との一致を検証するので、
|
|
919
919
|
手で書き換えて放置するとテストが落ちる)。
|
|
920
920
|
利用者が「どの版のプランナーを開いているか」を言えないと、不具合報告が噛み合わない。 */
|
|
921
|
-
const APP_VERSION = '0.
|
|
921
|
+
const APP_VERSION = '0.16.0'; /* version:sync */
|
|
922
922
|
/* 案A: embed廃止。参照データ(refs)・初期プラン・共通設定は外部JSONから起動時に読み込む。
|
|
923
923
|
同梱デフォルト: アカウント/<媒体>/index.json の先頭アカウント (refs+principal+projectName+baseArticleUrl) と サンプルプラン.json (project+campaigns)。
|
|
924
924
|
固有名詞はハードコードせず、すべて外部JSON由来にする。 */
|
|
@@ -1053,7 +1053,7 @@ function maskSensitive(text){
|
|
|
1053
1053
|
].filter(([v])=>String(v||'').trim().length>=3)
|
|
1054
1054
|
.sort((a,b)=>String(b[0]).length-String(a[0]).length);
|
|
1055
1055
|
secrets.forEach(([v,label])=>{ out=out.split(String(v)).join(label); });
|
|
1056
|
-
/*
|
|
1056
|
+
/* ローカルパスにはユーザー名が入る(macOS は /Users 配下, Windows は C:\Users 配下) */
|
|
1057
1057
|
out=out.replace(/\/(Users|home)\/[^\/\s"')]+/g, '/$1/<user>')
|
|
1058
1058
|
.replace(/[A-Za-z]:\\Users\\[^\\\s"')]+/g, 'C:\\Users\\<user>');
|
|
1059
1059
|
return out;
|
|
@@ -1189,6 +1189,7 @@ const EC = {
|
|
|
1189
1189
|
THUMB_MISSING:'THUMB_MISSING' /* YDA は動画からサムネを自動生成しないので必ず要る */,
|
|
1190
1190
|
VIDEO_PATH_IGNORED:'VIDEO_PATH_IGNORED' /* 動画 mediaID が解決済みなのにローカル動画パスも入力 (warn) */,
|
|
1191
1191
|
BANNER_VIDEO_UNSUPPORTED:'BANNER_VIDEO_UNSUPPORTED' /* 広告タイプ=バナー × 形式=動画 は未対応 */,
|
|
1192
|
+
BANNER_CARD_UNSUPPORTED:'BANNER_CARD_UNSUPPORTED' /* 広告タイプ=バナー × 形式=Card(1200x628) は Yahoo が拒否する */,
|
|
1192
1193
|
/* ByteDance (TikTok) 固有 */
|
|
1193
1194
|
IDENTITY_MISSING:'IDENTITY_MISSING' /* 広告主として表示する TikTok アカウント未設定 = 広告が作れない */,
|
|
1194
1195
|
IDENTITY_BC_MISSING:'IDENTITY_BC_MISSING' /* identityType=BC_AUTH_TT なのに BC ID が無い (実運用の identity はほぼ BC_AUTH_TT) */,
|
|
@@ -1771,6 +1772,15 @@ PLATFORMS.yda = {
|
|
|
1771
1772
|
・**サムネは必須**。YDA は動画からサムネを自動生成しないので (本番実測)、
|
|
1772
1773
|
mediaId かローカルパスのどちらかが無いと広告作成が R0001 で落ちる
|
|
1773
1774
|
・バナー × 動画 は backend の zod が弾く組み合わせ。dry-run より手前で気づけるよう err にする */
|
|
1775
|
+
/* バナー × Card(1200x628) は **Yahoo が受け付けない組み合わせ**。
|
|
1776
|
+
公式の入稿規定でバナー(画像)の対応アスペクト比に 1.91:1 は無く (1:1 / 6:5 等のみ)、
|
|
1777
|
+
1200x628 はレスポンシブのサイズとして載っている。2026-10-13 に広告事業部へ確認済み。
|
|
1778
|
+
本番実測でも 24アカウント・980広告のうち BANNER_AD × 1200x628 は 0 件で、
|
|
1779
|
+
1200x628 を使う 322 件はすべて RESPONSIVE_AD だった。
|
|
1780
|
+
実 API は 220115 Unexpected aspect ratio で弾くが、**dry-run は実 API を叩かないので通る**。
|
|
1781
|
+
バナー × 動画 と同じく、書き出しの手前で止める。 */
|
|
1782
|
+
if(isBanner && !isVideo && fmt.mediaKey==='card')
|
|
1783
|
+
pushErr('バナー×Card(1200)は入稿不可(レスポンシブにするか SQ を使う)', EC.BANNER_CARD_UNSUPPORTED);
|
|
1774
1784
|
const videoPath=String(ad.videoPath||'').trim();
|
|
1775
1785
|
const thumbnailPath=String(ad.thumbnailPath||'').trim();
|
|
1776
1786
|
if(isVideo){
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
# --wait は入稿ボタンが押されるまで待ってから処理する
|
|
9
9
|
# adops.sh open <platform> <accountId> [resource] 管理画面を開く (URLを手で組み立てない)
|
|
10
10
|
# adops.sh refs-import <platform> <accountId> [--write] 実アカウントから参照表を取り込む
|
|
11
|
+
# adops.sh assets-sync <platform> <accountId> [--write] 媒体の素材を参照表(refs.media)へ取り込む
|
|
11
12
|
# adops.sh refs-import google <accountId> --from-plan <入稿計画.json> [--write]
|
|
12
13
|
# 入稿で作ったロゴを取り込む(実APIを叩かない)
|
|
13
14
|
#
|
|
@@ -357,6 +358,13 @@ cmd_refs_import() {
|
|
|
357
358
|
python3 "${SKILL_DIR}/scripts/refs_import.py" "$@"
|
|
358
359
|
}
|
|
359
360
|
|
|
361
|
+
# 媒体に登録済みの素材を参照表(refs.media)へ取り込む。
|
|
362
|
+
# refs-import は見出し/説明文/オーディエンス/配置面だけで media を扱わないため分けてある。
|
|
363
|
+
# --write なしは差分表示のみ(dry-run 既定)。
|
|
364
|
+
cmd_assets_sync() {
|
|
365
|
+
python3 "${SKILL_DIR}/scripts/assets_sync.py" "$@"
|
|
366
|
+
}
|
|
367
|
+
|
|
360
368
|
# 素材のサムネイルを落として アカウント/<媒体>/サムネ/<accountId>/ に置く。
|
|
361
369
|
# プランナーの素材選択でサムネを出すために使う。保存先は .gitignore 済み。
|
|
362
370
|
cmd_thumbs() {
|
|
@@ -369,6 +377,7 @@ case "${1:-}" in
|
|
|
369
377
|
plan) shift; cmd_plan "$@" ;;
|
|
370
378
|
open) shift; cmd_open "$@" ;;
|
|
371
379
|
refs-import) shift; cmd_refs_import "$@" ;;
|
|
380
|
+
assets-sync) shift; cmd_assets_sync "$@" ;;
|
|
372
381
|
thumbs) shift; cmd_thumbs "$@" ;;
|
|
373
382
|
*)
|
|
374
383
|
cat >&2 <<EOF
|
|
@@ -386,6 +395,9 @@ usage:
|
|
|
386
395
|
adops.sh refs-import <platform> <accountId> [--write] [--campaign-id <id>]
|
|
387
396
|
adops.sh refs-import google <accountId> --from-plan <入稿計画.json> [--write]
|
|
388
397
|
実アカウントから参照表を取り込む(既定 dry-run)
|
|
398
|
+
adops.sh assets-sync <platform> <accountId> [--write]
|
|
399
|
+
媒体の素材を参照表(refs.media)へ取り込む(既定 dry-run)
|
|
400
|
+
既存の番号・値は変更せず、足りない分だけ足す
|
|
389
401
|
adops.sh thumbs <platform> <accountId> [--force] [--limit N]
|
|
390
402
|
素材のサムネイルを落として素材選択で見られるようにする
|
|
391
403
|
(保存先は アカウント/<媒体>/サムネ/。追跡・公開しない)
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""媒体に登録済みの素材を参照表(refs.media)へ取り込む。
|
|
3
|
+
|
|
4
|
+
`adops.sh assets-sync <platform> <accountId> [--write]` から呼ばれる。単体でも動く:
|
|
5
|
+
|
|
6
|
+
python3 assets_sync.py yda <accountId> [--write]
|
|
7
|
+
|
|
8
|
+
refs_import.py が見出し・説明文・オーディエンス・配置面を扱うのに対し、
|
|
9
|
+
こちらは **media 専用**。両者は番号空間も取得元も違うので分けてある。
|
|
10
|
+
|
|
11
|
+
━━ なぜ要るか ━━
|
|
12
|
+
参照表は「初回に作る」手順(プランナーの ❓使い方 → アカウント取込プロンプト)はあるが、
|
|
13
|
+
**後から追記する手段が無かった**。媒体に素材を足してもプランナーの選択肢に出ないため、
|
|
14
|
+
「媒体にはあるのに入稿できない」という状態になる(#325)。
|
|
15
|
+
|
|
16
|
+
━━ 振り分けはファイル名ではなく実寸で行う ━━
|
|
17
|
+
mediaName の `-1080` / `-1200` は実サイズとズレている(実測: `-1080` の 96% が 600x600、
|
|
18
|
+
`-1200` で 2400x1256 のものもある)。アップロード時に `元ファイル名 + contentHash` へ
|
|
19
|
+
加工される経路もあるので、名前は振り分けの根拠にしない。
|
|
20
|
+
|
|
21
|
+
aspectRatio が 1.91:1 系 → card
|
|
22
|
+
aspectRatio が 1:1 系 → sq
|
|
23
|
+
それ以外 → 取り込まない(件数だけ報告)
|
|
24
|
+
|
|
25
|
+
━━ 既存は絶対に触らない ━━
|
|
26
|
+
画像番号は広告名(`957c-jv_Cac_148`)と計測パラメータ(`creative=`)に焼き込まれている。
|
|
27
|
+
番号がずれると過去の実績と突き合わせられなくなるので、
|
|
28
|
+
|
|
29
|
+
* 既存の番号は振り直さない
|
|
30
|
+
* 既存の値は上書きしない(違う mediaId を見つけても報告だけ)
|
|
31
|
+
* 媒体から消えたものは削除しない
|
|
32
|
+
|
|
33
|
+
━━ 取りきれていないときは書かない ━━
|
|
34
|
+
backend の MediaService 取得は 500 件固定でページング未対応。全件取れていない状態で
|
|
35
|
+
書き込むと「媒体に無い」と誤認した欠落データを正にしてしまう。取得が怪しいときは
|
|
36
|
+
書き込まずに報告して終わる(呼び出し側は既存の参照表のまま先へ進める)。
|
|
37
|
+
"""
|
|
38
|
+
import argparse
|
|
39
|
+
import glob
|
|
40
|
+
import json
|
|
41
|
+
import os
|
|
42
|
+
import re
|
|
43
|
+
import shutil
|
|
44
|
+
import subprocess
|
|
45
|
+
import sys
|
|
46
|
+
from datetime import datetime
|
|
47
|
+
|
|
48
|
+
SKILL_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
49
|
+
CLI = os.environ.get("ADOPS_CLI", "npx -y addashboard-cli@latest")
|
|
50
|
+
|
|
51
|
+
# backend の MediaService 取得が 1 回で返す上限。ここに達していたら全件取れていない
|
|
52
|
+
# 可能性があるので書き込まない(connector 側が thumbnailFlg 等を間引くため、
|
|
53
|
+
# 見える件数が上限未満でも取りこぼしはありうる。あくまで「明らかに怪しい」の検知)。
|
|
54
|
+
FETCH_LIMIT = 500
|
|
55
|
+
|
|
56
|
+
# 取り込んでよい審査状態。
|
|
57
|
+
# APPROVED … 承認済み
|
|
58
|
+
# PENDING_UNSPECIFIED_AD … まだ広告に使われていないだけ。否認ではない
|
|
59
|
+
# PRE_DISAPPROVED / POST_DISAPPROVED を入れると「選べるのに入稿で落ちる」状態になる。
|
|
60
|
+
USABLE_APPROVAL = {"APPROVED", "PENDING_UNSPECIFIED_AD"}
|
|
61
|
+
|
|
62
|
+
# aspectRatio → 参照表のスロット。媒体の表記ゆれ(AR_191_100 / AR_1200_628)を吸収する。
|
|
63
|
+
SLOT_BY_ASPECT = {
|
|
64
|
+
"AR_191_100": "card",
|
|
65
|
+
"AR_1200_628": "card",
|
|
66
|
+
"AR_1_1": "sq",
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def fetch_media(platform: str, account_id: str) -> list | None:
|
|
71
|
+
"""登録済み素材の一覧を取る。取れなければ None(空配列と区別する)。
|
|
72
|
+
|
|
73
|
+
「取得失敗」を「素材が0件」と取り違えると、参照表を空にしかねない。
|
|
74
|
+
"""
|
|
75
|
+
cmd = [*CLI.split(), "list", "--platform", platform,
|
|
76
|
+
"--resource", "media", "--account-id", account_id]
|
|
77
|
+
print("▸ 媒体の素材一覧を取得中...", file=sys.stderr)
|
|
78
|
+
try:
|
|
79
|
+
proc = subprocess.run(cmd, capture_output=True, text=True, timeout=600)
|
|
80
|
+
except Exception as e: # noqa: BLE001
|
|
81
|
+
print(f" ✗ 取得に失敗: {e}", file=sys.stderr)
|
|
82
|
+
return None
|
|
83
|
+
if proc.returncode != 0:
|
|
84
|
+
print(f" ✗ 取得に失敗 (exit {proc.returncode}): {proc.stderr.strip()[:400]}",
|
|
85
|
+
file=sys.stderr)
|
|
86
|
+
return None
|
|
87
|
+
try:
|
|
88
|
+
data = json.loads(proc.stdout)
|
|
89
|
+
except Exception as e: # noqa: BLE001
|
|
90
|
+
print(f" ✗ 応答を解釈できません: {e}", file=sys.stderr)
|
|
91
|
+
return None
|
|
92
|
+
media = data.get("media")
|
|
93
|
+
if not isinstance(media, list):
|
|
94
|
+
print(" ✗ 応答に media がありません", file=sys.stderr)
|
|
95
|
+
return None
|
|
96
|
+
return media
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def find_account(platform: str, account_id: str) -> tuple[str | None, dict]:
|
|
100
|
+
"""accountId から参照表のパスと内容を引く(sample_account は最後に回す)。"""
|
|
101
|
+
paths = [p for p in glob.glob(os.path.join(SKILL_DIR, "アカウント", platform, "*.json"))
|
|
102
|
+
if os.path.basename(p) != "index.json"]
|
|
103
|
+
paths.sort(key=lambda p: os.path.basename(p) == "sample_account.json")
|
|
104
|
+
for path in paths:
|
|
105
|
+
try:
|
|
106
|
+
data = json.load(open(path, encoding="utf-8"))
|
|
107
|
+
except Exception: # noqa: BLE001
|
|
108
|
+
continue
|
|
109
|
+
if str(data.get("accountId", "")) == str(account_id):
|
|
110
|
+
return path, data
|
|
111
|
+
return None, {}
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def image_no(media_name: object) -> str | None:
|
|
115
|
+
"""素材名の先頭の数字を画像番号として取る(`183-1200.jpg` → `183`)。
|
|
116
|
+
|
|
117
|
+
先頭が数字でないものは番号を決められないので取り込まない。推測で番号を振ると
|
|
118
|
+
既存の番号体系を壊すため、ここは厳格にする。
|
|
119
|
+
"""
|
|
120
|
+
m = re.match(r"(\d+)", str(media_name or ""))
|
|
121
|
+
return m.group(1) if m else None
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def classify(media: list) -> dict:
|
|
125
|
+
"""素材一覧を (番号, スロット) → mediaId の候補表に畳む。
|
|
126
|
+
|
|
127
|
+
同じ組み合わせに複数の素材が当たったら、どれを採るか機械的に決められないので
|
|
128
|
+
候補をすべて残して呼び出し側に判断させる(自動採用しない)。
|
|
129
|
+
"""
|
|
130
|
+
out = {
|
|
131
|
+
"candidates": {}, # (no, slot) -> [mediaId, ...]
|
|
132
|
+
"skipped_approval": 0, # 否認済み
|
|
133
|
+
"skipped_aspect": 0, # card/sq に当てはまらない比率
|
|
134
|
+
"skipped_name": 0, # 番号を取れない
|
|
135
|
+
}
|
|
136
|
+
for m in media:
|
|
137
|
+
mid = str(m.get("mediaId") or "")
|
|
138
|
+
if not mid:
|
|
139
|
+
continue
|
|
140
|
+
if (m.get("approvalStatus") or "") not in USABLE_APPROVAL:
|
|
141
|
+
out["skipped_approval"] += 1
|
|
142
|
+
continue
|
|
143
|
+
slot = SLOT_BY_ASPECT.get(m.get("aspectRatio") or "")
|
|
144
|
+
if not slot:
|
|
145
|
+
out["skipped_aspect"] += 1
|
|
146
|
+
continue
|
|
147
|
+
no = image_no(m.get("mediaName"))
|
|
148
|
+
if not no:
|
|
149
|
+
out["skipped_name"] += 1
|
|
150
|
+
continue
|
|
151
|
+
out["candidates"].setdefault((no, slot), []).append(mid)
|
|
152
|
+
return out
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def merge(refs_media: dict, classified: dict) -> tuple[dict, list[str], dict]:
|
|
156
|
+
"""既存を保ったまま不足分だけ足す。
|
|
157
|
+
|
|
158
|
+
returns (merged, report, stats)
|
|
159
|
+
"""
|
|
160
|
+
merged = {k: dict(v) if isinstance(v, dict) else v for k, v in (refs_media or {}).items()}
|
|
161
|
+
added, ambiguous, conflicts = [], [], []
|
|
162
|
+
|
|
163
|
+
for (no, slot), ids in sorted(classified["candidates"].items(), key=lambda x: (int(x[0][0]), x[0][1])):
|
|
164
|
+
cur = merged.get(no)
|
|
165
|
+
if cur is not None and not isinstance(cur, dict):
|
|
166
|
+
continue # 想定外の形。触らない
|
|
167
|
+
if len(ids) > 1:
|
|
168
|
+
# どれが正か決められない。既に値があるならそのまま、無ければ空けておく
|
|
169
|
+
ambiguous.append((no, slot, ids))
|
|
170
|
+
continue
|
|
171
|
+
mid = ids[0]
|
|
172
|
+
if cur is None:
|
|
173
|
+
merged[no] = {slot: mid}
|
|
174
|
+
added.append((no, slot, mid, "新規番号"))
|
|
175
|
+
elif slot not in cur:
|
|
176
|
+
cur[slot] = mid
|
|
177
|
+
added.append((no, slot, mid, "枠を追加"))
|
|
178
|
+
elif str(cur[slot]) != mid:
|
|
179
|
+
# 既存の値は上書きしない。媒体側で差し替わっている可能性を報告だけする
|
|
180
|
+
conflicts.append((no, slot, str(cur[slot]), mid))
|
|
181
|
+
|
|
182
|
+
report = []
|
|
183
|
+
report.append(f"追加: {len(added)} 件"
|
|
184
|
+
f"(card {sum(1 for a in added if a[1] == 'card')} / "
|
|
185
|
+
f"sq {sum(1 for a in added if a[1] == 'sq')})")
|
|
186
|
+
if ambiguous:
|
|
187
|
+
report.append(f"⚠ 同じ番号・同じ形式に候補が複数あるため取り込みませんでした: {len(ambiguous)} 件")
|
|
188
|
+
for no, slot, ids in ambiguous[:5]:
|
|
189
|
+
report.append(f" 番号 {no} / {slot}: {', '.join(ids)}")
|
|
190
|
+
if conflicts:
|
|
191
|
+
report.append(f"⚠ 既存と違う mediaId が媒体にあります(上書きしていません): {len(conflicts)} 件")
|
|
192
|
+
for no, slot, old, new in conflicts[:5]:
|
|
193
|
+
report.append(f" 番号 {no} / {slot}: 参照表 {old} / 媒体 {new}")
|
|
194
|
+
for key, label in (("skipped_approval", "審査で否認された素材"),
|
|
195
|
+
("skipped_aspect", "card/sq に当てはまらない比率の素材"),
|
|
196
|
+
("skipped_name", "名前から番号を取れない素材")):
|
|
197
|
+
if classified[key]:
|
|
198
|
+
report.append(f"除外: {label} {classified[key]} 件")
|
|
199
|
+
|
|
200
|
+
stats = {"added": len(added), "ambiguous": len(ambiguous), "conflicts": len(conflicts)}
|
|
201
|
+
return merged, report, stats
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
def main() -> int:
|
|
205
|
+
ap = argparse.ArgumentParser(description="媒体の素材を参照表(refs.media)へ取り込む")
|
|
206
|
+
ap.add_argument("platform", choices=["yda"],
|
|
207
|
+
help="現在は yda のみ。媒体ごとに番号の付け方が違うため横展開はしない")
|
|
208
|
+
ap.add_argument("account_id")
|
|
209
|
+
ap.add_argument("--write", action="store_true", help="参照表へ書き込む(既定は差分表示のみ)")
|
|
210
|
+
args = ap.parse_args()
|
|
211
|
+
|
|
212
|
+
path, account = find_account(args.platform, args.account_id)
|
|
213
|
+
if not path:
|
|
214
|
+
print(f"✗ accountId {args.account_id} の参照表が見つかりません", file=sys.stderr)
|
|
215
|
+
print(" 初めて使うアカウントは、先にアカウント取込プロンプトで作成してください",
|
|
216
|
+
file=sys.stderr)
|
|
217
|
+
return 1
|
|
218
|
+
|
|
219
|
+
media = fetch_media(args.platform, args.account_id)
|
|
220
|
+
if media is None:
|
|
221
|
+
print("✗ 素材一覧を取得できなかったため、参照表は変更していません")
|
|
222
|
+
return 1
|
|
223
|
+
|
|
224
|
+
print(f" 媒体の素材: {len(media)} 件")
|
|
225
|
+
|
|
226
|
+
# 取得上限に達している = 全件取れていない可能性がある。欠落したまま書くと危険なので止める。
|
|
227
|
+
truncated = len(media) >= FETCH_LIMIT
|
|
228
|
+
classified = classify(media)
|
|
229
|
+
refs = (account.get("refs") or {}).get("media") or {}
|
|
230
|
+
merged, report, stats = merge(refs, classified)
|
|
231
|
+
|
|
232
|
+
print(f"\n── {os.path.basename(path)} ──")
|
|
233
|
+
before_card = sum(1 for v in refs.values() if isinstance(v, dict) and v.get("card"))
|
|
234
|
+
before_sq = sum(1 for v in refs.values() if isinstance(v, dict) and v.get("sq"))
|
|
235
|
+
after_card = sum(1 for v in merged.values() if isinstance(v, dict) and v.get("card"))
|
|
236
|
+
after_sq = sum(1 for v in merged.values() if isinstance(v, dict) and v.get("sq"))
|
|
237
|
+
print(f" 画像番号 {len(refs)} → {len(merged)}")
|
|
238
|
+
print(f" card {before_card} → {after_card}")
|
|
239
|
+
print(f" sq {before_sq} → {after_sq}")
|
|
240
|
+
for line in report:
|
|
241
|
+
print(f" {line}")
|
|
242
|
+
|
|
243
|
+
if truncated:
|
|
244
|
+
print(f"\n✗ 取得件数が上限({FETCH_LIMIT})に達しています。全件取れていない可能性が"
|
|
245
|
+
"あるため書き込みません。")
|
|
246
|
+
print(" ページング対応が入るまで、このアカウントは手動で参照表を整えてください。")
|
|
247
|
+
return 2
|
|
248
|
+
|
|
249
|
+
if stats["added"] == 0:
|
|
250
|
+
print("\n(参照表は最新です)")
|
|
251
|
+
return 0
|
|
252
|
+
|
|
253
|
+
if not args.write:
|
|
254
|
+
print("\n(dry-run: 書き込んでいません。反映するには --write を付けてください)")
|
|
255
|
+
return 0
|
|
256
|
+
|
|
257
|
+
# 書き込み前に必ず退避する。固定名だと2回目の write で最初の退避が消えるので世代を残す。
|
|
258
|
+
stamp = datetime.now().strftime("%Y%m%d-%H%M%S")
|
|
259
|
+
backup, n = f"{path}.{stamp}.bak", 1
|
|
260
|
+
while os.path.exists(backup):
|
|
261
|
+
backup, n = f"{path}.{stamp}-{n}.bak", n + 1
|
|
262
|
+
shutil.copy2(path, backup)
|
|
263
|
+
|
|
264
|
+
account.setdefault("refs", {})["media"] = merged
|
|
265
|
+
# 一時ファイルへ書いてから rename する。途中で落ちても元が壊れない
|
|
266
|
+
tmp = f"{path}.tmp"
|
|
267
|
+
with open(tmp, "w", encoding="utf-8") as f:
|
|
268
|
+
json.dump(account, f, indent=1, ensure_ascii=False)
|
|
269
|
+
f.write("\n")
|
|
270
|
+
os.replace(tmp, path)
|
|
271
|
+
print(f"\n✓ 書き込みました: {path}")
|
|
272
|
+
print(f" 退避: {os.path.basename(backup)}(元に戻すならこれを上書きコピー)")
|
|
273
|
+
return 0
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
if __name__ == "__main__":
|
|
277
|
+
sys.exit(main())
|
|
@@ -467,6 +467,14 @@ def lint(plan: dict, plan_path: str = "") -> None:
|
|
|
467
467
|
# refs の鮮度と無関係にローカルで確定する
|
|
468
468
|
plan_cp_names: set[str] = set()
|
|
469
469
|
|
|
470
|
+
# YDA のバナー広告は 1200x628 (Card) を受け付けない。入稿計画JSONに画像サイズは
|
|
471
|
+
# 載らないので、参照表の card 側に登録されている mediaId を集めて逆引きする。
|
|
472
|
+
card_media_ids = {
|
|
473
|
+
str(v.get("card"))
|
|
474
|
+
for v in (account.get("refs", {}).get("media") or {}).values()
|
|
475
|
+
if isinstance(v, dict) and v.get("card")
|
|
476
|
+
}
|
|
477
|
+
|
|
470
478
|
if not base:
|
|
471
479
|
warn(f"アカウントJSONに baseArticleUrl がありません({platform}/{plan.get('accountId')})。"
|
|
472
480
|
" finalUrl が相対パスになる原因になります")
|
|
@@ -579,6 +587,22 @@ def lint(plan: dict, plan_path: str = "") -> None:
|
|
|
579
587
|
f" → 解決先 {resolved}(相対パスの基準は計画JSONのディレクトリ "
|
|
580
588
|
f"{base_dir})")
|
|
581
589
|
|
|
590
|
+
# YDA のバナー広告 (BANNER_AD) に 1200x628 の画像は使えない。
|
|
591
|
+
# 公式の入稿規定でバナー(画像)の対応アスペクト比は 1:1 / 6:5 等で、
|
|
592
|
+
# 1.91:1 はレスポンシブ側のサイズ (2026-10-13 に広告事業部へ確認済み)。
|
|
593
|
+
# 実 API は 220115 Unexpected aspect ratio で弾くが dry-run は通るので、
|
|
594
|
+
# プランナーと二重に止める (プランナーを経由しない計画にも効かせる)。
|
|
595
|
+
if platform == "yda" and (a.get("adType") or "RESPONSIVE_AD") == "BANNER_AD":
|
|
596
|
+
banner_cards = [
|
|
597
|
+
str(m) for m in (a.get("mediaIds") or []) if str(m) in card_media_ids
|
|
598
|
+
]
|
|
599
|
+
if banner_cards:
|
|
600
|
+
err(f"CP「{name}」のバナー広告に Card(1200x628) の画像が指定されています"
|
|
601
|
+
f"({a.get('adName') or ''} / mediaId {', '.join(banner_cards)})\n"
|
|
602
|
+
f" → Yahoo はバナー広告の 1200x628 を受け付けません"
|
|
603
|
+
f"(220115 Unexpected aspect ratio)。"
|
|
604
|
+
f"広告タイプをレスポンシブにするか、形式を SQ にしてください")
|
|
605
|
+
|
|
582
606
|
# Google (Demand Gen) の動画は「動画IDかローカルパスのどちらか一方」。
|
|
583
607
|
# 両方あると CLI が余計にアップロードし、使われない動画が YouTube に残る。
|
|
584
608
|
# backend も superRefine で 400 にするが、CLI はその手前でアップロードを
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""assets_sync.py の単体テスト(実 API を叩かない)。
|
|
3
|
+
|
|
4
|
+
python3 test_assets_sync.py
|
|
5
|
+
|
|
6
|
+
媒体のレスポンスを固定データで与え、振り分け・除外・マージの判断を確かめる。
|
|
7
|
+
参照表は「既存を絶対に壊さない」のが最重要なので、そこを厚く見る。
|
|
8
|
+
"""
|
|
9
|
+
import json
|
|
10
|
+
import os
|
|
11
|
+
import subprocess
|
|
12
|
+
import sys
|
|
13
|
+
import tempfile
|
|
14
|
+
|
|
15
|
+
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
|
16
|
+
import assets_sync as S # noqa: E402
|
|
17
|
+
|
|
18
|
+
ok = 0
|
|
19
|
+
ng = []
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def check(name: str, cond: bool, detail: str = "") -> None:
|
|
23
|
+
global ok
|
|
24
|
+
if cond:
|
|
25
|
+
ok += 1
|
|
26
|
+
print(f" ✓ {name}")
|
|
27
|
+
else:
|
|
28
|
+
ng.append(f"{name}{(': ' + detail) if detail else ''}")
|
|
29
|
+
print(f" ✗ {name}{(': ' + detail) if detail else ''}")
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def media(mid, name, aspect, approval="APPROVED"):
|
|
33
|
+
return {"mediaId": mid, "mediaName": name, "aspectRatio": aspect,
|
|
34
|
+
"approvalStatus": approval}
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
print("── 振り分け(実寸で判定し、名前は使わない) ──")
|
|
38
|
+
c = S.classify([
|
|
39
|
+
media("1001", "10-1200.jpg", "AR_191_100"),
|
|
40
|
+
media("1002", "10-1080.jpg", "AR_1_1"),
|
|
41
|
+
media("1003", "11-1200.jpg", "AR_1200_628"), # 表記ゆれも card に寄せる
|
|
42
|
+
])
|
|
43
|
+
check("1.91:1 は card", c["candidates"].get(("10", "card")) == ["1001"])
|
|
44
|
+
check("1:1 は sq", c["candidates"].get(("10", "sq")) == ["1002"])
|
|
45
|
+
check("AR_1200_628 も card", c["candidates"].get(("11", "card")) == ["1003"])
|
|
46
|
+
|
|
47
|
+
# 名前が -1080 でも実寸が 1.91:1 なら card。実データの96%が名前とズレているため
|
|
48
|
+
c = S.classify([media("2001", "20-1080.jpg", "AR_191_100")])
|
|
49
|
+
check("名前が -1080 でも実寸が 1.91:1 なら card",
|
|
50
|
+
c["candidates"].get(("20", "card")) == ["2001"])
|
|
51
|
+
|
|
52
|
+
print("\n── 除外 ──")
|
|
53
|
+
c = S.classify([
|
|
54
|
+
media("3001", "30-1200.jpg", "AR_191_100", "PRE_DISAPPROVED"),
|
|
55
|
+
media("3002", "31-1200.jpg", "AR_191_100", "POST_DISAPPROVED"),
|
|
56
|
+
media("3003", "32-1200.jpg", "AR_191_100", "PENDING_UNSPECIFIED_AD"),
|
|
57
|
+
])
|
|
58
|
+
check("否認済み(PRE/POST)は取り込まない", c["skipped_approval"] == 2)
|
|
59
|
+
check("審査保留(PENDING)は取り込む", ("32", "card") in c["candidates"])
|
|
60
|
+
|
|
61
|
+
c = S.classify([media("4001", "40-xx.jpg", "AR_4_5")])
|
|
62
|
+
check("card/sq 以外の比率は取り込まない", c["skipped_aspect"] == 1 and not c["candidates"])
|
|
63
|
+
|
|
64
|
+
c = S.classify([media("5001", "banner-1200.jpg", "AR_191_100")])
|
|
65
|
+
check("名前から番号を取れないものは取り込まない",
|
|
66
|
+
c["skipped_name"] == 1 and not c["candidates"])
|
|
67
|
+
|
|
68
|
+
print("\n── 既存を壊さない ──")
|
|
69
|
+
existing = {"10": {"card": "9999"}, "20": {"sq": "8888"}}
|
|
70
|
+
c = S.classify([
|
|
71
|
+
media("1001", "10-1200.jpg", "AR_191_100"), # 既存と違う mediaId
|
|
72
|
+
media("1002", "10-1080.jpg", "AR_1_1"), # 空いている枠
|
|
73
|
+
media("2002", "20-1080.jpg", "AR_1_1"), # 既存と違う mediaId
|
|
74
|
+
])
|
|
75
|
+
merged, report, stats = S.merge(existing, c)
|
|
76
|
+
check("既存の値を上書きしない", merged["10"]["card"] == "9999",
|
|
77
|
+
f'got {merged["10"]["card"]}')
|
|
78
|
+
check("空いている枠には足す", merged["10"].get("sq") == "1002")
|
|
79
|
+
check("食い違いを報告する", stats["conflicts"] == 2, f'got {stats["conflicts"]}')
|
|
80
|
+
check("追加件数が合う", stats["added"] == 1, f'got {stats["added"]}')
|
|
81
|
+
|
|
82
|
+
print("\n── 同じ番号・同じ形式に候補が複数 ──")
|
|
83
|
+
c = S.classify([
|
|
84
|
+
media("6001", "60-1200.jpg", "AR_191_100"),
|
|
85
|
+
media("6002", "60-1200_dup.jpg", "AR_191_100"),
|
|
86
|
+
])
|
|
87
|
+
merged, report, stats = S.merge({}, c)
|
|
88
|
+
check("どれが正か決められないので取り込まない", "60" not in merged)
|
|
89
|
+
check("候補が複数あることを報告する", stats["ambiguous"] == 1)
|
|
90
|
+
|
|
91
|
+
print("\n── 新規番号 ──")
|
|
92
|
+
c = S.classify([media("7001", "70-1200.jpg", "AR_191_100")])
|
|
93
|
+
merged, report, stats = S.merge({}, c)
|
|
94
|
+
check("参照表に無い番号は新規に作る", merged.get("70") == {"card": "7001"})
|
|
95
|
+
|
|
96
|
+
print("\n── CLI の挙動(実 API は叩かない) ──")
|
|
97
|
+
with tempfile.TemporaryDirectory() as td:
|
|
98
|
+
acc_dir = os.path.join(td, "アカウント", "yda")
|
|
99
|
+
os.makedirs(acc_dir)
|
|
100
|
+
acc_path = os.path.join(acc_dir, "テスト案件.json")
|
|
101
|
+
with open(acc_path, "w", encoding="utf-8") as f:
|
|
102
|
+
json.dump({"accountId": "999", "refs": {"media": {"1": {"sq": "111"}}}},
|
|
103
|
+
f, ensure_ascii=False)
|
|
104
|
+
before = open(acc_path, encoding="utf-8").read()
|
|
105
|
+
|
|
106
|
+
env = {**os.environ, "ADOPS_CLI": "false"} # 必ず失敗する CLI を使わせる
|
|
107
|
+
script = os.path.join(os.path.dirname(os.path.abspath(__file__)), "assets_sync.py")
|
|
108
|
+
# SKILL_DIR を一時ディレクトリに向けるため、スクリプトを一時側へ写して実行する
|
|
109
|
+
tmp_scripts = os.path.join(td, "scripts")
|
|
110
|
+
os.makedirs(tmp_scripts)
|
|
111
|
+
import shutil
|
|
112
|
+
shutil.copy2(script, os.path.join(tmp_scripts, "assets_sync.py"))
|
|
113
|
+
p = subprocess.run([sys.executable, os.path.join(tmp_scripts, "assets_sync.py"),
|
|
114
|
+
"yda", "999", "--write"],
|
|
115
|
+
capture_output=True, text=True, env=env)
|
|
116
|
+
check("取得に失敗したら書き込まない(終了コード1)", p.returncode == 1,
|
|
117
|
+
f"exit={p.returncode}")
|
|
118
|
+
check("取得に失敗しても参照表が変わらない",
|
|
119
|
+
open(acc_path, encoding="utf-8").read() == before)
|
|
120
|
+
|
|
121
|
+
p = subprocess.run([sys.executable, os.path.join(tmp_scripts, "assets_sync.py"),
|
|
122
|
+
"yda", "不明なID"],
|
|
123
|
+
capture_output=True, text=True, env=env)
|
|
124
|
+
check("参照表が無いアカウントはエラーで止まる", p.returncode == 1)
|
|
125
|
+
|
|
126
|
+
print()
|
|
127
|
+
if ng:
|
|
128
|
+
print(f"✗ {len(ng)} 件failed / {ok} 件passed")
|
|
129
|
+
for n in ng:
|
|
130
|
+
print(f" - {n}")
|
|
131
|
+
sys.exit(1)
|
|
132
|
+
print(f"✓ {ok} 件すべて passed")
|