作为一名艺术爱好者,时刻跟进Pixiv画师的最新作品已成为我的日常习惯。然而,每天手动检查更新既费时又麻烦,是否有更高效的方式来推送喜欢的图片,让每一张作品都能及时展示其精彩呢?
我回想起常见的资讯订阅方式:RSS。恰巧在RSSHub的文档中找到了一个订阅接口,可以实现Pixiv关注画师的新图推送。不过,单独使用RSS订阅仍然需要一个专门的阅读器,因此我决定将这些信息直接推送到通讯工具中。我曾尝试使用基于IFTTT的方案,将RSSHub生成的内容推送至Telegram频道。然而,IFTTT的使用策略调整使得非付费用户仅能创建三个小程序,这让我决定放弃。
作为开发者,我不想受限于商业平台的限制,便决定自己编写一个类似的处理工具,这不仅能提升我的编程技能,还能增强可定制性。于是,我开始调研各种API接口,计划将RSS获取的数据,通过Bot的API接口,推送至Telegram频道。
首先,我们需要进行RSS的采集工作。为了避免手动解析XML文件的繁琐,我使用了一个现成的组件:rss-parser。这个组件可以轻松获取RSS内容,并将其转换为一个对象,方便后续的处理。
npm i rss-parser --save
安装后,传参调用也非常简洁:
const Parser = require('rss-parser');
const parser = new Parser();
async function fetchRSS() {
const feed = await parser.parseURL('YOUR_RSS_FEED_URL');
console.log(feed);
}
测试时,我们可以输出获取的feed信息,结果是一个对象数组。通过这些信息,我们可以提取所需的内容。
由于RSSHub是为了方便阅读而设计的,它的内容格式比较适合展示信息,并且采用了pixiv.cat的图片传输接口。获取到的数据中包含了我们所需的所有信息,我们可以通过正则表达式提取出图片的链接。
例如,我们可以使用以下正则表达式来匹配Pixiv的ArtworkID:
const picIdReg = /https:\/\/pixiv\.cat\/(\d+)-?(\d+)?\.(jpg|png|gif)/gi;
通过这个正则表达式,我们能够匹配到单张图片和多图内容的链接:
const artworks = [...item.content.matchAll(picIdReg)];
对于单图内容,返回的数据如下:
[ "https://pixiv.cat/*ArtworkID*-1.jpg", "*ArtworkID*", "1", "jpg", "https://pixiv.cat/*ArtworkID*-2.jpg", "*ArtworkID*", "2", "jpg"]
接着,我们可以根据这些链接生成预览图和下载地址。
为了避免IFTTT方案中图片大小超过限制等问题,我决定为Telegram推送加入请求缓冲队列,并使用预览图来解决大图无法发送的问题。
这次,我选择使用got来直接发送HTTP请求,而不是使用Telegraf框架。根据Telegram的Bot API文档,发送图片的请求如下:
const apiBaseUrl = `https://api.telegram.org/bot${confData.bot.token}`;
got('sendPhoto', {
method: 'POST',
prefixUrl: apiBaseUrl,
json: {
chat_id: confData.bot.chat,
photo: picItem.preview,
caption: picItem.text,
reply_markup: {
inline_keyboard: [
[{
text: '🌏',
url: picItem.url
}, {
text: '⤵',
url: picItem.pic
}]
]
}
}
});
我们直接调用Telegram的sendPhoto接口,并且为每张图片提供了“原始链接”和“下载链接”的按钮,方便用户直接访问。
为了避免重复发送相同的内容,我还加入了时间戳标记,每次查询时只推送更新的内容。
为了进一步提高使用便捷性,我在Github上发布了完整的代码,项目名为PhanDream,您可以使用pm2等工具进行运行:
pm2 start bot.js --name phandream
一旦设置完成,您就能在Telegram频道中看到新的Pixiv作品推送了!
使用门槛极低,微信支付宝均可开通使用。支持开通各类海外平台:ChatGPT、Claude、Google Play、Apple Store、OpenAI、X、Patreon、MidJourney、Amazon、POE、Microsoft、Facebook、GitHub、Telegram、PayPal等各类海淘订阅平台。使用邀请码:ACCPAY,立享消费0手续费,减免开卡费用。
