请查看我们的对照指南:
X API:企业版数据字典
介绍
Enterprise
Post 是 X 上一切内容的基本原子单元。所有返回 Post 的 X API 都以 JavaScript 对象表示法(JSON)对返回的 data 进行编码。JSON 基于键值对,由具名属性及其对应的值组成。从 API 检索到的 Post 对象包括 X 用户的“状态更新”;转发(Retweet)、回复以及引用 Tweet 也同样都是 Post 对象。若某个 Post 与另一条 Post 存在关联(例如转发、回复或引用 Tweet),相关对象会在该 Post 对象中被标识或嵌入。即便是原生 X data 格式中最简单的 Post,也会包含嵌套的 JSON 对象,用于表示其他属性,例如作者、被提及的用户、标记的地点、话题标签(hashtag)、现金标签(cashtag)、媒体或 URL 链接。处理 X data 时,理解这一点非常重要。你从 X API 接收的 Post data 的具体格式取决于收到的 Post 类型、所使用的 X API,以及格式设置。
返回 Post 对象的 Enterprise 端点已更新,提供理解 Post 编辑历史所需的元数据。请在“编辑 Post”基础知识页面了解更多相关元数据:Edit Posts 基础知识。
在原生 X 格式中,JSON 负载将包含根级属性和嵌套的 JSON 对象(此处用
{} 表示):
可用的数据格式
请注意:强烈建议在企业数据 API 中使用 Enriched Native 格式。企业数据 API 提供两种数据格式。与标准 v1.1 原生格式最为接近的企业格式是 Enriched Native。较早的企业数据格式为 Activity Streams,最初由 Gnip 实施,并作为当时跨 X 及其他社交媒体数据提供商的统一规范使用。尽管该格式仍可用,但自 2017 年起,X 仅在 Enriched Native 格式上投入新功能与改进。 Enriched Native 格式顾名思义,既包含 X 的原生对象,也包含适用于企业数据产品的额外增强内容,例如 URL 展开元数据、个人资料地理信息、投票元数据以及更多互动指标。
按数据格式对比对象
解析最佳实践
- X 的 JSON 使用 UTF-8 字符编码。
- 解析器应能轻松容忍字段顺序的变化。应假定 Post 的 JSON 作为无序的 data 映射/哈希提供。
- 解析器应能容忍新增字段。
- JSON 解析器必须能够容忍“缺失”的字段,因为并非所有字段都会在所有上下文中出现。
- 通常可以安全地将值为 null 的字段、空集合以及字段缺失视为同一情况
企业版原生扩展 data 对象
原生增强型 Tweet 对象
想了解原生增强型 data 格式如何映射到 X API v2 格式? 请查看我们的对比指南:原生增强型与 X API v2 的比较
Post 对象
id、created_at 和 text 等基础属性。Post 对象还包含嵌套对象,例如 user、entities 和 extended_entities。Post 对象还可能包含其他嵌套的 Post 对象,如 retweeted_status、quoted_status 和 extended_tweet。原生丰富格式还包含一个 matching_rules 对象。
X 数据字典
| 属性 | 类型 | 描述 |
|---|---|---|
| 已创建_在 | 字符串 | 该 Post 的创建 UTC 时间。示例: “已创建_在”:“周三 2018年10月10日 20:19:24 +0000” |
| id | Int64 | 用于此 Post 的唯一标识符的整数形式。该数值超过 53 位,一些编程语言在解析时可能会遇到问题或出现静默错误。使用有符号 64 位整数存储此标识符是安全的。使用**id_str**为安全起见,请获取该标识符。参见X ID了解更多信息。示例:“id”:1050118621198921728 |
| id_字符串(str) | 字符串 | 此 Post 的唯一标识符的字符串形式。实现应使用该值,而非 id 中的长整型数值。id。示例:“id_字符串(str)”:“1050118621198921728” |
| 文本 | 字符串 | 状态更新的实际 UTF-8 文本。请参阅X-text有关当前哪些字符被视为有效的详细说明。示例: “文本”:“为了为更多表达留出空间,我们现在将所有表情符号按相同方式计数——包括带有性别和肤色的表情符号…https://t.co/MkGjXf9aXm” |
| 源 | 字符串 | 用于发布该 Post 的工具,表示为一个 HTML 格式的字符串。来自 X 网站的 Post 的 source 值为**Web**。示例: “来源”:“X Web 客户端” |
| 已截断 | 布尔 | 指示 text 参数的值是否被截断,例如因转发导致超过原始 Post 文本的 140 字符限制。被截断的文本将以省略号 ... 结尾。由于 X 现在会拒绝超长 Post 而不再截断,绝大多数 Post 的该值为 false。请注意,尽管原生转发的顶层 text 属性可能会被缩短,但原文可在 retweeted_status 对象下获取,且 truncated 参数将保持与原始状态一致(多数情况下为 false)。示例:“truncated”:true** text参数被截断,例如由于一次转推超过了原始 Post 文本的 140 字符限制。被截断的文本将以省略号结尾,如下所示...由于 X 现在会拒绝过长的 Post,而不再对其截断,绝大多数 Post 的该值将被设置为false。请注意,尽管原生转推的顶层text属性已被缩写,原始文本可在retweeted_status对象与truncated参数将被设置为原始状态的值(在大多数情况下,false**)。示例:“已截断”:true |
| 在_回复_至_状态_id | Int64 | *可为 null。*如果所表示的 Post 是一条回复,则此字段将包含原始 Post 的整数标识’的 id。示例: “在_回复_至_状态_id”:1051222721923756032 |
| 于_回复_至_状态_id_str | 字符串 | *可为空值。*如果所表示的 Post 为回复,则此字段将包含原始 Post 的字符串表示形式’的 id。示例: “在……中_回复_至_状态_id_str”:“1051222721923756032” |
| 在_回复_至_用户_id | Int64 | *可为空值。*如果所表示的 Post 是回复,则此字段将包含原始 Post 的整数表示’的作者 id。这并不一定是 Post 中直接被提及的用户。示例: “在_回复_至_用户_id”:6253282 |
| 在_回复_至_用户_id_str | 字符串 | *可为 null。*如果所代表的 Post 是回复,此字段将包含原始 Post 的字符串表示形式’作者的ID。这并不一定是 Post 中直接提到的用户。示例: “在_回复_至_用户_id_str”:“6253282” |
| 于_回复_至_屏幕_名称 | 字符串 | *可为 null。*如果所表示的 Post 是一条回复,此字段将包含原始 Post 的用户名’s 作者。示例: “在_回复_至_屏幕_名称”:“xapi” |
| 用户 | User 对象 | 发布该 Post 的用户。完整属性列表请参阅 User 数据字典。 示例:高亮显示部分属性: { “用户”:<br/> “id”: 6253282, “id_str”:“6253282”, “名称”:“X API”, “屏幕_名称”:“API”, “位置”:“美国加利福尼亚州旧金山”, “URL”:“https://developer.x.com”, “说明”:“真正的 X API。发布关于 API 变更、服务问题以及我们开发者平台的推文。Don’没得到答案?它’在我的网站上。”, “已验证”: true, “粉丝_计数”: 6129794, “好友_计数”: 12, “已列出_计数”: 12899, “收藏_计数”: 31, “状态_计数”: 3658, “已创建_在”:“2007年5月23日 周三 06:01:13 +0000”, “UTC_偏移”: null, “时间_区域”: null, “地理位置_已启用”: false, “语言”:“英语(en)”, “贡献者_已启用”: false, “是_翻译工具”: false, “个人主页_背景_颜色”:“null”, “个人资料_背景_图像_URL”:“null”, “个人主页_背景_图像_url_https”:“null”, “个人资料_背景_磁贴”: null, “个人资料_链接_颜色”:“null”, “个人资料_侧边栏_边框_颜色”:“null”, “个人资料_侧栏_填写_颜色”:“null”, “个人资料_文本_颜色”:“null”, “个人资料_使用_背景信息_图像”: null, “个人主页_图像_URL”:“null”, “个人资料_图像_url_https”:“https://pbs.twimg.com/profile_images/942858479592554497/BbazLO9L_normal.jpg”, “个人资料_横幅图_URL”:“https://pbs.twimg.com/profile_banners/6253282/1497491515”, “默认值_个人资料”: false, “默认值_个人资料_图片”: false, “关注”: null, “关注_请求_已发送”: null, “通知”: null } } |
| 坐标 | 坐标 | *可为 null。*表示该 Post 的地理位置,由用户或客户端应用程序提供。内部坐标数组的格式为GeoJSON(先经度,后纬度)。示例: “坐标”: <br/> “坐标”: [ -75.14310264, 40.05701649 ], “类型”:“要点” } |
| 位置 | 位置 | 可为 null如果存在,表示该 Post 与某个 Place 关联(但不一定来自该 Place)。示例: “位置”: <br/> “属性”:, “边界约束_框框”: <br/> “坐标”: [ |
| [ [-77.119759,38.791645], [-76.909393,38.791645], [-76.909393,38.995548], [-77.119759,38.995548] ]], “type”:“Polygon(Polygon 网络)” }, “国家/地区”:“美国”, “国家/地区_代码”:“美国”, “完整_名称”:“华盛顿特区”, “id”:“01fbe706f872cb32”, “名称”:“华盛顿”, “位置_类型”:“城市”, “URL”:“http://api.x.com/1/geo/id/0172cb32.json” } | ||
| 已引用_状态_id | Int64 | 仅当该 Post 为引用 Tweet 时才显示此字段。此字段包含被引用 Tweet 的整数型 Post ID。示例: “已引用_状态_id”:1050119905717055488 |
| 已引用_状态_id_str | 字符串 | 仅当该 Post 为引用 Tweet 时才会出现此字段。该字段为被引用 Tweet 的 Post ID 的字符串形式。示例: “已引用_状态_id_str”:“1050119905717055488” |
| 是_引用_状态 | 布尔 | 指示此内容是否为引用的 Tweet。示例: “为_引述_状态”:false |
| 已引用_状态 | Post(Post) | 仅当该 Post 为引用 Tweet 时才会出现此字段。此属性包含被引用的原始 Post 的 Post 对象。 |
| 已转推_状态 | Post | 用户可以通过转发来扩大其他用户创作的 Post 的传播范围。可通过是否存在来区分转发与普通 Post**retweeted_status**属性。该属性包含一个对原文被转发的 Post。请注意,对转发的再次转发不会显示中间那条转发的表示,只会显示原始的 Post。(用户也可以通过删除自己的转发来取消该转发。) |
| 引述_计数 | 整数 | *可为 null。*表示该 Post 被 X 用户引用的大致次数。示例: “引述_计数”:33 注意:此对象仅适用于 Premium 和企业版等层级的产品。 |
| 回复_计数 | Int(整数) | 此 Post 的回复次数。示例: “回复_计数”:30 注意:仅在 Premium 和企业版层级的产品中提供此对象。 |
| 转发_计数 | Int(整型) | 该 Post 被转发的次数。示例: “转推_计数”:160 |
| 收藏_计数 | 整数 | *可为 null。*表示该 Post 被 X 用户点赞的大致次数。示例: “最爱_计数”:295 |
| 实体 | 实体项 | 从 Post 文本中解析出的实体(Entities)。另请参阅X 对象中的实体。示例: “实体”: <br/> “标签”:[], “URL”:[], “用户_提及”:[], “媒体”:[], “符号”:[] “投票”:[] } |
| 延长版_实体 | 扩展型实体 | 当 Post 中包含一至四张原生照片、一个视频或一个动画 GIF 时,该字段为一个数组’媒体’元数据。这也适用于引用 Tweet。另请参阅X 对象中的实体示例: “实体”: <br/> “媒体”:[] } |
| 已点赞 | 布尔值 | *可为 Null。*指示经过认证的用户是否已点赞此 Post。示例: “已收藏”:true |
| 已转推 | 布尔 | 指示经过身份验证的用户是否已转发此 Post。示例: “已转推”:false |
| 有可能_敏感 | 布尔值 | *可为 null。*此字段表示内容可能被识别为敏感。Post 作者可在其账户偏好设置中选择“将你发布的媒体标记为可能包含敏感内容”,此后创建的每条 Post 都会带有该标记。 这也可能由 X 的内部支持人员进行判定并加注标签。 “可能地_敏感”:false |
| 筛选器_级别 | 字符串 | 指示筛选器的最大值_可使用的 level 参数值上限,同时仍可流式传输此 Post。因此,值为**medium将会在…进行流式传输无,low、以及medium**流式传输。示例: “筛选器_级别”:“低” |
| 语言 | 字符串 | 可为 null。(如有)表示BCP 47与机器检测到的 Post 文本语言相对应的 BCP 47 语言标识符,或**und**如果无法检测出任何语言。示例: “语言代码”:“en” |
| 编辑_历史记录 | 对象 | 用于标识某个 Post 所有版本的唯一标识符。对于未编辑的 Post,仅有一个 id。对于有编辑历史的 Post,将包含多个 id,按升序排列以反映编辑顺序,数组的最后一个元素为最新版本。 Post 的 id 可用于回填并查看某条 Post 的先前版本。 示例: 编辑_历史记录”:<br/> “初始值_Tweet_id”:“1283764123” “编辑_Tweet_ids”: [“1283764123”,“1394263866”] } |
| 编辑_控件 | 对象 | 如果存在,表示该 Post 仍可编辑的剩余时间以及剩余编辑次数。Post 仅在创建后的前 30 分钟内可编辑,且最多可编辑五次。 可使用这些 Post 的 id 来回填并查看该 Post 的历史版本。 示例: “编辑_控件”:<br/> “可编辑的_直至_毫秒(ms)”: 123 “编辑记录_剩余""":3 } |
| 可编辑的 | 布尔 | 如果存在,表示该 Post 在发布时是否符合编辑资格。此字段为非动态字段,即使 Post 达到可编辑时间限制或最大编辑次数,也不会从 True 变为 False’当一条 Post 达到可编辑的时间限制或最大编辑次数时,t 会从 True 切换为 False。以下 Post 功能将导致此字段为 false: - Post 已被推广 - 帖子含有投票 - Post 为非自我线程的回复 - Post 为转推(注意:引用推文可编辑) - Post 为 nullcast - 社区 Post - Super Follow Post - 协作 Post |
| 匹配_规则 | 规则对象的数组 | 位于已过滤诸如 X Search 和 PowerTrack 等产品。提供了id及标签与匹配该 Post 的规则相关。了解匹配规则的更多信息此处。使用 PowerTrack 时,多个规则可以匹配同一条 Post。 示例: “匹配_规则”:”[<br/> “标签”:“X API 表情符号”, “id”: 1050118621198921728, “id_str”:“1050118621198921728” }]“ |
其他 Post 属性
| 属性 | 类型 | 描述 |
|---|---|---|
| current_user_retweet | Object | 视角相关 仅在支持 include_my_retweet 参数且其值为 true 的方法中返回。列出用户对该 Post 的本人转发(如存在)的 Post ID。示例: “current_user_retweet”: <br/> “id”: 6253282, “id_str”: “6253282” } |
| scopes | Object | 一组键值对,指示该 Post 的预期投放上下文。目前由 X 的推广产品使用。示例: “scopes”:{“followers”:false} |
| withheld_copyright | Boolean | 当存在且为 “true” 时,表示该内容因 DMCA 投诉 被屏蔽。示例: “withheld_copyright”: true |
| withheld_in_countries | Array of String | 当存在时,表示该内容被屏蔽的国家列表,使用大写的双字母国家代码。X 在此字段中支持以下非国家取值: “XX” - 内容在所有国家被屏蔽;“XY” - 内容因 DMCA 请求被屏蔽。 示例: “withheld_in_countries”: [“GR”, “HK”, “MY”] |
| withheld_scope | String | 当存在时,指示被屏蔽的内容是 “status” 还是 “user”。 示例: “withheld_scope”: “status” |
已弃用的属性
| 字段 | 类型 | 说明 |
| geo | Object | 已弃用。 可为空。 请改用 coordinates 字段。此已弃用属性的坐标格式为 [lat, long],而所有其他 Post 的地理位置均采用 [long, lat] 格式。 |
嵌套的 Post 对象
引用推文
引用推文与转推类似,但它们会包含一条新的 Post 消息。该新消息可以包含其自身的一组话题标签、链接,以及其他“entities”元数据。引用推文还可以包含由发布者共享的位置信息,并可附带 GIF、视频和照片等媒体。 引用推文至少包含两个 Post 对象,有时会有三个。被引用的 Post(其本身也可能是一条引用的 Tweet)位于“quoted_status”对象中。根级对象则封装引用推文本身,其中包含执行分享操作的账户的 User 对象以及引用时间。 请注意,现在可以通过“Post”用户界面为引用推文添加照片、GIF 或视频。若在引用推文的消息中包含外部托管媒体的链接,根级的“entities.urls”将描述这些链接。附加到引用推文的媒体会出现在根级的“extended_entities”元数据中。 在引用推文首次推出时,会在“原始”Post 消息中追加一个缩短链接(t.co URL),并将其呈现在根级的“text”字段中。此外,该 t.co URL 的元数据会包含在根级的“entities.urls”数组中。自 2018 年 5 月起,我们进行了变更:指向被引用 Tweet 的缩短 t.co URL 不再包含在根级的“text”字段中;同时,被引用 Tweet 的相关元数据也不再包含在“entities.urls”元数据中。取而代之的是,被引用 Tweet 的 URL 元数据将位于根级(或顶级)的全新“quoted_status_permalink”对象中,与“quoted_status”对象处于同一层级。 下面是采用该最初格式的引用推文的示例结构。扩展 Post
原生增强型 User 对象
用户数据字典
| 属性 | 类型 | 说明 |
|---|---|---|
| id | Int64 | 此用户唯一标识符的整数形式。该数值超过 53 位,一些编程语言在解析时可能会遇到问题或出现静默错误。使用有符号 64 位整数来存储此标识符是安全的。使用id_str为安全起见,请获取标识符。参见X ID了解更多信息。示例:“id”:6253282 |
| id_str(字符串) | 字符串 | 该用户唯一标识符的字符串形式。实现应使用此值,而非 id 中可能过大、难以处理的整数id. 示例:“id_字符串(str)”:“6253282” |
| 名称 | 字符串 | 用户自行设定的名称。不一定是个人姓名。通常上限为 50 个字符,但可能会调整。示例: “名称”:“API” |
| 屏幕_名称 | 字符串 | 该用户用于自我标识的屏幕名称、帐号(handle)或别名。screen_名称具有唯一性,但可能会变更。请使用id_str尽可能使用 id_str 作为用户标识符。通常长度最多为 15 个字符,但某些历史账号的名称可能更长。示例:“屏幕_名称”:“API” |
| 位置 | 字符串 | 可为 null. 此账户个人资料中用户自定义的位置。未必是实际地点,也未必可由机器解析。Search 服务有时会对该字段进行模糊解析。示例: “位置”:“美国加利福尼亚州旧金山” |
| 衍生 | 增强对象数组 | 仅限企业版 API 面向用户的派生 Enrichment 元数据集合。提供 Profile Geo Enrichment 元数据。请参阅引用文档了解更多信息,包括 JSON 数据字典。个人资料地理位置增强元数据。请参阅相关文档以了解更多信息,包括 JSON 数据字典。示例: “派生”:“位置”: [“国家/地区”:“美国”,“国家_代码”:“美国”,“地域”:“丹佛”] |
| URL | 字符串 | 可为 null. 与用户个人资料关联的一个 URL。示例: “URL”:“https://developer.x.com” |
| 说明 | 字符串 | 可为 null. 用户自定义的 UTF-8 字符串,用于描述其账号。示例: “说明”:“真正的 X API” |
| 受保护 | 布尔 | 为 true 时,表示该用户已选择保护其 Post。参见关于公开和受保护的帖子。示例: “受限”: true |
| 已验证 | 布尔值 | 为 true 时,表示该用户的账号已通过认证。参见认证账号。示例: “已验证”: false |
| 粉丝_计数 | Int(整数) | 此帐号当前的关注者数量。在特定异常情况下,此字段会暂时显示为“0”。示例: “粉丝_计数”: 21 |
| 好友_计数 | 整型 | 此账号正在关注的用户数量(即其“关注数”)。在某些异常情况下,此字段会暂时显示为“0”。示例: “好友_计数”: 32 |
| 已列出_计数 | Int(整型) | 此用户所属的公开列表数量。示例: “已列出_计数”: 9274 |
| 收藏夹_计数 | Int(整数) | 此用户在其账号整个生命周期中点赞的 Post 数量。出于历史原因,字段名称采用英式拼写。示例: “收藏夹_计数”: 13 |
| 状态(statuses)_计数 | 整数 | 用户发布的 Post 数量(包括转帖)。示例: “状态信息_计数”: 42 |
| 已创建_在 | 字符串 | 用户账户在 X 上创建的 UTC 日期与时间。示例: “已创建_在”:“2010年11月29日 周一 21:18:15 +0000” |
| 资料_横幅_URL | 字符串 | 基于 HTTPS 的 URL,指向用户上传的资料横幅的标准网页版本。通过在该 URL 末尾追加路径元素,可获取针对特定显示效果优化的不同图像尺寸。有关尺寸变体,请参阅用户资料图片与横幅。 示例: “个人资料_横幅_URL”:“https://si0.twimg.com/profile_banners/819797/1348102824” |
| 个人资料_图像_url_https | 字符串 | 指向用户个人资料图片的 HTTPS URL。示例: “个人资料_图像_URL_https”: “https://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png” |
| 默认_个人资料 | 布尔 | 为 true 时,表示用户尚未更改其个人资料的主题或背景。示例: “默认值_个人资料”: false |
| 默认值_个人资料_图像 | 布尔 | 为 true 时,表示用户尚未上传个人资料图片,系统将使用默认图片。示例: “默认值_个人资料_图片”: false |
不再支持(已弃用)属性
| 字段 | 类型 | 描述 |
|---|---|---|
| utc_offset | null | 值将被设为 null。仍可通过 GET account/settings 获取 |
| time_zone | null | 值将被设为 null。仍可通过 GET account/settings 获取,对应字段为 tzinfo_name |
| lang | null | 值将被设为 null。仍可通过 GET account/settings 获取,对应字段为 language |
| geo_enabled | null | 值将被设为 null。仍可通过 GET account/settings 获取。当前用户在使用 POST statuses/update 附加地理数据时,该字段必须为 true |
| following | null | 值将被设为 null。仍可通过 GET friendships/lookup 获取 |
| follow_request_sent | null | 值将被设为 null。仍可通过 GET friendships/lookup 获取 |
| has_extended_profile | null | 已弃用。值将被设为 null。 |
| notifications | null | 已弃用。值将被设为 null。 |
| profile_location | null | 已弃用。值将被设为 null。 |
| contributors_enabled | null | 已弃用。值将被设为 null。 |
| profile_image_url | null | 已弃用。值将被设为 null。注意:头像仅可通过 profile_image_url_https 字段获取。 |
| profile_background_color | null | 已弃用。值将被设为 null。 |
| profile_background_image_url | null | 已弃用。值将被设为 null。 |
| profile_background_image_url_https | null | 已弃用。值将被设为 null。 |
| profile_background_tile | null | 已弃用。值将被设为 null。 |
| profile_link_color | null | 已弃用。值将被设为 null。 |
| profile_sidebar_border_color | null | 已弃用。值将被设为 null。 |
| profile_sidebar_fill_color | null | 已弃用。值将被设为 null。 |
| profile_text_color | null | 已弃用。值将被设为 null。 |
| profile_use_background_image | null | 已弃用。值将被设为 null。 |
| is_translator | null | 已弃用。值将被设为 null。 |
| is_translation_enabled | null | 已弃用。值将被设为 null。 |
| translator_type | null | 已弃用。值将被设为 null。 |
示例用户对象:
原生增强地理对象
place 对象始终存在。Places 是具有对应地理坐标的具体、具名地点。用户为其 Post 指定位置时,会看到一组候选的 X Places 列表。使用 API 发帖时,可以在发布时通过指定 place_id 来附加一个 X Place。与 Places 关联的 Posts 不一定发布自该位置,也可能是关于该位置的内容。
仅当 Post 被指定了精确位置时,geo 和 coordinates 对象才会出现(非空)。如果提供了精确位置,coordinates 对象将提供一个 [long, lat] 数组表示地理坐标,并会分配一个与该位置对应的 X Place。
地点数据字典
| 字段 | 类型 | 描述 |
|---|---|---|
| id | String | 表示此地点的ID。请注意,它为字符串类型,而非整数。示例: “id”:“01a9a39529b27f36” |
| url | String | 指向该地点附加元数据位置的URL。示例: “url”:“https://api.x.com/1.1/geo/id/01a9a39529b27f36.json” |
| place_type | String | 此地点所代表的位置类型。示例: “place_type”:“city” |
| name | String | 该地点名称的简短、可读形式。示例: “name”:“Manhattan” |
| full_name | String | 该地点名称的完整、可读形式。示例: “full_name”:“Manhattan, NY” |
| country_code | String | 表示包含该地点的国家/地区的简写代码。示例: “country_code”:“US” |
| country | String | 包含该地点的国家/地区名称。示例: “country”:“United States” |
| bounding_box | Object | 包含该地点的坐标边界框。示例: “bounding_box”: “coordinates”: [ [ [ -74.026675, 40.683935 ], [ -74.026675, 40.877483 ], [ -73.910408, 40.877483 ], [ -73.910408, 40.3935 ] ] ], “type”: “Polygon” |
| attributes | Object | 在使用 PowerTrack、30-Day 和 Full-Archive Search API 以及 Volume Streams 时,此对象为 null。示例: “attributes”: |
| 字段 | 类型 | 说明 |
| coordinates | Array of Array of Array of Float | 一系列经纬度点,定义一个包围与该边界框关联的 Place 实体的矩形区域。每个点以 [longitude, latitude] 数组表示。每个边界框的点集合构成一个数组。为与多边形表示法兼容,边界框数组外层再包裹一层数组。示例: “coordinates”: [ [ [ -74.026675, 40.683935 ], [ -74.026675, 40.877483 ], [ -73.910408, 40.877483 ], [ -73.910408, 40.3935 ] ] ] |
| type | String | coordinates 属性所编码的数据类型。对于边界框,其值为“Polygon”;对于具有精确坐标的 Post,其值为“Point”。示例: “type”:“Polygon” |
Geo 对象数据字典
| 字段 | 类型 | 说明 |
| coordinates | Float 集合 | Post 的位置经纬度,采用 [latitude, longitude] 的集合形式。示例: ** “geo”: “type”:** “Point”, ** “coordinates”: [ 54.27784, -0.41068 ] ** |
| type | String | coordinates 属性中编码的数据类型。对于 Post 坐标字段,该值为 “Point”。示例: “type”: “Point” |
| 字段 | 类型 | 说明 |
| coordinates | Float 集合 | Post 的位置经纬度,采用 [longitude, latitude] 的集合形式。示例: ** “coordinates”: “type”:** “Point”, ** “coordinates”: [ -0.41068, 54.27784 ] ** |
| type | String | coordinates 属性中编码的数据类型。对于 Post 坐标字段,该值为 “Point”。示例: “type”: “Point” |
衍生位置
| 字段 | 类型 | 说明 |
| derived | locations 对象 | 基于个人资料的地理信息扩展推断出的位置信息 “derived”: “locations”: [ ** “country”:** “United Kingdom”, “country_code”: “GB”, “locality”: “Yorkshire”, “region”: “England”, “full_name”: “Yorkshire, England, United Kingdom”, ** “geo”: “coordinates”: [ -1.5, 54 ], “type”:** “point” ** ] ** |
示例:
X 实体
跳转至本页 简介 Entities 对象 - Hashtag 对象 - Media 对象 - Media 尺寸对象 - URL 对象 - 用户提及对象 - Symbol 对象 - 投票对象 转发与引用 Tweet 详情 用户对象中的 Entities 私信中的 Entities 下一步介绍
实体为在 X 上发布的内容提供元数据和额外的上下文信息。entities 部分包含 Post 中常见要素的数组:话题标签、用户提及、链接、股票代码(符号)、X 投票和所附媒体。对于开发者在摄取 Post 时,这些数组非常实用,因为 X 实际上已经对文本主体进行了预处理/预解析。你的解析器无需在 Post 正文中显式搜索这些实体,而是可以直接读取该 JSON 部分即可获取。
除了提供解析便利,entities 部分还提供实用的“增值”元数据。例如,如果你使用了 Enhanced URLs enrichment,URL 元数据会包含完全展开的 URL,以及对应的网站标题和描述。再比如,当存在用户提及时,实体元数据会包含数值型用户 id,这在调用许多 X API 时非常有用。
每个 Post 的 JSON 负载都包含一个 entities 部分,并带有最基本的 hashtags、urls、user_mentions 和 symbols 属性,即使这些实体并未出现在该 Post 的消息中也是如此。比如,如果你检查一个正文为“Hello World!”且没有附加媒体的 Post 的 JSON,该 Post 的 JSON 将包含如下内容,其中的实体数组为空(包含零个项):
- 仅当该类型的内容属于 Post 时,media 和 polls 实体才会出现。
- 如果你在处理原生媒体(照片、视频或 GIF),建议使用 Extended Entities 对象。
实体对象
entities 和 extended_entities 部分都由实体对象的数组组成。下面将对每种实体对象进行说明,并提供数据字典,描述对象的属性名称、类型以及简要说明。我们还会指出哪些 PowerTrack 操作符与这些属性匹配,并提供一些示例 JSON 负载。
这是 Posts 中常见实体的集合,包括主题标签、链接和用户提及。entities 对象确实包含 media 属性,但它在 entities 部分中的实现仅对仅含单张照片的 Posts 完全准确。对于包含多张照片、视频或动图 GIF 的所有 Posts,请参阅 extended_entities 部分。
实体 data 字典
entities 对象用于承载其他实体子对象的数组。在说明 entities 的结构后,我们将提供这些子对象的数据字典,以及与之对应的运算符(Operators)。
| 字段 | 类型 | 说明 |
|---|---|---|
| 标签 | 数组(由…组成)Hashtag 对象 | 表示已从 Post 文本中解析出的主题标签。示例: “主题标签”: [ “索引”: [ 32, 38 ], “文本”:“Node.js” ] |
| 媒体 | 数组,包含媒体对象 | 表示随该 Post 一同上传的媒体元素。示例: “媒体”: [ “显示_url”:“pic.x.com/5J1WJSRCy9”, “已展开_URL”:“https://x.com/nolan_test/status/930077847535812610/photo/1”, “id”: 9.300778475358126e17, “id_str”:“930077847535812610”, “索引”: [ 13, 36 ], “媒体_URL”:“http://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg”, “媒体_url_https”:“https://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg” “大小”: “缩略图”: “h”: 150, “调整大小”:“裁剪”, “w”: 150 , “大”: “h”: 1366, “调整大小”:“适配”, “w”:2048 , “中等”: “h”: 800, “调整尺寸”:“适合”, “w”: 1200 , “小型”: “h”: 454, “调整尺寸”:“适合”, “w”: 680 , “类型”:“照片”, “URL”:“https://t.co/5J1WJSRCy9”, ] |
| URL | 数组(由…组成)URL 对象 | 表示包含在 Post 文本中的 URL。 示例(未启用 Enhanced URLs 增强功能): “URL”: [ “索引”: [ 32, 52 ], “URL”:“http://t.co/IOwBrTZR”, “显示_URL”:“youtube.com/watch?v=oHg5SJ…”, “已展开_URL”:“http://www.youtube.com/watch?v=oHg5SJYRHA0” ] 示例(已启用 Enhanced URLs 富化): “URL”: [ “URL”:“https://t.co/D0n7a53c2l”, “已展开_URL”:“http://bit.ly/18gECvy”, “显示_url”:“bit.ly/18gECvy”, “展开”: “URL”:“https://www.youtube.com/watch?v=oHg5SJYRHA0”, “状态”: 200, “标题”:“瑞克摇滚(Rickroll)‘D”, “说明”:“http://www.facebook.com/rickroll548只要喷子还在作妖,瑞克就会一直“滚”个不停。” , “索引”: [ 62, 85 ] ] |
| 用户_提及 | 数组(包含)用户提及对象 | 表示在 Post 文本中被提及的其他 X 用户。示例: “用户_提及”: [ “名称”:“X API”, “索引”: [ 4, 15 ], “屏幕_名称”:“xapi”, “id”: 6253282, “id_字符串(str)”:“6253282” ] |
| 符号 | 由以下组成的数组Symbol 对象 | 表示包含在 Post 文本中的符号(例如 $cashtags)。示例: “符号”: [ “索引”: [ 12, 17 ], “文本”:“twtr” ] |
| 投票调查 | 数组(包含)投票对象(Poll Objects) | 表示 Post 中包含的 X 投票。示例: “投票”: [ “选项”: [ “位置”: 1, “文本”:“我看过一次文档。” , “位置”: 2, “文本”:“我把文档读了两遍。” }, “位置”: 3, “文本”:“我反复阅读文档。” } ], “结束_日期时间”:“2017年5月25日 周四 22:20:27 +0000”, “时长_分钟”: 60 ] |
Hashtag 对象
entities 部分包含一个 hashtags 数组,其中每个对象对应 Post 正文中包含的一个 hashtag;如果没有 hashtag,则该数组为空。
PowerTrack # 运算符用于匹配 text 属性。has:hashtags 运算符在数组中至少有一项时匹配。
| 字段 | 类型 | 说明 |
| indices | Array of Int | 一个整数数组,表示该 hashtag 在 Post 文本中的起始与结束偏移。第一个整数表示 Post 文本字符串中“#”字符的位置,第二个整数表示该 hashtag 之后第一个字符的位置。因此,这两个数字的差值等于 hashtag 名称的长度再加 1(用于“#”字符)。示例: “indices”:[32,38] |
| text | String | hashtag 的名称,不包含开头的“#”字符。示例: “text”:“nodejs” |
媒体对象
如果有任何媒体对象“附加”到 Post,则entities 部分将包含一个 media 数组,其中包含单个媒体对象。若未附加原生媒体,则 entities 中不会包含 media 数组。基于以下原因,处理 Post 的原生媒体应使用 extended_entities 部分:
- 即使附加的是视频或 GIF,媒体
type也始终标记为“photo”。 - 即便最多可附加四张照片,
entities部分中也只会列出第一张。
has:media 运算符将匹配。
| 字段 | 类型 | 说明 |
| 显示_url | 字符串 | 要向客户端展示的媒体 URL。示例: “显示_URL”:“pic.x.com/rJC5Pxsu” |
| 扩展_url | 字符串 | 扩展版的 display_url。指向媒体展示页的链接。示例: “已展开_url”:“http://x.com/yunorno/status/114080493036773378/photo/1” |
| id | Int64 | 媒体的 ID,使用 64 位整数表示。示例: “id”:114080493040967680 |
| id_str | 字符串 | 媒体的 ID(字符串)。示例: “id_字符串”:“114080493040967680” |
| 索引 | Int 数组 | 一个整数数组,表示 URL 在 Post 文本中开始与结束的偏移位置。第一个整数表示 URL 在 Post 文本中首个字符的位置。第二个整数表示 URL 之后出现的首个非 URL 字符的位置(如果 URL 位于 Post 文本末尾,则为字符串的结尾)。示例: “索引”:[15,35] |
| 媒体_url | 字符串 | 指向已上传媒体文件的 http:// URL。示例: “媒体_url”:“http://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg” 对于私信中的媒体, media_url与…相同的 HTTPS URLmedia_url_https并且必须使用 OAuth 1.0A,使用用户的访问令牌对请求进行签名后方可访问。无法通过已登录的 x.com 会话访问图片。请访问该页面以了解如何应对这些最新变更。 无法将这些图像直接嵌入网页。 请参阅照片媒体 URL 格式关于照片格式要求’的 URL,例如 media_url_https,基于现有的sizes. |
| 媒体_URL_https | 字符串 | 一个直接指向已上传媒体文件的 https:// URL,可用于在 https 页面中嵌入。示例: “媒体_URL_https”:“https://p.twimg.com/AZVLmp-CIAAbkyy.jpg” 对于私信中的媒体: media_url_https必须使用 OAuth 1.0A,使用用户的访问令牌对请求进行签名后方可访问。无法通过已登录的 x.com 会话访问图片。请访问本页面以了解如何处理这些最新更改。 无法将这些图片直接嵌入网页。 请参阅照片媒体 URL 格式有关如何设置照片格式’的 URL,例如 media_url_https,基于现有的sizes。 |
| 尺寸 | Size 对象 | 一个对象,用于展示该媒体文件可用的尺寸。示例: “大小”: “缩略图”: “h”: 150, “调整大小”:“裁剪”, “w”:150 }, “大型”: “h”: 1366, “调整尺寸”:“适合”, “w”:2048 }, “中等”: “h”: 800, “调整大小”:“适合”, “w”: 1200 }, “小型”: “h”: 454, “调整大小”:“适合”, “w”:680 } } } 请参阅照片媒体 URL 格式关于如何格式化照片’例如图片的 URL,例如 media_url_https,基于现有的sizes。 |
| 来源_状态_id | Int64 | 可为空。对于包含最初与其他 Post 关联的媒体的 Post,此 ID 指向该媒体所属的原始 Post。示例: “来源_状态_id”: 205282515685081088 |
| 源_状态_id_str | Int64 | 可为空。对于包含最初与其他 Post 关联媒体的 Post,此字符串类型的 ID 指向原始 Post。示例: “来源_状态_id_str”:“205282515685081088” |
| 类型 | 字符串 | 上传的媒体类型。可能的类型包括 photo、video 和 animated_GIF。示例: “类型”:“照片” |
| url | 字符串 | 媒体链接的封装 URL。它与直接嵌入原始 Post 文本中的 URL 相对应,并用于确定 indices 参数的取值。indices参数。示例:“URL”:“http://t.co/rJC5Pxsu” |
媒体尺寸对象
Sizes 对象
| 字段 | 类型 | 描述 |
| thumb | Size Object | 缩略图尺寸的媒体版本信息。示例: “thumb”:“h”:150, “resize”:“crop”, “w”:150} 缩略图尺寸的照片媒体将在 150x150 边界内进行填充(fill)并裁剪。 |
| large | Size Object | 大尺寸的媒体版本信息。示例: “large”:“h”:454, “resize”:“fit”, “w”:680} 小尺寸的照片媒体将被限制为在 680x680 边界内适配(fit)。 |
| medium | Size Object | 中等尺寸的媒体版本信息。示例: “medium”:“h”:800, “resize”:“fit”, “w”:1200} 中等尺寸的照片媒体将被限制为在 1200x1200 边界内适配(fit)。 |
| small | Size Object | 小尺寸的媒体版本信息。示例: “small”:“h”:1366, “resize”:“fit”, “w”:2048} 大尺寸的照片媒体将被限制为在 2048x2048 边界内适配(fit)。 |
尺寸对象
| 字段 | 类型 | 说明 |
| w | Int | 此尺寸的宽度(像素)。示例: “w”:150 |
| h | Int | 此尺寸的高度(像素)。示例: “h”:150 |
| resize | String | 获取此尺寸时采用的调整方式。值为_fit_表示在保持媒体原始纵横比的情况下适配某一维度;值为_crop_表示将媒体裁剪以适配特定分辨率。示例: “resize”:“crop” |
照片媒体 URL 格式
media_url 或 media_url_https 时,默认会加载中等(medium)变体。但在条件允许时,建议提供完整格式化的照片媒体 URL。
照片媒体 URL 由三部分组成:
| Base URL | Base URL 指去掉文件扩展名的媒体 URL。 例如: “media_url_https”: “https://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg”, 则 Base URL 为: https://pbs.twimg.com/media/DOhM30VVwAEpIHq |
| Format | Format 指图像的文件格式。可用格式为 jpg 或 png,与媒体 URL 的扩展名一致。 例如: “media_url_https”: “https://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg”, 则格式为:jpg |
| Name | Name 指要加载的尺寸字段名。 例如: “sizes”: “thumb”: “h”: 150, “resize”: “crop”, “w”: 150 , “large”: “h”: 1366, “resize”: “fit”, “w”: 2048 }, “medium”: “h”: 800, “resize”: “fit”, “w”: 1200 }, “small”: “h”: 454, “resize”: “fit”, “w”: 680 } } } 加载大尺寸照片时,名称为:large |
| Legacy format | 旧版格式已弃用。所有照片媒体的加载都应迁移到现代格式。 <base_url>.<format>:<name> 例如: https://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg:large |
| Modern format | 在 X,加载照片的现代格式于 2015 年确立,并自 2017 年起成为事实标准。所有照片媒体的加载应迁移到此格式。 <base_url>?format=<format>&name=<name> 例如: https://pbs.twimg.com/media/DOhM30VVwAEpIHq?format=jpg&name=large 注意:照片媒体 URL 的查询字符串项按字母顺序排列。若媒体加载需添加任何新的查询项,仍需保持按字母顺序排列。例如,若有一个假设的新查询项称为 preferred_format,它应在查询字符串中排在 format 和 name 之后。 |
URL 对象
entities 部分包含一个 urls 数组,其中每个元素对应 Post 正文中的一个链接;如果没有链接,则该数组为空。
当数组中至少有一项时,has:links 运算符会匹配。url: 运算符用于匹配 expanded_url 属性。如果你使用 Expanded URL enrichment,url: 运算符将匹配 unwound.url(完全展开的 URL)属性。如果你使用 Enhanced URL enrichment,则使用 url_title: 和 url_decription: 运算符分别匹配 unwound.title 和 unwound.description 属性。
| 字段 | 类型 | 描述 |
| display_url | String | 粘贴/输入到 Post 中的 URL。示例: “display_url”:“bit.ly/2so49n2” |
| expanded_url | String | display_url 的展开版本。示例:“expanded_url”:“http://bit.ly/2so49n2” |
| indices | Array of Int | 整数数组,表示 URL 在 Post 文本中的起止偏移。第一个整数是 URL 在 Post 文本中首字符的位置;第二个整数是 URL 结束后第一个非 URL 字符的位置。示例: “indices”:[30,53] |
| url | String | 封装后的 URL,对应直接嵌入原始 Post 文本的值,以及 indices 参数的取值。示例: “url”:“https://t.co/yzocNFvJuL” |
unwound 属性下获得:
| 字段 | 类型 | 描述 |
| url | String | Post 中链接的完全展开版本。示例: “url”:“https://blog.x.com/en_us/topics/insights/2016/using-twitter-as-a-go-to-communication-channel-during-severe-weather-events.html” |
| status | Int | 展开过程的最终 HTTP 状态码,200 表示成功。示例: 200 |
| title | String | 链接的 HTML 标题。示例: “title”:“Using X as a ‘go-to’ communication channel during severe weather” |
| description | String | 链接的 HTML 描述。示例: “description”:“Using X as a ‘go-to’ communication channel during severe weather” |
用户提及对象
entities 部分包含一个 user_mentions 数组,Post 正文中每出现一次用户提及就对应一个对象;如果没有用户提及,则该数组为空。
PowerTrack @ 运算符用于匹配 screen_name 属性。has:mentions 运算符在数组中至少有一项时匹配。
| 字段 | 类型 | 说明 |
| id | Int64 | 被提及用户的 ID,整数。示例: “id”:6253282 |
| id_str | String | 被提及用户的 id,字符串。示例: “id_str”:“6253282” |
| indices | Array of Int | 整数数组,表示该用户引用在 Post 文本中的起止偏移。第一个整数为该用户提及中“@”字符的位置;第二个整数为该用户提及后首个非 screen_name 字符的位置。示例: “indices”:[4,15] |
| name | String | 被引用用户的显示名称。示例: “name”:“API” |
| screen_name | String | 被引用用户的用户名(screen_name)。示例: “screen_name”:“api” |
符号对象
entities 部分将包含一个 symbols 数组,其中每个出现在 Post 正文中的 $cashtag 都对应一个对象;如果没有符号,则为一个空数组。
PowerTrack 的 $ 运算符用于匹配 text 属性。has:symbols 运算符在数组中至少存在一项时匹配。
| 字段 | 类型 | 说明 |
| indices | Int 数组 | 一个整数数组,表示该符号/cashtag 在 Post 文本中的起止偏移。第一个整数表示 Post 文本字符串中 ” 字符)。示例: “indices”:[12,17] |
| text | 字符串 | cashtag 的名称,不包含前导 “$” 字符。示例: “text”:“twtr” |
Poll 对象
entities 部分将包含一个 polls 数组,其中包含单个 poll 对象。如果不包含投票,则 entities 部分中不会有 polls 数组。
请注意,这些投票元数据仅在以下企业版 API 中可用:
- 批量流 (Decahose)
- 实时 PowerTrack
- X 搜索 API (完整历史搜索和 30 天搜索)
| 字段 | 类型 | 描述 |
| options | Array of Option Object | 选项数组,每个选项包含投票位置及该位置的文本。示例: “options”: [ “position”: 1, “text”: “I read documentation once.” } ] } |
| end_datetime | String | 投票结束时间的时间戳 (UTC)。示例: “end_datetime”: “Thu May 25 22:20:27 +0000 2017” |
| duration_minutes | String | 投票持续时长(分钟)。示例: “duration_minutes”: 60 |
转发与引用 Tweet 详情
转发












http://wapo.st/2w8iwPQ #Testing
在上面的示例中,URL 和话题标签都受到了影响。由于话题标签被完全截断,URL 被部分截断,这些内容在顶层实体中缺失。您还会注意到文本字段中 “RT @floodsocial: ” 前缀产生的额外 user_mentions 顶层实体。
但是,retweeted_status 中的 Post 文本和实体完美地反映了原始 Post,没有截断或不正确的实体,因此我们建议在处理转发时依赖嵌套的 retweeted_status 对象。
引用 Post
用户对象的实体
JSON 示例
X 扩展实体
跳转到本页 简介 Extended Entities 对象 示例 Tweet 与 JSON 负载 - 包含四张原生照片的 Tweet - 包含原生视频的 Tweet - 包含动画 GIF 的 Tweet 后续步骤介绍
extended_entities JSON 对象。extended_entities 对象包含单个 media 数组,数组元素为 media 对象(其数据字典参见 entities 部分)。extended_entities 部分不包含其他实体类型,例如话题标签和链接。extended_entities 部分中的 media 对象在结构上与 entities 部分中的完全相同。
Posts 只能附加一种类型的媒体。对于照片,最多可附加四张;对于视频和 GIF,只能附加一个。由于 extended_entities 部分中的媒体 type 元数据能够正确指示媒体类型(“photo”“video”“animated_gif”),并且支持最多 4 张照片,因此它是原生媒体的首选元数据来源。
示例 Post 与 JSON 载荷
以下是该 Post 的
entities 部分:
extended_entities 部分:
含原生视频的 Post
video_info 对象将被 additional_media_info 对象替换。
additional_media_info 将包含发布者提供的附加媒体信息,例如 title、description 和 embeddable flag。当 embeddable=false 时,视频内容仅对 X 官方客户端可用。在这种情况下,负载中提供的所有视频 URL 都将以 X 为基础,用户可通过点击链接在 X 自有产品/服务中打开该视频。
以下是在这种情况下扩展实体对象的示例:
entities 部分,其中 type 被错误地设置为 “photo”。同样,对于所有原生媒体类型(包括 “video” 和 “animated_gif”),应优先使用 extended_entities 部分。
含动画 GIF 的 Post
下面是该含动画 GIF 的 Post 的扩展实体元数据:
原生增强型示例有效负载
Post
回复 Post
扩展版 Post
带有 extended_entities 的 Post
转发
引用 Tweet
被转推的引用 Tweet
企业版 Activity Streams 数据对象
想了解 Activity Streams 数据格式如何映射到 X API v2 格式吗?
请注意:我们强烈建议在企业数据 API 中使用 Enriched Native 格式。
Activity 对象
数据字典
| 属性 | 类型 | 说明 |
| id | 字符串 | 该 Post 的唯一 IRI。具体来说,“标记”是该架构,“search.x.com”表示该架构的域,2005 则表示该架构被制定的年份。 在存储 Post 时,建议将其作为唯一标识符或主键使用。 “id”:“tag:search.x.com,2005:1050118621198921728” |
| objectType | 字符串 | 对象类型,始终为”活动” “objectType”:“活动” |
| 对象 | 对象 | 表示正在发布或分享的 Post 的对象。 对于转推(Retweets),这将包含完整的”活动”,并包含此架构中所述的相关 fields。 对于原创 Post,此处将包含一个”注意”对象,其 fields 如下所述。 “对象”: “对象”: “objectType”:“注意”, “id”:“object:search.x.com,2005:1050118621198921728”, “概述”:“为了腾出更多表达空间,我们现在将所有表情符号按相同方式计数——包括带有性别和肤色变体的表情符号 t…https://t.co/MkGjXf9aXm”, “链接”:“http://x.com/API/statuses/1050118621198921728”, “postedTime”:“2018-10-10T20:19:24.000Z” |
| 长时间_对象 | 对象 | 当帖子文本超过 140 个字符时,用于表示完整文本正文的对象。 “长_对象”: “主体”:“为了提供更多表达空间,我们现在将所有表情符号按相同方式计数——包括带有性别和肤色修饰的表情符号 👍🏻👍🏽👍🏿。这已在 Twitter-Text(我们的开源库)中体现。 \n\n在使用 Twitter-Text?请查看论坛帖了解详情:https://t.co/Nx1XZmRCXA”, “显示_文本_范围”: [ 0, 277 ], “Twitter_实体”: “主题标签”: [], “URL”: [ “URL”:“https://t.co/Nx1XZmRCXA”, “已展开_URL”:“https://devcommunity.x.com/t/new-update-to-the-twitter-text-library-emoji-character-count/114607”, “显示_url”:“devcommunity.com/t/new-update-t…”, “索引”: [ 254, 277 ] ], “用户_提及”: [], “符号”: [] |
| 显示_文本_范围 | 数组 | 如果 Post 文本超过 140 个字符。 “显示_文本_范围”: [ 0, 142 ] |
| 动词 | string | 用户执行的操作类型。 Post,“post” 转发,“share” 已删除的 Post,“delete” 使用相应的动词是区分 Tweet 与真正的转发的正确方式。但这只适用于真正的转发,不适用于修改或引用的 Tweets,因为这些并未使用 X 的转发功能。有关 AS 动词的说明 点击此处了解详情。 对于删除操作,请注意仅会包含数量有限的 fields,具体见下方示例负载。 “动词”:“Post” |
| postedTime | 日期(ISO 8601) | 执行该操作的时间,例如该 Post 的发布时间。 “postedTime”:“2018-10-10T20:19:24.000Z” |
| 生成器 | 对象 | 一个对象,表示用于发布 Post 的工具。它将包含名称(“displayName”)以及一个链接(“链接”)用于生成该 Post 的源应用。 “生成器”: “显示名称”:“X Web 客户端”, “链接”:“http://x.com” |
| 提供者 | 对象 | 一个表示该活动提供方的 JSON 对象。其中将包含一个 objectType (“服务”),提供者名称(“displayName”)、以及指向该服务提供方的链接’的网站(“链接”)。 “提供商”: “objectType”:“服务”, “displayName”:“X”, “链接”:“http://www.x.com” |
| 链接 | 字符串 | 该 Post 的永久链接。 “链接”:“http://x.com/API/statuses/1050118621198921728” |
| 正文内容 | 字符串 | 帖子内容。 在转发(Retweets)中,请注意,X 会在根级别通过添加来修改 body 的值”转推 @username”在转发(Retweets)中,请注意 X 会在开头添加“RT @username”,并截断原始文本、在末尾加上省略号,从而修改根级别的 body 值。因此,对于转发,你的应用应查看 object.body,确保提取的是原始 Post(被转发)的未修改文本。 “主体”:“随着卡迪夫城、水晶宫和赫尔城从英冠升级至英超,赛季末的保级大战将格外精彩。“ |
| 显示_文字_范围 | 数组 | 描述正文文本中指示可见 Post 的字符范围。以 @ 提及开头的 Post 起始索引将大于 0;附带媒体或超过 140 个字符的 Post 将通过 display_text_range 指定可见范围_文本_long 类型的取值范围_对象。 “显示_文本_范围”: [ 14, 42 ] 或 ”long_对象”: “显示_文本_范围”:[ 0, 277 ]… |
| 参与方 | 对象 | 表示发布该内容的 X 用户的对象。Actor 对象指代一个 X 用户,并包含与该用户相关的所有元数据。 参见 参与方对象详细信息 |
| inReplyTo | 对象 | 一个 JSON 对象(如适用)用于引用被回复的 Post。包含指向该 Post 的链接。 “inReplyTo”: “链接”:“http://x.com/GOP/statuses/349573991561838593” |
| 位置 | 对象 | 一个 JSON 对象,表示创建该 Post 时所在的 X“Place”。这是由 X 平台直接传递的对象。 参见 location 对象 |
| Twitter_实体 | 对象 | X 的 entities 对象’来自 X 的数据格式中的 entities 对象,包含 urls、mentions 和 hashtags 的列表。请在此参考 X 关于 Entities 的文档。请注意,在转发(Retweets)中,X 可能会在根级别截断其提取的实体值。因此,对于转发,您的应用应查看 object.twitter_entities,以确保您使用未截断的值。 参见 Twitter_entities 对象详情 |
| X(原 Twitter)_延长_实体 | 对象 | 来自 X 的对象’的原生数据格式,包含:“媒体”。对于任何包含 twitter_entities 对象且其“media”字段有数据的 Post,都将出现此对象_entities 对象在以下位置包含 data:“媒体”字段;如果该 Post 中存在多张照片,将会包含所有照片。请注意,对于含多张照片的 Post,应在此处获取媒体信息。 多张照片在“media”数组中表示为由逗号分隔的 JSON 对象”媒体”数组。 请参阅twitter_extended_entities 对象详细信息 |
| Gnip | 对象 | 一个添加到活动负载中的对象,用于指示匹配规则,并基于在流或产品中启用的增强处理,附加经丰富的data。 请参阅GNIP 对象详情 |
| 编辑_历史记录 | 对象 | 用于标示某个 Post 所有版本的唯一标识符。对于未编辑的 Post,仅有一个 ID。对于有编辑历史的 Post,将有多个 ID,按升序排列以对应编辑顺序,数组最后一个元素为最新版本。 可以使用这些 Post 的 id 来复原并查看该 Post 的历史版本。 示例: 编辑_历史记录”: “初始值_Tweet_id”:“1283764123” “编辑_Tweet_ids”: [“1283764123”,“1394263866”] |
| 编辑_控件 | 对象 | 如果存在,表示该 Post 剩余的可编辑时长和剩余编辑次数。Post 仅在创建后前 30 分钟内可编辑,且最多可编辑五次。 可以使用 Post 的 id 来恢复并查看该 Post 的早期版本。 示例: “编辑_控件”: “可编辑的_直至_ms”:123 “编辑记录_剩余”: 3 |
| 可编辑的 | 布尔 | 如果存在,表示一条 Post 在发布时是否符合编辑资格。此字段为静态字段,不会因 Post 达到可编辑的时间限制或编辑次数上限而从 True 切换为 False。‘当 Post 达到可编辑的时间上限或最大编辑次数时,t 会从 True 切换为 False。以下 Post 功能将导致该字段为 False: - 已推广的 Post - 帖子含有投票 - Post 是对他人线程的回复 - Post 为转推(注意:引用推文可进行编辑) - Post 为静默投放 - 社区 Post - 超级关注 Post - 协作型 Post |
其他 Post 属性
| 属性 | 类型 | 描述 |
|---|---|---|
| twitter_lang | string | |
| favoritesCount | int | 可为空。 表示该 Post 被 X 用户点赞的大致次数。 “favoritesCount”: 298 |
| retweetCount | int | 该 Post 被转发的次数。示例: “retweetCount”: 153 |
已弃用的属性
| 字段 | 类型 | 描述 |
| geo | object | 创建该 Post 时的点位坐标。 |
| twitter_filter_level | string | 为避免破坏性变更而保留的弃用字段 |
嵌套的 Post 活动对象
{ "id": "tag:search.x.com,2005:222222222222", "objectType": "activity", "verb": "post", "body": "Quoting a Tweet: https://t.co/mxiFJ59FlB", "actor": { "displayName": "TheQuoter2" }, "object": { "objectType": "note", "id": "object:search.x.com,2005:111111111", "summary": "https://t.co/mxiFJ59FlB" }, "twitter_entities": {}, "twitter_extended_entities": {}, "gnip": {}, "twitter_quoted_status": { "id": "tag:search.x.com,2005:111111111", "objectType": "activity", "verb": "post", "body": "console.log('Happy birthday, JavaScript!');", "actor": { "displayName": "TheOriginalTweeter" }, "object": { "objectType": "note", "id": "object:search.x.com,2005:111111111" }, "twitter_entities": {} } }
被转推的引用 Tweet:
长对象
Actor 对象
数据字典
| 属性 | 类型 | 描述 |
|---|---|---|
| objectType | string | ”objectType”: “person” |
| id | string | 此作者的唯一标识符的字符串表示形式。示例: “id:x.com:2244994945” |
| link | ”http://www.x.com/XDeveloeprs | |
| displayName | String | 用户自定义的名称。不一定是真实姓名。通常限制为 50 个字符,但可能会变化。示例: “displayName”: “XDevelopers” |
| preferredUsername | string | 此用户用于标识自己的屏幕名称、用户名或别名。具有唯一性但可能会更改。请尽可能使用 id 作为用户标识符。通常最多为 15 个字符,但某些历史账户可能存在更长的名称。示例:“preferredUsername”: “XDevelopers” |
| location | object | ** “location”: “objectType”:** “place”, “displayName”: “127.0.0.1” ** }** |
| links | array | 可为空。用户在其个人资料中提供的 URL。示例: ** “links”: [ { “href”:** “https://developer.x.com/en/community”, “rel”: “me” ** } ]** |
| summary | string | 可为空。用户自定义的 UTF-8 字符串,用于描述其账户。示例: “summary”: “The voice of the #XDevelopers team…“ |
| protected | Boolean | 当为 true 时,表示此用户已选择保护其帖子。请参阅关于公开和受保护的帖子。示例: “protected”: true |
| verified | Boolean | 当为 true 时,表示该用户拥有已验证账户。请参阅已验证账户。示例: “verified”: false |
| followersCount | Int | 此账户当前的关注者数量。在某些特殊情况下,此字段将暂时显示为 “0”。示例: “followers_count”: 21 |
| friendsCount | Int | 此账户正在关注的用户数量(即其”正在关注”)。在某些特殊情况下,此字段将暂时显示为 “0”。示例: “friends_count”: 32 |
| listedCount | Int | 此用户所属的公开列表数量。示例: “listed_count”: 9274 |
| favoritesCount | Int | 此用户在账户生命周期内点赞的帖子数量。字段名称使用英式拼写是出于历史原因。示例: “favourites_count”: 13 |
| statusesCount | Int | 用户发布的帖子数量(包括转帖)。示例: “statuses_count”: 42 |
| postedTime | date | 用户账户在 X 上创建的 UTC 日期时间。示例: “postedTime”: “2013-12-14T04:35:55.036Z” |
| image | string | 指向用户个人资料图片的基于 HTTPS 的 URL。示例: “image”: “https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg” |
不再支持(已弃用)的属性
| 字段 | 类型 | 说明 |
|---|---|---|
| utcOffset | null | 值将设为 null。仍可通过 GET account/settings 获取 |
| twitterTimeZone | null | 值将设为 null。仍可通过 GET account/settings 的 tzinfo_name 获取 |
| languages | null | 值将设为 null。仍可通过 GET account/settings 的 language 获取 |
示例:
位置对象
位置数据字典
| 字段 | 类型 | 描述 |
|---|---|---|
| objectType | string | 有关更详细的信息,请参见此处。示例: “objectType”: “place” |
| displayName | string | 位置的完整名称。 “displayName”: “United States” |
| name | string | 来自 X 的 place JSON 格式的地点名称。 |
| link | string | 指向该地点在 X 中完整 JSON 表示的链接。 “link”: “https://api.x.com/1.1/geo/id/27c45d804c777999.json” |
| geo | object | 来自 X 的地理坐标对象,可能是多边形或点。 参见 geo |
| countryCode | String | 表示包含该地点的国家/地区的两字母国家代码。示例: “countryCode”: “US” |
| country | String | 包含该地点的国家/地区名称。示例: “country”: “United States” |
profileLocations 衍生对象
| 字段 | 类型 | 描述 |
| address | object | 位于 gnip 对象 中的 profileLocation 的 location 对象内。由 profile geo 丰富 推断的地址,粒度可能不同。 “address”: { ** “country”: “United States”, “countryCode”: “US”, “locality”: “Providence”, “region”: “Rhode Island”, “subRegion”: “Providence County” }** |
| geo | object | 位于 gnip 对象 中的 profileLocation 的 location 对象内。由 profile geo 丰富 推断的位置重心坐标。 “geo”: { ** “coordinates”: [ -98.5, 39.76 ], “type”: “point” }** |
X 实体对象
示例:
X 扩展实体对象
示例:
Gnip 对象
数据字典
| 字段 | 类型 | 说明 |
| matching_rules | array | 包含一个匹配规则对象的数组,指示该活动所匹配到的规则。 “matching_rules”: [ ** { “tag”: null, “id”:** 1026514022567358500**, “id_str”:** “1026514022567358464” ** } ]** |
| urls | array | 包含活动中的链接数组,以及用于“URL 展开解析”增强的扩展 URL 元数据 ** “urls”: [ { “url”:** “https://t.co/tGQqNxxyhU”, “expanded_url”: “https://www.youtube.com/channel/UCwUxW2CV2p5mzjMBqvqLzJA”, “expanded_status”: 200**, “expanded_url_title”:** “Birdys Daughter”, “expanded_url_description”: “Premium, single-origin, handpicked Jamaica Blue Mountain Coffee” ** } ]** |
| profileLocations | array of location objects | 包含来自 Profile Geo(资料地理)增强的派生位置对象 ** “profileLocations”: [ { “address”: { “country”:** “Canada”, “countryCode”: “CA”, “locality”: “Toronto”, “region”: “Ontario” ** }, “displayName”:** “Toronto, Ontario, Canada”, ** “geo”: { “coordinates”: [ -79.4163, 43.70011 ], “type”:** “point” ** }, “objectType”:** “place” ** } ] }** |
示例:
活动流负载示例
twitter_extended_entities 的 Post 活动情况
Tweet 元数据时间轴
引言**
从本质上讲,X 是一个公开、实时、全球性的通信网络。自 2006 年以来,X 的演进既受用户使用模式与约定推动,也受新产品功能与改进推动。如果你使用 X 数据进行历史研究,了解这段演进的时间线对于从数据存档中发现你感兴趣的 Posts 至关重要。 X 最初作为一款简单的短信(SMS)移动应用上线,随后发展为一个完备的通信平台——拥有一整套 API。API 一直是 X 网络的支柱。第一版 API 在 X 上线后不久便推出。当在 2009 年首次引入为 Posts 添加地理标签时,该功能通过 Geo API 提供(随后,“为 Post 添加地理标签”的能力被集成到 X.com 的用户界面中)。如今,X 的 API 驱动着这张双向通信网络,使其成为突发新闻与信息分享的源头。基于这一全球、实时通信渠道进行构建的机会不胜枚举。 X 提供了两个历史 API,可访问每一条公开可用的 Post:Historical PowerTrack 和 Full-Archive Search API。这两个 API 都提供一组用于查询和收集目标 Posts 的_运算符_。这些运算符可匹配与每条 Post 关联的多种属性——多达数百项,例如 Post 的文本内容、作者的账号名,以及 Post 中分享的链接。Posts 及其属性以 JSON 编码,这是一种常见的基于文本的数据交换格式。因此,随着新功能的引入,会出现新的 JSON 属性,通常也会引入新的 API 运算符来匹配这些属性。如果你的用例需要_倾听_全球在 X 上说过的内容,那么越了解各类运算符从何时开始拥有可匹配的 JSON 元数据,你的历史 PowerTrack 过滤器就会越高效。 接下来,我们将介绍一些关键概念,为理解 Post 元数据的更新如何影响你定位感兴趣的数据信号铺垫基础。关键概念**
从用户约定到 X 的一等对象
Post 元数据、可变性、更新与时效性
“原生”媒体
has:videos、has:images 和 has:media。它们只会匹配通过 X 内建功能分享的媒体内容。若要匹配托管在 X 平台之外的媒体,你需要使用基于 URL 元数据进行匹配的运算符。
因此,在我们深入介绍 Historical PowerTrack 和 Full-Archive Search 产品细节之前,先来回顾一下 X 作为产品和平台随时间如何演进。
X 时间线
下面是 X 的部分时间线。以下大多数 X 的更新在某种程度上从根本上影响了用户行为、Post 的 JSON 内容、查询运算符,或三者皆有。从将 X 视作一个 API 平台的角度来看,以下事件在某种程度上影响了用于编码 Post 的 JSON 负载。反过来,这些 JSON 细节会影响 X 历史 API 对它们的匹配方式。
请注意,此时间线列表通常准确但并不全面。
2006
- 十月
- @replies 成为一种约定用法。
- cashtags 于 2012 年 6 月起可点击/可搜索。
- 十一月 - 推出 Favorites(收藏)。
2007
- 1月 - @replies 成为一等对象,并在 UI 中提供带有
in_reply_to元数据的回复按钮。 - 4月 - Retweets 成为一种惯例。
- 8月 - #hashtags 成为搜索和组织 Post 的主要工具。
2009
- 2月 - $cashtags 成为讨论股票代码的通用约定。
- 5月 - 推出 Retweet “beta”,在 Post 正文前加上 “Via @”。
- 6月 - 推出已验证账号。
- 8月 - Retweets 升级为一等对象,采用 “RT @” 模式并加入新的
retweet_status元数据。 - 10月 - 列表功能上线。
- 11月 - Post 地理标记 API 上线,首次为用户通过第三方应用分享位置信息提供方法。
2010
- 6月 - 推出 X Places,用于为 Post 添加地理标记。
- 8月 - 网站上线 Post 按钮,分享链接更为便捷。
2011
- 5月 - 推出 Follow 按钮,更便于关注与网站关联的账号。
- 8月 - 推出原生照片功能。
2012
- 6 月——$Cashtags 成为可点击、可搜索的链接。
2014
- 3月 - 支持照片标记及最多四张照片。引入了_扩展版_ X Entities 元数据。
- 4月 - X 界面原生支持表情符号。自至少 2008 年起,表情符号已在 Post 中被广泛使用。
2015
- 4月 - 由于 X 的“post”用户界面设计调整,带地理标签的 Post 数量减少。
- 10月 - 推出 X Polls。Polls 最初仅支持两个选项,投票期限为 24 小时。自 11 月起,Polls 支持四个选项,投票期限范围为 5 分钟至 7 天。Poll 的元数据于 2017 年 2 月提供(仅限富化的原生格式)。
2016
- 2月 - 在 Post 撰写框内原生托管并可搜索的 GIF。
- 5月 - 宣布 “Doing More with 140”(dmw140),提出针对 Post 的 140 字符限制在处理回复与附带媒体方面的新方式。
- 6月 - 原生视频支持。
- 6月 - 引用转发(Quoted Retweet)全面开放。
- 6月 - 推出可添加到照片上的贴纸。
- 9月 - 推出“原生附件”,结尾的 URL 不计入 140 字符(“dmw140,第 1 部分”)。
2017
- 2月 - 在 Post 元数据中包含 X Poll 元数据(仅限增强的原生格式)。
- 4月 - 推出“简化回复”:被回复的账号不计入 140 个字符(“dmw140,第 2 部分”)。
- 5月 - GDPR 更新:user.time_zone 设为 null,user.utc_offset 设为 null,user.profile_background_image_url 设为默认值
- 6月 - 更新引用推文格式变更
- 9月29日 - 向小规模测试群体推出可编辑 Post 的功能。在适用时,会将已编辑 Post 的元数据添加到 Post 对象中。这包括 edit_history 和 edit_controls 对象。对于在可编辑功能推出前创建的 Posts,这些元数据不会返回。没有与这些元数据关联的 Operators。要了解 Post 编辑的工作方式,请参阅编辑 Posts 基础
lang: Operator。X 提供语言分类服务(支持 50 多种语言),X API 会在为每个 Post 生成的 JSON 中提供此元数据。因此,如果某条 Post 使用西班牙语撰写,则“lang” JSON 属性将设置为“es”。因此,如果你构建包含 lang:es 子句的筛选器,它将只匹配被分类为西班牙语的 Post 消息。
时间线信息还有助于更好地解读接收的 Post 数据。假设你在研究 2008 年和 2012 年夏季奥运会的内容传播情况。如果你只应用 is:retweet Operator 来匹配转发,2008 年将没有数据匹配;而在 2012 年则可能有数百万次转发。由此你可能会错误地得出结论,认为 2008 年转发并不是一种用户习惯,或者当年没人转发相关内容。由于 Retweets 在 2009 年成为一等对象,你需要添加 “RT @” 规则子句来帮助识别 2008 年的转发。
Retweets 和 Post 语言分类都是具有悠久历史且包含许多产品细节的 Post 属性示例。下面我们将讨论这些以及其他对匹配与理解 X Data 至关重要的属性类别的更多细节。
识别假阴性
has:videos 运算符(该运算符匹配带有本机视频的 Posts)来写规则,那么该子句将无法匹配到 2015 年之前的任何 Post。
不过,早在 2015 年之前,在 X 上分享视频就很常见了。在此之前,用户通常分享的是指向外部托管视频的链接;到了 2015 年,X 才把“分享视频”功能直接内置到平台中。要寻找这些更早的目标 Posts,你可以加入诸如 url:"youtube.com" 的规则子句。
请注意,对于 Search APIs,随着索引重建,确有某些元数据被“回填”的情况。一个典型例子是 cashtag 运算符后,Search 索引被重建,在此过程中会从所有 Post 正文中抽取符号实体,甚至包括 2006 年早期、当时 $ 主要用于俚语的内容;“I hope it $oon!”。
识别并基于与您的用例相关的重要 Post 属性进行筛选
X 个人资料
原始 Post 与转推(Retweets)
is:retweet 运算符允许用户包含或排除转推。如果拉取的是 2009 年 8 月之前的数据,用户需要准备两套用于匹配(或不匹配)转推的策略。对于 2009 年 8 月之前的时段,需要检查 Post 文本本身,使用精确短语匹配来识别“RT @”模式。对于 2009 年 8 月之后的时段,可以使用 is:retweet 运算符。
Post 语言分类
lang: 运算符。对于 Historical PowerTrack,X 的语言分类元数据自 2013 年 3 月 26 日起在存档中可用。
帖文地理标注
- 帖文内容中的地理引用
- 用户为帖文添加的地理标签
- 用户在账号资料中设置的“所在地”位置