複数のRSSフィードを取得して、最新の更新情報を表示するRubyプログラム

みなさん、おはようございます。
プログラム書いていますか?
相変わらず、自分で書くこと以上に、ChatGPTさんと一緒に書くことが増えてきました。とっても、楽しくできています。
忘れないためにも、備忘録的に書いておきます。

はじめに

今回は、複数のRSSフィードを取得し、実行時から1時間以内に更新があったものだけを表示するRubyプログラムの作り方を紹介します。このプログラムは、標準ライブラリのみを使用するので、追加のインストールは不要です。Web上の最新情報を効率的にチェックするために役立つプログラムです。

必要なライブラリ

このプログラムでは、`rss` と `open-uri` の2つの標準ライブラリを使用します。どちらもRubyに標準で含まれているため、追加のインストールは不要です。

プログラムの構成

以下に、プログラムの全体構成と説明を示します。

require 'rss'
require 'open-uri'
require 'time'

# RSSフィードのURLリスト
rss_urls = [
  'http://example.com/feed1.rss',
  'http://example.com/feed2.rss',
  'http://example.com/feed3.rss'
]

# フィードを格納する配列
feeds = []

# 現在の時刻
current_time = Time.now

# 1時間以内のアイテムを格納する配列
recent_items = []

# 各RSSフィードを取得
rss_urls.each do |url|
  begin
    open(url) do |rss|
      feed = RSS::Parser.parse(rss)
      feeds.concat(feed.items)
    end
  rescue => e
    puts "Error fetching #{url}: #{e.message}"
  end
end

# 1時間以内に更新されたアイテムをフィルタリング
feeds.each do |item|
  if item.pubDate && (current_time - item.pubDate) <= 3600
    recent_items << item
  end
end

# 1時間以内に更新されたアイテムを表示
if recent_items.empty?
  puts "No updates in the last hour."
else
  recent_items.each do |item|
    puts "Title: #{item.title}"
    puts "Link: #{item.link}"
    puts "Date: #{item.pubDate}"
    puts "Description: #{item.description}"
    puts "-----------------------------------"
  end
end

プログラムの詳細説明

ライブラリの読み込み

require 'rss'
require 'open-uri'
require 'time'

この部分では、RSSフィードのパースとHTTPリクエストのために rssopen-uri ライブラリを読み込みます。また、時間計算のために time ライブラリを使用します。

RSSフィードのURLリスト

rss_urls = [
  'http://example.com/feed1.rss',
  'http://example.com/feed2.rss',
  'http://example.com/feed3.rss'
]

ここでは、複数のRSSフィードのURLをリストに格納します。必要に応じてURLを追加または削除してください。

現在の時刻の取得

current_time = Time.now

プログラムの実行時点の現在時刻を取得します。これを基準にフィードの更新時間を比較します。

RSSフィードの取得とパース

rss_urls.each do |url|
  begin
    open(url) do |rss|
      feed = RSS::Parser.parse(rss)
      feeds.concat(feed.items)
    end
  rescue => e
    puts "Error fetching #{url}: #{e.message}"
  end
end

各RSSフィードを取得し、パースしてフィードアイテムを feeds 配列に追加します。エラーが発生した場合はエラーメッセージを表示します。

1時間以内に更新されたアイテムのフィルタリング

feeds.each do |item|
  if item.pubDate && (current_time - item.pubDate) <= 3600
    recent_items << item
  end
end

取得したフィードアイテムのうち、1時間以内に更新されたものを recent_items 配列に追加します。

結果の表示

if recent_items.empty?
  puts "No updates in the last hour."
else
  recent_items.each do |item|
    puts "Title: #{item.title}"
    puts "Link: #{item.link}"
    puts "Date: #{item.pubDate}"
    puts "Description: #{item.description}"
    puts "-----------------------------------"
  end
end

1時間以内に更新があったフィードアイテムを表示します。更新がなければ「No updates in the last hour」と表示します。

まとめ

このプログラムを使うことで、複数のRSSフィードを効率的にチェックし、最新の更新情報だけを取得することができます。特定のトピックに関する最新情報を常に把握しておきたい場合に非常に便利です。プログラムを自分の環境に合わせてカスタマイズし、より便利に活用してください。

次回の記事もお楽しみに!他にも役立つ情報がたくさんあるので、引き続きnoteをチェックしてくださいね。あなたの意見を聞かせてください!この記事に関するご感想や質問があれば、下のコメント欄にお寄せください。

また、この記事がお役に立ちましたら、ぜひお知り合いと共有してください。あなたのサポートが最大の励みです!

猫の動画とマガジン

我が家のクセの強い毛づくろいをする猫

新しい家族が増えました。【 #子猫のいる生活

しんのすけのInstagram


この記事が気に入ったらサポートをしてみませんか?