{"id":25288,"date":"2024-03-26T05:18:23","date_gmt":"2024-03-25T20:18:23","guid":{"rendered":"http:\/\/www.tyosuke20xx.com\/blog\/?p=25288"},"modified":"2024-03-26T05:18:26","modified_gmt":"2024-03-25T20:18:26","slug":"ruby-rssserver","status":"publish","type":"post","link":"http:\/\/www.tyosuke20xx.com\/blog\/?p=25288","title":{"rendered":"ruby rssserver"},"content":{"rendered":"\n<p>require &#8216;cgi&#8217;<br>require &#8216;rss&#8217;<br>require &#8216;net\/http&#8217;<\/p>\n\n\n\n<p>def parse(page_source)<br>dates = page_source.scan(%r!(\\d+)\u5e74 ?(\\d+)\u6708 ?(\\d+)\u65e5<br>!).map { |year, month, day| [year.to_i, month.to_i, day.to_i] }<br>url_titles = page_source.scan(%r!^<a href=\"(.+?)\">(.+?)<\/a><br>!).map { |url, title| [CGI.unescapeHTML(url), CGI.unescapeHTML(title)] }<br>url_titles.zip(dates).map { |(url, title), date| [url, title, Time.local(*date)] }<br>end<\/p>\n\n\n\n<p>def format_text(title, url, url_title_time_ary)<br>text = &#8220;Title: #{title}\\nURL: #{url}\\n\\n&#8221;<br>url_title_time_ary.each do |aurl, atitle, atime|<br>text &lt;&lt; &#8220;* (#{atime})#{atitle}\\n&#8221;<br>text &lt;&lt; &#8221; #{aurl}\\n&#8221;<br>end<br>text<br>end<\/p>\n\n\n\n<p>def format_rss(title, url, url_title_time_ary)<br>RSS::Maker.make(&#8220;2.0&#8221;) do |maker|<br>maker.channel.updated = Time.now.to_s<br>maker.channel.link = url<br>maker.channel.title = title<br>maker.channel.description = title<br>url_title_time_ary.each do |aurl, atitle, atime|<br>maker.items.new_item do |item|<br>item.link = aurl<br>item.title = atitle<br>item.updated = atime<br>item.description = atitle<br>end<br>end<br>end<br>end<\/p>\n\n\n\n<p>uri = URI(&#8220;http:\/\/crawler.sbcr.jp\/samplepage.html&#8221;)<br>response = Net::HTTP.get_response(uri)<br>parsed = parse(response.body.force_encoding(&#8220;UTF-8&#8221;))<\/p>\n\n\n\n<p>formatter = case ARGV.first<br>when &#8220;rss-output&#8221;<br>:format_rss<br>else<br>:format_text<br>end<\/p>\n\n\n\n<p>puts <strong>send<\/strong>(formatter, &#8220;WWW.SBCR.JP \u30c8\u30d4\u30c3\u30af\u30b9&#8221;, &#8220;http:\/\/crawler.sbcr.jp\/samplepage.html&#8221;, parsed)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>require &#8216;cgi&#8217;require &#8216;rss&#8217;require &#8216;net\/http&#8217; def parse(page_source)dates = &hellip; <a href=\"http:\/\/www.tyosuke20xx.com\/blog\/?p=25288\" class=\"more-link\"><span class=\"screen-reader-text\">&#8220;ruby rssserver&#8221; \u306e<\/span>\u7d9a\u304d\u3092\u8aad\u3080<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[84],"tags":[3,85],"class_list":["post-25288","post","type-post","status-publish","format-standard","hentry","category-ruby","tag-programming","tag-ruby"],"aioseo_notices":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/25288","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=25288"}],"version-history":[{"count":1,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/25288\/revisions"}],"predecessor-version":[{"id":25289,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/25288\/revisions\/25289"}],"wp:attachment":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=25288"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=25288"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=25288"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}