Ad Manager API 支持对 List 方法进行过滤。过滤条件字符串语法在 EBNF 语法中进行了正式定义。
下面列出了一些常见的使用场景示例,供您参考。
| 示例 | 含义 | 
|---|---|
| orders.updateTime > "2024-01-01T00:00:00-5:00" | 列出东部标准时间 (EST) 中 2024 年 1 月 1 日之后具有 updateTime的订单 | 
| lineItems.targeting.geoTargeting.targetedGeoIds:2840 | 列出地理位置定位包含美国(地理位置定位 ID 为 2480)的订单项 | 
| lineItems.displayName = "*_interstitial" | 列出显示名称以字符串 _interstitial结尾的订单项 | 
| orders.displayName = "*video*" | 列出显示名称包含字符串 video的订单 | 
| displayName:"video" | 列出显示名称包含字符串 video的订单(备选语法) | 
字面量
裸字面量值(示例:42、Hugo)是与之匹配的值。单独出现的字面量会与资源上的所有受支持字段进行模糊匹配。资源文档会说明系统会考虑哪些字段来匹配 list 方法。此功能类似于 Ad Manager 界面中的全局搜索,但范围仅限于单一资源类型。
包含空格的字符串字面量应用双引号括起来(例如:"Foo bar")。单引号不能用于括起字符串字面量。
逻辑运算符
Ad Manager API 支持二元运算符 AND 和 OR。
| 运算符 | 示例 | 含义 | 
|---|---|---|
| AND | a AND b | 如果 a和b均为 true,则为 true。 | 
| OR | a OR b OR c | 如果 a、b或c中的任一项为真,则为真。 | 
否定运算符
Ad Manager API 提供了单元运算符 NOT 和 -。这两个命名空间可以互换使用。
| 运算符 | 示例 | 含义 | 
|---|---|---|
| NOT | NOT a | 如果 a不为 true,则为 true。 | 
| - | -a | 如果 a不为 true,则为 true。 | 
比较运算符
Ad Manager API 支持对字符串、数字、时间戳和时长字段使用二进制比较运算符 =、!=、<、>、<= 和 >=。
| 运算符 | 示例 | 含义 | 
|---|---|---|
| = | a = true | 如果 a为 true,则为 true。 | 
| != | a != 42 | 除非 a等于 42,否则为 true。 | 
| < | a < 42 | 如果 a是一个小于 42 的数字值,则为 true。 | 
| > | a > "foo" | 如果 a在字典顺序上位于“foo”之后,则为 true。 | 
| <= | a <= "foo" | 如果 a为“foo”或在词法上位于“foo”之前,则为 true。 | 
| >= | a >= 42 | 如果 a是 42 或更高的数字值,则为 true。 | 
由于过滤条件是作为查询字符串接受的,因此系统会进行类型转换,以将字符串转换为适当的强类型值:
- 字符串应使用双引号。示例:"Foo bar"。
- 枚举需要枚举的字符串表示法(区分大小写)。
- 布尔值需要 true和false字面量值。
- 数字应采用标准整数或浮点表示法。对于浮点数,支持指数。示例:2.997e9。
- 时长应为数字表示法,后跟 s后缀(秒)。示例:"20s"、"1.2s"。
- 时间戳应采用 RFC-3339 格式的字符串。示例:"2012-04-21T11:30:00-04:00"。支持 UTC 偏移量。
通配符
比较字符串是否相等时,Ad Manager API 支持使用 * 字符的通配符。
| 示例 | 含义 | 
|---|---|
| a = "*.foo" | 如果 a以“.foo”结尾,则为 true。 | 
遍历运算符
Ad Manager API 支持 . 运算符,用于指示通过消息、映射或结构体进行遍历。
| 示例 | 含义 | 
|---|---|
| a.b = true | 如果 a具有布尔值b字段且该字段为 true,则为 true。 | 
| a.b > 42 | 如果 a的数字b字段大于 42,则为 true。 | 
| a.b.c = "foo" | 如果 a.b的字符串c字段为“foo”,则为 true。 | 
使用资源中的字段名称编写遍历。各个服务可以指定支持遍历的字段子集。
有运算符
Ad Manager API 支持 : 运算符,表示“包含”。它可用于集合(重复字段或映射)、消息和字符串,并且在每种情况下的行为略有不同。
字符串字段查询,用于查看字符串是否包含匹配的子字符串:
| 示例 | 含义 | 
|---|---|
| r.displayName:"_250x250" | 如果字符串字段 r.displayName包含子字符串_250x250,则为 true。 | 
重复字段查询,用于查看重复结构是否包含匹配的元素:
| 示例 | 含义 | 
|---|---|
| r:42 | 如果 r包含 42,则为 true。 | 
| r.foo:42 | 如果 r包含元素e,且e.foo = 42,则为 true。 | 
映射、结构体和消息可以查询映射中是否存在某个字段或特定值:
| 示例 | 含义 | 
|---|---|
| m:foo | 如果 m包含键“foo”,则为 true。 | 
| m.foo:* | 如果 m包含键“foo”,则为 true。 | 
| m.foo:42 | 如果 m.foo为 42,则为 true。 | 
在遍历消息时,只有当字段具有非默认值时,才会被视为存在。
限制
除了此处定义的结构和限制之外,各个服务还可以为过滤查询指定其他结构或限制。
订单
大多数资源都支持对 List 方法进行排序。如需了解资源的确切行为以及支持排序的字段,请参阅 List 方法文档。
orderBy 字段的语法是字段名称的英文逗号分隔列表。例如:"foo,bar"。
默认排序顺序为升序。如需将字段指定为降序,请附加 " desc" 后缀。例如:"foo desc, bar"。
语法中的冗余空格字符会被忽略。值 "foo, bar
desc"、" foo , bar desc " 和 "foo,bar desc" 是等效的。
子字段使用遍历运算符指定。例如:foo.bar 或 address.street。