Twitter 访客 API 接口

前言

总所周知,Twitter的官方API需要推特开发者账号,申请流程非常麻烦。很久以前,我写过用Selenium来自动操作浏览器,以达到获取推特上画师mafumuffin的全部插画的功能。但是这种效率还是太低了,还占用了电脑的大量资源。近期我浏览外网时,看到了有关爬取Twitter的文章,里面提供了几个网友抓取出来的Twitter的查询接口,所以我打算重新写一个获取推文的程序。网上没有官方的整理,我会结合官方给出的资料,尽可能多的整理出一些Twitter API。我们把这些API接口先笼统扯呼为“Twitter 访客API”吧。注意:部分官方的API是机翻。

下面的示例都以Python代码展示,在Python代码之前,我们预先写了一下内容:

import requests

# ------ 定义请求时的必要参数 ------

# 代理地址
PROXIES = {
    'http': 'http://127.0.0.1:7890',
    'https': 'http://127.0.0.1:7890'
}

# 是否 SSL 验证
SSL_VER = False

# 禁用掉警告
requests.packages.urllib3.disable_warnings()

Twitter 访客API 基本请求头

推特访客API有反爬措施,下面是网友总结的基本请求头。每次请求时,请求头至少不少于下面的内容。

REQUEST_HEADER =  {
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0',
  'Accept': '*/*',
  'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
  'x-guest-token': '',
  'x-twitter-client-language': 'zh-cn',
  'Sec-Fetch-Dest': 'empty',
  'Sec-Fetch-Mode': 'cors',
  'Sec-Fetch-Site': 'same-origin',
  'authorization': 'Bearer AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA',
  'Referer': 'https://twitter.com/',
  'Connection': 'keep-alive'
}

其中的 x-guest-token是访客的验证token,想要获取x-guest-token请参考下面的API:获取 guest_token
其中的authorization是固定值,不会更换。

{
 "created_at": "Wed Oct 10 20:19:24 +0000 2018",
 "id": 1050118621198921728,
 "id_str": "1050118621198921728",
 "text": "To make room for more expression, we will now count all emojis as equal—including those with gender‍‍‍ ‍‍and skin t… https://t.co/MkGjXf9aXm",
 "user": {},  
 "entities": {}
}

上面这个是推特数据返回的一般格式,详情可以参阅 https://developer.twitter.com/en/docs/twitter-api/v1/data-dictionary/object-model/tweet

API:获取 guest_token

接口说明

获取访客验证token,保证其它 Twitter 访客API 可以正常调用。

请求 URL:https://api.twitter.com/1.1/guest/activate.json
请求方式:post

请求头必须携带上面的标准基本请求头中的authorization参数。

接口示例

result = requests.post("https://api.twitter.com/1.1/guest/activate.json", headers=REQUEST_HEADER, proxies=PROXIES, verify=SSL_VER).json()
if 'guest_token' not in result:
    raise BaseException("获取 Twitter 失败!请确认没有被限制!")
print(result['guest_token'])

API:获取用户时间线(user_timeline)

接口说明

返回由 screen_name 或 user_id 参数指示的用户发布的最新推文的集合。
属于受保护用户的用户时间线只能在经过身份验证的用户“拥有”时间线或者是所有者的批准追随者时请求。
返回的时间线相当于在 Twitter 上被视为用户个人资料的时间线。
此方法最多只能返回用户最近的 3,200 条推文,转推包含在此总数中。所以无论在请求此资源时 include_rts 是否设置为 false ,总数仍然按照有转推的计算。

你可以查看官方的文档:https://developer.twitter.com/en/docs/twitter-api/v1/tweets/timelines/api-reference/get-statuses-user_timeline

请求 URL:https://api.twitter.com/1.1/statuses/user_timeline.json
请求方式:get

请求头必须携带上面的标准基本请求头中的authorizationhex-guest-token参数。

响应格式 JSON
需要验证 Yes
速率限制 Yes
15分钟内最大请求数(用户验证) 900
15分钟内最大请求数(APP验证) 1500
24小时内最大请求数 100,000

注意:24小时是指你请求发出后的24小时,属于滚动周期。

参数 类型 描述 示例
user_id 可选 返回时间线结果的用户ID。 12345
screen_name 可选 返回时间线结果的用户的显示用户名(推特用户名)。 noradio
since_id 可选 返回 ID 大于(最近更新的)指定 ID 的结果。通过 API 访问推文的数量是有限制的。如果自 since_id 以来已经发生了限制推文的情况,则 since_id 将被强制设置为最早的可用 ID。 12345
count 可选 指定尝试检索的推文数量,每个不同请求最多为 200。count 的值最好被视为返回推文数量的限制,因为在应用了 count 之后,已暂停或已删除的内容将被移除。我们在计数中包括转推,即使未提供 include_rts。建议在使用此 API 方法时始终发送 include_rts=1。
max_id 可选 返回 ID 小于(即早于)或等于指定 ID 的结果。 54321
trim_user 可选 当设置为 true 、 t 或 1 时,时间线中返回的每条推文都将包含一个用户对象,其中仅包含状态作者数字 ID。省略此参数以接收完整的用户对象。 true
exclude_replies 可选 此参数将防止回复出现在返回的时间轴中。将 exclude_replies 与 count 参数一起使用意味着您将收到最多 count 个推文——这是因为 count 参数在过滤掉转推和回复之前检索了那么多推文。 true
include_rts 可选 当设置为 false 时,时间线将去除任何原生转推(尽管它们仍将计入时间线的最大长度和由 count 参数选择的片段)。注意:如果您将 trim_user 参数与 include_rts 结合使用,则转推仍将包含完整的用户对象 false

响应返回示例

接口示例

result = requests.get("https://api.twitter.com/1.1/statuses/user_timeline.json?"
"screen_name=mafumuffin&"
"include_rts=false&"
"exclude_replies=true&"
"count=4", headers=REQUEST_HEADER, proxies=PROXIES, verify=SSL_VER).json()
for data in result:  # 遍历获取的每个推文
print("此条推文发布时间:", data['created_at'])
print("此条推文ID:", data['id_str'])
print("此条推文内容:", data['text'])
if 'media' not in data['entities']:
print("此条推文携带的附件:无\n", end="")
print("-"*100)
continue
print("此条推文携带的附件:\n", end="")
for medium in data['extended_entities']['media']:
print(f"{medium['media_url']}")
if medium['type'] == 'photo':
for size in medium['sizes'].keys():
print(f"{size}: {medium['media_url']}?format=jpg&name={size}")
elif medium['type'] == 'video':
for variant in medium['video_info']['variants']:
print(f"{variant['content_type']} {variant['bitrate'] if 'bitrate' in variant else 'm3u8'}: {variant['url']}")
print("-"*100)

API:获取推文数据

接口说明

返回由 id 参数指定的单个推文,推文的作者也将嵌入推文中。

你可以查看官方的文档:https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-statuses-show-id

请求 URL:https://api.twitter.com/1.1/statuses/show.json
请求方式:get

请求头必须携带上面的标准基本请求头中的authorizationhex-guest-token参数。

响应格式 JSON
需要验证 Yes
速率限制 Yes
15分钟内最大请求数(用户验证) 900
15分钟内最大请求数(APP验证) 900
参数 类型 描述 示例
id 必须 推文的ID。 123
trim_user 可选 当设置为 true 、 t 或 1 时,时间线中返回的每条推文都将包含一个用户对象,其中仅包含状态作者数字 ID。省略此参数以接收完整的用户对象。 true
include_my_retweet 可选 当设置为 true 、 t 或 1 时,验证用户转发的任何返回的推文都将包含一个额外的 current_user_retweet 节点,其中包含转发的源状态的 ID。 true
include_entities 可选 设置为 false 时将不包括附件。 false
include_ext_alt_text 可选 如果替代文本已添加到任何附加的媒体实体,此参数将在媒体实体的顶级键中返回一个 ext_alt_text 值。如果未设置任何值,则返回 null true
include_card_uri 可选 当设置为 true 、 t 或 1 时,检索到的推文将包含 card_uri 属性,前提是推文附加了一张广告卡片,并且该卡片是使用 card_uri 值附加的。 true

响应返回示例

API:获取转推数据

接口说明

返回由 id 参数指定的推文的 100 个最近转推的集合。

你可以查看官方的文档:https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-statuses-retweets-id

请求 URL:https://api.twitter.com/1.1/statuses/retweets/:id.json
请求方式:get

请求头必须携带上面的标准基本请求头中的authorizationhex-guest-token参数。

响应格式 JSON
需要验证 Yes
速率限制 Yes
15分钟内最大请求数(用户验证) 75
15分钟内最大请求数(APP验证) 300
参数 类型 描述 示例
id 必须 推文的ID。 123
trim_user 可选 当设置为 true 、 t 或 1 时,时间线中返回的每条推文都将包含一个用户对象,其中仅包含状态作者数字 ID。省略此参数以接收完整的用户对象。 true
count 可选 指定要检索的记录数。必须小于或等于 100。 true

响应返回示例

API:获取转推 IDs

接口说明

返回最多 100 个用户 ID 的集合,这些用户 ID 属于转发了由 id 参数指定的推文的用户。

你可以查看官方的文档:https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-statuses-retweeters-ids

请求 URL:https://api.twitter.com/1.1/statuses/retweeters/ids.json
请求方式:get

请求头必须携带上面的标准基本请求头中的authorizationhex-guest-token参数。

响应格式 JSON
需要验证 Yes
速率限制 Yes
15分钟内最大请求数(用户验证) 75
15分钟内最大请求数(APP验证) 300
参数 类型 描述 示例
id 必须 推文的ID。 327473909412814850
count 可选 指定要检索的记录数。必须小于或等于 100。 5
cursor 半必须 导致 ID 列表一次被分成不超过 100 个 ID 的页面。
返回的ID数量不保证为100个,因为查询连接后会过滤掉挂起的用户。
如果未提供游标,则假定值为 -1,即第一个“页面”。
来自 API 的响应将包含 previous_cursor 和 next_cursor 以允许来回翻页。
有关更多信息,请参阅 Twitter的游标 文档。
虽然此方法支持游标参数,但可以在单个游标集合中返回整个结果集。
将 count 参数与此方法一起使用将不会提供用于此参数的分段游标。
12893764510938
stringify_ids 可选 由于推文的大小,许多编程环境不会使用推文 ID。提供此选项以将 ID 作为字符串返回 true

 

响应返回示例

API:获取点赞推文

接口说明

返回验证用户或指定用户点赞的最近 20 条推文。

你可以查看官方的文档:https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-favorites-list

请求 URL:https://api.twitter.com/1.1/favorites/list.json
请求方式:get

请求头必须携带上面的标准基本请求头中的authorizationhex-guest-token参数。

响应格式 JSON
需要验证 Yes
速率限制 Yes
15分钟内最大请求数(用户验证) 75
15分钟内最大请求数(APP验证) 75
参数 类型 描述 示例
user_id 可选 返回时间线结果的用户ID。 12345
screen_name 可选 返回时间线结果的用户的显示用户名(推特用户名)。 twitterdev
count 可选 指定尝试检索的推文数量,每个不同请求最多为 200。count 的值最好被视为返回推文数量的限制,因为在应用了 count 之后,已暂停或已删除的内容将被移除。我们在计数中包括转推,即使未提供 include_rts。建议在使用此 API 方法时始终发送 include_rts=1。 5
since_id 可选 返回 ID 大于(最近更新的)指定 ID 的结果。通过 API 访问推文的数量是有限制的。如果自 since_id 以来已经发生了限制推文的情况,则 since_id 将被强制设置为最早的可用 ID。 12345
max_id 可选 返回 ID 小于(即早于)或等于指定 ID 的结果。 54321
include_entities 可选 当设置为 false 时,附件将被省略。 false

响应返回示例

API:获取 oEmbed 兼容格式 的控件

接口说明

以 oEmbed 兼容格式返回单个推文,由推文 Web URL 或推文 ID 指定。
当页面上包含 Twitter 的小部件 Java 脚本时,返回的 HTML 片段将被自动识别为嵌入式推文。
oEmbed 端点允许自定义嵌入式推文的最终外观,方法是在 HTML 标记中设置相应的属性,默认情况下由与 HTML 响应捆绑在一起的 Twitter Java 脚本解释。
随着 Twitter 添加新功能或调整其 Tweet 表示,返回标记的格式可能会随着时间而改变。
推文后备标记旨在缓存在你的服务器上,最长可达 cache_age 中指定的建议缓存生存期。

你可以查看官方的文档:https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-statuses-oembed

请求 URL:https://publish.twitter.com/oembed
请求方式:get

响应格式 JSON
需要验证 No
速率限制 No
名称 默认值 描述
url必须
字符串
要嵌入的推文的 URL
maxwidth
整数 [220..550]
325 渲染推文的最大宽度(以整像素为单位)。如果提供的值低于或高于允许的范围,则将返回最小或最大支持宽度;重置宽度值将反映在返回的width属性中。请注意,Twitter 不支持 oEmbed maxheight 参数。推文本质上是文本,因此高度是不可预测的,不能像图像或视频一样缩放。相关地,oEmbed 响应不会为 height 提供值。需要推文的一致高度的实现应参考下面的 hide_thread 和 hide_media 参数。
hide_media
布尔值,字符串或整数
false 设置为 true"t" 或 1 时,推文中的链接不会展开为照片,视频或链接预览。
hide_thread
布尔值,字符串或
整数
false 设置为 true"t" 或 1 时,在请求的推文是回复另一条推文时,不会显示对话线中先前推文的折叠版本。
omit_script
布尔值,字符串或整数
false 设置为 true"t" 或 1 时,不会返回负责加载 widgets.js 的 <script>。您的网页应该包括自己的 widgets.js 引用,以便在所有 Twitter 小部件(包括 嵌入推文)中使用。
align
枚举 {left,right,center,none}
none 指定嵌入的推文是否应该在页面中相对于父元素浮动在左边,右边或中间。
related
字符串
与您的内容相关的 Twitter 用户名的逗号分隔列表。如果观众选择回复,喜欢或转发嵌入的推文,此值将转发给 推文操作意图
lang
枚举(语言)
en 请求返回HTML和指定Twitter语言支持的嵌入推文中渲染的推文。

响应返回示例

API:多推文获取

接口说明

这个方法用于通过传递给 id 参数的逗号分隔值获取最多 100 条推文的完全水合推文对象。此方法特别适用于获取推文 ID 集合的详细信息(水合)。使用 GET statuses/show/:id 来检索单个推文对象。

使用此方法时需要注意几点:

  • 您必须关注受保护用户才能看到他们的最新推文。如果您不关注受保护用户,他们的状态将被删除。
  • 推文 ID 的顺序可能不匹配返回数组中推文的顺序。
  • 如果请求的推文未知或已删除,则该推文将不会在结果列表中返回,除非设置了 map 参数,在这种情况下它将返回 null 值。
  • 如果没有任何查找条件与有效推文 ID 匹配,则 map=false 时将返回空数组。
  • 强烈建议使用 POST 进行更大规模的请求。

注意:”水合推文” 指的是获取完整的推文信息,包括推文的所有元数据和附加信息,如用户信息、被赞数量、被转发数量等。这些信息通常不包含在简单的推文概要中。

你可以查看官方的文档:https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-favorites-list

请求 URL:https://api.twitter.com/1.1/statuses/lookup.json
请求方式:get 或者 post

请求头必须携带上面的标准基本请求头中的authorizationhex-guest-token参数。

响应格式 JSON
需要验证 Yes
速率限制 Yes
15分钟内最大请求数(用户验证) 900
15分钟内最大请求数(APP验证) 300
名称 必需 描述 示例
id 必需 由逗号分隔的推文 ID 列表,单次请求最多允许 100 个。 20 1050118621198921728
include_entities 可选 设置为 false 时,嵌入状态中可能出现的 entities 节点将不会包含在内。 false
trim_user 可选 设置为 truet 或 1 时,时间线中返回的每条推文将包含一个只包含状态作者数字 ID 的用户对象。省略此参数以接收完整的用户对象。 true
map 可选 使用 map 参数时,尽管不存在或当前用户无法查看的推文将仍有其键表示,但将与其配对明确的 null 值。 true
include_ext_alt_text 可选 如果已经向任何附加媒体实体添加了 alt 文本,则此参数将在媒体实体的顶级键中返回一个 ext_alt_text 值。如果没有设置值,则将返回 null true
include_card_uri 可选 设置为 truet 或 1 时,返回的每条推文将包含一个 card_uri 属性,当推文附有广告卡片且该卡片使用 card_uri 值附加时。 true

响应返回示例

API:推文搜索

接口说明

返回与指定查询相关的相关 推文 集合。

请注意,Twitter 的搜索服务以及扩展的搜索 API 不是所有推文的终极来源。并非所有推文都会被索引或通过搜索界面提供。

要了解如何有效使用 Twitter搜索,请参阅标准搜索运算符页面,获取可用的筛选器运算符列表。此外,请参阅 处理时间线 页面,了解如何使用 since_id 和 max_id 导航结果的最佳实践。

你可以查看官方的文档:https://developer.twitter.com/en/docs/twitter-api/v1/tweets/search/api-reference/get-search-tweets

请求 URL:https://api.twitter.com/1.1/search/tweets.json
请求方式:get

请求头必须携带上面的标准基本请求头中的authorizationhex-guest-token参数。

响应格式 JSON
需要验证 Yes
速率限制 Yes
15分钟内最大请求数(用户验证) 180
15分钟内最大请求数(APP验证) 450
允许更改推文特点 Yes
名称 必须 描述 示例
q 必须 UTF-8编码,URL编码的最大长度为500个字符的搜索查询,包括运算符。查询可能还受复杂性限制。 @noradio
include_ext_edit_control 可选 必须设置为true,才能在Tweet对象中返回编辑后的Tweet元数据。

include_ext_edit_control=true

请注意,历史推文可能不包含编辑后的Tweet元数据。

要了解更多关于如何支持编辑后的推文,请参阅编辑推文基础页面。

true
geocode 可选 返回位于给定纬度/经度半径内的用户发布的推文。首先使用地理标记API获取位置,如果失败则使用Twitter个人资料。参数值由 ” latitude,longitude,radius “指定,其中半径单位必须指定为 ” mi “(英里)或 ” km “(公里)。请注意,您不能通过API使用near运算符对任意位置进行地理编码;然而,您可以使用此geocode参数直接搜索附近的地理编码。使用半径修改器时,将考虑最多1,000个不同的“子区域”。 37.781157 -122.398720 1mi
lang 可选 限制推文为给定语言,由ISO 639-1代码指定。语言检测是尽力而为的。 eu
locale 可选 指定发送的查询语言(目前仅ja有效)。这适用于特定语言的消费者,默认值应该在大多数情况下都可以工作。 ja
result_type 可选 可选。指定您希望接收的搜索结果类型。当前默认值为”mixed”。有效值包括:

mixed : 在响应中包括流行结果和实时结果。

recent : 仅返回最近的结果。

popular : 仅返回最受欢迎的结果。

mixed recent popular

响应返回示例

暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇