aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrhenium <re4k@re4k.info>2013-05-20 00:42:24 +0900
committerrhenium <re4k@re4k.info>2013-05-20 00:42:24 +0900
commit1aede390bc4f6ecbd81a5a4d354e8ac25b3435c3 (patch)
tree05c4ffec473438edf7b68e38a0e625405bea0cd5
parent5b9d40d75e7442fb81d503724b5eb67199cdde54 (diff)
downloadaclog-1aede390bc4f6ecbd81a5a4d354e8ac25b3435c3.tar.gz
support RSS
-rw-r--r--app/controllers/application_controller.rb2
-rw-r--r--app/views/tweets/_tweets.rss.builder19
-rw-r--r--config/routes.rb75
3 files changed, 45 insertions, 51 deletions
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index b48be9c..70d2075 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -37,7 +37,7 @@ class ApplicationController < ActionController::Base
private
def check_format
- unless request.format == :html || request.format == :json
+ unless request.format == :html || request.format == :json || request.format == :rss
if params[:format] == nil
request.format = :html
else
diff --git a/app/views/tweets/_tweets.rss.builder b/app/views/tweets/_tweets.rss.builder
new file mode 100644
index 0000000..5c5afe7
--- /dev/null
+++ b/app/views/tweets/_tweets.rss.builder
@@ -0,0 +1,19 @@
+xml.instruct! :xml
+xml.rss version: "2.0", "xmlns:atom" => "http://www.w3.org/2005/Atom" do
+ xml.channel do
+ xml.title title
+ xml.description caption
+ xml.link url_for(rss: nil, only_path: false)
+ xml.__send__(:"atom:link", rel: "self", href: request.url, type: "application/rss+xml")
+ @tweets.each_with_index do |tweet, i|
+ xml.item do
+ xml.title "#{tweet.favorites_count}/#{tweet.retweets_count}: #{strip_tags(format_tweet_text(tweet.text))}"
+ xml.description "Has been favorited by #{tweet.favorites_count} people, retweeted by #{tweet.retweets_count} people"
+ xml.pubDate tweet.tweeted_at.rfc2822
+ xml.link tweet_url(tweet.id)
+ xml.guid tweet_url(tweet.id) + "#" + i.to_s
+ end
+ end
+ end
+end
+
diff --git a/config/routes.rb b/config/routes.rb
index 4b60c83..6d56bd3 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -1,7 +1,14 @@
Aclog::Application.routes.draw do
root to: "about#index"
- scope format: false do
+ # JSON
+ scope "api", format: "json" do
+ get "/users/:action", controller: "users"
+ get "/tweets/:action", controller: "tweets"
+ end
+
+ # HTML only pages
+ scope format: "html" do
get "/search" => "search#search", as: "search"
# Internals / SessionsController
@@ -13,52 +20,34 @@ Aclog::Application.routes.draw do
get "/i/report" => "report#index", as: "report"
post "/i/report/tweet" => "report#tweet"
+ get "/i/:id" => "tweets#show", as: "tweet", constraints: {id: /\d+/}
+
scope "about", controller: "about" do
get "/", action: "about", as: "about"
get "/api", action: "api", as: "about_api"
end
- # /i/
- scope :i, controller: :tweets do
- get "/best", action: "all_best", as: "best"
- get "/recent", action: "all_recent", as: "recent"
- get "/timeline", action: "all_timeline", as: "timeline"
- get "/:id", action: "show", as: "tweet"
- end
-
- # JSON API
- scope "api", format: "json" do
- get "/users/:action", controller: "users"
- get "/tweets/:action", controller: "tweets"
- end
-
- # Favstar redirects
- get "(/users)/:screen_name/status(es)/:id" => redirect("/i/%{id}")
- scope "users/:screen_name" do
- get "/" => redirect("/%{screen_name}")
- get "/most_favorited" => redirect("/%{screen_name}/favorited")
- get "/most_retweeted" => redirect("/%{screen_name}/retweeted")
- get "/discovered" => redirect("/%{screen_name}/discoveries")
- get "/favorited" => redirect("/%{screen_name}/favorites")
- get "/given" => redirect("/%{screen_name}/favorites")
- get "/retweeted" => redirect("/%{screen_name}/retweets")
- get "/recent" => redirect("/%{screen_name}/timeline")
- get "/favs_from" => redirect("/%{screen_name}/discovered_by")
- get "/retweeted_by" => redirect("/%{screen_name}/discovered_by")
- get "/favs_from/:screen_name_b" => redirect("/%{screen_name}/discovered_by/%{screen_name_b}")
- get "/retweeted_by/:screen_name_b" => redirect("/%{screen_name}/discovered_by/%{screen_name_b}")
- get "/given_to" => redirect("/%{screen_name}/discovered_users")
- get "/given_to/:screen_name_b" => redirect("/%{screen_name_b}/discovered_by/%{screen_name}")
- end
-
- # User pages.
+ # User pages
scope ":screen_name", controller: "users" do
get "/stats", action: "stats", as: "user_stats"
get "/discovered_by", action: "discovered_by", as: "user_discovered_by"
get "/discovered_users", action: "discovered_users", as: "user_discovered_users"
end
- scope ":screen_name", controller: "tweets" do
+ # Twitter redirect
+ get "/:screen_name/status(es)/:id" => redirect("/i/%{id}")
+ end
+
+ # HTML or RSS
+ scope controller: "tweets", constraints: {format: /(html|rss)/} do
+ scope "i" do
+ get "/best", action: "all_best", as: "best"
+ get "/recent", action: "all_recent", as: "recent"
+ get "/timeline", action: "all_timeline", as: "timeline"
+ end
+
+ # TweetController / Tweets
+ scope ":screen_name" do
get "/", action: "best", as: "user_best"
get "/favorited", action: "favorited", as: "user_favorited"
get "/retweeted", action: "retweeted", as: "user_retweeted"
@@ -69,20 +58,6 @@ Aclog::Application.routes.draw do
get "/retweets", action: "retweets", as: "user_retweets"
get "/discovered_by/:screen_name_b", action: "discovered_by", as: "user_discovered_by_user"
end
-
- # Old URLs
- scope ":screen_name" do
- get "/discovered" => redirect("/%{screen_name}/discoveries")
- get "/info" => redirect("/%{screen_name}/stats")
- get "/favorited_by" => redirect("/%{screen_name}/discovered_by")
- get "/retweeted_by" => redirect("/%{screen_name}/discovered_by")
- get "/favorited_by/:screen_name_b" => redirect("/%{screen_name}/discovered_by/%{screen_name_b}")
- get "/retweeted_by/:screen_name_b" => redirect("/%{screen_name}/discovered_by/%{screen_name_b}")
- get "/given_favorites_to" => redirect("/%{screen_name}/discovered_user")
- get "/given_retweets_to" => redirect("/%{screen_name}/discovered_user")
- get "/given_favorites_to/:screen_name_b" => redirect("/%{screen_name_b}/discovered_by/%{screen_name}")
- get "/given_retweets_to/:screen_name_b" => redirect("/%{screen_name_b}/discovered_by/%{screen_name}")
- end
end
end