Skip to content

Instantly share code, notes, and snippets.

@ssig33
Created February 1, 2011 05:56
Show Gist options
  • Save ssig33/805487 to your computer and use it in GitHub Desktop.
Save ssig33/805487 to your computer and use it in GitHub Desktop.
#coding:utf-8
require "sinatra"
require "datamapper"
require "oauth"
require "haml"
require "rack/csrf"
KEY = ''
SECRET = ''
DataMapper.setup(:default, "sqlite:///home/ssig33/development/edy/store.sqlite3")
class User
include DataMapper::Resource
property :id, Serial, :key => true
property :twitter_id, Text
property :screen_name, Text
property :name, Text
property :icon, Text
property :created_at, Text
end
#User.auto_migrate!
configure do
set :logging, false
set :app_file, __FILE__
use Rack::Session::Cookie, :secret => ''
use Rack::Csrf, :raise => true
end
get '/' do
@page = params[:page].to_i
@page = 1 if @page < 1
@users = User.all(:limit => 20, :offset => 20*(@page-1), :order => [:created_at.desc])
haml :index
end
post '/auth' do
session[:cash] = params[:cash].to_i
url = "http://#{request.host_with_port}/callback"
request_token = OAuth::Consumer.new(KEY, SECRET, {:site => "http://twitter.com"}).get_request_token(:oauth_callback => url)
session[:request_token] = request_token.token
session[:request_token_secret] = request_token.secret
redirect request_token.authorize_url
end
get '/callback' do
#begin
request_token = OAuth::RequestToken.new(consumer, session[:request_token], session[:request_token_secret])
access_token = request_token.get_access_token({}, :oauth_token => params[:oauth_token], :oauth_verifier => params[:oauth_verifier])
info = JSON.parse(consumer.request(:get, '/account/verify_credentials.json', access_token, {:scheme => :query_string}).body)
user = User.new
user.twitter_id = info["id"].to_s
user.screen_name = info["screen_name"]
user.icon = info["profile_image_url"]
user.token = access_token.token
user.secret = access_token.secret
user.created_at = Time.now
user.save
str = "Edyでシャリ~ン♪ #{Time.now.strftime("%Y/%m/%d")} #{session[:cash]}円 #edynow"
res = access_token.post('/statuses/update.json', {:status => str})
p res
#rescue
#end
redirect '/'
end
def consumer
OAuth::Consumer.new(KEY, SECRET, {:site => "http://twitter.com"})
end
__END__
@@index
<!DOCTYPE html>
<link href="http://ssig33.com/common.css" media="screen" rel="stylesheet" type="text/css" />
<meta content='width=320, initial-scale=1.0, maximum-scale=1.0, user-scalable=no' name='viewport'>
%link{:rel => "alternate", :type => "application/atom+xml", :title => "Feed", :href => "http://gomi.ssig33.com/feed"}
%title シャリーン.ssig33.com
%div#all
%h1 シャリーン.ssig33.com
%form{"accept-charset" => "UTF-8", :action => "/auth", :method => "post"}
=Rack::Csrf.csrf_tag(env)
%input{:id => "cash", :name => "cash", :type => "text"}
<input name="commit" type="submit" value="シャリーン" />
%h2 シャリーンした人一覧
%table
- @users.each do |u|
%tr.autopagerize_page_element
%td
%a{:href => "http://twitter.com/#{u.screen_name}"}
%img{:src => u.icon, :style => "height:48px;width:48px;"}
%td
%a{:href => "http://twitter.com/#{u.screen_name}"}=u.screen_name
%td=u.created_at
%div
%p
%a{:href => "/?page=#{@page+1}", :rel => "next"}Next
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment