跳转到主要内容

构建查询

查询限制! 您的查询会根据您使用的访问级别而受到限制。 如果您拥有 Pro 访问权限,单条查询最长可包含 512 个字符。 如果您拥有企业版访问权限,请联系您的客户经理。 运算符可用性 虽然大多数运算符对所有开发者均可用,但有一些仅限已获批企业版访问权限的用户使用。我们在运算符列表表格中使用以下标签标注各运算符的可用访问级别:
  • 核心运算符:在使用任意Project时可用。
  • 高级运算符:在使用具有企业版访问权限的 Project 时可用   

运算符类型:独立版与需配合使用

独立版运算符 可以单独使用,或与任意其他运算符(包括那些需要配合使用的运算符)一起使用。 例如,以下查询可以运行,因为它使用了独立版的 #hashtag 运算符: #xapiv2 需配合使用的运算符 不能单独出现在查询中;只有在查询中至少包含一个独立版运算符时才能使用。这是因为单独使用这些运算符范围过于宽泛,会匹配到极大量的 Post。 例如,以下查询不受支持,因为它们仅包含需配合使用的运算符: has:media has:links OR is:retweet 如果我们加入一个独立版运算符,例如短语“X data”,查询就能正常运行。 “X data” has:mentions (has:media OR has:links)

布尔运算符与分组

如果你希望在单个查询中串联多个运算符,可以使用以下方式:
AND 逻辑连续的运算符之间用空格分隔会产生布尔 “AND” 逻辑,即只有在同时满足两个条件时才会匹配到 Posts。例:snow day #NoSchool 会匹配同时包含术语 snow、day 以及话题标签 #NoSchool 的 Posts。
OR 逻辑连续的运算符之间使用 OR 会产生 OR 逻辑,即只要满足任一条件就会匹配到 Posts。例:指定 grumpy OR cat OR #meme 会匹配任何至少包含术语 grumpy 或 cat,或话题标签 #meme 的 Posts。
NOT 逻辑(取反)在关键词(或任何运算符)前添加短横线 (-) 可将其取反(NOT)。例:cat #meme -grumpy 会匹配包含话题标签 #meme 和术语 cat 的 Posts,但前提是不包含术语 grumpy。一个常见的查询子句是 -is:retweet,它不会匹配 Retweets,因此只匹配原始 Posts、Quote Tweets 和回复。所有运算符都可以取反,但取反后的运算符不能单独使用。
分组你可以使用圆括号将运算符分组。例:(grumpy cat) OR (#meme has:images) 将返回包含术语 grumpy 和 cat 的 Posts,或包含图像且带有话题标签 #meme 的 Posts。注意,先应用 AND,再应用 OR。
关于取反的说明 运算符 -is:nullcast 必须始终以取反形式使用。 取反后的运算符不能单独使用。 不要对一组用圆括号成组的运算符整体取反。相反,应分别对每个运算符取反。例:不要使用 skiing -(snow OR day OR noschool),建议使用 skiing -snow -day -noschool。 运算顺序 当同时使用 AND 和 OR 时,下列运算顺序将决定查询的求值方式:
  1. 先合并通过 AND 逻辑连接的运算符
  2. 然后应用通过 OR 逻辑连接的运算符
例如:
  • apple OR iphone ipad 将被求值为 apple OR (iphone ipad)
  • ipad iphone OR android 将被求值为 (iphone ipad) OR android
为消除不确定性并确保查询按预期求值,请在合适的地方用圆括号对术语进行分组。 例如:
  • (apple OR iphone) ipad
  • iphone (ipad OR android)
标点、变音符号与大小写不敏感 如果你在关键词或话题标签查询中使用了带重音或变音符号的字符,它将匹配同时包含带重音/变音的写法以及使用普通字符的写法的 Post 文本。例:包含关键词 Diacrítica 或话题标签 #cumpleaños 的查询将匹配含有 Diacrítica 或 #cumpleaños 的内容,也会匹配不带波浪 í 或 eñe 的 Diacritica 或 #cumpleanos。 带重音或变音符号的字符与普通字符同等对待,且不作为词边界处理。例:包含关键词 cumpleaños 的查询只会匹配包含单词 cumpleaños 的活动,不会匹配包含 cumplea、cumplean 或 os 的活动。 所有运算符的评估均不区分大小写。例:查询 cat 将匹配包含以下任一形式的 Posts:cat、CAT、Cat。 filtered stream 的匹配行为与 Post 计数不同。当构建 filtered stream 规则时,请注意,包含重音和变音符号的关键词和话题标签只会匹配也包含该重音和变音符号的术语,不会匹配使用普通字符的术语。 例如,包含关键词 Diacrítica 或话题标签 #cumpleaños 的 filtered stream 规则只会匹配术语 Diacrítica 和 #cumpleaños,不会匹配不带波浪 í 或 eñe 的 Diacritica 或 #cumpleanos。 特异性与效率 当你开始构建查询时,有几件重要的事项需要牢记。
  • 通常不建议在查询中使用宽泛的、独立的运算符(例如单个关键词或 #hashtag),因为这很可能匹配到海量的 Post。构建更严谨的查询将得到更具体的一组匹配 Post,并有望提升 Post 计数的准确性,帮助你获得更有价值的洞察。 
    • 例如,如果你的查询只是关键词 happy,你每天可能会获得 200,000 - 300,000 条 Post。
    • 添加更多条件运算符可以缩小结果范围,例如 (happy OR happiness) place_country:GB -birthday -is:retweet
  • 编写高效的查询还有助于遵守查询长度的字符限制。字符计数包含整个查询字符串,包括空格和运算符。
    • 例如,以下查询长度为 59 个字符:(happy OR happiness) place_country:GB -birthday -is:retweet
Quote Tweet 的匹配行为 使用 Post 计数端点时,运算符不会匹配被引用的原始 Post 的内容,但会匹配 Quote Tweet 中的内容。 但是,请注意,filtered stream 会同时匹配被引用的原始 Post 的内容以及 Quote Tweet 的内容。   迭代式构建查询 尽早且频繁地测试你的查询 第一次就让查询返回“正确”的结果很少见。X 上的内容非常庞杂,可能一开始并不明显,而且上文描述的查询语法未必容易与目标查询完全契合。 在构建查询的过程中,你需要定期使用任一 Search Post 端点进行测试,确保与你的查询匹配的 Post 与你的用例相关。 在本节中,我们将从以下查询开始,并根据测试结果进行调整:  happy OR happiness 用结果来缩小查询范围 使用 Search Posts 测试查询时,你应当浏览返回的 Post,查看是否包含你期望接收的数据。从宽泛查询和 Post 的超集起步,便于你审阅结果并收紧查询,以过滤掉不需要的结果。   在我们测试示例查询时,注意到收到了多种不同语言的 Post。在这种情况下,我们只想接收英文的 Post,因此添加 lang: 运算符: (happy OR happiness) lang:en 测试返回了大量给人们送上生日祝福的 Post,因此我们将添加 -birthday 作为否定关键词运算符。我们还只想接收原始 Post,所以添加了否定的 -is:retweet 运算符: (happy OR happiness) lang:en -birthday -is:retweet 在需要时放宽以纳入更多内容 如果你发现通过 Search Posts 没有接收到预期的数据,并且确定存在应当返回的 Post,则可能需要通过移除可能过滤掉目标数据的运算符来放宽查询。  在我们的示例中,我们注意到个人时间线上还有其他表达我们所寻找情绪的 Post,但未包含在测试结果中。为确保更高的覆盖度,我们将添加关键词 excited 和 elated。 (happy OR happiness OR excited OR elated) lang:en -birthday -is:retweet 根据时间段内的热门趋势/短时激增进行调整 X 上的趋势变化迅速。维护你的查询应是一个持续的过程。如果你计划长期使用某个查询,我们建议定期检查接收的数据,评估是否需要调整。 在我们的示例中,我们注意到开始收到一些祝人们“happy holidays”的 Post。由于我们不希望这些 Post 包含在结果中,我们将添加否定的 -holidays 关键词。 (happy OR happiness OR excited OR elated) lang:en -birthday -is:retweet -holidays  在你充分测试并反复迭代查询之后,你可以开始将其与 Post 计数端点一起使用,以仅接收 Post 的数量,而不是完整的 Post 负载。

将查询添加到请求

要将查询添加到请求中,必须使用 query 参数。与任何查询参数一样,请确保对编写的查询进行 HTTP 编码。 下面是使用 cURL 命令的示例。如果要使用此命令,请务必将 $BEARER_TOKEN 替换为你自己的 Bearer Token
      curl https://api.x.com/2/tweets/counts/recent?query=cat%20has%3Amedia%20-grumpy&tweet.fields=created_at&max_results=100 -H "Authorization: Bearer $BEARER_TOKEN"

查询示例

追踪自然灾害 以下查询匹配来自气象机构和测站、讨论 2017 年袭击休斯顿的飓风 Harvey 的原创 Post。 以下是未进行 HTTP 编码时的查询: has:geo (from:NWSNHC OR from:NHC_Atlantic OR from:NWSHouston OR from:NWSSanAntonio OR from:USGS_TexasRain OR from:USGS_TexasFlood OR from:JeffLindner1) -is:retweet 下面是包含 HTTP 编码、query 参数以及“近期 Post 计数”URI 的查询: https://api.x.com/2/tweets/counts/recent?query=-is%3Aretweet%20has%3Ageo%20(from%3ANWSNHC%20OR%20from%3ANHC_Atlantic%20OR%20from%3ANWSHouston%20OR%20from%3ANWSSanAntonio%20OR%20from%3AUSGS_TexasRain%20OR%20from%3AUSGS_TexasFlood%20OR%20from%3AJeffLindner1) 审阅对话的情感倾向 下一条规则可用于更好地理解围绕话题标签 #nowplaying 展开的对话情感,但范围仅限于在北美发布的 Post。 下面是两条不同的查询(正向和负向)在未进行 HTTP 编码时的示例: #nowplaying (happy OR exciting OR excited OR favorite OR fav OR amazing OR lovely OR incredible) (place_country:US OR place_country:MX OR place_country:CA) -horrible -worst -sucks -bad -disappointing #nowplaying (horrible OR worst OR sucks OR bad OR disappointing) (place_country:US OR place_country:MX OR place_country:CA) -happy -exciting -excited -favorite -fav -amazing -lovely -incredible 下面是包含 HTTP 编码、query 参数以及“近期 Post 计数”URI 的查询: https://api.x.com/2/tweets/counts/recent?query=%23nowplaying%20(happy%20OR%20exciting%20OR%20excited%20OR%20favorite%20OR%20fav%20OR%20amazing%20OR%20lovely%20OR%20incredible)%20(place_country%3AUS%20OR%20place_country%3AMX%20OR%20place_country%3ACA)%20-horrible%20-worst%20-sucks%20-bad%20-disappointing https://api.x.com/2/tweets/counts/recent?query=%23nowplaying%20(horrible%20OR%20worst%20OR%20sucks%20OR%20bad%20OR%20disappointing)%20(place_country%3AUS%20OR%20place_country%3AMX%20OR%20place_country%3ACA)%20-happy%20-exciting%20-excited%20-favorite%20-fav%20-amazing%20-lovely%20-incredible 查找与特定 Post 注释相关的 Post 此规则用于筛选包含“非猫类宠物”图片的原创 Post,且该 Post 的语言为日语。为此,我们使用了 context: 运算符来利用Post 注释功能。我们首先使用Post 查询端点以及 tweet.fields=context_annotations 参数,来确定在查询中需要使用哪些 domain.entity ID:
  • 与猫相关的 Post 返回 domain 66(兴趣与爱好类别),其 entity 为 852262932607926273(Cats)。
  • 与宠物相关的 Post 返回 domain 65(兴趣与爱好垂类),其 entity 为 852262932607926273(Pets)。
以下是未进行 HTTP 编码时的查询: context:65.852262932607926273 -context:66.852262932607926273 -is:retweet has:images lang:ja 下面是包含 HTTP 编码、query 参数以及“近期 Post 计数”URI 的查询: https://api.x.com/2/tweets/counts/recent?query=context%3A65.852262932607926273%20-context%3A66.852262932607926273%20-is%3Aretweet%20has%3Aimages%20lang%3Aja

操作符

操作符类型可用情况描述
关键字独立版核心在 Post 正文中匹配关键词。这是基于分词的匹配,这意味着你的关键词字符串将与 Post 正文的分词文本进行比对。分词会根据标点、符号以及 Unicode 基本平面的分隔字符来拆分单词。例如,文本为“I like coca-cola”的 Post 将被拆分为以下词元:I、like、coca、cola。随后这些词元会与查询中使用的关键词字符串进行比较。要匹配包含标点(例如 coca-cola)、符号或分隔字符的字符串,必须将关键词用双引号括起来。示例:百事 OR 可口可乐 OR "coca cola"
表情符号独立版核心匹配 Post 正文中的表情符号。类似关键字,表情符号按分词方式匹配,也就是说,你的表情符号会与 Post 正文的分词文本进行比对。请注意,如果某个表情符号存在变体,必须将其用双引号括起来后再添加到查询中。示例:(😃 OR 😡) 😬
"精确短语匹配"独立版核心在 Post 的正文中匹配完全相同的短语。示例:("X API" OR #v2) -"recent counts"
#独立版核心匹配任何包含已识别主题标签的 Post(前提是该主题标签在该 Post 中被识别为实体)。此运算符执行精确匹配,而非分词匹配,这意味着该规则#谢谢你将匹配带有精确话题标签 #thanku 的帖子,但不会匹配带有话题标签 #thankunext 的帖子。示例:#thankunext #fanart OR @arianagrande
@独立版核心如果给定的用户名是已识别的实体(包括 @ 字符),则会匹配任何提及该用户名的 Post。示例:(@XDevelopers OR @API) -@X
$独立版高级设置匹配任何包含指定“cashtag”的 Post(其标记的首字符为“”)。请注意,cashtag 运算符依赖于 X 的“symbols”实体抽取来匹配 cashtag,而不是尝试从正文中提取 cashtag。'使用 X 的“symbols”实体抽取来匹配 cashtag,而不是尝试直接从正文中提取 cashtag。示例:`twtr OR @XDevelopers -$fb`
发件人:独立版核心匹配来自特定用户的任意 Post。取值可以是用户名(不含 @ 字符)或该用户的数字 ID。每个 from: 运算符只能传入一个用户名或 IDfrom:运算符。示例:from:XDevelopers OR from:API -from:X
收件人:独立版核心功能匹配任何回复特定用户的 Post。取值可以是用户名(不含 @ 字符)或该用户的数字用户 ID。每个 to: 运算符只能传入一个用户名/ID收件人:运算符。示例:to:XDevelopers OR to:API -to:X
url:独立版核心对任何格式有效的 Post URL 执行分词匹配。该运算符可匹配 urlexpanded_url 字段的内容urlexpanded_urlfields。例如,包含的某条 Post”你可以去看看 X Developer Labs:https://t.co/c0A36SWil4”(短链接会重定向到https://developer.x.com)将同时匹配以下两条规则:from:XDevelopers url:"https://developer.x.com"from:XDevelopers url:"https://t.co". 含有标点或特殊字符的令牌和短语应使用双引号括起来。
retweets_of:独立版核心匹配对指定用户的帖子进行转发(Retweet)的 Post。其取值可以是用户名(不含 @ 字符)或该用户的数值型用户 ID。每个 retweets_of: 运算符只能传递一个用户名/IDretweets_of:运算符。示例:retweets_of:XDevelopers OR retweets_of:API
context:独立版核心将包含特定域 id/实体 id 组合的 Post 进行匹配。每个 context: 运算符只能传入一个域/实体context:运算符。示例:context:domain_id.entity_id。您可以使用 OR 运算符来组合多个域/实体:(context:47.113922 9372198469633 OR context:11.1088514520308342784)
entity:独立版核心匹配具有特定实体字符串值的 Post。你只能传递一个entity:运算符。示例:entity:"实体/地点的字符串声明"。请注意,此功能仅适用于“近期搜索”。
conversation_id:独立版核心匹配共享同一会话 ID 的 Post。会话 ID 被设置为发起该会话的 Post 的 Post ID。随着对某个 Post 的回复不断发布(包括对回复的再次回复),conversation_id会被添加到其 JSON 负载中。每个 conversation_id: 运算符一次只能传递一个会话 IDconversation_id:运算符。示例:conversation_id:1334987486343299072 (from:XDevelopers OR from:API)
list:独立版高级匹配指定列表成员发布的 Post。例如,如果 @XDevelopers 和 @API 是列表 123 的成员,并且你在查询中包含了list:123在你的查询中,响应将只包含由这些账号发布的 Post。你可以使用 List 查询端点来查找 List ID。示例:list:123
place:独立版高级设置匹配带有指定位置或 X place ID 标签的 Post。多词地名(“New York City”“Palo Alto”)应使用引号括起。每个 place: 运算符只能传入一个地点place:operator。注意:请参阅标准 v1.1 的 GET geo/search 端点,了解如何获取 X 地点 id。示例:place:"new york city" OR place:seattle OR place:fd70c22040963ac7
place_country:独立版高级匹配与被标记的地点/位置关联的国家/地区代码等于指定 ISO Alpha-2 字母代码的 Posts。您可以在维基百科上找到有效的 ISO 代码列表。每次请求只能传递一个 ISO 代码place_country:运算符。示例:place_country:US OR place_country:MX OR place_country:CA
point_radius:独立版高级与……进行匹配place.geo.coordinates在存在时匹配 Post 的 place.geo.coordinates 对象;在 X 中,则与地点的地理多边形进行匹配,要求 Place 多边形完全位于定义的区域之内。point_radius:[经度 纬度 半径]. 支持的半径单位为英里(mi)和公里(km)。半径必须小于 25 mi。经度范围为 ±180,纬度范围为 ±90。所有坐标均以十进制度表示。规则参数置于方括号内,使用空格分隔。示例:point_radius:[2.355128 48.861118 16km] OR point_radius:[-41.287336 174.761070 20mi]
bounding_box:独立版高级当存在时,匹配 Post 的 place.geo.coordinates 对象;在 X 中,则匹配地点的地理多边形,且该地点多边形必须完全位于所定义区域之内。bounding_box:[west_long south_lat east_long north_lat]. 边界框的宽度和高度必须小于 25 英里。经度范围为 ±180,纬度范围为 ±90。所有坐标均为十进制度数。规则参数放在方括号内,并以空格分隔。示例:bounding_box:[-105.301758 39.964069 -105.178505 40.09455]
is:retweet必须使用连词核心功能匹配与其他指定规则一致的转帖。此运算符仅查找真正的转帖(例如使用“转帖”按钮生成的内容)。引用转帖不会被此运算符匹配。示例:data @XDevelopers -is:retweet
is:reply需要连词核心功能仅投递与某条规则精确匹配的回复。也可取反,以排除与查询匹配的回复不予投递。注意:该运算符也适用于 filtered stream 端点。与 filtered stream 搭配使用时,该运算符会匹配对原始 Post 的回复、在引用的 Posts 中的回复,以及在转发(Retweets)中的回复。示例:from:XDevelopers is:reply
is:quote必须使用连词核心返回所有“引用 Tweet”(即带评论的 Post)。示例:“sentiment analysis” is:quote
is:verified需要使用连词核心仅返回作者已通过 X 认证的 Post。示例:#nowplaying is:verified
-is :nullcast需要使用连词高级移除仅在 ads.x.com 上为推广而创建且具有"source":"Twitter 广告主版(旧版)""source":"Twitter 广告商版"。此运算符必须加上否定。有关 Nullcasted Post 的更多信息,请参阅我们的“Post 可用性”页面。示例:"mobile games" -is:nullcast
has:hashtags需要使用连词核心匹配至少包含一个话题标签的 Post。示例:from:XDevelopers -has:hashtags
has:cashtags必须使用连词高级匹配包含股票代码符号(以“”开头)的Post。例如,”开头)的 Post。例如,`tag)。示例:#stonks has:cashtags`
has:links需要使用连词核心此运算符会匹配正文中同时包含链接和媒体的 Post。示例:from:XDevelopers announcement has:links
has:mentions需要使用连词核心功能匹配提及其他 X 用户的 Post。示例:#nowplaying has:mentions
has:media必须使用连词核心匹配包含媒体对象(如照片、GIF 或视频)的 Post,由 X 判定。不会匹配使用 Periscope 创建的媒体,或包含指向其他媒体托管站点链接的 Post。示例:(小猫 OR 小狗) has:media
has:images必须使用连词核心匹配包含可识别图片 URL 的 Post。示例:#meme has:images
has:videos必须使用连词核心匹配包含原生 X 视频(直接上传到 X)的 Post。不匹配使用 Periscope 创建的视频,或包含指向其他视频托管网站链接的 Post。示例:#icebucketchallenge has:videos
has:geo需要使用连词高级匹配包含由 X 用户提供的、Post 特定的地理定位数据的 Posts。可以是以 X place 形式提供的位置,包含对应的显示名称、地理多边形及其他字段;或者在少数情况下,是地理经纬度坐标。注意:基于地点(Post 地理)的匹配运算符只会匹配原始 Post。转发不包含任何地点数据。示例:recommend #巴黎 has:geo -bakery
lang:需要使用连词核心匹配已被 X 归类为特定语言的 Post(且仅在该 Post 已完成语言归类时)。请注意,目前每个 Post 只会被归类为一种语言,因此将多个语言条件进行 AND 组合不会得到任何结果。每个lang:运算符。注意:如果无法确定语言分类,返回的结果为“und”(未定义)。示例:recommend #paris lang:en
阿姆哈拉语: am德语: de马拉雅拉姆语: ml斯洛伐克语: sk
阿拉伯语: ar希腊语: el迪维希语(马尔代夫语): dv斯洛文尼亚语: sl
亚美尼亚语: hy古吉拉特语: gu马拉地语: mr索拉尼库尔德语: ckb
巴斯克语: eu海地克里奥尔语: ht尼泊尔语: ne西班牙语: es
孟加拉语: bn希伯来语: iw挪威语: no瑞典语: sv
波斯尼亚语: bs印地语: hi奥里亚语: or他加禄语: tl
保加利亚语: bg拉丁化印地语: hi-Latn旁遮普语: pa泰米尔语: ta
缅甸语: my匈牙利语: hu普什图语: ps泰卢固语: te
克罗地亚语: hr冰岛语: is波斯语: fa泰语: th
加泰罗尼亚语: ca印度尼西亚语: in波兰语: pl藏语: bo
捷克语: cs意大利语: it葡萄牙语: pt繁体中文: zh-TW
丹麦语: da日语: ja罗马尼亚语: ro土耳其语: tr
荷兰语: nl卡纳达语: kn俄语: ru乌克兰语: uk
英语: en高棉语: km塞尔维亚语: sr乌尔都语: ur
爱沙尼亚语: et韩语: ko简体中文: zh-CN维吾尔语: ug
芬兰语: fi老挝语: lo信德语: sd越南语: vi
法语: fr拉脱维亚语: lv僧伽罗语: si威尔士语: cy
格鲁吉亚语: ka立陶宛语: lt