top4r 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +5 -0
- data/README.textile +26 -0
- data/lib/top4r.rb +1 -0
- data/lib/top4r/client/base.rb +15 -8
- data/lib/top4r/client/item.rb +34 -4
- data/lib/top4r/config.rb +0 -4
- data/lib/top4r/core.rb +13 -0
- data/lib/top4r/model/item.rb +1 -1
- data/lib/top4r/model/user.rb +1 -1
- data/lib/top4r/version.rb +1 -1
- metadata +4 -4
- data/README +0 -28
data/CHANGES
CHANGED
data/README.textile
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
h1. Top4R
|
2
|
+
|
3
|
+
Top4R 封装了 "淘宝开放平台":http://open.taobao.com 的 Ruby 接口,帮助你快速构建基于TOP的应用程序。
|
4
|
+
|
5
|
+
h2. 功能
|
6
|
+
|
7
|
+
* [09/25/10] TOP API 2.0支持
|
8
|
+
* 商品
|
9
|
+
* 物流
|
10
|
+
* 店铺
|
11
|
+
* 收费
|
12
|
+
* 淘宝客
|
13
|
+
* 交易
|
14
|
+
* 用户
|
15
|
+
|
16
|
+
h2. 安装
|
17
|
+
|
18
|
+
$ gem install top4r
|
19
|
+
|
20
|
+
h2. Authors
|
21
|
+
|
22
|
+
* "Nowa Zhu":http://nowa.me <nowazhu@gmail.com>
|
23
|
+
|
24
|
+
h3. Thanks
|
25
|
+
|
26
|
+
* Twitter4R <"http://twitter4r.rubyforge.org":http://twitter4r.rubyforge.org>.
|
data/lib/top4r.rb
CHANGED
data/lib/top4r/client/base.rb
CHANGED
@@ -6,7 +6,7 @@ class Top4R::Client
|
|
6
6
|
|
7
7
|
def inspect
|
8
8
|
s = old_inspect
|
9
|
-
s.gsub!(/@app_secret=".*?"/, '@app_secret="
|
9
|
+
s.gsub!(/@app_secret=".*?"/, '@app_secret="******"')
|
10
10
|
end
|
11
11
|
|
12
12
|
def init
|
@@ -70,27 +70,35 @@ class Top4R::Client
|
|
70
70
|
end
|
71
71
|
|
72
72
|
def handle_rest_response(response, uri = nil)
|
73
|
-
|
73
|
+
if !response.is_a?(Net::HTTPSuccess)
|
74
74
|
raise_rest_error(response, uri)
|
75
75
|
end
|
76
|
-
|
76
|
+
|
77
77
|
map = JSON.parse(response.body)
|
78
|
+
|
78
79
|
# API 1.0
|
79
|
-
if map["
|
80
|
+
if !map["error_response"].blank? and map["error_response"]["code"].to_s == "27"
|
81
|
+
puts "[Top4R]--#{map.inspect}"
|
82
|
+
@@logger.info "Login session expired."
|
83
|
+
raise Top4R::LoginRequiredError.new
|
84
|
+
elsif !map["error_response"].blank? and map["error_response"]["code"].to_s == "560"
|
85
|
+
@@logger.info "Shop not exist."
|
86
|
+
raise Top4R::ShopNotExistError.new(:code => map["error_response"]["code"])
|
87
|
+
elsif map["error_rsp"].is_a?(Hash) and map["error_rsp"]["code"].to_s == "630"
|
80
88
|
@@logger.info "Raising SuiteNotOrderedError..."
|
81
89
|
raise Top4R::SuiteNotOrderedError.new(:code => map["error_rsp"]["code"],
|
82
90
|
:message => map["error_rsp"]["msg"],
|
83
91
|
:error => map["error_rsp"],
|
84
92
|
:uri => uri)
|
85
93
|
elsif map["error_rsp"].is_a?(Hash)
|
86
|
-
@@logger.info "Raising RESTError..."
|
94
|
+
@@logger.info "Raising RESTError [error_rsp not hash]..."
|
87
95
|
raise Top4R::RESTError.new(:code => map["error_rsp"]["code"],
|
88
96
|
:message => map["error_rsp"]["msg"],
|
89
97
|
:error => map["error_rsp"],
|
90
98
|
:uri => uri)
|
91
99
|
# API 2.0
|
92
100
|
elsif map["error_response"].is_a?(Hash)
|
93
|
-
@@logger.info "Raising RESTError..."
|
101
|
+
@@logger.info "Raising RESTError [error_response not hash]..."
|
94
102
|
raise Top4R::RESTError.new(:code => map["error_response"]["code"],
|
95
103
|
:message => map["error_response"]["msg"],
|
96
104
|
:sub_code => map["error_response"]["sub_code"],
|
@@ -129,13 +137,12 @@ class Top4R::Client
|
|
129
137
|
|
130
138
|
def append_top_params(params)
|
131
139
|
params = params.merge({
|
132
|
-
# :session => @session,
|
133
140
|
:timestamp => Time.now.strftime("%Y-%m-%d %H:%M:%S"),
|
134
141
|
:format => "#{@@config.format}",
|
135
142
|
:app_key => @app_key
|
136
143
|
})
|
137
144
|
if !@session.nil? and !@session.blank?
|
138
|
-
params
|
145
|
+
params = params.merge({ :session => @session })
|
139
146
|
end
|
140
147
|
params[:v] = "2.0" unless params[:v]
|
141
148
|
params = params.merge({
|
data/lib/top4r/client/item.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
2
2
|
class Top4R::Client
|
3
3
|
@@ITEM_METHODS = {
|
4
|
+
:inventory_list => 'taobao.items.inventory.get',
|
4
5
|
:onsale_list => 'taobao.items.onsale.get',
|
5
6
|
:item_info => 'taobao.item.get',
|
6
7
|
:items_info => 'taobao.items.list.get',
|
@@ -25,21 +26,47 @@ class Top4R::Client
|
|
25
26
|
items
|
26
27
|
end
|
27
28
|
|
29
|
+
# 得到当前会话用户库存中的商品列表
|
30
|
+
def items_inventory(q = nil, options = {}, &block)
|
31
|
+
method = :inventory_list
|
32
|
+
valid_method(method, @@ITEM_METHODS, :item)
|
33
|
+
options = {:q => q}.merge(options) if q
|
34
|
+
params = {:fields => Top4R::Item.fields}.merge(options)
|
35
|
+
response = http_connect {|conn| create_http_get_request(@@ITEM_METHODS[method], params)}
|
36
|
+
result = JSON.parse(response.body)[rsp(@@ITEM_METHODS[method])]
|
37
|
+
if result.is_a?(Hash) and result['items']
|
38
|
+
items = Top4R::Item.unmarshal(result["items"]["item"])
|
39
|
+
items.each {|item| bless_model(item); yield item if block_given?}
|
40
|
+
@total_results = result["total_results"].to_i
|
41
|
+
else
|
42
|
+
@total_results = 0
|
43
|
+
items = []
|
44
|
+
end
|
45
|
+
items
|
46
|
+
end
|
47
|
+
|
28
48
|
def item_info(iid = nil, options = {}, &block)
|
29
49
|
method = :item_info
|
30
50
|
valid_method(method, @@ITEM_METHODS, :item)
|
31
51
|
options = {:num_iid => iid}.merge(options) if iid
|
32
52
|
params = {:fields => Top4R::Item.fields}.merge(options)
|
33
53
|
response = http_connect {|conn| create_http_get_request(@@ITEM_METHODS[method], params)}
|
34
|
-
|
35
|
-
|
54
|
+
result = JSON.parse(response.body)[rsp(@@ITEM_METHODS[method])]
|
55
|
+
if result.is_a?(Hash) and result['item']
|
56
|
+
item = Top4R::Item.unmarshal(result["item"])
|
57
|
+
item = bless_model(item)
|
58
|
+
else
|
59
|
+
item = nil
|
60
|
+
end
|
61
|
+
item
|
36
62
|
end
|
37
63
|
|
38
64
|
def items_info(iid = nil, options = {}, &block)
|
39
65
|
method = :items_info
|
40
66
|
valid_method(method, @@ITEM_METHODS, :item)
|
41
|
-
|
42
|
-
|
67
|
+
# 为了兼容老的items_list接口,先split,后面再join
|
68
|
+
iid = iid.split(',') if !iid.is_a?(Array)
|
69
|
+
options = {:num_iids => iid.join(',')}.merge(options) if iid
|
43
70
|
params = {:fields => Top4R::Item.fields}.merge(options)
|
44
71
|
response = http_connect {|conn| create_http_get_request(@@ITEM_METHODS[method], params)}
|
45
72
|
result = JSON.parse(response.body)[rsp(@@ITEM_METHODS[method])]
|
@@ -53,4 +80,7 @@ class Top4R::Client
|
|
53
80
|
end
|
54
81
|
items
|
55
82
|
end
|
83
|
+
|
84
|
+
alias_method :item, :item_info
|
85
|
+
alias_method :items_list, :items_info
|
56
86
|
end
|
data/lib/top4r/config.rb
CHANGED
@@ -56,10 +56,6 @@ module Top4R
|
|
56
56
|
:test_rest_uri => '/router/rest',
|
57
57
|
:test_port => 80,
|
58
58
|
:test_protocol => :http,
|
59
|
-
# :staging_host => '192.168.208.110',
|
60
|
-
# :staging_rest_uri => '/top/private/services/rest',
|
61
|
-
# :staging_port => '8080',
|
62
|
-
# :staging_protocol => :http,
|
63
59
|
:proxy_host => nil,
|
64
60
|
:proxy_port => nil,
|
65
61
|
:format => :json,
|
data/lib/top4r/core.rb
CHANGED
@@ -7,6 +7,8 @@ module Top4R
|
|
7
7
|
end
|
8
8
|
|
9
9
|
module InstanceMethods
|
10
|
+
attr_accessor :raw
|
11
|
+
|
10
12
|
def initialize(params = {})
|
11
13
|
others = {}
|
12
14
|
params.each do |key,val|
|
@@ -16,6 +18,7 @@ module Top4R
|
|
16
18
|
others[key] = val
|
17
19
|
end
|
18
20
|
end
|
21
|
+
self.send("raw=",params)
|
19
22
|
self.send("#{:other_attrs}=", others) if self.respond_to? :other_attrs and others.size > 0
|
20
23
|
self.send(:init) if self.respond_to? :init
|
21
24
|
end
|
@@ -61,4 +64,14 @@ module Top4R
|
|
61
64
|
"#{@method} method at model #{@model} requires you to be logged in first"
|
62
65
|
end
|
63
66
|
end # LoginRequiredError
|
67
|
+
|
68
|
+
class ShopNotExistError < RESTError
|
69
|
+
include ClassUtilMixin
|
70
|
+
@@ATTRIBUTES = [:model, :method]
|
71
|
+
attr_accessor *@@ATTRIBUTES
|
72
|
+
|
73
|
+
def to_s
|
74
|
+
"#{@method} method at model #{@model} 错误,错误代号#{@code},用户没有开通店铺!"
|
75
|
+
end
|
76
|
+
end # ShopNotExistError
|
64
77
|
end
|
data/lib/top4r/model/item.rb
CHANGED
data/lib/top4r/model/user.rb
CHANGED
@@ -77,7 +77,7 @@ module Top4R
|
|
77
77
|
|
78
78
|
def default_public_fields
|
79
79
|
["user_id", "nick", "sex", "buyer_credit", "seller_credit",
|
80
|
-
"location.city", "location.state", "location.country", "created", "last_visit", "type"]
|
80
|
+
"location.city", "location.state", "email", "location.country", "created", "last_visit", "type"]
|
81
81
|
end
|
82
82
|
|
83
83
|
def default_private_fields
|
data/lib/top4r/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: top4r
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -33,7 +33,7 @@ executables:
|
|
33
33
|
- top4rsh
|
34
34
|
extensions: []
|
35
35
|
extra_rdoc_files:
|
36
|
-
- README
|
36
|
+
- README.textile
|
37
37
|
- CHANGES
|
38
38
|
- TODO
|
39
39
|
- MIT-LICENSE
|
@@ -66,12 +66,12 @@ files:
|
|
66
66
|
- lib/top4r/model.rb
|
67
67
|
- lib/top4r/version.rb
|
68
68
|
- lib/top4r.rb
|
69
|
-
- README
|
69
|
+
- README.textile
|
70
70
|
- CHANGES
|
71
71
|
- TODO
|
72
72
|
- MIT-LICENSE
|
73
73
|
- bin/top4rsh
|
74
|
-
homepage:
|
74
|
+
homepage: https://github.com/nowa/top4r
|
75
75
|
licenses: []
|
76
76
|
post_install_message:
|
77
77
|
rdoc_options: []
|
data/README
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
= TOP4R
|
2
|
-
|
3
|
-
* http://top4r.labs.nowa.me
|
4
|
-
* Thanks Twitter4R <http://twitter4r.rubyforge.org>.
|
5
|
-
|
6
|
-
== DESCRIPTION:
|
7
|
-
|
8
|
-
TOP4R封装了淘宝开发平台的接口,帮助你快速构建基于TOP的应用程序。
|
9
|
-
|
10
|
-
== FEATURES/PROBLEMS:
|
11
|
-
|
12
|
-
* [09/25/10] TOP API 2.0支持
|
13
|
-
* 商品
|
14
|
-
* 物流
|
15
|
-
* 店铺
|
16
|
-
* 收费
|
17
|
-
* 淘宝客
|
18
|
-
* 交易
|
19
|
-
* 用户
|
20
|
-
|
21
|
-
== REQUIREMENTS:
|
22
|
-
|
23
|
-
* rubygems
|
24
|
-
* json
|
25
|
-
|
26
|
-
== INSTALL:
|
27
|
-
|
28
|
-
sudo gem install top4r
|