ppc 1.3.2 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +21 -339
  3. data/README.md +46 -28
  4. data/Rakefile +1 -0
  5. data/lib/ppc.rb +1 -1
  6. data/lib/ppc/api.rb +18 -14
  7. data/lib/ppc/api/baidu.rb +5 -14
  8. data/lib/ppc/api/baidu/account.rb +28 -23
  9. data/lib/ppc/api/baidu/bulk.rb +1 -1
  10. data/lib/ppc/api/baidu/creative.rb +47 -86
  11. data/lib/ppc/api/baidu/group.rb +43 -74
  12. data/lib/ppc/api/baidu/keyword.rb +73 -166
  13. data/lib/ppc/api/baidu/phone_new_creative.rb +8 -7
  14. data/lib/ppc/api/baidu/plan.rb +51 -34
  15. data/lib/ppc/api/baidu/report.rb +9 -29
  16. data/lib/ppc/api/qihu.rb +7 -111
  17. data/lib/ppc/api/qihu/account.rb +31 -25
  18. data/lib/ppc/api/qihu/bulk.rb +1 -2
  19. data/lib/ppc/api/qihu/creative.rb +57 -74
  20. data/lib/ppc/api/qihu/group.rb +40 -63
  21. data/lib/ppc/api/qihu/keyword.rb +58 -74
  22. data/lib/ppc/api/qihu/plan.rb +52 -32
  23. data/lib/ppc/api/qihu/rank.rb +11 -10
  24. data/lib/ppc/api/qihu/report.rb +41 -94
  25. data/lib/ppc/api/qihu/sublink.rb +44 -41
  26. data/lib/ppc/api/sm.rb +3 -12
  27. data/lib/ppc/api/sm/account.rb +20 -19
  28. data/lib/ppc/api/sm/creative.rb +36 -50
  29. data/lib/ppc/api/sm/group.rb +40 -61
  30. data/lib/ppc/api/sm/keyword.rb +44 -102
  31. data/lib/ppc/api/sm/phone_new_creative.rb +9 -8
  32. data/lib/ppc/api/sm/plan.rb +36 -26
  33. data/lib/ppc/api/sm/report.rb +5 -24
  34. data/lib/ppc/api/sogou.rb +5 -55
  35. data/lib/ppc/api/sogou/account.rb +17 -17
  36. data/lib/ppc/api/sogou/creative.rb +52 -75
  37. data/lib/ppc/api/sogou/group.rb +44 -91
  38. data/lib/ppc/api/sogou/keyword.rb +60 -143
  39. data/lib/ppc/api/sogou/plan.rb +37 -23
  40. data/lib/ppc/api/sogou/report.rb +2 -19
  41. data/lib/ppc/ext.rb +0 -8
  42. data/lib/ppc/operation.rb +60 -83
  43. data/lib/ppc/operation/account.rb +13 -19
  44. data/lib/ppc/operation/creative.rb +0 -20
  45. data/lib/ppc/operation/group.rb +18 -27
  46. data/lib/ppc/operation/keyword.rb +0 -27
  47. data/lib/ppc/operation/plan.rb +34 -22
  48. data/lib/ppc/operation/report.rb +4 -4
  49. data/lib/ppc/operation/sublink.rb +8 -0
  50. data/ppc.gemspec +5 -5
  51. metadata +16 -10
  52. data/lib/ppc/api/shenma.rb +0 -64
  53. data/lib/ppc/api/shenma/report.rb +0 -135
@@ -3,19 +3,19 @@ module PPC
3
3
  module Report
4
4
 
5
5
  def download_report( param = nil, debug = false )
6
- call('report').download_report( @auth, param, debug )
6
+ call( "report" ).download_report( @auth, param, debug )
7
7
  end
8
8
 
9
9
  def query_report( param = nil, debug = false )
10
- call('report').query_report( @auth, param, debug )
10
+ call( "report" ).query_report( @auth, param, debug )
11
11
  end
12
12
 
13
13
  def creative_report( param = nil, debug = false )
14
- call('report').creative_report( @auth, param, debug )
14
+ call( "report" ).creative_report( @auth, param, debug )
15
15
  end
16
16
 
17
17
  def keyword_report( param = nil, debug = false )
18
- call('report').keyword_report( @auth, param, debug )
18
+ call( "report" ).keyword_report( @auth, param, debug )
19
19
  end
20
20
 
21
21
  end
@@ -0,0 +1,8 @@
1
+ module PPC
2
+ module Operation
3
+ class Sublink
4
+ include ::PPC::Operation
5
+
6
+ end
7
+ end
8
+ end
@@ -14,12 +14,12 @@ puts """################ WARNING #################
14
14
  Gem::Specification.new do |spec|
15
15
  spec.name = "ppc"
16
16
  spec.version = PPC::VERSION
17
- spec.authors = ["Chienli Ma, 刘梦晨, 刘明"]
18
- spec.email = ["maqianlie@gmail.com, liuyu_tc@163.com, seoaqua@qq.com"]
19
- spec.summary = %q{ppc api for baidu qihu sogou}
20
- spec.description = %q{ppc api for baidu qihu sogou}
17
+ spec.authors = ["Chienli Ma", "刘梦晨", "刘明", "范捷琦"]
18
+ spec.email = ["maqianlie@gmail.com", "liuyu_tc@163.com", "seoaqua@qq.com", "fjqqiqi@163.com"]
19
+ spec.summary = %q{ppc api for baidu qihu sogou sm}
20
+ spec.description = %q{ppc api for baidu qihu sogou sm}
21
21
  spec.homepage = "https://github.com/warriors-of-the-night/ppc"
22
- spec.license = "GNU"
22
+ spec.license = "MIT"
23
23
 
24
24
  spec.files = `git ls-files -z`.split("\x0")
25
25
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
metadata CHANGED
@@ -1,14 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ppc
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.2
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
- - Chienli Ma, 刘梦晨, 刘明
7
+ - Chienli Ma
8
+ - 刘梦晨
9
+ - 刘明
10
+ - 范捷琦
8
11
  autorequire:
9
12
  bindir: bin
10
13
  cert_chain: []
11
- date: 2015-10-14 00:00:00.000000000 Z
14
+ date: 2016-08-04 00:00:00.000000000 Z
12
15
  dependencies:
13
16
  - !ruby/object:Gem::Dependency
14
17
  name: httparty
@@ -64,9 +67,12 @@ dependencies:
64
67
  - - ">="
65
68
  - !ruby/object:Gem::Version
66
69
  version: '0'
67
- description: ppc api for baidu qihu sogou
70
+ description: ppc api for baidu qihu sogou sm
68
71
  email:
69
- - maqianlie@gmail.com, liuyu_tc@163.com, seoaqua@qq.com
72
+ - maqianlie@gmail.com
73
+ - liuyu_tc@163.com
74
+ - seoaqua@qq.com
75
+ - fjqqiqi@163.com
70
76
  executables: []
71
77
  extensions: []
72
78
  extra_rdoc_files: []
@@ -75,6 +81,7 @@ files:
75
81
  - ".rspec"
76
82
  - LICENSE
77
83
  - README.md
84
+ - Rakefile
78
85
  - lib/ppc.rb
79
86
  - lib/ppc/api.rb
80
87
  - lib/ppc/api/baidu.rb
@@ -97,8 +104,6 @@ files:
97
104
  - lib/ppc/api/qihu/rank.rb
98
105
  - lib/ppc/api/qihu/report.rb
99
106
  - lib/ppc/api/qihu/sublink.rb
100
- - lib/ppc/api/shenma.rb
101
- - lib/ppc/api/shenma/report.rb
102
107
  - lib/ppc/api/sm.rb
103
108
  - lib/ppc/api/sm/account.rb
104
109
  - lib/ppc/api/sm/bulk.rb
@@ -124,6 +129,7 @@ files:
124
129
  - lib/ppc/operation/keyword.rb
125
130
  - lib/ppc/operation/plan.rb
126
131
  - lib/ppc/operation/report.rb
132
+ - lib/ppc/operation/sublink.rb
127
133
  - ppc.gemspec
128
134
  - spec/baidu/api_baidu_account_spec.rb
129
135
  - spec/baidu/api_baidu_creative_spec.rb
@@ -163,7 +169,7 @@ files:
163
169
  - spec/spec_helper.rb
164
170
  homepage: https://github.com/warriors-of-the-night/ppc
165
171
  licenses:
166
- - GNU
172
+ - MIT
167
173
  metadata: {}
168
174
  post_install_message:
169
175
  rdoc_options: []
@@ -181,10 +187,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
181
187
  version: '0'
182
188
  requirements: []
183
189
  rubyforge_project:
184
- rubygems_version: 2.4.8
190
+ rubygems_version: 2.5.1
185
191
  signing_key:
186
192
  specification_version: 4
187
- summary: ppc api for baidu qihu sogou
193
+ summary: ppc api for baidu qihu sogou sm
188
194
  test_files:
189
195
  - spec/baidu/api_baidu_account_spec.rb
190
196
  - spec/baidu/api_baidu_creative_spec.rb
@@ -1,64 +0,0 @@
1
- module PPC
2
- module API
3
- class Baidu
4
- @map = nil
5
- @@debug = false
6
-
7
- def self.debug_on
8
- @@debug = true
9
- end
10
-
11
- def self.debug_off
12
- @@debug = false
13
- end
14
-
15
- def self.request( auth, path, params = {} )
16
- '''
17
- request should return whole http response including header
18
- '''
19
- uri = URI("https://e.sm.cn#{path}")
20
- http_body = {
21
- header: {
22
- username: auth[:username],
23
- password: auth[:password],
24
- token: auth[:token],
25
- target: auth[:tarvget]
26
- },
27
- body: params
28
- }.to_json
29
-
30
- http_header = {
31
- 'Content-Type' => 'application/json; charset=UTF-8'
32
- }
33
-
34
- http = Net::HTTP.new(uri.host, 443)
35
- # 是否显示http通信输出
36
- http.set_debug_output( $stdout ) if @@debug
37
- http.use_ssl = true
38
-
39
- response = http.post(uri.path, http_body, http_header)
40
- response = JSON.parse( response.body )
41
- end
42
-
43
- def self.process( response, key, &func)
44
- '''
45
- Process Http response. If operation successes, return value of given keys.
46
- You can process the result using function &func, or do nothing by passing
47
- block {|x|x}
48
- ===========================
49
- @Output: resultType{ desc: boolean, failure: Array, result: Array }
50
-
51
- failure is the failures part of response\'s header
52
- result is the processed response body.
53
- '''
54
- p response
55
- result = {}
56
- result[:succ] = response['header']['desc']=='success'? true : false
57
- result[:failure] = response['header']['failures']
58
- result[:result] = func[ response['body'][key] ]
59
- return result
60
- end # process
61
-
62
- end
63
- end
64
- end
@@ -1,135 +0,0 @@
1
- # -*- coding:utf-8 -*-
2
- module PPC
3
- module API
4
- class Shenma
5
- class Report< Shenma
6
- Service = 'Report'
7
-
8
- # 需要用到的映射集合
9
- Type_map = { 'account' =>2, 'plan'=> 10, 'group'=> 11,
10
- 'keyword'=> 14, 'creative'=> 12, 'region'=> 3,
11
- 'query'=> 6, 'phone' => 22, 'app' => 23 }
12
-
13
- Level_map = { 'account' => 2, 'plan' => 3, 'group' => 5,
14
- 'creative' => 7, 'keyword' => 11, 'phone' => 22,
15
- 'app' => 23, 'pair' => 12 }
16
-
17
- Unit_map = { 'day' => 5, 'month' => 3, 'default' => 8 }
18
-
19
- def self.get_id( auth, params, debug = false )
20
- request = make_reportrequest( params )
21
- body = { ReportRequestType: request }
22
- response = request( auth, '/report/getReport' ,body)
23
- process( response, 'reportId', debug ){ |x| x }
24
- end
25
-
26
- def self.get_state( auth, id, debug = false)
27
- '''
28
- input id should be string
29
- '''
30
- status = {1=>'Waiting' ,2=>'Opearting' ,3=>'Finished'}
31
- body = { taskId: id }
32
- response = request( auth, '/task/getTaskState' ,body)
33
- process( response, 'isGenerated', debug ){ |x| status[x] }
34
- end
35
-
36
- # todo : rewrite method
37
- def self.download( auth, id, debug = false )
38
- body = { fileId: id }
39
- response = request( auth, '/file/download' ,body)
40
- process( response, 'reportPath', debug ){ |x| x }
41
- end
42
-
43
- private
44
- def self.make_reportrequest( param )
45
- '''
46
- make RepoerRequestType
47
- ======================
48
- For more docs please have a look at
49
- ::PPC::API::Baidu::Report:make_reportrequest()
50
- '''
51
- requesttype = {}
52
- requesttype[:performanceData] = param[:fields]
53
- requesttype[:reportType] = Type_map[ param[:type] ] if param[:type]
54
- requesttype[:levelOfDetails] = Level_map[ param[:level] ] if param[:level]
55
- requesttype[:statRange] = Level_map[ param[:range] ] if param[:range]
56
- requesttype[:unitOfTime] = Unit_map[ param[:unit] ] if param[:unit]
57
- requesttype[:idOnly] = param[:id_only] || false
58
- requesttype[:statIds] = param[:ids] if param[:ids] != nil
59
- requesttype[:startDate] = parse_date( param[:startDate] )
60
- requesttype[:endDate] = parse_date( param[:endDate] )
61
- return requesttype
62
- end
63
-
64
- private
65
- def self.parse_date( date )
66
- """
67
- Cast string to time:
68
- 'YYYYMMDD' => Time
69
- """
70
- if date
71
- y = date[0..3]
72
- m = date[4..5]
73
- d = date[6..7]
74
- date = Time.new( y, m, d )
75
- else
76
- date = (Time.now - 24*3600)
77
- end
78
- date.to_s[0,10]
79
- end
80
-
81
- def download_report( auth, param, debug = false )
82
- response = call('report').get_id( auth, param )
83
- if response[:succ]
84
- id = response[:result]
85
- p "Got report id:" + id.to_s if debug
86
- loop do
87
- sleep 2
88
- break if call('report').get_state( auth, id )[:result] == 'Finished'
89
- p "Report is not generated, waiting..." if debug
90
- end
91
- # need to rewrite the download method here.
92
- url = call('report').get_url( auth, id )[:result]
93
- return open(url).read.force_encoding('gb18030').encode('utf-8')
94
- else
95
- raise response[:failure][0]["message"]
96
- end
97
- end
98
-
99
- ###########################
100
- # intreface for Operation #
101
- ###########################
102
- def query_report( auth, param = nil, debug = false )
103
- param = {} if not param
104
- param[:type] ||= 'query'
105
- param[:fields] ||= %w(click)
106
- param[:level] ||= 'pair'
107
- param[:range] ||= 'account'
108
- param[:unit] ||= 'day'
109
- download_report( param, debug )
110
- end
111
-
112
- def creative_report( auth, param = nil, debug = false )
113
- param = {} if not param
114
- param[:type] ||= 'creative'
115
- param[:fields] ||= %w( cost cpc click impression ctr )
116
- param[:level] ||= 'creative'
117
- param[:range] ||= 'creative'
118
- param[:unit] ||= 'day'
119
- download_report( param, debug )
120
- end
121
-
122
- def keyword_report( auth, param = nil, debug = false )
123
- param = {} if not param
124
- param[:type] ||= 'keyword'
125
- param[:fields] ||= %w( cost cpc click impression ctr )
126
- param[:level] ||= 'keywordid'
127
- param[:range] ||= 'keywordid'
128
- param[:unit] ||= 'day'
129
- download_report( param, debug )
130
- end
131
-
132
- end # Repost
133
- end # Baidu
134
- end # API
135
- end # PPC