Skip to content

Commit

Permalink
Adding Japanese interface.
Browse files Browse the repository at this point in the history
Supporting new Twitter library API.
  • Loading branch information
gimite committed Nov 23, 2010
1 parent e60775b commit d4d9083
Show file tree
Hide file tree
Showing 6 changed files with 214 additions and 85 deletions.
2 changes: 2 additions & 0 deletions Gemfile
Expand Up @@ -8,4 +8,6 @@ gem "moji"
gem "em-http-request"
gem "em-websocket"
gem "async_sinatra"
gem "http_accept_language"
gem "erubis"
gem "json" if RUBY_VERSION < "1.9.0"
46 changes: 31 additions & 15 deletions Gemfile.lock
@@ -1,36 +1,50 @@
GEM
remote: http://rubygems.org/
specs:
addressable (2.2.1)
abstract (1.0.0)
addressable (2.2.2)
async_sinatra (0.3.0)
sinatra (>= 1.0)
crack (0.1.6)
daemons (1.1.0)
em-http-request (0.2.14)
em-http-request (0.2.15)
addressable (>= 2.0.0)
eventmachine (>= 0.12.9)
em-websocket (0.1.4.1)
addressable (>= 2.1.1)
eventmachine (>= 0.12.9)
erubis (2.6.6)
abstract (>= 1.0.0)
eventmachine (0.12.10)
hashie (0.2.2)
httparty (0.5.2)
crack (= 0.1.6)
faraday (0.5.3)
addressable (~> 2.2.2)
multipart-post (~> 1.0.1)
rack (>= 1.1.0, < 2)
faraday_middleware (0.3.0)
faraday (~> 0.5.3)
hashie (0.4.0)
http_accept_language (1.0.1)
moji (1.5)
oauth (0.4.3)
multi_json (0.0.5)
multi_xml (0.2.0)
multipart-post (1.0.1)
oauth (0.4.4)
rack (1.2.1)
sinatra (1.0)
rack (>= 1.0)
simple_oauth (0.1.2)
sinatra (1.1.0)
rack (~> 1.1)
tilt (~> 1.1)
thin (1.2.7)
daemons (>= 1.0.9)
eventmachine (>= 0.12.6)
rack (>= 1.0.0)
twitter (0.9.8)
hashie (~> 0.2.0)
httparty (~> 0.5.0)
oauth (~> 0.4.1)
yajl-ruby (~> 0.7.0)
yajl-ruby (0.7.7)
tilt (1.1)
twitter (1.0.0)
faraday (~> 0.5.3)
faraday_middleware (~> 0.3.0)
hashie (~> 0.4.0)
multi_json (~> 0.0.5)
multi_xml (~> 0.2.0)
simple_oauth (~> 0.1.2)

PLATFORMS
ruby
Expand All @@ -40,6 +54,8 @@ DEPENDENCIES
daemons
em-http-request
em-websocket
erubis
http_accept_language
moji
oauth
sinatra
Expand Down
69 changes: 44 additions & 25 deletions lib/tss_web_server.rb
Expand Up @@ -21,12 +21,16 @@
require "sinatra/base"
require "sinatra/async"
require "em-http"
require "http_accept_language"

require "moji"
require "tss_config"
require "tss_helper"


Sinatra::Request.send(:include, HttpAcceptLanguage)


class TSSWebServer < Sinatra::Base

include(TSSHelper)
Expand All @@ -48,6 +52,11 @@ class TSSWebServer < Sinatra::Base

before() do
@twitter = get_twitter(session[:access_token], session[:access_token_secret])
@lang = params[:hl]
if !@lang && ["/", "/search"].include?(request.path)
@lang = request.compatible_language_from(["en", "ja"])
redirect(to_url(request, {"hl" => @lang}))
end
end

aget("/") do
Expand Down Expand Up @@ -82,7 +91,7 @@ class TSSWebServer < Sinatra::Base
:oauth_token => params[:oauth_token],
:oauth_verifier => params[:oauth_verifier])
rescue OAuth::Unauthorized => @exception
return erb %{ Authentication failed: <%=h @exception.message %> }
return erubis(%{ Authentication failed: <%=h @exception.message %> })
end
@twitter = get_twitter(@access_token.token, @access_token.secret)
session[:access_token] = @access_token.token
Expand All @@ -101,40 +110,41 @@ class TSSWebServer < Sinatra::Base
end

aget("/buzz") do
result = []
add_result = proc() do |lang_id, lang_name, &block|
get_result = proc() do |lang_id, lang_name, &block|
get_buzz_words(lang_id) do |words|
words = (words || []).grep(HASH_TAG_EXP)[0, 10]
result.push({"lang_id" => lang_id, "lang_name" => lang_name, "words" => words})
block.call()
block.call({"lang_id" => lang_id, "lang_name" => lang_name, "words" => words})
end
end
add_result.call("en", "English") do
add_result.call("ja", "Japanese") do
get_result.call("en", "English") do |en_result|
get_result.call("ja", "Japanese") do |ja_result|
content_type("text/javascript", :charset => "utf-8")
body(JSON.dump(result))
all_result = @lang == "ja" ? [ja_result, en_result] : [en_result, ja_result]
body(JSON.dump(all_result))
LOGGER.info("[web] GET /buzz")
end
end
end

get("/logout") do
session.clear()
redirect("/")
redirect("/?hl=%s" % @lang)
end

get("/css/default.css") do
@webkit = request.user_agent =~ /AppleWebKit/
content_type("text/css")
erb(:"default.css")
erubis(:"default.css")
end

def get_twitter(access_token, access_token_secret)
if access_token && access_token_secret
twitter_oauth = Twitter::OAuth.new(
TSSConfig::TWITTER_API_WRITE_KEY, TSSConfig::TWITTER_API_WRITE_SECRET)
twitter_oauth.authorize_from_access(access_token, access_token_secret)
return Twitter::Base.new(twitter_oauth)
return Twitter::Client.new({
:consumer_key => TSSConfig::TWITTER_API_WRITE_KEY,
:consumer_secret => TSSConfig::TWITTER_API_WRITE_SECRET,
:oauth_token => access_token,
:oauth_token_secret => access_token_secret,
})
else
return nil
end
Expand All @@ -144,27 +154,29 @@ def oauth_consumer
return OAuth::Consumer.new(
TSSConfig::TWITTER_API_WRITE_KEY,
TSSConfig::TWITTER_API_WRITE_SECRET,
:site => "http://twitter.com")
:site => "http://twitter.com",
:request_endpoint => "http://api.twitter.com")
end

def search(query, index)
@query = query
@query_json = JSON.dump([@query])
@query = query.force_encoding(Encoding::UTF_8)
@index = index
@web_socket_url = "ws://%s:%d/" %
web_socket_url = "ws://%s:%d/" %
[URI.parse(TSSConfig::BASE_URL).host, TSSConfig::WEB_SOCKET_SERVER_PORT]
@screen_name = session[:screen_name]
@unsupported_query = @query =~ /#{Moji.kana}|#{Moji.kanji}/
@support_update = @query =~ HASH_TAG_EXP
@show_update = params[:show_update]
if request.query_string.empty?
@show_update_url = "%s?show_update=true" % request.path
else
@show_update_url = "%s?%s&show_update=true" % [request.path, request.query_string]
end
@show_update_url = to_url(request, {"show_update" => "true"})
@another_lang_url = to_url(request, {"hl" => @lang == "ja" ? "en" : "ja"})
@title = params[:title]
@logo_url = params[:logo]
return erb(:search)
@js_vars_json = JSON.dump({
"query" => @query,
"lang" => @lang,
"web_socket_url" => web_socket_url,
})
# Uses Erubis instead of ERB here because ERB causes encoding error for unknown reason.
return erubis(:search)
end

def get_buzz_words(lang_id, &block)
Expand All @@ -188,4 +200,11 @@ def get_buzz_words(lang_id, &block)
end
end

def to_url(request, params)
return "%s?%s" % [
request.path,
request.params.merge(params).map(){ |k, v| CGI.escape(k) + "=" + CGI.escape(v) }.join("&"),
]
end

end
File renamed without changes.
File renamed without changes.

0 comments on commit d4d9083

Please sign in to comment.