Cloudflare WorkersでRSS Feedを読み込む方法

Cloudflare WorkersはNode.jsそのものではありません。(2023/04時点) そのため、fsなど一部のAPIが利用できず、npmに公開されているライブラリにもWorkersで動かないものがあります。 […]

広告ここから
広告ここまで

目次

    Cloudflare WorkersはNode.jsそのものではありません。(2023/04時点)

    そのため、fsなど一部のAPIが利用できず、npmに公開されているライブラリにもWorkersで動かないものがあります。

    RSSフィードを読む場合は、htmlparser2が使えそう

    RSSフィードを読む場合、fetchで取得してからhtmlparser2でパースする方法が良さそうです。

    import { parseFeed } from "htmlparser2";
    
    export default {
        async fetch(
            controller: ScheduledController,
            env: Env,
            ctx: ExecutionContext
        ) {
            const response = await fetch('https://qiita.com/motchi0214/feed.atom')
            if (!response.ok) {
                return new Response(JSON.stringify([]))
            }
            const htmlString = await response.text()
            const feed = parseFeed(htmlString)
            if (!feed) {
                return new Response(JSON.stringify([]))
            }
            const items = feed.items.map((data: any)  => {
                return {
                  title: data.title,
                  description: data.content,
                  datetime: data.isoDate,
                  href: data.link,
                }
              })
              return new Response(JSON.stringify(items))
        },
    };
    

    関連: Discordなどに通知する方法について

    取得した内容から、新着情報だけDiscordやSlackに通知するケースを下の記事で紹介しています。

    https://wp-kyoto.net/create-a-new-discord-bot-to-share-the-connpass-event-information-on-cloudflare/

    この場合、「KVを利用して通知ずみの記事データを管理する」「DiscordのWebhook APIを利用して投稿を行う」の2点を追加で実装しましょう。

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark