简易 Twitter 机器人制作教程
因为工作需要,开发一个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…
推荐阅读