Bloggerの記事一覧を取得するRubyスクリプト
lifeLOG + REPOsitory: Blogger で作ったブログの記事一覧を作成する http://logrepo.blogspot.jp/2010/09/blogger.html を参考にさせてもらいました。
HTMLのヘッダ作成部分はコメントアウトで無効にしています。ブログの記事に貼り付けるコピペ用です。
次のようにすると結果出力のコードをクリップボードに格納できます。Linux環境でxselコマンドをインストールしてある必要があります。コマンド名がパッケージ名そのままなのでapt-getでも簡単にインストールできます。
./スクリプトのファイル名.rb | xsel -b
実行属性をつけていない場合
ruby スクリプトのファイル名.rb | xsel -b
#!/環境に応じたrubyへのパス/bin/ruby -w # -*- coding: utf-8 -*- # get_titles.rb: get post tiltes from Blogger RSS feed. require 'net/http' require 'uri' require 'rss' BLOGID = "ブログID" def get_rss(start_index = 1) url = URI.parse('http://www.blogger.com/') res = Net::HTTP.start(url.host, url.port) { |http| http.get("/feeds/#{BLOGID}/posts/default?alt=rss&start-index=#{start_index}") } res.body end current_post = 0 total_posts = 0 posts = Array.new # get first page & extract total number of posts. raw_data = get_rss(1) /<openSearch:totalResults>(\d+)<\/openSearch:totalResults>/ =~ raw_data total_posts = Regexp.last_match[1].to_i rss = RSS::Parser.parse(raw_data, false) rss.channel.items.each { |item| posts.push item } current_post += rss.channel.items.length # get more pages while current_post < total_posts rss = RSS::Parser.parse(get_rss(current_post + 1), false) rss.channel.items.each { |item| posts.push item } current_post += rss.channel.items.length end # construct output HTML page. =begin STDOUT.print <<HTML1 <!DOCTYPE HTML> <html lang="ja"> <head> <meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/> <title>Blog Posts</title> </head> <body> <p>Total Posts: #{total_posts}</p> HTML1 =end STDOUT.print <<BODY1 <div class="list"> <h2>Entry List</h2> <table style="border="0"> BODY1 item_no = 1 posts.reverse! posts.each { |item| STDOUT.puts "<tr><td style=\"margin-right:10px; background-color: #D8D8D8;\">No:#{item_no}</td><td><a href='#{item.link}'>#{item.title}</a></td></tr>" item_no = item_no + 1 } STDOUT.print <<BODY2 </table> </div> BODY2 =begin STDOUT.print <<HTML2 </body> </html> HTML2 =end
Rubyのコードをシンタックスハイライトしていますが、HTMLが含まれるためコピペしただけでは動作しないかもしれないです。ざっと見たところでは問題なさそうですが。
コメントを残す