読者です 読者をやめる 読者になる 読者になる

Sinatraで簡易アンテナサイト作った

Sinatraって何ですか?って状態で適当になんか作ってみまた

【初心者向け】RubyとSinatra、アンテナサイトの作り方 - 文系学生のプログラミング入門

こちらのサイトを参考にしたのですが、ただの丸写しだと面白くないので、以下を変更しました

  • simple-rssを使う
  • 複数のサイトから記事のリンクを取ってくる
  • cssでちょっとレイアウトする
環境
ファイルの構成
main.rb
public
  style.css
views
  layout.erb
  index.erb
layout.erb
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title>簡易アンテナサイト</title>
       <link href="style.css" type="text/css" rel="stylesheet" />
  </head>
  <body>
    <h1>簡易アンテナ</h1>
    <%= yield %>
  </body>
</html>
index.html
<ul>
    <% articles = [] %>
    <% while not @que.empty? %>
        <% url = @que.pop(true) %>
    <% rss = SimpleRSS.parse open(url) %>
        <% rss.items.each do |entry| %>
            <% article = [entry.title.force_encoding('utf-8'),entry.link] %>
            <% articles += [article] %>
        <% end %>
    <% end %>
    <% articles.each do |title,link| %>
        <li><a href="<%= link %>"><%= title %></li>
    <% end %>
</ul>

index.htmlは参考サイトのようにしてもいいのですが、今後弄れるように配列に入れました

style.css

ul {
    list-style-type:none;
}
li {
    font-size:20px;
    margin:0 0 5px 0;
    border-bottom: 2px #000 solid;
}

main.rb

require 'sinatra'
require 'sinatra/reloader'
require 'simple-rss'
require 'open-uri'
 
get '/' do
  urls = %w(
    http://mizchi.hatenablog.com/rss http://d.hatena.ne.jp/gamella/rss
  )
  @que = Queue.new
  urls.map{|url| @que << url}
  erb :index
end

get '/it' do
  urls = %w(
    http://blog.livedoor.jp/itsoku/index.rdf http://jsksokuhou.com/feed/
  )
  @que = Queue.new
  urls.map{|url| @que << url}
  erb :index
end

こんなんでこんなんができます

f:id:x6xo:20140101212117p:plain

すごく簡単に作れました。記事の投稿時間は:pubDate辺りで取れるんですがRSSによって多少違うのでそこを処理してサイト数増やせばそれらしいアンテナサイトになると思います。phpでアンテナサイトを作ったことがあるのですがそれより少ない手順で作れると思います

6xo/sinatra_simple_rss · GitHub