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

By [tadaye](https://paragraph.com/@tadaye) · 2025-01-16

---

作为一名艺术爱好者，时刻跟进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](https://github.com/Candinya/PhanDream)，您可以使用`pm2`等工具进行运行：

    pm2 start bot.js --name phandream
    

一旦设置完成，您就能在Telegram频道中看到新的Pixiv作品推送了！

☞ [WildCard | 一分钟注册，轻松订阅海外线上服务](https://bit.ly/bewildcard)

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

[https://bit.ly/bewildcard](https://bit.ly/bewildcard)

---

*Originally published on [tadaye](https://paragraph.com/@tadaye/telegram-pixiv)*
