如何使用Telegram订阅Pixiv画师新图

作为一名艺术爱好者,时刻跟进Pixiv画师的最新作品已成为我的日常习惯。然而,每天手动检查更新既费时又麻烦,是否有更高效的方式来推送喜欢的图片,让每一张作品都能及时展示其精彩呢?

解决方案:通过Telegram订阅Pixiv新图

我回想起常见的资讯订阅方式:RSS。恰巧在RSSHub的文档中找到了一个订阅接口,可以实现Pixiv关注画师的新图推送。不过,单独使用RSS订阅仍然需要一个专门的阅读器,因此我决定将这些信息直接推送到通讯工具中。我曾尝试使用基于IFTTT的方案,将RSSHub生成的内容推送至Telegram频道。然而,IFTTT的使用策略调整使得非付费用户仅能创建三个小程序,这让我决定放弃。

作为开发者,我不想受限于商业平台的限制,便决定自己编写一个类似的处理工具,这不仅能提升我的编程技能,还能增强可定制性。于是,我开始调研各种API接口,计划将RSS获取的数据,通过Bot的API接口,推送至Telegram频道。

步骤一:RSS采集

首先,我们需要进行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作品推送了!

WildCard | 一分钟注册,轻松订阅海外线上服务

使用门槛极低,微信支付宝均可开通使用。支持开通各类海外平台:ChatGPT、Claude、Google Play、Apple Store、OpenAI、X、Patreon、MidJourney、Amazon、POE、Microsoft、Facebook、GitHub、Telegram、PayPal等各类海淘订阅平台。使用邀请码:ACCPAY,立享消费0手续费,减免开卡费用。

https://bit.ly/bewildcard