mcpField
R
rss-monitor

rss-monitor

github.com/winsorllc生産性0109 回インストール35 週間前に更新
リポジトリ

rss-monitor について

RSS Monitorは、RSSとAtomフィードを取得・追跡するJavaScriptユーティリティです。フィードのメタデータや項目の詳細を取得し、前回の確認後に公開された項目を特定できます。

主な機能

  1. 01RSSとAtomフィードの取得
  2. 02複数フィードの追跡
  3. 03前回確認後の項目を検出
  4. 04フィードのメタデータ取得
  5. 05項目数とタイムアウトの設定

活用シーン

  1. 01指定したフィードの新着記事を読む
  2. 02複数のブログの新着を監視
  3. 03フィード情報と項目内容を確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/winsorllc/upgraded-carnival --skill rss-monitor

インストール後、Claude Code で/rss-monitorを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

index.js
package-lock.json
package.json
test.js

詳細

RSS モニター

RSS および Atom フィードを監視して、新しいコンテンツを追跡します。

インストール

npm install feedparser

クイックスタート

基本的なフィードの取得
const { fetchFeed } = require('./rss-monitor');

const items = await fetchFeed('https://example.com/feed.xml');
console.log(items); // Array of feed items
複数のフィードを追跡
const { trackFeeds } = require('./rss-monitor');

const feeds = [
  { url: 'https://blog1.com/rss', name: 'Blog 1' },
  { url: 'https://blog2.com/atom.xml', name: 'Blog 2' }
];

const results = await trackFeeds(feeds);
console.log(results);
新しいアイテムの確認
const { checkForNewItems } = require('./rss-monitor');

const lastCheck = new Date('2024-01-01T00:00:00Z');
const newItems = await checkForNewItems('https://example.com/feed.xml', lastCheck);
console.log(`Found ${newItems.length} new items`);

一般的な操作

最新アイテムの取得
const items = await fetchFeed('https://xkcd.com/atom.xml', { limit: 10 });
フィードのメタデータを取得
const feed = await fetchFeedMetadata('https://example.com/feed.xml');
console.log(feed.title, feed.link, feed.description);
オプションを指定してフィードを解析
const items = await fetchFeed('https://example.com/feed.xml', {
  limit: 20,
  includeContent: false,
  timeout: 5000
});
前回の確認結果との比較
const newItems = await checkForNewItems(
  'https://example.com/feed.xml',
  lastCheckDate,
  { limit: 50 }
);

出力形式

各フィードアイテムには次の内容が含まれます。

  • title - アイテムのタイトル
  • link - アイテムの URL
  • description - アイテムの要約/説明
  • pubDate - 公開日(ISO 文字列)
  • author - 作成者名(取得可能な場合)
  • content - 全文(取得可能で、includeContent: true の場合)
  • categories - タグ/カテゴリ
  • enclosures - メディア添付ファイル(画像、音声、動画)

例

RSS フィードリーダー
const rssMonitor = require('./rss-monitor');

async function readFeeds() {
  const feeds = [
    'https://xkcd.com/atom.xml',
    'https://blog.github.com/feed/',
    'https://news.ycombinator.com/rss'
  ];
  
  for (const feedUrl of feeds) {
    try {
      const items = await rssMonitor.fetchFeed(feedUrl, { limit: 5 });
      console.log(`\n📰 ${feedUrl}`);
      items.forEach(item => {
        console.log(`  • ${item.title}`);
        console.log(`    ${item.link}`);
      });
    } catch (err) {
      console.error(`Failed to fetch ${feedUrl}:`, err.message);
    }
  }
}
新しいコンテンツの監視
const rssMonitor = require('./rss-monitor');
const fs = require('fs').promises;

const STATE_FILE = './last-check.json';

async function monitorFeeds() {
  // Load last check times
  let lastChecks = {};
  try {
    lastChecks = JSON.parse(await fs.readFile(STATE_FILE, 'utf8'));
  } catch (e) {
    // No state file yet
  }
  
  const feeds = [
    { url: 'https://xkcd.com/atom.xml', name: 'XKCD' },
    { url: 'https://blog.github.com/feed/', name: 'GitHub Blog' }
  ];
  
  for (const feed of feeds) {
    const lastCheck = lastChecks[feed.url] ? new Date(lastChecks[feed.url]) : null;
    const newItems = await rssMonitor.checkForNewItems(feed.url, lastCheck);
    
    if (newItems.length > 0) {
      console.log(`\n🆕 ${feed.name}: ${newItems.length} new items`);
      newItems.forEach(item => {
        console.log(`  • ${item.title}`);
      });
    }
    
    lastChecks[feed.url] = new Date().toISOString();
  }
  
  await fs.writeFile(STATE_FILE, JSON.stringify(lastChecks, null, 2));
}

注意事項

  • RSS 2.0 と Atom 1.0 の両方の形式に対応しています
  • フィード形式を自動的に検出します
  • リダイレクトや一般的なフィードの差異に対応します
  • デフォルトのタイムアウト:10 秒
  • アイテムは公開日の新しい順に並びます

コメント