Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

finish all interfaces

  • Loading branch information...
commit ead696e72b217e1de90992529a9ee4362c756aab 1 parent b639521
@acenqiu authored
View
17 Gemfile.lock
@@ -37,6 +37,7 @@ GEM
multi_json (~> 1.0)
arel (2.2.1)
builder (3.0.0)
+ diff-lcs (1.1.3)
erubis (2.7.0)
hike (1.2.1)
i18n (0.6.0)
@@ -75,11 +76,23 @@ GEM
rake (0.9.2.2)
rdoc (3.11)
json (~> 1.4)
+ rspec (2.6.0)
+ rspec-core (~> 2.6.0)
+ rspec-expectations (~> 2.6.0)
+ rspec-mocks (~> 2.6.0)
+ rspec-core (2.6.4)
+ rspec-expectations (2.6.0)
+ diff-lcs (~> 1.1.2)
+ rspec-mocks (2.6.0)
+ rspec-rails (2.6.1)
+ actionpack (~> 3.0)
+ activesupport (~> 3.0)
+ railties (~> 3.0)
+ rspec (~> 2.6.0)
sprockets (2.0.3)
hike (~> 1.2)
rack (~> 1.0)
tilt (!= 1.3.0, ~> 1.1)
- sqlite3 (1.3.4)
thor (0.14.6)
tilt (1.3.3)
treetop (1.4.10)
@@ -91,5 +104,5 @@ PLATFORMS
ruby
DEPENDENCIES
- sqlite3
+ rspec-rails
weibo2!
View
18 lib/weibo2.rb
@@ -1,2 +1,16 @@
-module Weibo2
-end
+require 'weibo2/util'
+require 'weibo2/client'
+require 'weibo2/config'
+require 'weibo2/error'
+require 'weibo2/interface/base'
+require 'weibo2/interface/account'
+require 'weibo2/interface/comments'
+require 'weibo2/interface/favorites'
+require 'weibo2/interface/friendships'
+require 'weibo2/interface/register'
+require 'weibo2/interface/search'
+require 'weibo2/interface/statuses'
+require 'weibo2/interface/suggestions'
+require 'weibo2/interface/tags'
+require 'weibo2/interface/trends'
+require 'weibo2/interface/users'
View
96 lib/weibo2/client.rb
@@ -0,0 +1,96 @@
+require 'oauth2'
+
+module Weibo2
+
+ # The Weibo2::Client class
+ class Client
+
+ attr_reader :key, :secret, :redirect_uri
+ attr_accessor :client, :token
+
+ def self.from_signed_request(signed_request, opts={}, &block)
+ client = self.new(opts, &block)
+ client.get_token_from_signed_request(signed_request)
+
+ client
+ end
+
+ #
+ def initialize(opts={}, &block)
+ @key = Weibo2::Config.api_key
+ @secret = Weibo2::Config.api_secret
+ @redirect_uri = Weibo2::Config.redirect_uri
+
+ options = {:site => "https://api.weibo.com/2/",
+ :authorize_url => "oauth2/authorize",
+ :token_url => "oauth2/access_token",
+ :raise_errors => false,
+ :ssl => {:verify => false}}.merge(opts)
+
+ @client = OAuth2::Client.new(@key, @secret, options, &block)
+ end
+
+ def authorize_url(params={})
+ client.auth_code.authorize_url({:redirect_uri => redirect_uri}.merge(params))
+ end
+
+ def get_token(code, params={})
+ @token = client.auth_code.get_token(code, {:redirect_uri => redirect_uri, :parse => :json}.merge(params), {:header_format => "OAuth2 %s"})
+ end
+
+ def get_token_from_signed_request(signed_request)
+ data = Weibo2::Util.parse_signed_request(signed_request, secret)
+ puts data.inspect
+ unless ["-1", "-2"].include? data
+ opts = {:expires_at => data["expires"],
+ :header_format => "OAuth2 %s"}
+ @token = OAuth2::AccessToken.new(client, data["oauth_token"], opts)
+ end
+ end
+
+
+ def account
+ @account ||= Weibo2::Interface::Account.new(self)
+ end
+
+ def comments
+ @comments ||= Weibo2::Interface::Comments.new(self)
+ end
+
+ def favorites
+ @favorites ||= Weibo2::Interface::Favorites.new(self)
+ end
+
+ def friendships
+ @friendships ||= Weibo2::Interface::Friendships.new(self)
+ end
+
+ def register
+ @register ||= Weibo2::Interface::Register.new(self)
+ end
+
+ def search
+ @search ||= Weibo2::Interface::Search.new(self)
+ end
+
+ def statuses
+ @statuses ||= Weibo2::Interface::Statuses.new(self)
+ end
+
+ def suggestions
+ @suggestions ||= Weibo2::Interface::Suggestions.new(self)
+ end
+
+ def tags
+ @tags ||= Weibo2::Interface::Tags.new(self)
+ end
+
+ def trends
+ @trends ||= Weibo2::Interface::Trends.new(self)
+ end
+
+ def users
+ @users ||= Weibo2::Interface::Users.new(self)
+ end
+ end
+end
View
28 lib/weibo2/config.rb
@@ -0,0 +1,28 @@
+module Weibo2
+ module Config
+
+ def self.api_key=(val)
+ @@api_key = val
+ end
+
+ def self.api_key
+ @@api_key
+ end
+
+ def self.api_secret=(val)
+ @@api_secret = val
+ end
+
+ def self.api_secret
+ @@api_secret
+ end
+
+ def self.redirect_uri=(val)
+ @@redirect_uri = val
+ end
+
+ def self.redirect_uri
+ @@redirect_uri
+ end
+ end
+end
View
12 lib/weibo2/error.rb
@@ -0,0 +1,12 @@
+module Weibo2
+ class Error < OAuth2::Error
+ def initialize(response)
+ response.error = self
+ @response = response
+ if response.parsed.is_a?(Hash)
+ @code = response.parsed['error_code']
+ @description = response.parsed['error']
+ end
+ end
+ end
+end
View
205 lib/weibo2/interface/account.rb
@@ -0,0 +1,205 @@
+# encoding: utf-8
+module Weibo2
+ module Interface
+
+ # Account API
+ #
+ # @see http://open.weibo.com/wiki/API%E6%96%87%E6%A1%A3_V2#.E8.B4.A6.E5.8F.B7
+ class Account < Base
+
+ # 获取用户基本信息 [Privilege]
+ #
+ # @param [Hash] opts
+ # @option opts [int64] :uid 需要获取基本信息的用户UID,默认为当前登录用户
+ #
+ # @see http://open.weibo.com/wiki/2/account/profile/basic
+ def profile_basic(opts={})
+ get 'account/profile/basic.json', :params => opts
+ end
+
+ # 获取用户的教育信息 [Privilege]
+ #
+ # @param [Hash] opts
+ # @option opts [int64] :uid 需要获取教育信息的用户UID,默认为当前登录用户
+ #
+ # @see http://open.weibo.com/wiki/2/account/profile/education
+ def profile_education(opts={})
+ get 'account/profile/education.json', :params => opts
+ end
+
+ # 批量获取用户的教育信息 [Privilege]
+ #
+ # @param [String] uids 需要获取教育信息的用户UID,用半角逗号分隔,最多不超过20
+ #
+ # @see http://open.weibo.com/wiki/2/account/profile/education_batch
+ def profile_education_batch(uids)
+ get 'account/profile/education_batch.json', :params => {:uids => uids}
+ end
+
+ # 获取用户的职业信息 [Privilege]
+ #
+ # @param [Hash] opts
+ # @option opts [int64] :uid 需要获取教育信息的用户UID,默认为当前登录用户
+ #
+ # @see http://open.weibo.com/wiki/2/account/profile/career
+ def profile_career(opts={})
+ get 'account/profile/career.json', :params => opts
+ end
+
+ # 批量获取用户的职业信息 [Privilege]
+ #
+ # @param [String] uids 需要获取教育信息的用户UID,用半角逗号分隔,最多不超过20
+ #
+ # @see http://open.weibo.com/wiki/2/account/profile/career_batch
+ def profile_career_batch(uids)
+ get 'account/profile/career_batch.json', :params => uids
+ end
+
+ # 获取当前登录用户的隐私设置
+ #
+ # @see http://open.weibo.com/wiki/2/account/get_privacy
+ def get_privacy
+ get 'account/get_privacy.json'
+ end
+
+ # 获取所有的学校列表
+ #
+ # @param [Hash] opts
+ # @option opts [int] :province 省份范围,省份ID
+ # @option opts [int] :city 城市范围,城市ID
+ # @option opts [int] :area 区域范围,区ID
+ # @option opts [int] :type 学校类型,1:大学、2:高中、3:中专技校、4:初中、5:小学,默认为1
+ # @option opts [String] :capital 学校首字母,默认为A
+ # @option opts [String] :keyword 学校名称关键字
+ # @option opts [int] :count 返回的记录条数,默认为10
+ #
+ # @see http://open.weibo.com/wiki/2/account/profile/school_list
+ def profile_school_list(opts={})
+ get 'account/profile/school_list.json', :params => opts
+ end
+
+ # 获取当前登录用户的API访问频率限制情况
+ #
+ # @see http://open.weibo.com/wiki/2/account/rate_limit_status
+ def rate_limit_status
+ get 'account/rate_limit_status.json'
+ end
+
+ # OAuth授权之后,获取授权用户的UID
+ #
+ # @see http://open.weibo.com/wiki/2/account/get_uid
+ def get_uid
+ get 'account/get_uid.json'
+ end
+
+ #
+ # write
+ #
+
+ # 更新用户的基本信息 [Privilege]
+ #
+ # @param [String] screen_name 用户昵称,不可为空
+ # @param [int] province 省份代码ID,不可为空
+ # @param [int] city 城市代码ID,不可为空
+ # @param [String] gender 用户性别,m:男、f:女,不可为空
+ # @param [Hash] opts
+ # @option opts [String] :real_name 用户真实姓名
+ # @option opts [int] :real_name_visible 真实姓名可见范围,0:自己可见、1:关注人可见、2:所有人可见
+ # @option opts [date] :birthday 用户生日,格式:yyyy-mm-dd
+ # @option opts [int] :birthday_visible 生日可见范围,0:保密、1:只显示月日、2:只显示星座、3:所有人可见
+ # @option opts [String] :qq 用户QQ号码
+ # @option opts [int] :qq_visible 用户QQ可见范围,0:自己可见、1:关注人可见、2:所有人可见
+ # @option opts [String] :msn 用户MSN
+ # @option opts [int] :msn_visible 用户MSN可见范围,0:自己可见、1:关注人可见、2:所有人可见
+ # @option opts [String] :url 用户博客地址
+ # @option opts [int] :url_visible 用户博客地址可见范围,0:自己可见、1:关注人可见、2:所有人可见
+ # @option opts [int] :credentials_type 证件类型,1:身份证、2:学生证、3:军官证、4:护照
+ # @option opts [String] :credentials_num 证件号码
+ # @option opts [String] :email 用户常用邮箱地址
+ # @option opts [int] :email_visible 用户常用邮箱地址可见范围,0:自己可见、1:关注人可见、2:所有人可见
+ # @option opts [String] :lang 语言版本,zh_cn:简体中文、zh_tw:繁体中文
+ # @option opts [String] :description 用户描述,最长不超过70个汉字
+ #
+ # @see http://open.weibo.com/wiki/2/account/profile/basic_update
+ def profile_basic_update(screen_name, province, city, gender, opts={})
+ body = {:screen_name => screen_name, :province => province, :city => city, :gender => gender}.merge(opts)
+ post 'account/profile/basic_update.json', :body => body
+ end
+
+ # 更新当前登录用户的教育信息 [Privilege]
+ #
+ # @param [int] type 学校类型,1:大学、2:高中、3:中专技校、4:初中、5:小学,默认为1
+ # @param [int] school_id 学校代码
+ # @param [Hash] opts
+ # @option opts [String] :id 需要修改的教育信息ID,不传则为新建,传则为更新
+ # @option opts [int] :year 入学年份,最小为1900,最大不超过当前年份
+ # @option opts [String] :department 院系或者班别
+ # @option opts [int] :visible 开放等级,0:仅自己可见、1:关注的人可见、2:所有人可见
+ #
+ # @see http://open.weibo.com/wiki/2/account/profile/edu_update
+ def profile_edu_update(type, school_id, opts={})
+ post 'account/profile/edu_update.json', :body => {:type => type, :school_id => school_id}.merge(opts)
+ end
+
+ # 根据学校ID删除用户的教育信息 [Privilege]
+ #
+ # @param [int64] id 教育信息里的学校ID
+ #
+ # @see http://open.weibo.com/wiki/2/account/profile/edu_destroy
+ def profile_edu_destroy(id)
+ post 'account/profile/edu_destroy.json', :body => {:id => id}
+ end
+
+ # 更新当前登录用户的职业信息 [Privilege]
+ #
+ # @param [Hash] opts
+ # @option opts [String] :id 需要更新的职业信息ID
+ # @option opts [int] :start 进入公司年份,最小为1900,最大为当年年份
+ # @option opts [int] :end 离开公司年份,至今填0
+ # @option opts [String] :department 工作部门
+ # @option opts [int] :visible 可见范围,0:自己可见、1:关注人可见、2:所有人可见
+ # @option opts [int] :province 省份代码ID,不可为空值
+ # @option opts [int] :city 城市代码ID,不可为空值
+ # @option opts [String] :company 公司名称,不可为空值
+ #
+ # @see http://open.weibo.com/wiki/2/account/profile/car_update
+ def profile_car_update(opts)
+ post 'account/profile/car_update.json', :body => opts
+ end
+
+ # 根据公司ID删除用户的职业信息 [Privilege]
+ #
+ # @param [int64] id 职业信息里的公司ID
+ #
+ # @see http://open.weibo.com/wiki/2/account/profile/car_destroy
+ def profile_car_destroy(id)
+ post 'account/profile/car_destroy.json', :body => {:id => id}
+ end
+
+ # no test
+ # 更新当前登录用户的头像 [Privilege]
+ #
+ # @param [binary] image 头像图片,仅支持JPEG、GIF、PNG格式,图片大小小于5M.必须使用multipart/form-data方式提交
+ #
+ # @see http://open.weibo.com/wiki/2/account/avatar/upload
+ def avatar_upload(image)
+ post 'account/avatar/upload.json', :body => {:image => image}
+ end
+
+ # 更新当前登录用户的隐私设置 [Privilege]
+ #
+ # @param [Hash] opts
+ # @option opts [int] :comment 是否可以评论我的微博,0:所有人、1:关注的人,默认为0
+ # @option opts [int] :geo 是否开启地理信息,0:不开启、1:开启,默认为1
+ # @option opts [int] :message 是否可以给我发私信,0:所有人、1:关注的人,默认为0
+ # @option opts [int] :realname 是否可以通过真名搜索到我,0:不可以、1:可以,默认为0
+ # @option opts [int] :badge 勋章是否可见,0:不可见、1:可见,默认为1
+ # @option opts [int] :mobile 是否可以通过手机号码搜索到我,0:不可以、1:可以,默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/account/update_privacy
+ def update_privacy(opts={})
+ post 'account/update_privacy.json', :body => opts
+ end
+ end
+ end
+end
View
30 lib/weibo2/interface/base.rb
@@ -0,0 +1,30 @@
+module Weibo2
+ module Interface
+ class Base
+ def initialize(client)
+ @client = client
+ end
+
+ def request(verb, path, opts={}, &block)
+ unless @client.is_authorized?
+ raise "I can't find a valid access_token. Forgot to get it or expired?"
+ end
+
+ response = @client.token.request(verb, path, opts, &block)
+ if response.error
+ raise Error.new(response)
+ end
+ response
+ end
+
+ def get(path, opts={}, &block)
+ request(:get, path, opts, &block)
+ end
+
+ def post(path, opts={}, &block)
+ request(:post, path, opts, &block)
+ end
+ end
+
+ end
+end
View
143 lib/weibo2/interface/comments.rb
@@ -0,0 +1,143 @@
+# encoding: utf-8
+module Weibo2
+ module Interface
+
+ # Comments API
+ #
+ # @see http://open.weibo.com/wiki/API%E6%96%87%E6%A1%A3_V2#.E8.AF.84.E8.AE.BA
+ class Comments < Base
+
+ # 根据微博ID返回某条微博的评论列表
+ #
+ # @param [int64] id 需要查询的微博ID
+ # @param [Hash] opts
+ # @option opts [int64] :since_id 若指定此参数,则返回ID比since_id大的评论(即比since_id时间晚的评论),默认为0
+ # @option opts [int64] :max_id 若指定此参数,则返回ID小于或等于max_id的评论,默认为0
+ # @option opts [int] :count 单页返回的记录条数,默认为50
+ # @option opts [int] :page 返回结果的页码,默认为1
+ # @option opts [int] :filter_by_author 作者筛选类型,0:全部、1:我关注的人、2:陌生人,默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/comments/show
+ def show(id, opts={})
+ get 'comments/show.json', :params => {:id => id}.merge(opts)
+ end
+
+ # 获取当前登录用户所发出的评论列表
+ #
+ # @param [Hash] opts
+ # @option opts [int64] :since_id 若指定此参数,则返回ID比since_id大的评论(即比since_id时间晚的评论),默认为0
+ # @option opts [int64] :max_id 若指定此参数,则返回ID小于或等于max_id的评论,默认为0
+ # @option opts [int] :count 单页返回的记录条数,默认为50
+ # @option opts [int] :page 返回结果的页码,默认为1
+ # @option opts [int] :filter_by_source 来源筛选类型,0:全部、1:来自微博的评论、2:来自微群的评论,默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/comments/by_me
+ def by_me(opts={})
+ get 'comments/by_me.json', :params => opts
+ end
+
+ # 获取当前登录用户所接收到的评论列表
+ #
+ # @param [Hash] opts
+ # @option opts [int64] :since_id 若指定此参数,则返回ID比since_id大的评论(即比since_id时间晚的评论),默认为0
+ # @option opts [int64] :max_id 若指定此参数,则返回ID小于或等于max_id的评论,默认为0
+ # @option opts [int] :count 单页返回的记录条数,默认为50
+ # @option opts [int] :page 返回结果的页码,默认为1
+ # @option opts [int] :filter_by_author 作者筛选类型,0:全部、1:我关注的人、2:陌生人,默认为0
+ # @option opts [int] :filter_by_source 来源筛选类型,0:全部、1:来自微博的评论、2:来自微群的评论,默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/comments/to_me
+ def to_me(opts={})
+ get 'comments/to_me.json', :params => opts
+ end
+
+ # 获取当前登录用户的最新评论包括接收到的与发出的
+ #
+ # @param [Hash] opts
+ # @option opts [int64] :since_id 若指定此参数,则返回ID比since_id大的评论(即比since_id时间晚的评论),默认为0
+ # @option opts [int64] :max_id 若指定此参数,则返回ID小于或等于max_id的评论,默认为0
+ # @option opts [int] :count 单页返回的记录条数,默认为50
+ # @option opts [int] :page 返回结果的页码,默认为1
+ #
+ # @see http://open.weibo.com/wiki/2/comments/timeline
+ def timeline(opts={})
+ get 'comments/timeline.json', :params => opts
+ end
+
+ # 获取最新的提到当前登录用户的评论,即@我的评论
+ #
+ # @param [Hash] opts
+ # @option opts [int64] :since_id 若指定此参数,则返回ID比since_id大的评论(即比since_id时间晚的评论),默认为0
+ # @option opts [int64] :max_id 若指定此参数,则返回ID小于或等于max_id的评论,默认为0
+ # @option opts [int] :count 单页返回的记录条数,默认为50
+ # @option opts [int] :page 返回结果的页码,默认为1
+ # @option opts [int] :filter_by_author 作者筛选类型,0:全部、1:我关注的人、2:陌生人,默认为0
+ # @option opts [int] :filter_by_source 来源筛选类型,0:全部、1:来自微博的评论、2:来自微群的评论,默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/comments/mentions
+ def mentions(opts={})
+ get 'comments/mentions.json', :params => opts
+ end
+
+ # 根据评论ID批量返回评论信息
+ #
+ # @param [String] cids 需要查询的批量评论ID,用半角逗号分隔,最大50
+ #
+ # @see http://open.weibo.com/wiki/2/comments/show_batch
+ def show_batch(cids)
+ get 'comments/show_batch.json', :params => {:cids => cids}
+ end
+
+ #
+ # write
+ #
+
+ # 对一条微博进行评论
+ #
+ # @param [String] comment 评论内容,内容不超过140个汉字
+ # @param [int64] id 需要评论的微博ID
+ # @param [Hash] opts
+ # @option opts [int] :comment_on 当评论转发微博时,是否评论给原微博,0:否、1:是,默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/comments/create
+ def create(comment, id)
+ post 'comments/create.json', :body => {:comment => comment, :id => id}
+ end
+
+ # no test
+ # 删除一条评论
+ #
+ # @param [int64] cid 要删除的评论ID,只能删除登录用户自己发布的评论
+ #
+ # @see http://open.weibo.com/wiki/2/comments/destroy
+ def destroy(cid)
+ post 'comments/destroy.json', :body => {:cid => cid}
+ end
+
+ # 根据评论ID批量删除评论
+ #
+ # @param [String] cids 需要删除的评论ID,用半角逗号隔开,最多20个
+ #
+ # @see http://open.weibo.com/wiki/2/comments/destroy_batch
+ def destroy_batch(cids)
+ post 'comments/destroy_batch.json', :body => {:cids => cids}
+ end
+
+ # no test
+ # 回复一条评论
+ #
+ # @param [int64] cid 需要回复的评论ID
+ # @param [int64] id 需要评论的微博ID
+ # @param [String] comment 回复评论内容,内容不超过140个汉字
+ # @param [Hash] opts
+ # @option opts [int] :without_mention 回复中是否自动加入“回复@用户名”,0:是、1:否,默认为0
+ # @option opts [int] :comment_on 当评论转发微博时,是否评论给原微博,0:否、1:是,默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/comments/reply
+ def reply(cid, id, comment, opts={})
+ post 'comments/reply.json', :body => {:cid => cid, :id => id, :comment => comment}.merge(opts)
+ end
+
+ end
+ end
+end
View
114 lib/weibo2/interface/favorites.rb
@@ -0,0 +1,114 @@
+# encoding: utf-8
+module Weibo2
+ module Interface
+
+ # Favorites API
+ #
+ # @see http://open.weibo.com/wiki/API%E6%96%87%E6%A1%A3_V2#.E6.94.B6.E8.97.8F
+ class Favorites < Base
+
+ # 获取当前登录用户的收藏列表
+ #
+ # @param [Hash] opts
+ # @option opts [int] :count 单页返回的记录条数,默认为50
+ # @option opts [int] :page 返回结果的页码,默认为1
+ #
+ # @see http://open.weibo.com/wiki/2/favorites
+ def favorites(opts={})
+ get 'favorites.json', :params => opts
+ end
+
+ # 根据收藏ID获取指定的收藏信息
+ #
+ # @param [int64] id 需要查询的收藏ID
+ #
+ # @see http://open.weibo.com/wiki/2/favorites/show
+ def show(id)
+ get 'favorites/show.json', :params => {:id => id}
+ end
+
+ # 根据标签获取当前登录用户该标签下的收藏列表
+ #
+ # @param [int64] tid 需要查询的标签ID
+ # @param [Hash] opts
+ # @option opts [int] :count 单页返回的记录条数,默认为50
+ # @option opts [int] :page 返回结果的页码,默认为1
+ #
+ # @see http://open.weibo.com/wiki/2/favorites/by_tags
+ def by_tags(tid, opts={})
+ get 'favorites/by_tags.json', :params => {:tid => tid}.merge(opts)
+ end
+
+ # 获取当前登录用户的收藏标签列表
+ #
+ # @param [Hash] opts
+ # @option opts [int] :count 单页返回的记录条数,默认为10
+ # @option opts [int] :page 返回结果的页码,默认为1
+ #
+ # @see http://open.weibo.com/wiki/2/favorites/tags
+ def tags(opts={})
+ get 'favorites/tags.json', :params => opts
+ end
+
+ #
+ # write
+ #
+
+ #test no pass below
+ # 添加一条微博到收藏里
+ #
+ # @param [int64] id 要收藏的微博ID
+ #
+ # @see http://open.weibo.com/wiki/2/favorites/create
+ def create(id)
+ post 'favorites/create.json', :body => {:id => id}
+ end
+
+ # 取消收藏一条微博
+ #
+ # @param [int64] id 要取消收藏的微博ID
+ #
+ # @see http://open.weibo.com/wiki/2/favorites/destroy
+ def destroy(id)
+ post 'favorites/destroy.json', :body => {:id => id}
+ end
+
+ # 根据收藏ID批量取消收藏
+ #
+ # @param [String] ids 要取消收藏的收藏ID,用半角逗号分隔,最多不超过10个
+ # @see http://open.weibo.com/wiki/2/favorites/destroy_batch
+ def destroy_batch(ids)
+ post 'favorites/destroy_batch.json', :body => {:ids => ids}
+ end
+
+ # 更新一条收藏的收藏标签
+ #
+ # @param [int64] id 需要更新的收藏ID
+ # @param [Hash] opts
+ # @option opts [String] :tags 需要更新的标签内容,用半角逗号分隔,最多不超过2条
+ #
+ # @see http://open.weibo.com/wiki/2/favorites/tags/update
+ def tags_update(id, opt={})
+ post 'favorites/tags/update.json', :body => {:id => id}.merge(opts)
+ end
+
+ # 更新当前登录用户所有收藏下的指定标签
+ #
+ # @param [int64] tid 需要更新的标签ID
+ # @param [String] tag 需要更新的标签内容
+ # @see http://open.weibo.com/wiki/2/favorites/tags/update_batch
+ def tags_update_batch(tid, tag)
+ post 'favorites/tags/update_batch.json', :body => {:tid => tid, :tag => tag}
+ end
+
+ # 删除当前登录用户所有收藏下的指定标签
+ #
+ # @param [int64] tid 需要删除的标签ID
+ #
+ # @see http://open.weibo.com/wiki/2/favorites/tags/destroy_batch
+ def tags_destroy_batch(tid)
+ post 'favorites/tags/destroy_batch.json', :body => {:tid => tid}
+ end
+ end
+ end
+end
View
193 lib/weibo2/interface/friendships.rb
@@ -0,0 +1,193 @@
+# encoding: utf-8
+module Weibo2
+ module Interface
+
+ # Friendships API
+ #
+ # @see http://open.weibo.com/wiki/API%E6%96%87%E6%A1%A3_V2#.E5.85.B3.E7.B3.BB
+ class Friendships < Base
+
+ # 获取用户的关注列表
+ #
+ # @param [Hash] opts
+ # @option opts [int64] :uid 需要查询的用户UID
+ # @option opts [String] :screen_name 需要查询的用户昵称
+ # @option opts [int] :count 单页返回的记录条数,默认为50,最大不超过200
+ # @option opts [int] :cursor 返回结果的游标,下一页用返回值里的next_cursor,上一页用previous_cursor,默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/friendships/friends
+ def friends(opts={})
+ get 'friendships/friends.json', :params => opts
+ end
+
+ # 获取两个用户之间的共同关注人列表
+ #
+ # @param [int64] uid 需要获取共同关注关系的用户UID
+ # @param [Hash] opts
+ # @option opts [int64] :suid 需要获取共同关注关系的用户UID,默认为当前登录用户
+ # @option opts [int] :count 单页返回的记录条数,默认为50
+ # @option opts [int] :page 返回结果的页码,默认为1
+ #
+ # @see http://open.weibo.com/wiki/2/friendships/friends/in_common
+ def friends_in_common(uid, opts={})
+ get 'friendships/friends/in_common.json', :params => {:uid => uid}.merge(opts)
+ end
+
+ # 获取用户的双向关注列表,即互粉列表
+ #
+ # @param [int64] uid 需要获取双向关注列表的用户UID
+ # @param [Hash] opts
+ # @option opts [int] :count 单页返回的记录条数,默认为50
+ # @option opts [int] :page 返回结果的页码,默认为1
+ # @option opts [int] :sort 排序类型,0:按关注时间最近排序,默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/friendships/friends/bilateral
+ def friends_bilateral(uid, opts={})
+ get 'friendships/friends/bilateral.json', :params => {:uid => uid}.merge(opts)
+ end
+
+ # 获取用户双向关注的用户ID列表,即互粉UID列表
+ #
+ # @param [int64] uid 需要获取双向关注列表的用户UID
+ # @param [Hash] opts
+ # @option opts [int] :count 单页返回的记录条数,默认为50,最大不超过2000
+ # @option opts [int] :page 返回结果的页码,默认为1
+ # @option opts [int] :sort 排序类型,0:按关注时间最近排序,默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/friendships/friends/bilateral/ids
+ def friends_bilateral_ids(uid, opts={})
+ get 'friendships/friends/bilateral/ids.json', :params => {:uid => uid}.merge(opts)
+ end
+
+ # 获取用户关注的用户UID列表
+ #
+ # @param [Hash] opts
+ # @option opts [int64] :uid 需要查询的用户UID
+ # @option opts [String] :screen_name 需要查询的用户昵称
+ # @option opts [int] :count 单页返回的记录条数,默认为500,最大不超过5000
+ # @option opts [int] :cursor 返回结果的游标,下一页用返回值里的next_cursor,上一页用previous_cursor,默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/friendships/friends/ids
+ def friends_ids(opts={})
+ get 'friendships/friends/ids.json', :params => opts
+ end
+
+ # 批量获取当前登录用户的关注人的备注信息 [Privilege]
+ #
+ # @param [String] uids 需要获取备注的用户UID,用半角逗号分隔,最多不超过50个
+ #
+ # @see http://open.weibo.com/wiki/2/friendships/friends/remark_batch
+ def friends_remark_batch(uids)
+ get 'friendships/friends/remark_batch.json', :params => {:uids => uids}
+ end
+
+ # 获取用户的粉丝列表
+ #
+ # @param [Hash] opts
+ # @option opts [int64] :uid 需要查询的用户UID
+ # @option opts [String] :screen_name 需要查询的用户昵称
+ # @option opts [int] :count 单页返回的记录条数,默认为50,最大不超过200
+ # @option opts [int] :cursor 返回结果的游标,下一页用返回值里的next_cursor,上一页用previous_cursor,默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/friendships/followers
+ def followers(opts={})
+ get 'friendships/followers.json', :params => opts
+ end
+
+ # 获取用户粉丝的用户UID列表
+ #
+ # @param [Hash] opts
+ # @option opts [int64] :uid 需要查询的用户UID
+ # @option opts [String] :screen_name 需要查询的用户昵称
+ # @option opts [int] :count 单页返回的记录条数,默认为500,最大不超过5000
+ # @option opts [int] :cursor 返回结果的游标,下一页用返回值里的next_cursor,上一页用previous_cursor,默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/friendships/followers/ids
+ def followers_ids(opts={})
+ get 'friendships/followers/ids.json', :params => opts
+ end
+
+ # 获取用户的活跃粉丝列表
+ # @param [int64] uid 需要查询的用户UID
+ # @param [Hash] opts
+ # @option opts [int] :count 返回的记录条数,默认为20,最大不超过200
+ #
+ # @see http://open.weibo.com/wiki/2/friendships/followers/active
+ def followers_active(uid, opts={})
+ get 'friendships/followers/active.json', :params => {:uid => uid}.merge(opts)
+ end
+
+ # 获取当前登录用户的关注人中又关注了指定用户的用户列表
+ #
+ # @param [int64] uid 指定的关注目标用户UID
+ # @param [Hash] opts
+ # @option opts [int] :count 单页返回的记录条数,默认为50
+ # @option opts [int] :page 返回结果的页码,默认为1
+ #
+ # @see http://open.weibo.com/wiki/2/friendships/friends_chain/followers
+ def friends_chain_followers(uid, opts={})
+ get 'friendships/friends_chain/followers.json', :params => {:uid => uid}.merge(opts)
+ end
+
+ # 获取两个用户之间的详细关注关系情况
+ #
+ # @param [Hash] opts
+ # @option opts [int64] :source_id 源用户的UID
+ # @option opts [String] :source_screen_name 源用户的微博昵称
+ # @option opts [int64] :target_id 目标用户的UID
+ # @option opts [String] :target_screen_name 目标用户的微博昵称
+ #
+ # @see http://open.weibo.com/wiki/2/friendships/show
+ def show(opts={})
+ get 'friendships/show.json', :params => opts
+ end
+
+ #
+ # write
+ #
+
+ # no test below
+ # 关注一个用户
+ #
+ # @param [Hash] opts
+ # @option opts [int64] :uid 需要关注的用户ID
+ # @option opts [String] :screen_name 需要关注的用户昵称
+ #
+ # @see http://open.weibo.com/wiki/2/friendships/create
+ def create(opts={})
+ post 'friendships/create.json', :body => opts
+ end
+
+ # 根据用户UID批量关注用户 [Privilege]
+ #
+ # @param [String] uids 要关注的用户UID,用半角逗号分隔,最多不超过20个
+ #
+ # @see http://open.weibo.com/wiki/2/friendships/create_batch
+ def create_batch(uids)
+ post 'friendships/create_batch.json', :body => {:uids => uids}
+ end
+
+ # 取消关注一个用户
+ #
+ # @param [Hash] opts
+ # @option opts [int64] :uid 需要取消关注的用户ID
+ # @option opts [String] :screen_name 需要取消关注的用户昵称
+ #
+ # @see http://open.weibo.com/wiki/2/friendships/destroy
+ def destroy(opts={})
+ post 'friendships/destroy.json', :body => opts
+ end
+
+ # 更新当前登录用户所关注的某个好友的备注信息 [Privilege]
+ #
+ # @param [int64] uid 需要修改备注信息的用户UID
+ # @param [String] remark 备注信息
+ #
+ # @see http://open.weibo.com/wiki/2/friendships/remark/update
+ def remark_update(uid, remark)
+ post 'friendships/remark/update.json', :body => {:uid => uid, :remark => remark}
+ end
+
+ end
+ end
+end
View
20 lib/weibo2/interface/register.rb
@@ -0,0 +1,20 @@
+# encoding: utf-8
+module Weibo2
+ module Interface
+
+ # Register API
+ #
+ # @see http://open.weibo.com/wiki/API%E6%96%87%E6%A1%A3_V2#.E6.B3.A8.E5.86.8C
+ class Register < Base
+
+ # 验证昵称是否可用,并给予建议昵称
+ #
+ # @param [String] nickname 需要验证的昵称。4-20个字符,支持中英文、数字、"_"或减号
+ # @see http://open.weibo.com/wiki/2/register/verify_nickname
+ def verify_nickname(nickname)
+ get 'register/verify_nickname.json', :params => {:nickname => nickname}
+ end
+
+ end
+ end
+end
View
158 lib/weibo2/interface/search.rb
@@ -0,0 +1,158 @@
+# encoding: utf-8
+module Weibo2
+ module Interface
+
+ # Search API
+ #
+ # @see http://open.weibo.com/wiki/API%E6%96%87%E6%A1%A3_V2#.E6.90.9C.E7.B4.A2
+ class Search < Base
+
+ # 搜索用户时的联想搜索建议
+ #
+ # @param [String] q 搜索的关键字
+ # @param [Hash] opts
+ # @option opts [int] :count 返回的记录条数,默认为10
+ #
+ # @see http://open.weibo.com/wiki/2/search/suggestions/users
+ def suggestions_users(q, opts={})
+ get 'search/suggestions/users.json', :params => {:q => q}.merge(opts)
+ end
+
+ # 搜索微博时的联想搜索建议
+ #
+ # @param [String] q 搜索的关键字
+ # @param [Hash] opts
+ # @option opts [int] :count 返回的记录条数,默认为10
+ #
+ # @see http://open.weibo.com/wiki/2/search/suggestions/statuses
+ def suggestions_statuses(q, opts={})
+ get 'search/suggestions/statuses.json', :params => {:q => q}.merge(opts)
+ end
+
+ # 搜索学校时的联想搜索建议
+ #
+ # @param [String] q 搜索的关键字
+ # @param [Hash] opts
+ # @option opts [int] :count 返回的记录条数,默认为10
+ # @option opts [int] :type 学校类型,0:全部、1:大学、2:高中、3:中专技校、4:初中、5:小学,默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/search/suggestions/schools
+ def suggestions_schools(q, opts={})
+ get 'search/suggestions/schools.json', :params => {:q => q}.merge(opts)
+ end
+
+ # 搜索公司时的联想搜索建议
+ #
+ # @param [String] q 搜索的关键字
+ # @param [Hash] opts
+ # @option opts [int] :count 返回的记录条数,默认为10
+ #
+ # @see http://open.weibo.com/wiki/2/search/suggestions/companies
+ def suggestions_companies(q, opts={})
+ get 'search/suggestions/companies.json', :params => {:q => q}.merge(opts)
+ end
+
+ # 搜索应用时的联想搜索建议
+ #
+ # @param [String] q 搜索的关键字
+ # @param [Hash] opts
+ # @option opts [int] :count 返回的记录条数,默认为10
+ #
+ # @see http://open.weibo.com/wiki/2/search/suggestions/apps
+ def suggestions_apps(q, opts={})
+ get 'search/suggestions/apps.json', :params => {:q => q}.merge(opts)
+ end
+
+ # @用户时的联想建议
+ #
+ # @param [String] q 搜索的关键字
+ # @param [int] type 联想类型,0:关注、1:粉丝
+ # @param [Hash] opts
+ # @option opts [int] :count 返回的记录条数,默认为10,粉丝最多1000,关注最多2000
+ # @option opts [int] :range 联想范围,0:只联想关注人、1:只联想关注人的备注、2:全部,默认为2
+ #
+ # @see http://open.weibo.com/wiki/2/search/suggestions/at_users
+ def suggestions_at_users(q, type, opts={})
+ get 'search/suggestions/at_users.json', :params => {:q => q, :type => type}.merge(opts)
+ end
+
+ #TODO:test no pass
+ # 综合联想,包含用户、微群、应用等的联想建议
+ #
+ # @param [String] query 搜索的关键字
+ # @param [Hash] opts
+ # @option opts [int] :sort_user 用户排序,0:按专注人最多,默认为0
+ # @option opts [int] :sort_app 应用排序,0:按用户数最多,默认为0
+ # @option opts [int] :sort_grp 微群排序,0:按成员数最多,默认为0
+ # @option opts [int] :user_count 返回的用户记录条数,默认为4
+ # @option opts [int] :app_count 返回的应用记录条数,默认为1
+ # @option opts [int] :grp_count 返回的微群记录条数,默认为1
+ #
+ # @see http://open.weibo.com/wiki/2/search/suggestions/integrate
+ def suggestions_integrate(q, opts={})
+ get 'search/suggestions/integrate.json', :params => {:query => q}.merge(opts)
+ end
+
+ # 搜索与指定的一个或多个条件相匹配的微博 [Privilege]
+ #
+ # @param [Hash] opts
+ # @option opts [String] :q 搜索的关键字
+ # @option opts [int] :filter_ori 过滤器,是否为原创,0:全部、1:原创、2:转发,默认为0
+ # @option opts [int] :filter_pic 过滤器。是否包含图片,0:全部、1:包含、2:不包含,默认为0
+ # @option opts [int64] :fuid 搜索的微博作者的用户UID
+ # @option opts [int] :province 搜索的省份范围,省份ID
+ # @option opts [int] :city 搜索的城市范围,城市ID
+ # @option opts [int64] :starttime 开始时间,Unix时间戳
+ # @option opts [int64] :endtime 结束时间,Unix时间戳
+ # @option opts [int] :count 单页返回的记录条数,默认为10
+ # @option opts [int] :page 返回结果的页码,默认为1
+ # @option opts [boolean] :needcount 返回结果中是否包含返回记录数,true:返回、false:不返回,默认为false
+ # @option opts [int] :base_app 是否只获取当前应用的数据。0为否(所有数据),1为是(仅当前应用),默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/search/statuses
+ def statuses(opts={})
+ get 'search/statuses.json', :params => opts
+ end
+
+ # 获取指定地点周边的微博列表 [Privilege]
+ #
+ # @param [float] longitude 经度。有效范围:-180.0到+180.0,+表示东经
+ # @param [float] latitude 纬度。有效范围:-90.0到+90.0,+表示北纬
+ # @param [Hash] opts
+ # @option opts [int] :range 搜索范围,单位米,默认500米,最大11132米
+ # @option opts [int] :time 返回结果所在的时间段,单位为分钟,指从现在开始之前的时间段
+ # @option opts [int] :sort_type 排序方式。默认为0,按时间排序;为1时按与中心点距离进行排序
+ # @option opts [int] :page 返回结果页码。默认为1
+ # @option opts [int] :count 每页结果数。默认10,最大50
+ # @option opts [int] :base_app 是否根据当前应用返回数据。默认0:全部应用;1:仅限当前应用
+ #
+ # @see http://open.weibo.com/wiki/2/search/geo/statuses
+ def geo_statuses(longitude, latitude, opts={})
+ get 'search/geo/statuses.json', :params => {:longitude => longitude, :latitude => latitude}.merge(opts)
+ end
+
+ # 通过关键词搜索用户 [Privilege]
+ #
+ # @param [Hash] opts
+ # @option opts [String] :q 搜索的关键字
+ # @option opts [int] :snick 搜索范围是否包含昵称,0:不包含、1:包含
+ # @option opts [int] :sdomain 搜索范围是否包含个性域名,0:不包含、1:包含
+ # @option opts [int] :sintro 搜索范围是否包含简介,0:不包含、1:包含
+ # @option opts [int] :stag 搜索范围是否包含标签,0:不包含、1:包含
+ # @option opts [int] :province 搜索的省份范围,省份ID
+ # @option opts [int] :city 搜索的城市范围,城市ID
+ # @option opts [String] :gender 搜索的性别范围,m:男、f:女
+ # @option opts [String] :comorsch 搜索的公司学校名称
+ # @option opts [int] :sort 排序方式,1:按更新时间、2:按粉丝数,默认为1
+ # @option opts [int] :count 单页返回的记录条数,默认为10
+ # @option opts [int] :page 返回结果的页码,默认为1
+ # @option opts [int] :base_app 是否只获取当前应用的数据。0为否(所有数据),1为是(仅当前应用),默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/search/users
+ def users(opts={})
+ get 'search/users.json', :params => opts
+ end
+
+ end
+ end
+end
View
300 lib/weibo2/interface/statuses.rb
@@ -0,0 +1,300 @@
+# encoding: utf-8
+module Weibo2
+ module Interface
+
+ # Statuses API
+ #
+ # @see http://open.weibo.com/wiki/API%E6%96%87%E6%A1%A3_V2#.E5.BE.AE.E5.8D.9A
+ class Statuses < Base
+
+ # 返回最新的公共微博
+ #
+ # @param [Hash] opts
+ # @option opts [int] :count 单页返回的记录条数,默认为50
+ # @option opts [int] :page 返回结果的页码,默认为1
+ # @option opts [int] :base_app 是否只获取当前应用的数据。0为否(所有数据),1为是(仅当前应用),默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/statuses/public_timeline
+ def public_timeline(opts={})
+ get 'statuses/public_timeline.json', :params => opts
+ end
+
+ # 获取当前登录用户及其所关注用户的最新微博
+ #
+ # @param [Hash] opts
+ # @option opts [int64] :since_id 若指定此参数,则返回ID比since_id大的微博(即比since_id时间晚的微博),默认为0
+ # @option opts [int64] :max_id 若指定此参数,则返回ID小于或等于max_id的微博,默认为0
+ # @option opts [int] :count 单页返回的记录条数,默认为50
+ # @option opts [int] :page 返回结果的页码,默认为1
+ # @option opts [int] :base_app 是否只获取当前应用的数据。0为否(所有数据),1为是(仅当前应用),默认为0
+ # @option opts [int] :feature 过滤类型ID,0:全部、1:原创、2:图片、3:视频、4:音乐,默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/statuses/friends_timeline
+ def friends_timeline(opts={})
+ get 'statuses/friends_timeline.json', :params => opts
+ end
+
+ # 获取当前登录用户及其所关注用户的最新微博
+ #
+ # @param [Hash] opts
+ # @option opts [int64] :since_id 若指定此参数,则返回ID比since_id大的微博(即比since_id时间晚的微博),默认为0
+ # @option opts [int64] :max_id 若指定此参数,则返回ID小于或等于max_id的微博,默认为0
+ # @option opts [int] :count 单页返回的记录条数,默认为50
+ # @option opts [int] :page 返回结果的页码,默认为1
+ # @option opts [int] :base_app 是否只获取当前应用的数据。0为否(所有数据),1为是(仅当前应用),默认为0
+ # @option opts [int] :feature 过滤类型ID,0:全部、1:原创、2:图片、3:视频、4:音乐,默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/statuses/home_timeline
+ def home_timeline(opts={})
+ get 'statuses/home_timeline.json', :params => opts
+ end
+
+ # 获取某个用户最新发表的微博列表
+ #
+ # @param [Hash] opts
+ # @option opts [int64] :uid 需要查询的用户ID
+ # @option opts [String] :screen_name 需要查询的用户昵称
+ # @option opts [int64] :since_id 若指定此参数,则返回ID比since_id大的微博(即比since_id时间晚的微博),默认为0
+ # @option opts [int64] :max_id 若指定此参数,则返回ID小于或等于max_id的微博,默认为0
+ # @option opts [int] :count 单页返回的记录条数,默认为50
+ # @option opts [int] :page 返回结果的页码,默认为1
+ # @option opts [int] :base_app 是否只获取当前应用的数据。0为否(所有数据),1为是(仅当前应用),默认为0
+ # @option opts [int] :feature 过滤类型ID,0:全部、1:原创、2:图片、3:视频、4:音乐,默认为0
+ # @option opts [int] :trim_user 返回值中user信息开关,0:返回完整的user信息、1:user字段仅返回user_id,默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/statuses/user_timeline
+ def user_timeline(opts={})
+ get 'statuses/user_timeline.json', :params => opts
+ end
+
+ # 批量获取指定的一批用户的微博列表 [Privilege]
+ #
+ # @option opts [String] :uids 需要查询的用户ID,用半角逗号分隔,一次最多20个
+ # @option opts [String] :screen_name 需要查询的用户昵称,用半角逗号分隔,一次最多20个
+ # @option opts [int] :count 单页返回的记录条数,默认为20
+ # @option opts [int] :page 返回结果的页码,默认为1
+ # @option opts [int] :base_app 是否只获取当前应用的数据。0为否(所有数据),1为是(仅当前应用),默认为0
+ # @option opts [int] :feature 过滤类型ID,0:全部、1:原创、2:图片、3:视频、4:音乐,默认为0
+ # @see http://open.weibo.com/wiki/2/statuses/timeline_batch
+ def timeline_batch(opts={})
+ get 'statuses/timeline_batch.json', :params => opts
+ end
+
+ # 获取指定微博的转发微博列表
+ #
+ # @param [int64] id 需要查询的微博ID
+ # @param [Hash] opts
+ # @option opts [int64] :since_id 若指定此参数,则返回ID比since_id大的微博(即比since_id时间晚的微博),默认为0
+ # @option opts [int64] :max_id 若指定此参数,则返回ID小于或等于max_id的微博,默认为0
+ # @option opts [int] :count 单页返回的记录条数,默认为50
+ # @option opts [int] :page 返回结果的页码,默认为1
+ # @option opts [int] :filter_by_author 作者筛选类型,0:全部、1:我关注的人、2:陌生人,默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/statuses/repost_timeline
+ def repost_timeline(id, opts={})
+ get 'statuses/repost_timeline.json', :params => {:id => id}.merge(opts)
+ end
+
+ # 获取当前用户最新转发的微博列表
+ #
+ # @param [Hash] opts
+ # @option opts [int64] :since_id 若指定此参数,则返回ID比since_id大的微博(即比since_id时间晚的微博),默认为0
+ # @option opts [int64] :max_id 若指定此参数,则返回ID小于或等于max_id的微博,默认为0
+ # @option opts [int] :count 单页返回的记录条数,默认为50
+ # @option opts [int] :page 返回结果的页码,默认为1
+ #
+ # @see http://open.weibo.com/wiki/2/statuses/repost_by_me
+ def repost_by_me(opts={})
+ get 'statuses/repost_by_me.json', :params => opts
+ end
+
+ # 获取最新的提到登录用户的微博列表,即@我的微博
+ #
+ # @param [Hash] opts
+ # @option opts [int64] :since_id 若指定此参数,则返回ID比since_id大的微博(即比since_id时间晚的微博),默认为0
+ # @option opts [int64] :max_id 若指定此参数,则返回ID小于或等于max_id的微博,默认为0
+ # @option opts [int] :count 单页返回的记录条数,默认为50
+ # @option opts [int] :page 返回结果的页码,默认为1
+ # @option opts [int] :filter_by_author 作者筛选类型,0:全部、1:我关注的人、2:陌生人,默认为0
+ # @option opts [int] :filter_by_source 来源筛选类型,0:全部、1:来自微博、2:来自微群,默认为0
+ # @option opts [int] :filter_by_type 原创筛选类型,0:全部微博、1:原创的微博,默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/statuses/mentions
+ def mentions(opts={})
+ get 'statuses/mentions.json', :params => opts
+ end
+
+ # 根据微博ID获取单条微博内容
+ #
+ # @param [int] id 需要获取的微博ID
+ #
+ # @see http://open.weibo.com/wiki/2/statuses/show
+ def show(id)
+ get 'statuses/show.json', :params => {:id => id}
+ end
+
+ # 根据微博ID批量获取微博信息 [Privilege]
+ #
+ # @param [String] ids 需要查询的微博ID,用半角逗号分隔,最多不超过50个
+ #
+ # @see http://open.weibo.com/wiki/2/statuses/show_batch
+ def show_batch(ids)
+ get 'statuses/show_batch.json', :params => {:ids => ids}
+ end
+
+ # 通过微博(评论、私信)ID获取其MID
+ #
+ # @param [int64] id 需要查询的微博(评论、私信)ID,批量模式下,用半角逗号分隔,最多不超过20个
+ # @param [int] type 获取类型,1:微博、2:评论、3:私信,默认为1
+ # @param [Hash] opts
+ # @option opts [int] :is_batch 是否使用批量模式,0:否、1:是,默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/statuses/querymid
+ def querymid(id, type=1, opts={})
+ get 'statuses/querymid.json', :params => {:id => id, :type => type}.merge(opts)
+ end
+
+ # test failed
+ # 通过微博(评论、私信)MID获取其ID
+ #
+ # @param [String] mid 需要查询的微博(评论、私信)MID,批量模式下,用半角逗号分隔,最多不超过20个
+ # @param [int] type 获取类型,1:微博、2:评论、3:私信,默认为1
+ # @param [Hash] opts
+ # @option opts [int] :is_batch 是否使用批量模式,0:否、1:是,默认为0
+ # @option opts [int] :inbox 仅对私信有效,当MID类型为私信时用此参数,0:发件箱、1:收件箱,默认为0
+ # @option opts [int] :isBase62 MID是否是base62编码,0:否、1:是,默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/statuses/queryid
+ def queryid(mid, type=1, opts={})
+ get 'statuses/queryid.json', :params => {:mid => mid, :type => type}.merge(opts)
+ end
+
+ # 按天返回热门微博转发榜的微博列表
+ #
+ # @param [Hash] opts
+ # @option opts [int] :count 返回的记录条数,最大不超过50,默认为20
+ # @option opts [int] :base_app 是否只获取当前应用的数据。0为否(所有数据),1为是(仅当前应用),默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/statuses/hot/repost_daily
+ def hot_repost_daily(opts={})
+ get 'statuses/hot/repost_daily.json', :params => opts
+ end
+
+ # 按周返回热门微博转发榜的微博列表
+ #
+ # @param [Hash] opts
+ # @option opts [int] :count 返回的记录条数,最大不超过50,默认为20
+ # @option opts [int] :base_app 是否只获取当前应用的数据。0为否(所有数据),1为是(仅当前应用),默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/statuses/hot/repost_weekly
+ def hot_repost_weekly(opts={})
+ get 'statuses/hot/repost_weekly.json', :params => opts
+ end
+
+ # 按天返回热门微博评论榜的微博列表
+ #
+ # @param [Hash] opts
+ # @option opts [int] :count 返回的记录条数,最大不超过50,默认为20
+ # @option opts [int] :base_app 是否只获取当前应用的数据。0为否(所有数据),1为是(仅当前应用),默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/statuses/hot/comments_daily
+ def hot_comments_daily(opts={})
+ get 'statuses/hot/comments_daily.json', :params => opts
+ end
+
+ # 按周返回热门微博评论榜的微博列表
+ #
+ # @param [Hash] opts
+ # @option opts [int] :count 返回的记录条数,最大不超过50,默认为20
+ # @option opts [int] :base_app 是否只获取当前应用的数据。0为否(所有数据),1为是(仅当前应用),默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/statuses/hot/comments_weekly
+ def hot_comments_weekly(opts={})
+ get 'statuses/hot/comments_weekly.json', :params => opts
+ end
+
+
+ #
+ # write
+ #
+
+ # 转发一条微博
+ #
+ # @param [int64] id 要转发的微博ID
+ # @param [Hash] opts
+ # @option opts [String] :status 添加的转发文本,必须做URLencode,内容不超过140个汉字,不填则默认为“转发微博”
+ # @option opts [int] :is_comment 是否在转发的同时发表评论,0:否、1:评论给当前微博、2:评论给原微博、3:都评论,默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/statuses/repost
+ def repost(id, opts={})
+ post 'statuses/repost.json', :body => {:id => id}.merge(opts)
+ end
+
+ # 根据微博ID删除指定微博
+ #
+ # @param [int64] id 需要删除的微博ID
+ #
+ # @see http://open.weibo.com/wiki/2/statuses/destroy
+ def destroy(id)
+ post 'statuses/destroy.json', :body => {:id => id}
+ end
+
+ # no tested
+ # 发布一条新微博
+ #
+ # @param [String] status 要发布的微博文本内容,内容不超过140个汉字
+ # @param [Hash] opts
+ # @option opts [float] :lat 纬度,有效范围:-90.0到+90.0,+表示北纬,默认为0.0
+ # @option opts [float] :long 经度,有效范围:-180.0到+180.0,+表示东经,默认为0.0
+ # @option opts [String] :annotations 元数据,主要是为了方便第三方应用记录一些适合于自己使用的信息,每条微博
+ # 可以包含一个或者多个元数据,必须以json字串的形式提交,字串长度不超过512个字符,具体内容可以自定
+ #
+ # @see http://open.weibo.com/wiki/2/statuses/update
+ def update(status, opts={})
+ post 'statuses/update.json', :body => {:status => status}.merge(opts)
+ end
+
+ # no tested
+ # 上传图片并发布一条新微博
+ #
+ # @param [String] status 要发布的微博文本内容,内容不超过140个汉字
+ # @param [binary] pic 要上传的图片,仅支持JPEG、GIF、PNG格式,图片大小小于5M
+ # @param [Hash] opts
+ # @option opts [float] :lat 纬度,有效范围:-90.0到+90.0,+表示北纬,默认为0.0
+ # @option opts [float] :long 经度,有效范围:-180.0到+180.0,+表示东经,默认为0.0
+ # @option opts [String] :annotations 元数据,主要是为了方便第三方应用记录一些适合于自己使用的信息,每条微博
+ # 可以包含一个或者多个元数据,必须以json字串的形式提交,字串长度不超过512个字符,具体内容可以自定
+ #
+ # @see http://open.weibo.com/wiki/2/statuses/upload
+ def upload(status, pic, opts={})
+ post 'statuses/upload.json', :body => {:status => status, :pic => pic}.merge(opts)
+ end
+
+ # 指定一个图片URL地址抓取后上传并同时发布一条新微博 [Privilege]
+ #
+ # @param [Hash] opts
+ # @option opts [String] :status 要发布的微博文本内容,内容不超过140个汉字
+ # @option opts [String] :url 图片的URL地址,必须以http开头
+ # @option opts [float] :lat 纬度,有效范围:-90.0到+90.0,+表示北纬,默认为0.0
+ # @option opts [float] :long 经度,有效范围:-180.0到+180.0,+表示东经,默认为0.0
+ # @option opts [String] :annotations 元数据,主要是为了方便第三方应用记录一些适合于自己使用的信息,每条微博
+ # 可以包含一个或者多个元数据,必须以json字串的形式提交,字串长度不超过512个字符,具体内容可以自定
+ #
+ # @see http://open.weibo.com/wiki/2/statuses/upload_url_text
+ def upload_url_text(opts={})
+ post 'statuses/upload_url_text.json', :body => opts
+ end
+
+ # 获取微博官方表情的详细信息
+ #
+ # @param [Hash] opts
+ # @option opts [String] :type 表情类别,face:普通表情、ani:魔法表情、cartoon:动漫表情,默认为face
+ # @option opts [String] :language 语言类别,cnname:简体、twname:繁体,默认为cnname
+ #
+ # @see http://open.weibo.com/wiki/2/emotions
+ def emotions(opts={})
+ get 'emotions.json', :params => opts
+ end
+ end
+ end
+end
View
69 lib/weibo2/interface/suggestions.rb
@@ -0,0 +1,69 @@
+# encoding: utf-8
+module Weibo2
+ module Interface
+
+ # Suggestions API
+ #
+ # @see http://open.weibo.com/wiki/API%E6%96%87%E6%A1%A3_V2#.E6.8E.A8.E8.8D.90
+ class Suggestions < Base
+
+ # 返回系统推荐的热门用户列表
+ #
+ # @param [Hash] opts
+ # @option opts [String] :category 推荐分类,返回某一类别的推荐用户
+ #
+ # @see http://open.weibo.com/wiki/2/suggestions/users/hot
+ def users_hot(opts={})
+ get 'suggestions/users/hot.json', :params => opts
+ end
+
+ # 获取用户可能感兴趣的人
+ #
+ # @param [Hash] opts
+ # @option opts [int] :count 单页返回的记录条数,默认为10
+ # @option opts [int] :page 返回结果的页码,默认为1
+ #
+ # @see http://open.weibo.com/wiki/2/suggestions/users/may_interested
+ def users_may_interested(opts={})
+ get 'suggestions/users/may_interested.json', :params => opts
+ end
+
+ # 根据一段微博正文推荐相关微博用户
+ #
+ # @param [String] content 微博正文内容
+ # @param [Hash] opts
+ # @option opts [int] :num 返回结果数目,默认为10
+ #
+ # @see http://open.weibo.com/wiki/2/suggestions/users/by_status
+ def users_by_status(content, opts={})
+ get 'suggestions/users/by_status.json', :params => {:content => content}.merge(opts)
+ end
+
+ # 返回系统推荐的热门收藏
+ #
+ # @param [Hash] opts
+ # @option opts [int] :count 每页返回结果数,默认20
+ # @option opts [int] :page 返回页码,默认1
+ #
+ # @see http://open.weibo.com/wiki/2/suggestions/favorites/hot
+ def favorites_hot(opts={})
+ get 'suggestions/favorites/hot.json', :params => opts
+ end
+
+
+ #
+ # write
+ #
+
+ # 把某人标识为不感兴趣的人
+ #
+ # @param [int64] uid 不感兴趣的用户的UID
+ #
+ # @see http://open.weibo.com/wiki/2/suggestions/users/not_interested
+ def users_not_interested(uid)
+ post 'suggestions/users/not_interested.json', :body => {:uid => uid}
+ end
+
+ end
+ end
+end
View
71 lib/weibo2/interface/tags.rb
@@ -0,0 +1,71 @@
+# encoding: utf-8
+module Weibo2
+ module Interface
+
+ # Tags API
+ #
+ # @see http://open.weibo.com/wiki/API%E6%96%87%E6%A1%A3_V2#.E6.A0.87.E7.AD.BE
+ class Tags < Base
+
+ # 返回指定用户的标签列表
+ #
+ # @param [int64] uid 要获取的标签列表所属的用户ID
+ # @param [Hash] opts
+ # @option opts [int] :count 单页返回的记录条数,默认为20
+ # @option opts [int] :page 返回结果的页码,默认为1
+ # @see http://open.weibo.com/wiki/2/tags
+ def tags(uid, opts={})
+ get 'tags.json', :params => {:uid => uid}.merge(opts)
+ end
+
+ # 批量获取用户的标签列表
+ #
+ # @param [String] uids 要获取标签的用户ID。最大20,逗号分隔
+ #
+ # @see http://open.weibo.com/wiki/2/tags/tags_batch
+ def tags_batch(uids)
+ get 'tags/tags_batch.json', :params => {:uids => uids}
+ end
+
+ # 获取系统推荐的标签列表
+ #
+ # @param [Hash] opts
+ # @option opts [int] :count 返回记录数,默认10,最大10
+ #
+ # @see http://open.weibo.com/wiki/2/tags/suggestions
+ def suggestions(opts={})
+ get 'tags/suggestions.json', :params => opts
+ end
+
+ #
+ # write
+ #
+
+ # 为当前登录用户添加新的用户标签
+ #
+ # @param [String] tags 要创建的一组标签,用半角逗号隔开,每个标签的长度不可超过7个汉字,14个半角字符
+ #
+ # @see http://open.weibo.com/wiki/2/tags/create
+ def create(tags)
+ post 'tags/create.json', :body => {:tags => tags}
+ end
+
+ # 删除一个用户标签
+ #
+ # @param [int64] tag_id 要删除的标签ID
+ #
+ # @see http://open.weibo.com/wiki/2/tags/destroy
+ def destroy(tag_id)
+ post 'tags/destroy.json', :body => {:tag_id => tag_id}
+ end
+
+ # 批量删除一组标签
+ #
+ # @param [String] ids 要删除的一组标签ID,以半角逗号隔开,一次最多提交10个ID
+ #
+ def destroy_batch(ids)
+ post 'tags/destroy_batch.json', :body => {:ids => ids}
+ end
+ end
+ end
+end
View
83 lib/weibo2/interface/trends.rb
@@ -0,0 +1,83 @@
+# encoding: utf-8
+module Weibo2
+ module Interface
+
+ # Trends API
+ #
+ # @see http://open.weibo.com/wiki/API%E6%96%87%E6%A1%A3_V2#.E8.AF.9D.E9.A2.98
+ class Trends < Base
+
+ # 获取某人的话题列表
+ #
+ # @param [int64] uid 需要获取话题的用户的UID
+ # @param [Hash] opts
+ # @option opts [int] :count 单页返回的记录条数,默认为10
+ # @option opts [int] :page 返回结果的页码,默认为1
+ # @see http://open.weibo.com/wiki/2/trends
+ def trends(uid, opts={})
+ get 'trends.json', :params => {:uid => uid}.merge(opts)
+ end
+
+ # 判断当前用户是否关注某话题
+ #
+ # @param [String] trend_name 话题关键字
+ #
+ # @see http://open.weibo.com/wiki/2/trends/is_follow
+ def is_follow(trend_name)
+ get 'trends/is_follow.json', :params => {:trend_name => trend_name}
+ end
+
+ # 返回最近一小时内的热门话题
+ #
+ # @param [Hash] opts
+ # @option opts [int] :base_app 是否只获取当前应用的数据。0为否(所有数据),1为是(仅当前应用),默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/trends/hourly
+ def hourly(opts={})
+ get 'trends/hourly.json', :params => opts
+ end
+
+ # 返回最近一天内的热门话题
+ #
+ # @param [Hash] opts
+ # @option opts [int] :base_app 是否只获取当前应用的数据。0为否(所有数据),1为是(仅当前应用),默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/trends/daily
+ def daily(opts={})
+ get 'trends/daily.json', :params => opts
+ end
+
+ # 返回最近一周内的热门话题
+ #
+ # @param [Hash] opts
+ # @option opts [int] :base_app 是否只获取当前应用的数据。0为否(所有数据),1为是(仅当前应用),默认为0
+ #
+ # @see http://open.weibo.com/wiki/2/trends/weekly
+ def weekly(opts={})
+ get 'trends/weekly.json', :params => opts
+ end
+
+ #
+ # write
+ #
+
+ # 关注某话题
+ #
+ # @param [String] trend_name 要关注的话题关键词
+ # @see http://open.weibo.com/wiki/2/trends/follow
+ def follow(trend_name)
+ post 'trends/follow.json', :body => {:trend_name => trend_name}
+ end
+
+ # 8485304 no pass
+ # 取消对某话题的关注
+ #
+ # @param [int64] trend_id 要取消关注的话题ID
+ #
+ # @see http://open.weibo.com/wiki/2/trends/destroy
+ def destroy(trend_id)
+ post 'trends/destroy.json', :body => {:trend_id => trend_id}
+ end
+ end
+ end
+end
View
43 lib/weibo2/interface/users.rb
@@ -0,0 +1,43 @@
+# encoding: utf-8
+module Weibo2
+ module Interface
+
+ # Users API
+ #
+ # @see http://open.weibo.com/wiki/API%E6%96%87%E6%A1%A3_V2#.E7.94.A8.E6.88.B7
+ class Users < Base
+
+ # 根据用户ID获取用户信息
+ #
+ # @param [Hash] opts
+ # @option opts [String] :uid 需要查询的用户ID
+ # @option opts [String] :screen_name 需要查询的用户昵称
+ #
+ # @see http://open.weibo.com/wiki/2/users/show
+ def show(opts={})
+ get "users/show.json", :params => opts
+ end
+
+ # 通过个性化域名获取用户资料以及用户最新的一条微博
+ #
+ # @param [String] domain 需要查询的个性化域名
+ #
+ # @see http://open.weibo.com/wiki/2/users/domain_show
+ def domain_show(domain)
+ get "users/domain_show.json", :params => {:domain => domain}
+ end
+
+ # 批量获取用户的基本信息 [Privilege]
+ #
+ # @param [Hash] opts
+ # @option opts [String] :uids 需要查询的用户ID,用半角逗号分隔,一次最多20个
+ # @option opts [String] :screen_name 需要查询的用户昵称,用半角逗号分隔,一次最多20个
+ #
+ # @see http://open.weibo.com/wiki/2/users/show_batch
+ def show_batch(opts={})
+ get "users/show_batch.json", :params => opts
+ end
+
+ end
+ end
+end
View
30 lib/weibo2/util.rb
@@ -0,0 +1,30 @@
+module Weibo2
+ class Util
+
+ class << self
+
+ def is_authorized?
+
+ end
+
+ def parse_signed_request(signed_request, secret)
+ encoded_sig, payload = signed_request.split('.')
+ sig = base64decode(encoded_sig)
+ data = JSON.parse base64decode(payload)
+ return "-1" if data['algorithm'].upcase != "HMAC-SHA256"
+
+ digest = OpenSSL::Digest.new("SHA256")
+ expected_sig = OpenSSL::HMAC.digest(digest, secret, payload)
+ (sig != expected_sig) ? "-2" : data
+ end
+
+ private
+
+ def base64decode(str)
+ (4 - str.length % 4).times {|i| str += "="}
+ str = str.gsub('-', '+').gsub('_', '/')
+ Base64.decode64(str)
+ end
+ end
+ end
+end
View
2  weibo2.gemspec
@@ -17,5 +17,5 @@ Gem::Specification.new do |s|
s.add_dependency "rails", "~> 3.1.0"
- s.add_development_dependency "sqlite3"
+ s.add_development_dependency "rspec-rails"
end
Please sign in to comment.
Something went wrong with that request. Please try again.