#!/usr/bin/env ruby require 'rss' require 'json' require 'open-uri' require 'cgi' require_relative './../../xrforge.rb' # Check if a filename is provided if ARGV.length != 1 puts "Usage: #{$0} " exit 1 end filename = ARGV[0] # dont run for each file-update if ! filename.end_with?("datapackage.json") exit 0 end def generate(aphandle,filename,dir,data,logfile) XRForge.log("✅ starting mastodon-post for #{aphandle}", logfile) parts = aphandle.split("@") server = parts[2].sub(/@/,"") rssUrl = "https://#{server}/@#{parts[1]}.rss" XRForge.log("✅ checking #{rssUrl}", logfile) feed = RSS::Parser.parse(URI.open(rssUrl, 'User-Agent' => 'Ruby-RSS-Client')) puts feed.channel.title puts feed.channel.link first_item = feed.items.first if first_item description = CGI.unescapeHTML(first_item.description.to_s) .split("\n")[0,4].join("\n") # max 5 lines .gsub(/<[^>]*>/, '') # remove other tags #.gsub(//i, "\n") # preserve linebreaks #.gsub(/<\/p>/i, "\n") # preserve linebreaks description = description.length > 130 ? description = description[0,130] + " (..)" : description else XRForge.log("❌ did not find post", logfile) exit 0 end puts description # look for first image media_regex = / e # Handle HTTP errors (e.g., 404 not found, 403 forbidden) puts "Error fetching feed: #{e.message}" exit rescue => e # Handle other parsing or connection errors puts "An error occurred: #{e.message}" rescue Errno::ENOENT puts "File #{filename} not found" rescue JSON::ParserError puts "Error parsing JSON from #{filename}" rescue => e puts "An error occurred: #{e.message}" end