作为一名 Pixiv 爱好者,能够及时获取关注画师的最新作品是一件令人愉悦的事情。然而,每天手动检查更新既费时又费力,有没有更高效的方法呢?本文将介绍如何通过 Telegram 自动订阅 Pixiv 新图,让每一张作品都能被及时推送到你的设备上。
方法概述
我们将利用 RSSHub 提供的 Pixiv 订阅接口,通过 Node.js 开发一个工具,将订阅内容推送到 Telegram 频道中。以下是实现的主要步骤:
- RSS 数据采集:通过
rss-parser
获取 Pixiv 的订阅数据。 - 数据处理:提取图片链接并生成预览图地址。
- 消息发送:通过 Telegram Bot API 将图片推送到频道。
第一步:RSS 数据采集
为了简化 RSS 数据的处理,我们使用了 rss-parser
组件。安装方法如下:
bash npm i rss-parser –save
使用 rss-parser
获取 RSS 数据非常简单,以下是一个示例代码:
javascript const Parser = require(‘rss-parser’); const parser = new Parser();
(async () => { const feed = await parser.parseURL(‘https://rsshub.app/pixiv/user/123456'); console.log(feed.items); })();
通过解析 RSSHub 生成的订阅数据,我们可以获取到一个对象数组,其中包含了图片的链接、标题等信息。
第二步:数据处理
Pixiv 的图片链接通常以 https://pixiv.cat/*ArtworkID*.jpg
的形式呈现。我们可以通过正则表达式提取这些链接:
javascript const picIdReg = /https://pixiv.cat/(\d+)-?(\d+)?.(jpg|png|gif)/gi; const artworks = […item.content.matchAll(picIdReg)];
对于单张图片和多张图片的情况,提取的结果如下:
- 单图:
https://pixiv.cat/123456.jpg
- 多图:
https://pixiv.cat/123456-1.jpg
,https://pixiv.cat/123456-2.jpg
为了生成预览图地址,我们可以根据 Pixiv 的图片命名规则,结合 RSS 数据中的 isoDate
字段,拼接出完整的预览图链接。
第三步:消息发送
我们使用 Telegram 的 Bot API 将图片推送到频道。以下是一个示例代码:
javascript const got = require(‘got’);
const apiBaseUrl = https://api.telegram.org/bot${confData.bot.token}
;
got.post(${apiBaseUrl}/sendPhoto
, {
json: {
chat_id: confData.bot.chat,
photo: picItem.preview,
caption: picItem.text,
reply_markup: {
inline_keyboard: [
[
{ text: ‘🌏 查看原图’, url: picItem.url },
{ text: ‘⤵ 下载图片’, url: picItem.pic }
]
]
}
}
});
通过 sendPhoto
接口,我们可以发送图片,并在消息下方添加内联按钮,方便用户查看原图或下载图片。
优化与部署
为了避免重复推送,我们可以维护一个时间戳,每次只发送最新的内容。同时,使用 js-yaml
组件读取配置文件,方便管理 Bot 的参数。
最终代码可以通过 pm2
等工具进行部署:
bash pm2 start bot.js –name phandream
运行后,Telegram 频道中将会自动收到 Pixiv 的最新图片。
结语
通过以上方法,你可以轻松实现 Pixiv 新图的自动订阅和推送。如果你对代码感兴趣,可以尝试进一步优化或扩展功能。