概览
Enterprise
这是仅在我们的托管访问级别中提供的企业版 API。要使用此 API,您必须先与我们的企业销售团队开通账户。 了解更多
Engagement API 提供对 Post 的曝光和互动指标的访问。尽管大多数指标和端点要求您使用 OAuth 1.0a 用户上下文进行认证,您仍可使用 OAuth 2.0 Bearer Token 和 /totals 端点访问公开的“收藏”“转发”“回复”和“视频观看次数”等指标。
注意: 您可能会发现某些 X 网页仪表板上报告的数据与 Engagement API 中的数据存在差异。出现差异的原因是网页仪表板通常只显示在所选时间范围内发生的互动和/或曝光。例如,网页仪表板可能显示某个日历月内的 Post 互动,而 Engagement API 可能显示超出该月份范围但仍在所请求时间范围内的互动。在这些情况下,应以 Engagement API 为准。
请求端点
当前总览:[/totals]
- 请求会返回所需 Post 的展示次数总计和互动次数总计指标
- 仅限以下指标:Impressions、Engagements、Favorites、Replies、Retweets、Quote Tweets 和 Video Views
- 支持使用 OAuth 1.0a 用户上下文,检索在过去 90 天内创建的 Post 的 Impressions 和 Engagements 指标
- 支持使用 OAuth 2.0 Bearer token,检索任何 Post 的 Favorites、Retweets、Quote Tweets、Replies 和 Video Views 指标
- 结果基于请求发起时的当前展示次数和互动次数总计
- 适用于仪表板报表,以及跨多个 @handle 计算互动率
- 支持每次请求最多为 250 个 Post 获取指标
过去 28 小时:[/28hr]
- 请求可返回展示次数的总计指标、互动次数的总计指标,以及过去 28 小时内各类互动指标的明细拆分
- 数据可按 Post ID 分组,并可按时间序列汇总,按天或按小时查看
- 非常适合跟踪新近创建内容的表现
- 支持所有可用指标
- 支持在每次请求中为最多 25 个 Post 获取指标
历史:[/historical]
- 请求可返回展示次数、互动次数,以及过去一年内各项互动指标的细分,基于互动发生时间(而非Post创建时间)。
- 请求支持开始日期和结束日期参数,可灵活限定最长为4周的特定时间范围。
- Post互动data仅可回溯至过去365天。
- 数据可按Post ID分组,或按时间序列汇总,并按天或按小时划分。
- 适用于将近期表现与历史基准对比评估,或构建某个@handle的历史表现概览。
- 支持全部可用指标。
- 支持每次请求最多为25个Post获取指标。
可用指标
| 度量 | 端点可用性 | 需要用户上下文信息 | 描述 |
|---|---|---|---|
| 展示量 | 全部 | 是的 | 该 Post 的浏览次数统计。此指标仅适用于过去 90 天内发布的 Post。 |
| 互动量 | 所有 | 是 | 统计用户与该 Post 的互动次数。此指标仅适用于过去 90 天内发布的 Post。 |
| 收藏 | 全部 | 是 - /28小时&/历史记录 否 - /totals | 该 Post 被收藏的次数计数。 |
| 转推 | 所有 | 是 - /28小时&/历史记录 否 - /totals | 统计该 Post 被转发(Retweet)的次数。 |
| 引述_Tweets | /totals | 否 - /totals | 对带评论的转发(亦称 Quote)的 Post 次数统计。 |
| 回复 | 所有 | 是 - /28小时&/历史 否 - /totals | 该 Post 的回复次数统计。 |
| 视频_展示次数 | 全部 | 是 - /28小时&/历史 否 - /totals | 统计给定 Post 中视频在至少两秒内达到 50% 可见的次数。 视频观看次数仅适用于不超过 1800 天的 Post。若你尝试请求超过 1800 天的 Post 的视频观看次数,响应中将包含以下对象,此外还会另附一个包含你所请求其他指标的单独对象: “不受支持_用于_视频_浏览量_Tweet_ids”: [“Tweet_ID”] **请注意:**您可能会发现,X 自有与运营的平台(移动应用与网站)上显示的“视频观看次数”指标,可能与您通过 /28hr 和 /historical 端点获取的数值不一致。 - X 用户界面中显示的,以及通过 /totals 端点返回的视频观看次数,是将该视频在所有包含该视频的 Posts 中的观看次数进行汇总后展示的。这意味着 UI 中显示的指标包含该视频在被 Retweet 或以单独 Posts 形式被转发/转载时产生的所有观看次数的总和。该指标不包含 gif 的视频观看次数。 - /28hr 和 /historical 端点提供的视频观看次数仅包含你正在拉取指标的那个特定 Post 自身产生的观看次数。该指标不包括 GIF 的视频观看次数。 |
| 媒体_展现次数 | /28小时 /historical | 是的 | 您媒体在视频、GIF 和图片中的所有浏览(自动播放与点击)的总次数。 |
| 媒体_互动量 (原名 Media Clicks) | /28hr /historical | 是 | 对 Post 中媒体(如图片或视频)被点击次数的统计。 |
| url_点击量 | /28hr /historical | 是 | 对 Post 中 URL 被点击次数的计数。 |
| 话题标签_点击量 | /28小时 /历史 | 是的 | 统计该 Post 中某个话题标签被点击的次数。 |
| 详细_扩展 | /28小时 /historical | 是的 | 显示用户为查看更多详细信息而点击该 Post 的次数。 |
| 固定链接_点击量 | /28小时 /historical | 是 | 该 Post 的永久链接(指向此 Post 的独立网页)被点击的次数。 |
| 应用_安装_尝试次数 | /28 小时 /historical | 是的 | 从该 Post 产生的 App 安装事件次数统计 |
| 应用_打开量 | /28小时 /历史数据 | 是 | 从该 Post 产生的 App Open 事件的发生次数统计。 |
| 电子邮箱_Tweet | /28hr /historical | 是 | 该 Post 通过电子邮件被分享的次数。 |
| 用户_关注者 | /28hr /historical | 是 | 从此 Post 触发对该用户(Post 作者)发起关注的次数统计。 |
| 用户_个人资料_点击量 | /28hr /historical | 是的 | 统计从此 Post 点击进入该用户(Post 作者)个人资料的次数。 |
互动分组
- tweet.id
- engagement.type
/28hr 和 /historical 可提供时间序列指标,因此支持:
- engagement.day
- engagement.hour
使用指南
开发者快速入门指南
简介
Engagement API 提供什么功能?
- Engagement API 可为任何 X 账号在过去 90 天内发布的自有 Posts 提供展示与互动数据,前提是该账号已授权你的应用使用 三方 OAuth 代表其请求相关指标。这个功能强大且易于集成的解决方案,可立即获取展示量以及更深层的互动数据,如 URL 点击、#hashtag 点击等。
- Engagement API 为任何 Post 提供点赞、转发(Retweets)、引用转发(Quote Tweets)、回复和视频观看次数等的汇总总量指标。这可作为获取任意单条或多条 Posts 基础互动数据的有力方式。
- Engagement API 通过提供 15+ 项性能指标,帮助客户有效衡量内容表现,从而为社媒聆听、营销和发布平台创造新价值,并量化在 X 上的投资回报(ROI)。
- Engagement API 是一种请求/响应式 API,允许应用开发者发送包含 Post id、所需指标和时间范围的请求,API 会即时返回数据。
为何集成?示例用例
- 了解你内容的整体覆盖,看看有多少人看到。查看有多少人观看视频、点击链接、点击话题标签,或安装我的应用。
- 生成总体与时间序列的互动指标。
- 了解任意公开 Post 的基础互动指标(点赞、Retweet、Quote Tweets、回复)。
- 利用这些指标判断哪些类型的 Posts 表现更好,从而更高频地发布此类内容,为我的内容获得更多曝光和互动。
- 自动化营销行为(例如,当我的某条 Post 达到 100 次点赞或其他阈值时,从另一个自有账号 Retweet 该内容)。
- 将我的活动相互对标与比较,用于 A/B 测试。
- 分析哪些类型的内容能与我的客服团队的目标产生共鸣,以决定如何以及何时回应。
- 展示在我的平台发布的内容的分析数据。
集成 Engagement API
API 简介
- Post ID 数组。
- 指定所需指标类型的数组。类型包括 “impressions”、“retweets”、“hashtag_clicks” 和 “user_follows” 等。
- 互动分组,这是一个 JSON 结构,用于指示你希望在 API 响应中如何组织互动数据。
- Totals - 提供 Posts 的互动总数。部分指标适用于所有 Posts,而另一些仅适用于过去 90 天。
- 28 hour - 提供过去 28 小时的时间序列互动指标。
- Historical - 为自 2014 年 9 月 1 日以来发布的 Posts 提供最长连续四周的时间序列互动指标。
获取 API 访问权限
发起请求
1/ 今天我们分享对 X API 平台未来的愿景!https://t.co/XweGngmxlP— Twitter Dev (@TwitterDev) 2017 年 4 月 6 日
不要错过那些讨论你 Post 的 Posts。第一步是用 JSON 构造 API 请求,其中包括:一个数组放置这两个 Post 的 id,一个包含所需互动类型的数组,以及一个自定义命名的“groupings” JSON 对象,用于指示我们希望在响应中如何组织这些指标。我们的请求如下所示:现在在 iOS 上,你可以在同一位置查看带评论的转发。pic.x.com/oanjZfzC6y — X (@X) 2020 年 5 月 12 日
- Content-Type: application/json
- Accept-Encoding: gzip
使用 OAuth 进行认证
选择 Engagement API 端点
- Totals - 提供“自有”(owned) 或“非自有”(unowned) Post 的部分指标总计汇总。部分指标适用于所有 Post,另一些仅适用于过去 90 天内发布的 Post。每个请求最多支持 250 个 Post。
- 28 hour - 提供过去 28 小时内“自有”Post 的时间序列参与度指标。每个请求最多支持 25 个 Post。
- Historical - 提供自 2014 年 9 月 1 日起发布的“自有”Post,最长连续四周的时间序列参与度指标。每个请求最多支持 25 个 Post。
关键概念
展现次数与互动指标
自有与非自有的 X 内容
总量与时间序列参与度数据
端点与示例用例
/totals
- 我只需要访问部分指标类型(Impressions、Engagements、Favorites、Retweets、Quote Tweets、Replies 和 Video Views)。
- 我需要获取任意 Post 的基础互动数据,而不仅限于自有 Posts。
- 我想将我们的表现与竞争对手进行对比。
- 我想跟踪某个话题标签或营销活动(包含我不拥有的 Posts)的基础互动统计。
- 我不需要按天或按小时拆分的数据,只需要在发起请求时的当前总量。
- 我需要在报告或仪表板中展示单一指标,并且不想存储任何数据。
- 我想在页面加载时展示数据,只需发起请求并接收响应。
- 我需要每天获取数十万甚至数百万条 Posts 的数据访问能力。
/28hr
- 我需要访问全部 17 类指标。
- 我想展示过去 28 小时内最新发布的 Post 的数据。
- 我有一个每天运行一次的任务来获取所需数据,只需要获取最近一天的数据。
- 我需要按天或按小时细分指标。
- 我想在仪表板中按小时展示活动的时间序列细分。
- 我需要对每天数十万条 Post 提供高吞吐访问。
- 我具备存储能力,可以每天刷新一次数据并持续累计。
/historical
- 我需要访问全部 17 种指标类型。
- 我需要获取可追溯至 2014 年 9 月创建的 Post 的历史数据。
- 我想展示用于对比各个广告活动的详细历史分析。
- 我需要将指标按天或按小时拆分。
- 我不需要对 Engagement API 的高访问级别,每天只需为几百到上千个 Post 获取数据。
Engagement API 关键特性
- RESTful API 提供 JSON 数据,支持带有 JSON 请求体的 POST 请求。
- 请求类型: 客户端应用可发起以下类型的请求:
- 总互动量 — 向 /totals 端点发起 HTTP POST 请求
- 过去 28 小时互动量 — 向 /28hr 端点发起 HTTP POST 请求
- 历史互动量 — 向 /historical 端点发起 HTTP POST 请求
- OAuth 认证:
- OAuth 1.0 用户上下文:当某位用户通过 三方(3-legged)OAuth 授权你的应用后,该用户所拥有的 Posts 的所有可用指标均可获取。发起请求时必须使用该用户的访问令牌(Access Tokens)。
- OAuth 2.0 Bearer Token:部分指标(转发 Retweets、引用推文 Quote Tweets、回复 Replies、收藏 Favorites 和视频观看 Video Views)适用于任何公开的 Post。
- 请求元数据与结构:请求体为一个 JSON 对象,由 Post ID 数组、互动类型数组以及互动分组结构组成。
- 每次请求的 Posts 数量:
- /totals 端点:250 个 Post ID
- /28hr 端点:25 个 Post ID
- /historical 端点:25 个 Post ID
- 互动指标可用性:
- /totals — 自 Post 发布起的累计指标。Impressions 和 Engagements 适用于过去 90 天内发布的 Posts,而 Retweets、Quote Tweets、Replies、Favorites 和 Video Views 适用于所有 Posts。
- /28hr — 自请求时间起的最近 28 小时。
- /historical — 自 2014 年 9 月 1 日起任意连续 28 天的区间。
- 指标类型:每个请求包含一个 Metric Types 数组。其可用性取决于端点;如果请求 /totals 端点,还取决于 Posts 是否获得用户授权。
- /totals 端点:
- 所有 Posts:Favorites、Retweets、Quote Tweets、Replies 和 Video Views
- 需要 OAuth 1.0a 用户上下文:Impressions、Engagements、Favorites、Replies 和 Retweets
- /28hr 和 /historical 端点(需要使用 Post 所有者访问令牌的 OAuth 1.0a 用户上下文):Impressions、Engagements、Favorites、Replies、Retweets、URL Clicks、Hashtag Clicks、Detail Click、Permalink Clicks、Media Clicks、App Install Attempts、App Opens、Post Emails、Video Views 和 Media Views
- /totals 端点:
- 互动分组: 每个请求包含一个 Engagement Groupings 数组。通过这些分组,你可以自定义返回指标的组织方式。每个请求最多可包含三个分组。指标可按以下维度组织:
- 所有端点:Post ID、Engagement Type
- /28hr 和 /historical 端点:如指定以下额外分组,将提供时间序列:Engagement Day、Engagement Hour
- 集成要求: 你的团队将负责以下事项。
- 创建并维护一个客户端应用,能够向 Engagement API 发送 HTTP 请求,并返回请求中包含的 Post ID 的互动指标。
- 限制
- 仅对发布时间不超过 1800 天的 Posts 提供视频观看次数。
使用 Engagement API 进行认证
请注意: 在你开始使用该 API 之前,X 需要为你的开发者应用启用对 Engagement API 的访问。为此,请务必将你计划用于认证的应用 ID 提供给你的客户经理或技术支持团队。Engagement API 提供两种认证方式:OAuth 1.0a 和 OAuth 2.0 Bearer Token。 OAuth 2.0 Bearer Token(也称“application-only”)允许访问公开可用的互动指标。在向 /totals endpoint 发起请求时,可用于获取任何公开可见的 Post 的 Favorites(即 Likes)、Retweets、Quote Tweets、Replies,以及视频观看次数的总量。 OAuth 1.0a(也称“user context”)允许你代表某位用户发起请求,并访问该用户的私有互动指标。 此认证方式在以下情况下必需:
- 发送到 /28hr endpoint 和 /historical endpoint 的所有请求
- 访问以下任一私有指标:Impressions、Engagements、Media Views、Media Engagements、URL Clicks、Hashtag Clicks、Detail Expands、Permalink Clicks、App Install Attempts、App Opens、Email Post、User Follows、User Profile Clicks
403 Forbidden 错误。
即使你代表这些 Post 的所有者进行认证,Engagement API 也不允许你获取受保护的 Posts 的互动数据。尝试这样做将返回 400 Bad Request 错误,错误信息为 "Tweet ID(s) are unavailable"。
如果你代表自己的 X 账号(即拥有该开发者应用的账号)发送请求,你可以直接在开发者门户中该开发者应用的“Keys and tokens”选项卡下生成所需的访问令牌。
如果你代表其他用户发送请求,你需要使用三方(3-legged)OAuth 流程来获取所需的访问令牌。更多信息请参阅以下文档:OAuth 1.0a: how to obtain a user’s access tokens。
如需更多示例(包括如何使用 OAuth 1.0a 进行认证),请查看 X Developers 的 Engagement API Python 示例代码。
Engagement API 的最新变更
| 指标 | 变更 |
| engagements | 我们更新了计入总体 engagements 的子指标,使其与 Post 分析仪表板保持一致。Engagements 衡量“用户与该 Post 互动的次数”。 对于包含视频或 GIF 等媒体的 Posts,engagements 指标将不再包含媒体观看数。媒体观看数现可通过新指标 media_views 获取。 |
| media_clicks* | 此指标已由名为“media_engagements”的新指标取代。 |
| video_views | 自 2018 年 7 月 6 日起,此指标可通过 /totals 端点用于“非自有”Posts。这意味着你可通过仅使用应用级认证访问获取所有 Posts 的视频观看数。 你只能请求距今不超过 1800 天的视频观看数。若尝试请求超过 1800 天的 Post 的视频观看数,你将收到以下内容: “unsupported_for_video_views_tweet_ids”: [“TWEET_ID”] 请注意,该指标与 media_views 不同,video_views 依据 MRC 标准:至少有 50% 的视频在视窗内持续两秒。 **另外,请注意,你可能会看到 X 自有平台(移动 App 与网站)中显示的视频观看数,与通过 /28hr 和 /historical 端点获得的数值存在差异。 X 用户界面中显示并通过 /totals 端点提供的视频观看数,将聚合某个视频在其被发布到的所有 Posts 中产生的观看总数。也就是说,UI 中的指标包含该视频在被转发(Retweet)或在不同 Posts 中重新发布时的合并观看数。 /28hr 与 /historical 端点提供的视频观看数,仅包含你为之拉取指标的特定 Post 所产生的观看数。 |
| media_views | 包含你媒体(视频、vines、gifs 与图片)的所有观看(自动播放与点击)。 请注意,含图片的 Posts 在分析仪表板中不显示 media_views 指标,但在 Engagement API 中会返回。 |
| media_engagements* | 包含你媒体(视频、vines、gifs 与图片)的点击次数。该指标取代 media_clicks。 |
| quote_tweets | 自 2020 年 7 月 7 日起,此指标可通过 /totals 端点用于“非自有”Posts。这意味着你可通过仅使用应用级认证访问获取所有 Posts 的引用 Post 计数。 |
解读指标
展示量与互动数据
视频指标
- /totals 端点和 X 用户界面提供的视频观看量,会显示某个视频在所有包含该视频的 Posts 中的汇总观看量。这意味着,通过 /totals 提供并在 X UI 中显示的指标,包含该视频在被 Retweet 或在其他 Post 中转发时的合并观看量。
- /28hour 和 /historical Engagement API 端点提供的视频观看量,仅包含由您拉取指标的特定 Post 所产生的观看量。
Engagement API 分组
- tweet.id
- engagement.type
/28hr 和 /historical 可提供时间序列指标,因此支持:
- engagement.day
- engagement.hour
group_by 值的顺序来改变期望的结果格式。包含四个 group_by 值的分组仅支持以下两种格式之一:
常见问题
企业版
Engagement API
如何访问 Engagement API?
如何访问 Engagement API?
通过企业版订阅可获得对 Engagement API 的访问权限。请填写此表单以联系销售团队。
系统如何按“@handle”跟踪我的使用情况?
系统如何按“@handle”跟踪我的使用情况?
如果你的合同对可与 Engagement API 搭配使用的唯一 handle 数量设有限制,X 的内部系统将跟踪使用 Engagement API 查询到的、其所发 Post 被检索的已认证用户数量。客户也应在客户端自行记录这一唯一数量。目前没有用于查看 Engagement API 的 @handle 使用情况的用量 API 或 UI。如果请求的 @handle 数量超过合同约定,系统不会拦截超量。在结算月结束时,查询到的唯一 @handle 数量将与合同约定的数量进行比对,并按合同条款收取超额费用。
我可以查看 Engagement API 的 @handle 使用量吗?
我可以查看 Engagement API 的 @handle 使用量吗?
目前没有用于查看 Engagement API 的 @handle 使用情况的用量 API 或 UI。如果请求的 @handle 数量超过合同约定,系统不会拦截超量。在结算月结束时,查询到的唯一 @handle 数量将与合同约定的数量进行比对,并按合同条款收取超额费用。返回负载中的
engagements 元数据字段不等于各类互动指标总和。为什么会这样?这是预期行为。engagements 元数据字段可能并不总是与 API 返回的各项互动指标之和相匹配,因为它可能包含在负载中未单独拆分为具体指标的其他互动。换句话说,把各种互动指标的总数相加,可能与负载中 engagements 指标字段的数值不一致。你可以将 engagements 元数据字段理解为对该 Post 的任何点击或交互。
当 Post 实际没有 URL 时,负载响应中的 url_clicks 字段却返回了一个数值。这怎么可能?这可能是因为包含某些内容(例如会生成到其他页面链接的标签)的 Post,被用户点击后也会计为一次 URL 点击。
为什么我无法获取某个特定 Post 的互动数据?
为什么我无法获取某个特定 Post 的互动数据?
你可能无法检索某个特定 Post 的互动数据,原因包括:
- 你请求的 Post ID(或多个 ID)在你代表第三方检索数据所使用的认证令牌下不可用。
- 你为 /totals 端点请求的 Post ID(或多个 ID)早于 90 天,因此无法返回展示或互动指标。
- 你请求的 Post ID(或多个 ID)已不可用,通常表示它们已被删除或因其他原因不再公开可见。
如何在使用 Engagement API 时处理速率限制?
如何在使用 Engagement API 时处理速率限制?
在对 Engagement API 发起请求时,你可以使用响应头返回的
x-per-minute-limit 和 x-per-minute-remaining 信息来监控用量。x-per-minute-limit 表示你的配额,x-per-minute-remaining 表示你剩余的调用次数。错误排查指南
我在进行认证时遇到问题
我在进行认证时遇到问题
请务必查看我们关于使用 Engagement API 进行认证的指南。
我已提供正确的 consumer key 和 secret,以及 access token 和 access token secret,但仍返回以下错误。我该怎么办?
我已提供正确的 consumer key 和 secret,以及 access token 和 access token secret,但仍返回以下错误。我该怎么办?
仍然找不到您需要的内容?
我有一个尚未得到解答的问题
我有一个尚未得到解答的问题
请联系技术支持,我们会尽快回复您。
API 参考文档
POST insights/engagement
方法
| 方法 | 说明 |
|---|---|
| POST /insights/engagement/totals | 获取一组 Tweet 的总曝光量和互动量。 |
| POST /insights/engagement/historical | 获取一组 Tweet 在最长 4 周的时间范围内(可回溯至 2014 年 9 月 1 日)的曝光量和互动量。 |
| POST /insights/engagement/28hr | 获取过去 28 小时内一组 Tweet 的曝光量和互动量。 |
认证
- 任何对 /totals 的请求,用于获取 Impressions 和 Engagements 指标类型(仅限于自有 Tweets)
- 任何对 /28hr 的请求
- 任何对 /historical 的请求
- 任何对 /totals 的请求,用于获取 Favorites、Replies、Retweets 或 Video Views 指标类型,这些可针对任何 Tweet 检索
POST /insights/engagement/totals
| 请求方式 | HTTP POST |
| URL(链接) | https://data-api.x.com/insights/engagement/totals |
| 内容类型 | application/json |
| 压缩 | Gzip。要使用 Gzip 压缩发起请求,请在连接请求中包含 Accept-Encoding 标头。 标题应如下所示: Accept-Encoding: gzip |
| Post 格式 | 请求可以作为 POST 请求发送,请求体为一个 JSON 对象,包含一组 Tweet ID 和所需的分组方式。该 POST 的格式为一个数组,包含tweets,互动,和groupings对象。每个请求最多可包含 250 个 Tweet id。示例 POST 请求体如下: { “Tweet_ids”: [ “Tweet ID 1”, “Tweet ID 2”, “Tweet ID 3” ], “互动_类型”: [ “曝光量”, “互动量”, “收藏”, “引述_推文” ], “分组”:{ “分组名”:{ “组_作者:”: [ “tweet.id”, “engagement.type” ] } } } |
| Tweet IDs | 一个数组,包含需查询互动数据的 Tweet ID。请注意,您只能请求由进行身份验证的 @handle 创建的 Tweets 的数据。每个请求最多可包含 250 条 Tweet,且 Tweet ID 必须以字符串表示。 |
| 互动类型 | 一个数组,includes 要查询的互动指标类型。Totals 端点仅支持以下互动类型:展示次数,互动,favorites,转发数,quote_tweets,回复,video_views。The /totals该端点支持检索功能展示和互动针对在过去 90 天内创建的 Tweet,且favorites,转发,quote_tweets,replies,及video_views适用于任意 Tweet。 |
| 分组 | Engagement API 的结果可按不同分组返回,以更好地满足您的需求。每个请求最多可包含 3 个分组。 对于每个分组,您可以自定义一个分组名称,便于在应用中引用该分组类型。 定义分组名称后,您可以选择按 tweet.id和/或engagement.type.分组会按序依次生效,因此你可以通过调整分组的顺序来改变所需的结果格式_按 values。如下示例分组会将指标按 Tweet ID 与指标类型分别展示: “分组”:{ “我的分组名称”:{ “组_由”: [ “Tweet.id”, “engagement.type” ] } } |
| POST 尺寸限制 | 每个请求最多可包含 250 个 Tweet ID。 |
| 响应格式 | JSON。您的请求头应指定响应采用 JSON 格式。 |
| 请求速率限制 | 系统将按分钟对你进行速率限制,具体额度依据你的访问级别,以合同约定为准。 |
| 示例请求(公共指标) | curl —request POST —urlhttps://data-api.x.com/insights/engagement/totals —header’accept-encoding: gzip’ —header’authorization: Bearer’ —header’content-type: application/json’ —data’{ “Tweet_ids”: [ “1070059276213702656”,“1021817816134156288”,“1067094924124872705” ], “互动_类型”: [ “收藏夹”,“转推”,“回复”,“引文_Tweets”,“视频_浏览量” ], “分组”:{ “perTweetMetricsUnowned”:{ “组_作者”: [ “Tweet.id”, “engagement.type” ] } } } —verbose —compressed |
| 示例请求 | curl —request POST —urlhttps://data-api.x.com/insights/engagement/totals —header’accept-encoding: gzip’ —header’authorization: OAuth 授权_使用方_key=“应用的 consumer key”,oauth_nonce=“生成的随机数(nonce)“,oauth_signature=“已生成的签名”,oauth_签名_method=“HMAC-SHA1”,OAuth_timestamp=“生成时间戳”,oauth_token=“已授权用户的访问令牌”, OAuth_version=“1.0”’ —header’content-type: application/json’ —data’{ “Tweet_ids”: [ “1060976163948904448”,“1045709644067471360” ], “互动_类型”: [ “收藏”,“回复”,“转推”,“视频_浏览量”,“曝光量”,“互动量” ], “分组”:{ “perTweetMetricsOwned”:{ “组_作者:”: [ “tweet.id”, “engagement.type” ] } } }’ —verbose —compressed |
| 示例响应(公开度量) | { “每条Tweet指标(非所属)”:{ “1021817816134156288”:{ “收藏”:“530”, “引述_Tweet”:“79”, “回复”:“147”, “转推数”:“323”, “视频_展示次数”:“0” }, “1067094924124872705”:{ “收藏”:“1360”, “引述_推文”:“29”, “回复”:“56”, “转推”:“178”, “视频_浏览量”:“5754512” }, “1070059276213702656”:{ “收藏”:“69”, “引述_Tweet”:“5”, “回复”:“7”, “转推”:“26”, “视频_浏览量”:“0” } } } |
| 示例回复 | { “perTweetMetricsOwned”:{ “1045709644067471360”:{ “互动量”:“2”, “收藏”:“0”, “展示量”:“47”, “回复”:“0”, “转推”:“8”, “引述_Tweets”:“5”, “视频_查看量”:“0” }, “1060976163948904448”:{ “互动量”:“4”, “收藏”:“0”, “曝光量”:“148”, “回复”:“1”, “转推”:“9”, “引述_Tweet”:“2”, “视频_浏览量”:“0” } } } |
| 不可用的 Tweet id | 对于包含已不可用的 Tweet ID(例如已删除)的查询,系统会为所有可用的 Tweet ID 返回相应的 data,而不可用的 Tweet ID 将会在名为unavailable_tweet_ids。例如:{ “开始”:“2015-11-17T22:00:00Z”, “结束”:“2015-11-19T02:00:00Z”, “不可用_Tweet_ids”: [ “323456789” ], “group1”:{ “423456789”:{ “收藏”:“67”, “回复”:“8”, “转推数”:“26”, “引文_Tweet”:“2” } } } |
POST /insights/engagement/28hr
| 请求方式 | HTTP POST |
| URL | https://data-api.x.com/insights/engagement/28hr |
| 内容类型 | application/json |
| 压缩 | Gzip。要使用 Gzip 压缩发起请求,请在连接请求中发送 Accept-Encoding 标头。 标题应如下所示: Accept-Encoding: gzip |
| Post 格式 | 可以将请求以 POST 方式发送,其中请求体为一个 JSON 对象,包含一组 Tweet ID 以及期望的分组方式。POST 的格式为一个数组,包含tweets,互动,以及groupingsobject。每个请求最多可包含 25 个 Tweet ID。示例 POST 请求的请求体如下: { “Tweet_ids”: [ “Tweet id 1”, “Tweet ID 2”, “Tweet id 3” ], “互动度_类型”: [ “展示量”, “互动量”, “URL_点击量”, “详情_扩展” ], “分组”:{ “分组名称”:{ “组_作者”: [ “tweet.id”, “engagement.type”, “参与.小时” ] } } } |
| Tweet ID(复数) | 一个数组,包含要查询互动数据的 Tweet 的 Tweet ID。请注意,您只能请求由进行身份验证的 @handle 创建的 Tweet 的数据。28 小时的端点每次请求最多支持 25 条 Tweet,且 Tweet ID 必须以字符串形式表示。 |
| 互动类型 | 要查询的互动指标类型数组。 对于 28 小时的端点, 展示次数,互动,以及所有单独的互动类型均为受支持的指标。有关受支持的互动指标的完整列表,请参见互动指标。 |
| 分组 | Engagement API 的结果可按不同分组返回,以更好地满足你的需求。每个请求最多可包含 3 个分组。 对于每个分组,您可以自定义分组名称,便于在您的应用中引用此分组类型。定义分组名称后,您可以选择按以下一个或多个值进行分组: tweet.id engagement.type engagement.day engagement.hour 分组按顺序生效,因此你可以通过调整分组顺序来更改期望的结果格式_按值。以下是一个示例分组,显示按 Tweet ID、指标类型分隔的各项指标,如下所示: “分组”:{ “我的分组名”:{ “组_作者”: [ “tweet.id”, “engagement.type”, “engagement.day” ] } } 包含 4 个的分组 group_by仅当按以下两种顺序之一排列时,items 才有效。包含 4group_by在单个分组中,凡不属于下列任一项的条目都会导致错误。此外,仅允许存在一个包含 4 个 group_by 条目的分组。group_by每个请求允许的项目数量上限为 items。“群组_由”: [ “tweet.id”, “engagement.type”, “engagement.day”, “engagement.hour” ] “组_由”: [ “engagement.type”, “tweet.id”, “engagement.day”, “参与度.小时” ] |
| POST 请求大小限制 | 每次请求最多可包含 25 个 Tweet ID。 |
| 响应格式 | JSON。您的请求头应指定响应的 JSON 格式。 |
| 速率上限 | 根据你的访问级别,系统将按分钟进行速率限制,具体以你的合同约定为准。 |
| 请求示例 | curl -X POST”https://data-api.x.com/insights/engagement/28hr” -H’Accept-Encoding: gzip’ -H’授权 OAuth oauth_使用方_key=“应用的 consumer key”,oauth_随机值=“生成的随机数值”,oauth_signature=“生成签名”,oauth_签名_method=“HMAC-SHA1”, OAuth_timestamp=“生成时间戳”,oauth_token=“authed-用户访问令牌”,OAuth_version=“1.0”’ -d’{ “Tweet_ids”: [ “123456789” ], “互动_类型”: [ “曝光量”, “互动量” ], “分组”:{ “每小时时间序列”:{ “群组_作者”: [ “tweet.id”, “engagement.type”, “engagement.day”, “engagement.hour” ] } } }‘ |
| 示例回复 | { “开始”:“2015-09-14T17:00:00Z”, “结束”:“2015-09-15T22:00:00Z”, “每小时时间序列”:{ “123456789”:{ “曝光次数”:{ “2015 年 09 月 14 日”:{ “17”:“551”, “18”:“412”, “19”:“371”, “20”:“280”, “21”:“100”, “22”:“19”, “23”:“6” }, “2015年9月15日”:{ “00”:“5”, “01”:“2”, “02”:“7”, “03”:“3”, “04”:“1”, “05”:“0”, “06”:“0”, “07”:“0”, “08”:“0”, “09”:“0”, “10”:“0”, “11”:“0”, “12”:“0”, “13”:“0”, “14”:“0”, “15”:“0”, “16”:“0”, “17”:“0”, “18”:“0”, “19”:“0”, “20”:“0”, “21”:“0” } }, “互动量”:{ “2015年9月14日”:{ “17”:“0”, “18”:“0”, “19”:“0”, “20”:“0”, “21”:“0”, “22”:“0”, “23”:“0” }, “2015-09-15”:{ “00”:“0”, “01”:“0”, “02”:“0”, “03”:“0”, “04”:“0”, “05”:“0”, “06”:“0”, “07”:“0”, “08”:“0”, “09”:“0”, “10”:“0”, “11”:“0”, “12”:“0”, “13”:“0”, “14”:“0”, “15”:“0”, “16”:“0”, “17”:“0”, “18”:“0”, “19”:“0”, “20”:“0”, “21”:“0” } } } } } |
| 不可用的 Tweet id | 对于包含已不可用的 Tweet ID(例如已删除)的查询,系统会为所有可用的 Tweet ID 返回相应的 data;而不可用的 Tweet ID 将在名为 unavailable_tweet_ids 的数组中列出unavailable_tweet_ids。例如:{ “开始”:“2015-11-17T22:00:00Z”, “结束”:“2015-11-19T02:00:00Z”, “不可用_Tweet_id 列表”: [ “323456789” ], “group1”:{ “423456789”:{ “收藏”:“67”, “回复”:“8”, “转推”:26 } } } |
POST /insights/engagement/historical
| 请求方法 | HTTP POST |
| URL | https://data-api.x.com/insights/engagement/historical |
| 内容类型 | application/json |
| 压缩 | Gzip。若要使用 Gzip 压缩发起请求,请在连接请求中发送 Accept-Encoding 头。 标题应如下所示: Accept-Encoding: gzip |
| Post 格式 | 请求可以通过 POST 请求发送,其中请求体为一个 JSON 对象,包含一组 Tweet ID 以及期望的分组方式。该 POST 的格式为一个数组,包含tweets,互动数据,和groupings对象。每个请求最多可包含 25 个 Tweet ID。每个请求都可以指定自定义的开始和结束日期,时间跨度最长为四周。{ “Tweet_ids”: [ “Tweet id 1”, “Tweet ID 2”, “Tweet ID 3” ], “互动度_类型”: [ “展示量”, “互动量”, “URL_点击数”, “详细信息_扩展” ], “分组”:{ “分组名”:{ “组_作者:”:[ “tweet.id”, “engagement.type”, “engagement.hour” ] } } } |
| 开始日期和结束日期 | 可以通过 … 指定自定义的开始和结束日期start和end作为请求的一部分,您必须指定 start 和 end 值,且时间范围不得超过 4 周。目前可用的最早开始日期为 2014 年 9 月 1 日。不支持将结束日期设置为未来时间。如果未提供开始和结束日期,API 将默认采用紧接当前之前的 4 周。Engagement API 可返回的最小粒度为按小时。对于任一 Start 或 End 值未恰好落在整点边界的请求,将默认对齐到最近的包含性整点。例如,一个请求”开始”:“2015-07-01T12:24:00Z”和”结束”:“2015-07-10T08:37:00Z”将默认为”开始”:“2015-07-01T12:00:00Z”,“结束”:“2015-07-10T09:00:00Z”。 |
| Tweet ID | 一个数组,包含要查询互动数据的 Tweet 的 ID。请注意,您只能请求由进行身份验证的 @handle 所创建的 Tweet 的数据。4 周历史端点每次请求最多支持 25 条 Tweet,且 Tweet ID 必须以字符串形式表示。 |
| 互动类型 | 一个数组,包含要查询的互动指标类型。 对于 4 周历史数据端点, 展示次数,互动,并且所有单项互动类型均为受支持的指标。有关受支持的互动指标的完整列表,请参见互动指标数据。**注意:**目前,对于在 2015 年 9 月 15 日之前发起的查询,有三项指标会显示为零: 收藏,replies,和转发数。 |
| 分组方式 | Engagement API 的结果可按不同分组返回,以更好满足你的需求。每个请求最多可包含 3 个分组。 对于每个分组,您可以定义自定义的分组名称,便于在您的应用中引用该分组类型。定义分组名称后,您可以选择按以下一个或多个值进行分组: tweet.id engagement.type engagement.day engagement.hour 分组按顺序依次生效,因此你可以通过调整分组顺序来改变所需的结果格式_按值分组。以下示例将按 Tweet ID、指标类型等对指标进行分别展示,格式如下: “分组”:{ “我的分组合名称”:{ “群组_作者”: [ “Tweet.id”, “engagement.type”, “engagement.day” ] } } 包含 4 个的分组 group_by仅当按以下两种顺序之一排列时,items 才有效。包含 4group_by在单个分组中,凡是不符合以下任一条件的项都会返回错误。此外,仅允许存在一个包含 4 个group_by每个请求允许的项目数量。“组_由”: [ “tweet.id”, “engagement.type”, “engagement.day”, “engagement.hour” ] “组_作者”: [ “engagement.type”, “tweet.id”, “engagement.day”, “engagement.hour” ] |
| POST 请求大小上限 | 每次请求最多可包含 25 个 Tweet id。 |
| 响应格式 | JSON。您的请求头应指定响应采用 JSON 格式。 |
| 请求速率限制 | 根据您的访问级别,您将按合同规定受到按分钟计的限流。 |
| 示例请求 | curl -X POST”https://data-api.x.com/insights/engagement/historical” -H’Accept-Encoding: gzip’ -H’授权 OAuth oauth_使用方_key=“应用的consumer key”,oauth_nonce=“生成的随机数值”,oauth_signature=“生成的签名”,OAuth_签名_method=“HMAC-SHA1”,OAuth_timestamp=“生成时间戳”,oauth_token=“已认证用户访问令牌”,OAuth_version=“1.0”’ -d’{ “开始”:“2015年8月1日”, “结束”:“2015-08-15”, “Tweet_ids”: [ “123456789”, “223456789”, “323456789” ], “互动_类型”: [ “曝光量”, “互动”, “URL_点击量”, “详细信息_展开” ], “分组”:{ “types-by-tweet-id”:{ “组_按”: [ “tweet.id”, “engagement.type” ] } } }‘ |
| 示例回复 | { “开始”:“2015-08-01T00:00:00Z”, “结束”:“2015-08-15T00:00:00Z”, “按Tweet id分类的类型”:{ “123456789”:{ “展示次数”:“0”, “互动量”:“0”, “URL_点击次数”:“0”, “详情_扩展”:“0” }, “223456789”:{ “展示量”:“788”, “互动指标”:“134”, “URL_点击次数”:“30”, “详情_扩展”:“1323” }, “323456789”:{ “曝光量”:“4”, “参与度”:“0”, “URL_点击量”:“2”, “详细信息_扩展”:“0” } } } |
| 不可用的 Tweet id | 对于包含已不可用的 Tweet ID(例如已被删除)的查询,系统会为所有可用的 Tweet ID 返回相应的 data,而不可用的 Tweet ID 则会在名为 unavailable_tweet_ids 的数组中列出。unavailable_tweet_ids。例如:{ “开始”:“2015-11-17T22:00:00Z”, “结束”:“2015-11-19T02:27:50Z”, “无法使用_Tweet_ids”: [ “323456789” ], “group1”:{ “423456789”:{ “收藏”:“67”, “回复”:“8”, “转推数”:26 } } } |
响应代码
| 状态 | 文本 | 说明 |
|---|---|---|
| 200 | OK | 请求成功。 |
| 400 | Bad Request | 通常是由于请求中包含无效的 JSON,或未发送任何 JSON 负载所致。 |
| 401 | Unauthorized | 由于凭据无效导致 HTTP 认证失败。请检查你的 OAuth 密钥和令牌。 |
| 404 | Not Found | 在请求所指向的 URL 处未找到资源,可能是因为使用了错误的 URL。 |
| 429 | Too Many Requests | 你的应用已超出 API 请求配额。 |
| 500 | Internal Server Error | Gnip 端发生错误。请使用指数退避策略重试请求。 |
| 502 | Proxy Error | Gnip 端发生错误。请使用指数退避策略重试请求。 |
| 503 | Service Unavailable | Gnip 端发生错误。请使用指数退避策略重试请求。 |
错误消息
| 错误消息 | 说明 |
|---|---|
"errors":["Your account could not be authenticated. Reason: Access token not found"] | 请求的认证组件出现错误。“Reason”应提供有助于排查的问题线索。如果仍无法解决,请将包含“Reason”的完整错误信息发送至我们的支持团队。 |
"errors":["1 Tweet ID(s) are unavailable"],"unavailable_tweet_ids": ["TWEET_IDS"] | 您请求的一个或多个 Tweet ID 已不可用,通常表示它们已被删除或因其他原因不再公开可见。 |
"errors":["Impressions & engagements for tweets older than 90 days (*TIME_PERIOD*) are not supported"],"unsupported_for_impressions_engagements_tweet_ids":[*TWEET_IDS*] | 您在 /totals 端点请求的一个或多个 Tweet ID 超过 90 天,因此无法返回 impressions 或 engagements 指标。 |
"errors":["Forbidden to access tweets: *TWEET_IDS*"] | 使用当前认证令牌在代表第三方检索数据时,您请求的一个或多个 Tweet ID 无权访问。 |