Class: Baidu::OAuth::RESTClient

Inherits:
Object
  • Object
show all
Includes:
Support::Request
Defined in:
lib/baidu/oauth/rest_client.rb

Overview

通过百度开放平台提供的REST API,第三方应用可以获取到百度用户的用户资料、 好友关系等基本信息,以及今后百度开放的其他任何数据, 但前提是应用必须获得到百度开放平台和百度用户的授权。

Constant Summary

Constants included from Support::Request

Support::Request::MAX_REDIRECT_LIMIT

Instance Method Summary collapse

Methods included from Support::Request

#get, #post

Constructor Details

#initialize(access_token) ⇒ RESTClient #initialize(session) ⇒ RESTClient

创建一个 REST API Client 实例

Examples:

rest_client = Baidu::OAuth::RESTClient.new('my_token...')

Overloads:



21
22
23
24
25
26
27
28
29
# File 'lib/baidu/oauth/rest_client.rb', line 21

def initialize(access_token_or_session)
  @access_token = case access_token_or_session
                  when String then access_token_or_session
                  when Baidu::Session then access_token_or_session.access_token
                  else
                    raise ArgumentError, 'need a String or Baidu::Session'
                  end
  @site = Baidu::OAuth::SITE
end

Instance Method Details

#app_user?(options = {}) ⇒ Boolean

判定当前用户是否已经为应用授权

Parameters:

  • options (Hash) (defaults to: {})

    a customizable set of options

Options Hash (options):

  • :uid (String)

    用户uid,为空则默认是当前用户

  • :appid (String)

    应用的appid,为空则默认是当前应用

Returns:

  • (Boolean)

See Also:



112
113
114
115
# File 'lib/baidu/oauth/rest_client.rb', line 112

def app_user?(options={})
  rest = api_request '/passport/users/isAppUser', options
  rest[:result] == '1'
end

#are_friends(uid1, uid2) ⇒ Array #are_friends(uids1, uids2) ⇒ Array

获得指定用户之间好友关系

获得指定用户之间是否是好友关系。第一个数组指定一半用户,第二个数组指定另外一半, 两个数组必须同样的个数,一次最多可以查20个

Examples:

返回的原始 JSON

[
  {
    "uid1": "2222",
    "uid2": "1111",
    "are_friends": "1",
    "are_friends_reverse": "0"
  },
  {
    "uid1": "3333",
    "uid2": "2222",
    "are_friends": "0",
    "are_friends_reverse": "1"
  }
]

:are_friends         uid2是否是uid1的好友
:are_friends_reverse uid1是否是uid2的好友

Overloads:

  • #are_friends(uid1, uid2) ⇒ Array

    Parameters:

    • uid1 (String)
    • uid2 (String)
  • #are_friends(uids1, uids2) ⇒ Array

    Parameters:

    • uids1 (Array<String>)
    • uids2 (Array<String>)

Returns:

  • (Array)

    are_friends 和 are_friends_reverse 值在原始 JSON 基础之上转换为 true 或者 false

    如:[{:uid1=>"22", :uid2=>"33", :are_friends=>false, :are_friends_reverse=>true}]
    

See Also:



232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
# File 'lib/baidu/oauth/rest_client.rb', line 232

def are_friends(uids1, uids2)
  body = {}
  case
  when uids1.is_a?(String) && uids2.is_a?(String)
    body[:uids1], body[:uids2] = uids1, uids2
  when uids1.is_a?(Array)  && uids2.is_a?(Array)
    raise ArgumentError, 'not the same size of array' unless uids1.size == uids2.size
    body[:uids1], body[:uids2] = uids1.join(','), uids2.join(',')
  else
    raise ArgumentError, 'not the same types'
  end

  rest = api_request '/friends/areFriends', body
  rest.each do |h|
    h[:are_friends] = h[:are_friends] == '1'
    h[:are_friends_reverse] = h[:are_friends_reverse] == '1'
  end
end

#expire_sessionBoolean

使access_token,session_key过期

使用户授予的access_token和session_key过期

Returns:

  • (Boolean)

    true: 成功 false: 失败

See Also:



257
258
259
260
# File 'lib/baidu/oauth/rest_client.rb', line 257

def expire_session
  rest = api_request '/passport/auth/expireSession'
  rest[:result] == '1'
end

#get_friends(options = {}) ⇒ Array

TODO:

TODO: check return value

返回用户好友资料

根据用户id以及在百度的相应的操作权限(可以是多个权限半角逗号隔开)来判断用户是否可以进行此操作

Examples:

返回的原始 JSON

[
  {
    "uname": "spacebj009",
    "uid": "2013411308",
    "portrait": "79787370616365626a3030393306"
  },
  {
    "uname": "spacebj003",
    "uid": "2013412844",
    "portrait": "73787370616365626a3030333306"
  }
]

:uname    好友的用户名
:uid      当前登录用户的数字ID
:portrait 好友的用户头像加密串

Parameters:

  • options (Hash) (defaults to: {})

    a customizable set of options

Options Hash (options):

  • :page_no (Fixnum)

    用于支持分页的API,0表示第1页,默认为0

  • :page_size (Fixnum)

    用于支持分页的API,表示每页返回多少条数据,默认值500

  • :sort_type (String)

    0: 按照添加时间排序,1:登陆时间排序,默认为0

Returns:

  • (Array)

See Also:



192
193
194
# File 'lib/baidu/oauth/rest_client.rb', line 192

def get_friends(options={})
  api_request '/friends/getFriends', options
end

#get_infoHash

Note:

如果存储用户信息的话,请大家以百度用户uid为主键

返回用户详细资料

Examples:

返回的原始 JSON

{
    "userid":"2097322476",
    "username":"wl19871011",
    "realname":"阳光",
    "userdetail":"喜欢自由",
    "birthday":"1987-01-01",
    "marriage":"恋爱",
    "sex":"男",
    "blood":"O",
    "constellation":"射手",
    "figure":"小巧",
    "education":"大学/专科",
    "trade":"计算机/电子产品",
    "job":"未知",
    "birthday_year":"1987",
    "birthday_month":"01",
    "birthday_day":"01"
}

:userid        当前登录用户的数字ID
:username      当前登录用户的用户名,值可能为空。
:realname      用户真实姓名,可能为空。
:portrait      当前登录用户的头像
:userdetail    自我简介,可能为空。
:birthday      生日,以yyyy-mm-dd格式显示。
:marriage      婚姻状况
:sex           性别
:blood         血型
:figure        体型
:constellation 星座
:education     学历
:trade         当前职业
:job           职位

头像的地址具体如下:
small image: http://tb.himg.baidu.com/sys/portraitn/item/{$portrait}
large image: http://tb.himg.baidu.com/sys/portrait/item/{$portrait}

Returns:

  • (Hash)

See Also:



101
102
103
# File 'lib/baidu/oauth/rest_client.rb', line 101

def get_info
  api_request '/passport/users/getInfo'
end

#get_logged_in_userHash

Note:

如果存储用户信息的话,请大家以百度用户uid为主键

获取当前登录用户的简单信息

获取当前登录用户的用户uid、用户名和头像。

Examples:

返回的原始 JSON

{
  "uid": "256758493",
  "uname": "XiaoLu",
  "portrait": "b4994c6849380284916e67af0c"
}

:uid      当前登录用户的数字ID
:uname    当前登录用户的用户名。只用于显示,可能会发生变化,不保证全局唯一
:portrait 当前登录用户的头像

头像的地址具体如下:
small image: http://tb.himg.baidu.com/sys/portraitn/item/{$portrait}
large image: http://tb.himg.baidu.com/sys/portrait/item/{$portrait}

Returns:

  • (Hash)

See Also:



53
54
55
# File 'lib/baidu/oauth/rest_client.rb', line 53

def get_logged_in_user
  api_request '/passport/users/getLoggedInUser'
end

#has_app_permission?(ext_perm, uid = nil) ⇒ Boolean

判断指定用户是否具有某个数据操作权限

根据用户id以及在百度的相应的操作权限(单个权限,例如接收email等)来判断用户是否可以进行此操作。

Parameters:

  • ext_perm (String)

    单个权限,例如接收email等,具体权限请查看权限列表

  • uid (String) (defaults to: nil)

    用户uid,为空则默认是当前用户

Returns:

  • (Boolean)

See Also:



127
128
129
130
131
# File 'lib/baidu/oauth/rest_client.rb', line 127

def has_app_permission?(ext_perm, uid=nil)
  body = { ext_perm: ext_perm, uid: uid }
  rest = api_request '/passport/users/hasAppPermission', body
  rest[:result] == '1'
end

#has_app_permissions(ext_perm, uid = nil) ⇒ Hash #has_app_permissions(ext_perms, uid = nil) ⇒ Hash

判断指定用户是否具有某一批数据操作权限

根据用户id以及在百度的相应的操作权限(可以是多个权限半角逗号隔开)来判断用户是否可以进行此操作

Examples:

返回的原始 JSON

{"basic":"1","email":"0"}

Overloads:

  • #has_app_permissions(ext_perm, uid = nil) ⇒ Hash

    Parameters:

    • ext_perm (String)

      多个权限半角逗号隔开,例如basic,email等,具体权限请查看权限列表

    • uid (String) (defaults to: nil)

      用户uid,为空则默认是当前用户

  • #has_app_permissions(ext_perms, uid = nil) ⇒ Hash

    Parameters:

    • ext_perms (Array<String>)

      权限字符串数组,具体权限请查看权限列表

    • uid (String) (defaults to: nil)

      用户uid,为空则默认是当前用户

Returns:

  • (Hash)

    各个值在原始 JSON 基础之上转换为 true 或者 false

    如:{:basic=>true, :email=>false}
    

See Also:



153
154
155
156
157
158
159
160
161
# File 'lib/baidu/oauth/rest_client.rb', line 153

def has_app_permissions(ext_perms, uid=nil)
  body = { ext_perms: ext_perms, uid: uid }
  if ext_perms.is_a? Array
    body[:ext_perms] = ext_perms.join ','
  end

  rest = api_request '/passport/users/hasAppPermissions', body
  rest.each { |k, v| rest[k] = v == '1' }
end

#query_ip(*ips) ⇒ Hash

查询IP地址所在地区

Examples:

rest_client.query_ip '111.222.111.222', '114.114.114.114'

返回的原始 JSON

{
  "111.222.111.222": {
    "province": "\u5e7f\u4e1c",
    "city": "\u6df1\u5733"
  },
  "111.222.111.222": {
    "province": ""\u6c5f\u82cf",
    "city": ""
  }
}

Parameters:

  • ips (*String)

    需要查询的ip地址

Returns:

  • (Hash)

See Also:



294
295
296
# File 'lib/baidu/oauth/rest_client.rb', line 294

def query_ip(*ips)
  api_request('/iplib/query', { ip: ips.join(',') }, :get)
end

#revoke_authorization(uid = nil) ⇒ Boolean

撤销用户授予第三方应用的权限

Parameters:

  • uid (String) (defaults to: nil)

    用户的ID,空则默认为当前用户

Returns:

  • (Boolean)

    true: 成功 false: 失败

See Also:



268
269
270
271
# File 'lib/baidu/oauth/rest_client.rb', line 268

def revoke_authorization(uid=nil)
  rest = api_request('/passport/auth/revokeAuthorization', {uid: uid})
  rest[:result] == '1'
end