Twitter API是否免费?我已经建立了一个网站来找出答案
#javascript #网络开发人员 #showdev #twitter

上周,Twitter宣布了免费访问其公共API的结束。宣布是在变化发生前一周的in a Tweet,缺乏有关定价的任何细节,只有vaguely promised more information

今天是2月8日,即宣布截止日期的前一天。 Twitterdev帐户,社区论坛或开发人员新闻通讯未提供更多信息。只有免费的免费书面API的宽松的寄宿机提供了良好的内容。

为了帮助其他开发人员,我建立了一个网站,为问题提供了明确的答案:Is Twitter API Free?

一个单独的网站

Screenshot of the website: Is Twitter API free? Yes. Not for long. The deadline is tomorrow. But maybe you can use it for posting if Elon likes you

截至2月8日,Istwitterapifree.com。

single-serving sites有一个悠久的传统,例如Tired.comZombo.com。我想建立一个自己的单一服务网站,这似乎是一个很好的机会,可以从这种混乱的情况下玩弄一些乐趣。

还告诉我,瑞安·金(Ryan King),Twitter 33,relaunched他的Is Twitter Down?网站经历了十多年,提醒了过去的失败鲸鱼。

幕后

我本来可以用``是的''建立一个静态的html站点,然后将其更改为“不清楚的Twitter”插头。这是最简单的事情,所以我显然对整个事情进行了过度设计。

该网站定期通过github操作再生并部署到github页面。在构建过程中,为announcement tweet的存在进行了一个Twitter API调用。

我不知道Twitter API将如何传达付费访问,但是我认为API呼叫会以某种方式失败。如果Twit先生改变主意,Twitter也可能会删除推文。因此,呼叫的成功或失败决定页面上显示的内容。

我挑战自己要避免任何额外的包裹,因此site generator logic用Vanilla JavaScript编写了一些Node.js内置库。我正在使用内置的fetch函数,该函数自Node.js 18.

以来就没有任何标志可用

我也很好奇我的愚蠢网站有多少访客。 Goat Counter是此类项目的完美网络分析工具,免费且友好。实际上,您可以查看网站的流量on a public dashboard

饲料和机器人

没有Twitter botMastodon bot(当然),该网站将是不完整的。我想避免实现发布逻辑,因此我在网上使用了最不受欢迎的技术:好的旧RSS feed(嗯,从技术上讲是原子供稿)。

站点发生器创建一个feed with a single entry。该条目由当前日期确定,因此饲料阅读器每天最多一次显示一个新项目,无论该网站被再生多少次。

此提要传递给自动化。对于Twitter,我使用IFTTT将新的供稿项目发布到Twitter帐户。我认为像IFTTT这样的较大的提供商已经为Twitter API付费,因此不会受到影响。

Screenshot of IFTTT applet: If new feed item, then post a tweet.

IsTwApiFree bot背后的整个魔力。

为了发布到Mastodon,我最初尝试了Mastofeed,但我还没有想到一种将饲料条目的内容包含在帖子中的方法。我转向GitHub操作,尤其是Mastofeedbot,该动作在更新网站后作为单独操作运行。

学习的教训:INTL API

生成的站点显示剩下多少天,直到截止日期为止。真正帮助我的是JavaScript的内置Internationalization API,尤其是Intl.RelativeTimeFormat,以将2天或昨天之类的琴弦的数量格式化为弦。我正在计算now和假定的截止日期之间的天数,该截止日期设置为太平洋时间的午夜。

const deadline = new Date(1675929600 * 1000); // Feb 9 midnight PST
const now = new Date();

// Calculate millisecond difference between the dates
const diffMs = deadline.getTime() - now.getTime();
// Round the difference to number of days
const diffDays = Math.round(diffMs / (1000 * 3600 * 24));

const rtf = new Intl.RelativeTimeFormat("en", {
  localeMatcher: "best fit",
  numeric: "auto",
  style: "long",
});

// 3 → "in 3 days"
// 0 → "today"
// -1 → "yesterday" etc.
const daysRelative = rtf.format(diffDays, "days");

return diffDays > 0
  ? `The deadline is ${daysRelative}`
  : `The deadline was ${daysRelative}`;

虽然使用日期的操作仍然很痛苦,但INTL API至少简化了格式化。我期待对Temporal API的稳定支持。

下一步是什么

我对Is Twitter API Free?网站的希望是几周后它变得无关紧要。我可能会为偶然发现该网站的开发人员添加一些建议,例如用于构建ActivityPub机器人的资源或刮擦Twitter的私人API。无论Twitter是真正实现API付费墙还是撤回计划,它都已经失去了作为开发人员平台的任何剩余信誉。是时候继续了。

同时,继续检查the site,关注Twitter botMastodon bot,然后检查site's source