Appka četla z API vždycky jen první stránku a tvářila se, že je to celý účet.
Nahlásil to student kurzu AI First na výpisu kampaní; kontrola ukázala, že stejný
strop měl každý výpis v appce. Nejde o kosmetiku — na Jindrově vlastním účtu měl
ads 521 inzerátů a vypisoval jich 500.
- FIX:
campaignsbralo z API jen prvních 100 kampaní (limit: 100, offset: 0)
a--statusfiltroval až nad touhle useknutou stovkou — takže--status active
a--status suspenddohromady nikdy nedaly víc než 100 řádků. Účet se 130 kampaněmi
o 30 z nich tiše přišel; API na to neupozorní (v odpovědi není celkový počet). - FIX: stejný strop v dalších výpisech —
groups,ads,bannersabanner-download
po 500 řádcích,keywordsanegativespo 5000. Nově se všechny stránkují až do konce. - FIX:
campaign-updatehledal typ kampaně v seznamu prvních 100 kampaní — u většího
účtu tedy úprava kampaně #101 a dál skončila hláškou „Campaign not found", i když
kampaň existovala. Teď se ptá přímo na to jedno ID (levnější a správné). - FIX: statistiky se usekávaly na 5000 řádcích.
readReportvíc nežstatsDataLimit
nevrátí a CLI si o zbytek neřeklo — u velkých účtů (keyword-stats,search-queries,
výpisy umístění) prostě chyběl konec dat. Report se teď dočte celý, uživatelský
--limitfunguje dál jako strop. - Jak to funguje: stránkování je centrálně v enginu —
api._fetch_all()pro*.list
areports._read_report_rows()pro reporty; velikost stránky se bere zapi.limits
(statsDataLimit, obvykle 5000), takže se sama přizpůsobí účtu. Runaway pojistka na
200 000 řádků hlásí useknutí na stderr — appka už nikdy nevrátí neúplný seznam mlčky. - FIX:
search-queries --campaign-id/--group-idfiltrovalo až nad useknutým reportem —
úplně stejná past jako ucampaigns --status: přečetlo se prvních--limitřádků z celého
účtu a teprve na nich se hledala daná kampaň. Na testovacím účtu tak jedna kampaň místo
124 dotazů ukázala 6. Nově se při filtru čte celý report a--limitořezává až výsledek
(lidský výstup pak píšeshowing first N of M). - Odolnost proti 413:
retargeting-attachedposílal ID všech sestav v jednom poli;
na velkém účtu by přetekl per-call limit. Teď se dotazuje po dávkách. - Zjištěno při testování stránkování reportů: v
readReportjsouoffset/limit/totalCount
v jednotkách entit, ne vrácených řádků. U reportu vyhledávacích dotazů (queries) to není
totéž — vrací všechny dotazy klíčových slov na dané stránce, takže žádost o 5 klíčových slov
vrátí 6 řádků a 138 klíčových slov dá 127 řádků dotazů. Stránkovat podle počtu řádků by data
duplikovalo; appka proto posouvá offset o velikost stránky. Popsáno vdocs/api-notes.md. - Cena: velký účet znamená víc requestů na jeden výpis (20 000 klíčových slov = 4 volání).
Request-budget to hlídá jako dřív; při skriptování nevoláním výpisy zbytečně dokola. - Kontrola zbytku appky: metody, které stránkovací parametry vůbec nemají
(conversions.list,sitelinks.list,retargeting.lists.list,sharedbudgets.list,
images.constraints.list), vrací všechno v jednom volání — tam problém není.
Ověřeno živě: offsety se nepřekrývají a stránkovaný i nestránkovaný běh vrací
identická data (kampaně, klíčová slova i report po 2/5/7 řádcích na stránku).