过滤条件

Ad Manager REST API 支持根据 List 方法进行过滤。过滤器字符串语法在 EBNF 语法中正式定义。

首先,请查看一些常见的使用场景示例。

示例 含义
orders.updateTime > "2024-01-01T00:00:00-5:00" 列出 2024 年 1 月 1 日之后具有 updateTime 的订单(东部标准时区)
lineItems.targeting.geoTargeting.targetedGeoIds:2840 列出地理位置定位包含美国(地理位置定位 ID 2480)的订单项
lineItems.displayName = "*_interstitial" 列出显示名称以字符串 _interstitial 结尾的订单项
orders.displayName = "*video*" 列出显示名称包含字符串 video 的订单
displayName:"video" 列出显示名称包含字符串 video(备用语法)的订单

字面

裸字面量值(例如:42Hugo)是要匹配的值。单独出现的字面量会与资源上所有支持的字段进行模糊匹配。资源记录了考虑与 list 方法匹配的字段。此功能与 Ad Manager 界面中的通用搜索相当,但其范围仅限于单一资源类型。

包含空格的字符串字面量应该用双引号引起来(例如:"Foo bar")。单引号不能用于封装字符串字面量。

逻辑运算符

Ad Manager REST API 支持二元运算符 ANDOR

运营商 示例 含义
AND a AND b 如果 ab 为 true,则为 true。
OR a OR b OR c 如果 abc 中的任意一个为 true,则返回 true。

否定运算符

Ad Manager REST API 提供一元运算符 NOT-。它们可以互换使用。

运营商 示例 含义
NOT NOT a 如果 a 不为 true,则为 true。
- -a 如果 a 不为 true,则为 true。

比较运算符

Ad Manager REST 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”或在词法上位于它之前,则为 true。
>= a >= 42 如果 a 为 42 或更大的数值,则为 true。

由于过滤条件被接受为查询字符串,因此系统会进行类型转换,以将字符串转换为相应的强类型值:

  • 字符串应使用双引号。示例:"Foo bar"
  • 枚举需要其字符串表示形式(区分大小写)。
  • 布尔值需要 truefalse 字面量值。
  • 数字应采用标准的整数或浮点表示法。对于浮点数,系统支持指数。示例:2.997e9
  • 时长应以数字表示,后跟 s 后缀(以秒为单位)。示例:"20s""1.2s"
  • 时间戳应为 RFC-3339 格式的字符串。示例:"2012-04-21T11:30:00-04:00"。支持世界协调时间 (UTC) 偏移量。

通配符

在比较字符串是否相等时,Ad Manager REST API 支持使用 * 字符的通配符。

示例 含义
a = "*.foo" 如果 a “.foo”结尾,则为 true。

遍历运算符

Ad Manager REST API 支持 . 运算符,该运算符表示通过消息、映射或结构体进行遍历。

示例 含义
a.b = true 如果 a 具有为 true 的布尔值 b 字段,则为 true。
a.b > 42 如果 a 具有大于 42 的数字 b 字段,则为 true。
a.b.c = "foo" 如果 a.b 的字符串 c 字段为“foo”,则为 true。

遍历是使用资源中的字段名称编写的。 单个服务可以指定支持遍历的部分字段。

有运算符

Ad Manager REST API 支持 : 运算符,即“包含”。它可与集合(重复字段或映射)、消息和字符串一起使用,并且在每种情况下的行为都略有不同。

字符串字段查询,用于检查字符串是否包含匹配的子字符串:

示例 含义
r.displayName:"_250x250" 如果字符串字段 r.displayName 包含子字符串 _250x250,则为 true。

重复字段查询,以查看重复结构是否包含匹配元素:

示例 含义
r:42 如果 r 包含 42,则为 true。
r.foo:42 如果 r 包含元素 e 使 e.foo = 42 为 true,则该值为 true。

映射、结构体和消息可以查询映射中是否存在某个字段或特定值:

示例 含义
m:foo 如果 m 包含键“foo”,则为 true。
m.foo:* 如果 m 包含键“foo”,则为 true。
m.foo:42 如果 m.foo 为 42,则为 true。

遍历消息时,只有当字段具有非默认值时,才会认为该字段存在。

限制

除此处定义的结构或限制之外,各个服务还可以为过滤条件查询指定更多结构或限制。

订单

Ad Manager REST API 支持根据 List 方法进行排序。orderBy 字段的语法是以英文逗号分隔的字段名称列表。例如:"foo,bar"

默认排序顺序为升序。如需为字段指定降序,请附加 " desc" 后缀。例如:"foo desc, bar"

语法中的冗余空格字符会被忽略。值 "foo, bar desc"" foo , bar desc ""foo,bar desc" 都等效。

子字段使用遍历运算符指定。例如:foo.baraddress.street