twitter机器人开发指南

2,591 阅读2分钟

因为工作需要,开发一个twitter-bot,任务就是网站有新内容时,发tweet将页面分享到公司运营的一个twitter账号。

一 关于twitter开发者平台的api和权限支持情况

twitter的开发者平台的网址为: developer.twitter.com/en/docs/twi…

目前(2022-1)twitter-api分为两个版本:

v1.1: 能够发tweet,能够访问media系列api,在tweet接口中可以带pic,video,gif

v2: 目前不支持media系列api,所以v2只能发文本,不能带media资源,比如pic,video,gif。

而目前常用的开发者权限有:

essential:仅能访问v2的api

elevate: 能访问v1.1和v2的api

默认情况下,一个twitter账户是essential权限的,所以目前还不能发图片。

二 相关的开发SDK

1 twitter-api-v2

对于nodejs,经过测试,目前比较好用的开发库是: www.npmjs.com/package/twi…

注意需要配置oauth1.0的api-key和api-secret,以及access-token和access-secret。

另外在twitter开发者后台User authentication settings里面的app permissions里面要设置为r/w可读写的,注意先设置为可读写后,再去生成access-token和access-secret,否则不能生效。

2 https-proxy-agent

因为众所周知的原因,服务器在国内的话,需要设置agent才能访问twitterr-api,地址为 www.npmjs.com/package/htt…

3 puppeteer

如果需要对网页截图,发送图片到twitter,可以使用这个headless的chrome: www.npmjs.com/package/pup…

不过有点重,截图速度有点慢,可能会超时,所以尽量用setConent自己拼html和css字符串来渲染吧,会比较快。

4 sharp

用上面的puppeteer截图之后,可能会有一些白边,直接用sharp可以很方便的处理图片:

sharp(pngBuffer).trim()

三 发布图片的另一个方案

其实没必要先对网页进行截图再调用v1.1的media-api上传到twitter服务器再分享,直接使用twitter card就可以,twitter card里面是可以带大图的。

也就是在tweet内容里面带上链接,而twitter会主动访问链接,检查页面里面的meta元素,是否包含给twitter准备的一些元信息,比如

<meta name="twitter:card" content="summary" />
<meta name="twitter:title" content="Binance Blocks #15066786 | BscScan" />
<meta property="twitter:description" content="Binance Block Height 15066786. The timestamp, block reward, difficulty, gas used and the number of transactions in the block are detailed on BscScan." />
<meta name="twitter:site" content="@BscScan" />
<meta property="twitter:image" content="https://BscScan.com/images/brandassets/BscScan-logo-circle.jpg" />

我们看到它的twitter:card类型设置为summary,我们可以设置为summary_large_image,具体的大图card的tag配置为: developer.twitter.com/en/docs/twi…

参考资料:

twitter-api相关:developer.twitter.com/en/docs/twi…

twitter开发者账户权限相关:developer.twitter.com/en/docs/twi…

twitter-cards相关:developer.twitter.com/en/docs/twi…