Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Twitter (X) 未设置 Auth Token 时报错 Twitter web API error: 404 #81

Closed
kumazu opened this issue Aug 2, 2023 · 8 comments
Closed
Labels
enhancement New feature or request site:twitter

Comments

@kumazu
Copy link

kumazu commented Aug 2, 2023

问题描述

参考 #80 ,Twitter (X) 仍对接口调用有限制,旧版本 Nazurin 会报错 Response Error: 0 Attempt to decode JSON with unexpected mimetype:,新版本 Nazurin 会报错 Twitter web API error:

希望 Nazurin 引入绕过 Twitter (X) 接口限制的措施,具体如下:

建议措施

加入对 Nitter 的支持

Nitter 是一个活跃地维护的 Twitter (X) 的隐私替代前端,可以支持 Nitter 以绕过 Twitter (X) 的直接限制。

用户应当可以自行配置两个 list,允许用户自定义 Nitter 实例作为 Twitter (X) 的替代方案,如:

X_FIX_LINK  = ["fxtwitter.com", "vxtwitter.com", ]
NITTER_INST = ["nitter.net", "nitter.it", ]

X_FIX_LINK 用于接受 Fix Twitter Link 服务的链接,即遇到这些域,可以视为 twitter.com 继续处理。也可以在程序中预置这些域,推荐参考 https://github.com/jonjomckay/fritter/blob/master/android/app/src/main/AndroidManifest.xml 内给出的域列表。

NITTER_INST 用于配置 Nitter 实例的域。当 NITTER_INST 未配置或为空 List 时,应当仅向 twitter.com 发出请求。当 NITTER_INST 已配置时,应当先请求 twitter.com,如失败再依次向 NITTER_INST 中的实例请求,直到成功或没有可用的实例。

参考第三方客户端绕过接口限制的措施

一些第三方客户端已经引入了绕过 Twitter (X) 接口限制的方法,如 TheHCJ/Quackerj-fbriere/squawker ,可以作为参考。


希望您可以参考上述两种方案引入绕过 Twitter (X) 接口限制的措施,谢谢。

@y-young y-young added enhancement New feature or request site:twitter labels Aug 2, 2023
@y-young
Copy link
Owner

y-young commented Aug 3, 2023

X_FIX_LINK 用于接受 Fix Twitter Link 服务的链接,即遇到这些域,可以视为 twitter.com 继续处理。也可以在程序中预置这些域,推荐参考 https://github.com/jonjomckay/fritter/blob/master/android/app/src/main/AndroidManifest.xml 内给出的域列表。

因为现在只是匹配 twitter.com,所以 fxtwitter.com 这类以 twitter.com 结尾的域名应该都能被匹配并当作 Twitter 处理。如果只是希望当作 Twitter 链接处理但继续使用官方 API 的话我考虑一下提供配置域名的方案,不过可能需要修改 Python 文件而不是配置环境变量。

NITTER_INST 用于配置 Nitter 实例的域。当 NITTER_INST 未配置或为空 List 时,应当仅向 twitter.com 发出请求。当 NITTER_INST 已配置时,应当先请求 twitter.com,如失败再依次向 NITTER_INST 中的实例请求,直到成功或没有可用的实例。

Nitter 实例貌似并没有提供 API 接口,所以不能当作 Twitter API 的备用选项,其自身也没有类似的接口,无法获取到跟官方 API 相似的推文详细数据,即使要支持也得当作新的图源处理。

Twitter (X) 仍对接口调用有限制,旧版本 Nazurin 会报错 Response Error: 0 Attempt to decode JSON with unexpected mimetype:,新版本 Nazurin 会报错 Twitter web API error:
一些第三方客户端已经引入了绕过 Twitter (X) 接口限制的方法,如 TheHCJ/Quackerj-fbriere/squawker ,可以作为参考。

Nitter 和这类客户端应该依然使用的是官方 API,所以理论上无法绕过接口限制,但调用 API 的方法可以作为参考。不过我这边 Twitter 的功能依然正常,不知道你那边是什么问题,最好还是具体看一下原因。报错 Twitter web API error: 之后有详细的信息吗?

@kumazu
Copy link
Author

kumazu commented Aug 3, 2023

报错 Twitter web API error: 之后有详细的信息吗?

Telegram 消息为 Twitter web API error:

后台 Log

INFO     - nazurin.bot:123 - update:********* - Collection update: site=twitter, match=('**********************',)
INFO     - nazurin.sites.twitter.api.web:114 - update:********* - Fetching tweet ********************** from web API
ERROR    - nazurin.sites.twitter.api.web:146 - update:********* - Web API Error: 404,

冒号后的内容似乎没有在 Telegram 侧提示。这里提示 404,但推文确实存在。


Nitter 实例貌似并没有提供 API 接口,所以不能当作 Twitter API 的备用选项。

加入 Nitter 是为了 Fallback 保障可用性。但 Nitter 的确未提供 REST API (在 Roadmap 但已三年未解决),可能不太方便加入。是我考虑不周,请见谅。


Nitter 和这类客户端应该依然使用的是官方 API,所以理论上无法绕过接口限制,但调用 API 的方法可以作为参考。不过我这边 Twitter 的功能依然正常,不知道你那边是什么问题,最好还是具体看一下原因。

在两种网络环境下打开同一个链接 twitter.com/[handle]/status/[id]

Note

  1. Fritter 是一个无需登录的第三方 Twitter 客户端。在 Twitter 解除限流后,该应用还是经常无法使用。下文的 Fritter 均是 v3.0.0-beta9 (09dd537)。
  2. Fritter 经常无法使用后,出现了多个活跃维护的 Fork ,QuackerSquawker 是这些 Fork 的代表。下文的 Squawker 均是 v3.2.0 (af31480)。

环境1 (称之为“脏IP环境”)

  • 完整浏览器: 可以打开,有时无法加载回复。
  • Nazurin: Web API Error: 404
  • Fritter: Unable to load this tweet,附带有额外信息
    {
      "statusCode": 404,
      "reasonPhrase": "Not Found",
      "content": ""
    }
  • Squawker: 正常加载(含回复)。

环境2 (称之为“干净IP环境”)

  • 完整浏览器: 可以打开。
  • Nazurin: 正常工作。
  • Fritter: 正常加载。
  • Squawker: 正常加载。

由于“脏IP环境”中,Fritter 和 Nazurin 出现了相同的错误 404,而 Fritter 的 Fork 可以正常加载。

我并不了解编程,所以我在这里提出一个浅薄的观点: Fritter 和 Nazurin 调用 Twitter API 的方式会受到 Twitter 的风控,而 Squawker 调用 Twitter API 的方式一定程度上缓解(绕过)了这种风控。


非常感谢您对这个 issue 的关注。

@y-young
Copy link
Owner

y-young commented Aug 3, 2023

由于“脏IP环境”中,Fritter 和 Nazurin 出现了相同的错误 404,而 Fritter 的 Fork 可以正常加载。

是所有的推文都会出现问题还是特定推文才会?如果是特定推文的话,该推文有没有某种特殊性,例如 NSFW、作者限制可见性?

方便的话可否提供具体例子?如果不方便公开的话可以使用 PGP 加密,将 Recipient 设置为我 (yyoung)。

之后我会看一下 Squawker 调用 Twitter API 的方式,但如果没有错误复现方法的话恐怕难以测试。

@kumazu
Copy link
Author

kumazu commented Aug 4, 2023

是所有的推文都会出现问题还是特定推文才会?如果是特定推文的话,该推文有没有某种特殊性,例如 NSFW、作者限制可见性?

所有推文。

以 40原 老师的推文为例: https://twitter.com/40hara/status/1283175216773046272

  • Telegram 侧:
    image
  • 服务器侧:
INFO     - nazurin.middleware:25 - update:********* - Message ****: https://twitter.com/40hara/status/1283175216773046272
INFO     - nazurin.bot:123 - update:********* - Collection update: site=twitter, match=('1283175216773046272',)
INFO     - nazurin.sites.twitter.api.web:114 - update:********* - Fetching tweet 1283175216773046272 from web API
INFO     - aiohttp.web_log:206 -  - 127.0.0.1 "POST /*********:******************************* HTTP/1.1" 200 152 "-" "-"
ERROR    - nazurin.sites.twitter.api.web:146 - update:********* - Web API Error: 404,

@y-young
Copy link
Owner

y-young commented Aug 6, 2023

我大概知道原因了,应该是你没有设置你自己的 auth token,目前的 Twitter API 和 Authorization Token 需要登录才能使用,而 Fritter 使用的 Authorization Token 不需要登录(但是这样无法浏览敏感推文)。我在 fix/twitter-api 分支放了新的代码,你可以试一下,如果还是不行的话代码里还有几个可切换的选项(94行和 130行),可以试试。

@kumazu kumazu changed the title 希望引入绕过 Twitter (X) 接口限制的措施 Twitter (X) 报错 Twitter web API error: 404 Aug 6, 2023
@kumazu
Copy link
Author

kumazu commented Aug 6, 2023

我在 fix/twitter-api 分支放了新的代码,你可以试一下,如果还是不行的话代码里还有几个可切换的选项(94行和 130行),可以试试。

1.3 Fritter 后的 API 地址可以使用,非常感谢 o((>ω< ))o 。

希望在 文档的 Twitter 章节 (Src) 添加相应说明。

@kumazu kumazu closed this as completed Aug 6, 2023
@y-young y-young changed the title Twitter (X) 报错 Twitter web API error: 404 Twitter (X) 未设置 Auth Token 时报错 Twitter web API error: 404 Aug 6, 2023
@y-young
Copy link
Owner

y-young commented Aug 6, 2023

再帮我测试一下 1.2 Latest web API 能不能用吧,理论上也是可以的

这算是个 bug,所以 Issue 我先开着,等正式修复了再关

@y-young y-young reopened this Aug 6, 2023
@kumazu
Copy link
Author

kumazu commented Aug 6, 2023

1.2 Latest web API 也可以用。(未测试 NSFW 推文)

@y-young y-young closed this as completed in 6037c0a Aug 8, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request site:twitter
Projects
None yet
Development

No branches or pull requests

2 participants