ppc 1.3.0 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -1
  3. data/LICENSE +334 -17
  4. data/README.md +75 -3
  5. data/lib/ppc.rb +3 -1
  6. data/lib/ppc/api.rb +137 -2
  7. data/lib/ppc/api/baidu.rb +20 -99
  8. data/lib/ppc/api/baidu/account.rb +21 -21
  9. data/lib/ppc/api/baidu/bulk.rb +39 -3
  10. data/lib/ppc/api/baidu/creative.rb +33 -33
  11. data/lib/ppc/api/baidu/group.rb +14 -14
  12. data/lib/ppc/api/baidu/keyword.rb +57 -46
  13. data/lib/ppc/api/baidu/phone_new_creative.rb +51 -0
  14. data/lib/ppc/api/baidu/plan.rb +34 -31
  15. data/lib/ppc/api/baidu/rank.rb +23 -0
  16. data/lib/ppc/api/baidu/report.rb +100 -81
  17. data/lib/ppc/api/qihu.rb +150 -0
  18. data/lib/ppc/api/qihu/account.rb +86 -0
  19. data/lib/ppc/api/qihu/bulk.rb +35 -0
  20. data/lib/ppc/api/qihu/creative.rb +108 -0
  21. data/lib/ppc/api/qihu/group.rb +96 -0
  22. data/lib/ppc/api/qihu/keyword.rb +113 -0
  23. data/lib/ppc/api/qihu/plan.rb +64 -0
  24. data/lib/ppc/api/qihu/rank.rb +25 -0
  25. data/lib/ppc/api/qihu/report.rb +159 -0
  26. data/lib/ppc/api/qihu/sublink.rb +71 -0
  27. data/lib/ppc/api/shenma.rb +64 -0
  28. data/lib/ppc/api/shenma/report.rb +135 -0
  29. data/lib/ppc/api/sm.rb +50 -0
  30. data/lib/ppc/api/sm/account.rb +44 -0
  31. data/lib/ppc/api/sm/bulk.rb +69 -0
  32. data/lib/ppc/api/sm/creative.rb +86 -0
  33. data/lib/ppc/api/sm/group.rb +94 -0
  34. data/lib/ppc/api/sm/keyword.rb +132 -0
  35. data/lib/ppc/api/sm/phone_new_creative.rb +51 -0
  36. data/lib/ppc/api/sm/plan.rb +63 -0
  37. data/lib/ppc/api/sm/report.rb +136 -0
  38. data/lib/ppc/api/sogou.rb +118 -0
  39. data/lib/ppc/api/sogou/account.rb +42 -0
  40. data/lib/ppc/api/sogou/bulk.rb +69 -0
  41. data/lib/ppc/api/sogou/creative.rb +117 -0
  42. data/lib/ppc/api/sogou/group.rb +123 -0
  43. data/lib/ppc/api/sogou/keyword.rb +188 -0
  44. data/lib/ppc/api/sogou/plan.rb +66 -0
  45. data/lib/ppc/api/sogou/report.rb +129 -0
  46. data/lib/ppc/ext.rb +17 -0
  47. data/lib/ppc/operation.rb +50 -36
  48. data/lib/ppc/operation/account.rb +19 -7
  49. data/lib/ppc/operation/creative.rb +7 -7
  50. data/lib/ppc/operation/group.rb +2 -2
  51. data/lib/ppc/operation/keyword.rb +11 -8
  52. data/lib/ppc/operation/report.rb +23 -0
  53. data/ppc.gemspec +14 -4
  54. data/spec/baidu/api_baidu_account_spec.rb +16 -0
  55. data/spec/baidu/api_baidu_creative_spec.rb +73 -0
  56. data/spec/{api_baidu_group_spec.rb → baidu/api_baidu_group_spec.rb} +12 -17
  57. data/spec/baidu/api_baidu_keyword_spec.rb +61 -0
  58. data/spec/baidu/api_baidu_phone_spec.rb +22 -0
  59. data/spec/{api_baidu_plan_spec.rb → baidu/api_baidu_plan_spec.rb} +11 -10
  60. data/spec/baidu/api_baidu_report_spec.rb +44 -0
  61. data/spec/{api_baidu_spec.rb → baidu/api_baidu_spec.rb} +10 -15
  62. data/spec/operation/operation_baidu_report_spec.rb +17 -0
  63. data/spec/operation/operation_baidu_spec.rb +126 -0
  64. data/spec/operation/operation_qihu_report_spec.rb +18 -0
  65. data/spec/operation/operation_qihu_spec.rb +94 -0
  66. data/spec/operation/operation_sm_report_spec.rb +21 -0
  67. data/spec/operation/operation_sogou_report_spec.rb +17 -0
  68. data/spec/operation/operation_sogou_spec.rb +88 -0
  69. data/spec/{operation_spec_helper.rb → operation/operation_spec_helper.rb} +3 -5
  70. data/spec/qihu/api_qihu_account_spec.rb +29 -0
  71. data/spec/qihu/api_qihu_creative_spec.rb +48 -0
  72. data/spec/qihu/api_qihu_group_spec.rb +40 -0
  73. data/spec/qihu/api_qihu_keyword_spec.rb +50 -0
  74. data/spec/qihu/api_qihu_plan_spec.rb +39 -0
  75. data/spec/qihu/api_qihu_report_spec.rb +54 -0
  76. data/spec/qihu/api_qihu_sublink_spec.rb +36 -0
  77. data/spec/sm/api_sm_account_spec.rb +8 -0
  78. data/spec/sm/api_sm_creative_spec.rb +52 -0
  79. data/spec/sm/api_sm_group_spec.rb +75 -0
  80. data/spec/sm/api_sm_keyword_spec.rb +59 -0
  81. data/spec/sm/api_sm_plan_spec.rb +39 -0
  82. data/spec/sm/api_sm_report_spec.rb +30 -0
  83. data/spec/sogou/api_sogou_account_spec.rb +17 -0
  84. data/spec/sogou/api_sogou_creative_spec.rb +51 -0
  85. data/spec/sogou/api_sogou_group_spec.rb +50 -0
  86. data/spec/sogou/api_sogou_keyword_spec.rb +54 -0
  87. data/spec/sogou/api_sogou_plan_spec.rb +43 -0
  88. data/spec/sogou/api_sogou_report_spec.rb +51 -0
  89. data/spec/spec_helper.rb +49 -10
  90. metadata +140 -46
  91. data/lib/ppc/baidu.rb +0 -152
  92. data/lib/ppc/baidu/account.rb +0 -88
  93. data/lib/ppc/baidu/bulk.rb +0 -52
  94. data/lib/ppc/baidu/group.rb +0 -99
  95. data/lib/ppc/baidu/key.rb +0 -38
  96. data/lib/ppc/baidu/plan.rb +0 -85
  97. data/lib/ppc/baidu/report.rb +0 -82
  98. data/spec/api_baidu_account_spec.rb +0 -18
  99. data/spec/api_baidu_creative_spec.rb +0 -71
  100. data/spec/api_baidu_keyword_spec.rb +0 -64
  101. data/spec/api_baidu_report_spec.rb +0 -32
  102. data/spec/baidu_account_spec.rb +0 -32
  103. data/spec/baidu_bulk_spec.rb +0 -21
  104. data/spec/baidu_group_spec.rb +0 -56
  105. data/spec/baidu_plan_spec.rb +0 -129
  106. data/spec/baidu_report_spec.rb +0 -24
  107. data/spec/operation_spec.rb +0 -87
data/lib/ppc.rb CHANGED
@@ -1,7 +1,9 @@
1
1
  require 'ppc/api'
2
2
  require 'ppc/operation'
3
+ require 'ppc/ext'
3
4
  module PPC
4
- VERSION = "1.3.0"
5
+
6
+ VERSION = "1.3.2"
5
7
 
6
8
  protected
7
9
  def print_debug(var,varname=nil)
data/lib/ppc/api.rb CHANGED
@@ -1,8 +1,143 @@
1
+ require 'awesome_print'
2
+ require 'net/http'
3
+ require 'net/https'
4
+ require 'httparty'
5
+ require 'json'
6
+ require 'savon'
7
+ require 'active_support'
1
8
  require 'ppc/api/baidu'
9
+ require 'ppc/api/sogou'
10
+ require 'ppc/api/qihu'
11
+ require 'ppc/api/sm'
2
12
 
3
13
  module PPC
4
14
  module API
5
- attr_reader :header,:body,:rquota,:quota,:status,:desc,:oprs,:oprtime,:code,:message
6
- attr_accessor :username,:password,:token,:debug
15
+
16
+ @map = nil
17
+ @debug = false
18
+
19
+ def debug_on
20
+ @debug = true
21
+ end
22
+
23
+ def debug_off
24
+ @debug = false
25
+ end
26
+
27
+ def request_uri(param = {})
28
+ raise 'you need build the uri'
29
+ end
30
+
31
+ def request_http_body(auth, params = {})
32
+ {
33
+ header: {
34
+ username: auth[:username],
35
+ password: auth[:password],
36
+ token: auth[:token],
37
+ target: auth[:target]
38
+ },
39
+ body: params
40
+ }.to_json
41
+ end
42
+
43
+ def request_http_header(auth)
44
+ {'Content-Type' => 'application/json; charset=UTF-8'}
45
+ end
46
+
47
+ def request(auth, service, method, params = {}, http_method = 'post')
48
+ '''
49
+ request should return whole http response including header
50
+ '''
51
+ uri = request_uri(service: service, method: method)
52
+ http_body = request_http_body(auth, params)
53
+ http_header = request_http_header(auth)
54
+
55
+ # set request proxy
56
+ if ENV["PROXY_HOST"]
57
+ proxy_port = ENV["PROXY_PORT"] ? ENV["PROXY_PORT"].to_i : 80
58
+ http = Net::HTTP.new(uri.host, 443, ENV["PROXY_HOST"], proxy_port)
59
+ else
60
+ http = Net::HTTP.new(uri.host, 443)
61
+ end
62
+
63
+ # 是否显示http通信输出
64
+ http.set_debug_output( $stdout ) if @debug
65
+ http.use_ssl = true
66
+ if http_method == 'delete'
67
+ req = Net::HTTP::Delete.new(uri.path, http_header)
68
+ req.body = http_body
69
+ response = http.request req
70
+ else
71
+ response = http.post(uri.path, http_body, http_header)
72
+ end
73
+ begin JSON.parse(response.body) rescue response.body end
74
+ end
75
+
76
+ def process( response, key, &func)
77
+ '''
78
+ Process Http response. If operation successes, return value of given keys.
79
+ You can process the result using function &func, or do nothing by passing
80
+ block {|x|x}
81
+ ===========================
82
+ @Output: resultType{ desc: boolean, failure: Array, result: Array }
83
+
84
+ failure is the failures part of response\'s header
85
+ result is the processed response body.
86
+ '''
87
+ raise 'you need build the response result'
88
+ end
89
+
90
+ def is_no_quota(failure, code)
91
+ return false if failure.nil?
92
+ failure = [failure].flatten
93
+ return false if failure.size.zero?
94
+ return failure[0]["code"] == code
95
+ end
96
+
97
+ def make_type( params, maps = @map)
98
+ '''
99
+ tranfesr ppc api to search engine api
100
+ @ input
101
+ params : list of hash complying with PPC gem api
102
+ map : list of pairs(lists) of symbol complying with following api
103
+ map = [
104
+ [ ppc_key, api_key ],
105
+ [ ppc_key, api_key ],
106
+ [ ppc_key, api_key ],
107
+ ...
108
+ ]
109
+ Ex:
110
+ baidu_group_map = [ [ :id, :adgroupId],
111
+ [ :price, :maxPrice],
112
+ ... ]
113
+ ===================
114
+ @ output:
115
+ types : list of hash that complying with search engine api
116
+ '''
117
+ params = [ params ] unless params.is_a? Array
118
+ params.map do |item|
119
+ item.select!{|key| maps.map{|m| m[0]}.include? key}
120
+ maps.each{|m| item.filter_and_replace_key(m[1],m[0])}
121
+ item
122
+ end
123
+ end
124
+
125
+ def reverse_type( types, maps = @map )
126
+ '''
127
+ transfer search engine api to ppc api
128
+ @ input
129
+ types : list of hash that complying with search engine api
130
+ map : list of pairs(lists) of symbol, for more details please
131
+ read docs of make_type()
132
+ ===================
133
+ @ output:
134
+ params : list of hash complying with PPC gem api
135
+ '''
136
+ types = [ types ] unless types.is_a? Array
137
+ types.map do |item|
138
+ maps.each{|m| item.filter_and_replace_key(m[0],m[1])}
139
+ item
140
+ end
141
+ end
7
142
  end
8
143
  end
data/lib/ppc/api/baidu.rb CHANGED
@@ -6,127 +6,48 @@ require 'ppc/api/baidu/group'
6
6
  require 'ppc/api/baidu/keyword'
7
7
  require 'ppc/api/baidu/report'
8
8
  require 'ppc/api/baidu/creative'
9
- require 'awesome_print'
10
- require 'net/http'
11
- require 'net/https'
12
- require 'json'
9
+ require 'ppc/api/baidu/phone_new_creative'
10
+ require 'ppc/api/baidu/rank'
11
+
13
12
  module PPC
14
13
  module API
15
- class Baidu
16
-
17
- @map = nil
18
-
19
- def self.request( auth, service, method, params = {} )
20
- '''
21
- request should return whole http response including header
22
- '''
23
- uri = URI("https://api.baidu.com/json/sms/v3/#{service}Service/#{method}")
24
- http_body = {
25
- header: {
26
- username: auth[:username],
27
- password: auth[:password],
28
- token: auth[:token]
29
- },
30
- body: params
31
- }.to_json
32
-
33
- http_header = {
34
- 'Content-Type' => 'application/json; charset=UTF-8'
35
- }
14
+ class Baidu
36
15
 
37
- http = Net::HTTP.new(uri.host, 443)
38
- http.set_debug_output $stderr
39
- http.use_ssl = true
40
-
41
- response = http.post(uri.path, http_body, http_header)
42
- response = JSON.parse response.body
43
-
44
- # return response if with_header else response['body']
16
+ extend ::PPC::API
17
+
18
+ def self.request_uri(param)
19
+ URI("https://api.baidu.com/json/sms/v3/#{param[:service]}Service/#{param[:method]}")
45
20
  end
46
21
 
47
- def self.process( response, key , debug = false , &func)
22
+ def self.process(response, key, &func)
48
23
  '''
49
24
  Process Http response. If operation successes, return value of given keys.
50
25
  You can process the result using function &func, or do nothing by passing
51
26
  block {|x|x}
52
27
  ===========================
53
28
  @Output: resultType{ desc: boolean, failure: Array, result: Array }
29
+
54
30
  failure is the failures part of response\'s header
55
31
  result is the processed response body.
56
32
  '''
57
- # 保留 debug 功能
58
- return response if debug
59
-
60
33
  result = {}
61
- result[:succ] = response['header']['desc']=='success'? true : false
34
+ result[:succ] = response['header']['desc'] =='success'
62
35
  result[:failure] = response['header']['failures']
63
- result[:result] = func[ response['body'][key] ]
64
- return result
65
- end # process
66
-
67
- def self.make_type( params, map = @map)
68
- '''
69
- tranfesr ppc api to search engine api
70
- @ input
71
- params : list of hash complying with PPC gem api
72
- map : list of pairs(lists) of symbol complying with following api
73
- map = [
74
- [ ppc_key, api_key ],
75
- [ ppc_key, api_key ],
76
- [ ppc_key, api_key ],
77
- ...
78
- ]
79
- Ex:
80
- baidu_group_map = [ [ :id, :adgroupId],
81
- [ :price, :maxPrice],
82
- ... ]
83
- ===================
84
- @ output:
85
- : types : list of hash that complying with search engine api
86
- '''
87
- params = [ params ] unless params.is_a? Array
88
-
89
- types = []
90
- params.each do |param|
91
- type = {}
92
-
93
- map.each do |key|
94
- value = param[ key[0] ]
95
- type[ key[1] ] = value if value
96
- end
97
-
98
- types << type
36
+ if !response['body'].nil? && response['body'][key]
37
+ result[:result] = func[ response['body'][key] ]
99
38
  end
100
- return types
39
+ result[:no_quota] = is_no_quota(response['header']['failures'], '8501')
40
+ return result
101
41
  end
102
42
 
103
- def self.reverse_type( types, map = @map )
104
- '''
105
- transfer search engine api to ppc api
106
- @ input
107
- types : list of hash that complying with search engine api
108
- map : list of pairs(lists) of symbol, for more details please
109
- read docs of make_type()
110
- ===================
111
- @ output:
112
- params : list of hash complying with PPC gem api
113
- '''
43
+ def self.reverse_type( types, maps = @map )
114
44
  types = [ types ] unless types.is_a? Array
115
-
116
- params = []
117
- types.each do |type|
118
- param = {}
119
-
120
- map.each do |key|
121
- value = type[ key[1].to_s ]
122
- param[ key[0] ] = value if value
123
- end
124
-
125
- params << param
45
+ types.map do |item|
46
+ maps.each{|m| item.filter_and_replace_key(m[0],m[1].to_s)}
47
+ item
126
48
  end
127
- return params
128
49
  end
129
50
 
130
- end # Baidu
51
+ end # Baidu
131
52
  end # API
132
53
  end # PPC
@@ -5,30 +5,30 @@ module PPC
5
5
  Service = 'Account'
6
6
 
7
7
  @map = [
8
- [:id,:userid],
9
- [:balance,:balance],
10
- [:cost,:cost],
11
- [:payment,:payment],
12
- [:status,:userStat],
13
- [:budget_type,:budgetType],
14
- [:budget,:budget],
15
- [:region,:regionTarget],
16
- [:exclude_ip,:excludeIp],
17
- [:isdynamic,:isDynamicCreative],
18
- [:dynamic_param,:dynamicCreativeParam],
19
- [:open_domains,:openDomains],
20
- [:reg_domain,:regDomain],
21
- [:offline_time,:budgetOfflineTime],
22
- [:weekly_budget,:weeklyBudget],
23
- [:opt,:opt]
24
- ]
8
+ [:id,:userid],
9
+ [:balance,:balance],
10
+ [:cost,:cost],
11
+ [:payment,:payment],
12
+ [:status,:userStat],
13
+ [:budget_type,:budgetType],
14
+ [:budget,:budget],
15
+ [:region,:regionTarget],
16
+ [:exclude_ip,:excludeIp],
17
+ [:isdynamic,:isDynamicCreative],
18
+ [:dynamic_param,:dynamicCreativeParam],
19
+ [:open_domains,:openDomains],
20
+ [:reg_domain,:regDomain],
21
+ [:offline_time,:budgetOfflineTime],
22
+ [:weekly_budget,:weeklyBudget],
23
+ [:opt,:opt]
24
+ ]
25
25
 
26
- def self.info(auth, debug = false)
26
+ def self.info( auth )
27
27
  response = request(auth,Service,'getAccountInfo' )
28
- return process( response, 'accountInfoType', debug ){ |x|reverse_type(x) }
28
+ return process( response, 'accountInfoType' ){ |x|reverse_type(x)[0] }
29
29
  end
30
30
 
31
- def self.update(auth, param = {}, debug = false)
31
+ def self.update(auth, param = {} )
32
32
  """
33
33
  update account info
34
34
  @ params : account_info_type
@@ -38,7 +38,7 @@ module PPC
38
38
  infoType = make_type( param )[0]
39
39
  body = { accountInfoType: infoType }
40
40
  response = request(auth,Service,'updateAccountInfo', body)
41
- return process( response, 'accountInfoType', debug ){ |x|reverse_type(x) }
41
+ return process( response, 'accountInfoType' ){ |x|reverse_type(x)[0] }
42
42
  end
43
43
 
44
44
  end
@@ -23,16 +23,52 @@ module PPC
23
23
  extended: params[:extended] || 0
24
24
  }
25
25
  response = request( auth, Service, 'getAllObjects',options )
26
- response[:get_all_objects_response][:file_id]
26
+ process( response, 'fileId'){ |x| x }
27
27
  end
28
28
 
29
29
  def self.state( auth, id)
30
30
  raise "empty id" if id.nil? or id.empty?
31
- request(auth, Service, 'getFileState',{fileId:id})[:get_file_state_response][:is_generated]
31
+ response = request(auth, Service, 'getFileState',{fileId:id})
32
+ process( response, 'isGenerated'){ |x| x }
32
33
  end
33
34
 
34
35
  def self.path( auth, id)
35
- request( auth, Service, 'getFilePath',{fileId:id})[:get_file_path_response][:file_paths]
36
+ response = request( auth, Service, 'getFilePath',{fileId:id})
37
+ process( response, 'filePaths' ){ |x| x }
38
+ end
39
+
40
+ ###########################
41
+ # interface for operation #
42
+ ###########################
43
+ def self.download( auth, params = {} )
44
+ """
45
+ """
46
+ params[:extended] = params[:extended] || 2
47
+ begin
48
+ file_id = get_all_object( auth, params )
49
+ if file_id[:succ]
50
+ file_id = file_id[:result]
51
+ else
52
+ raise file_id[:failure][0]['message']
53
+ end
54
+
55
+ puts "file_id: #{file_id}" if @debug
56
+
57
+ loop do
58
+ state = state( auth, file_id )[:result].to_s
59
+ raise "invalid file state: #{state}" unless %w(1 2 3 null).include? state
60
+ break if state == '3'
61
+ puts "waiting for #{file_id} to be ready. current state:#{state}" if @debug
62
+ sleep 3
63
+ end
64
+
65
+ puts "#{file_id} is ready" if @debug
66
+ return path( auth, file_id )
67
+
68
+ rescue => e
69
+ p "Error encounter:#{e.to_s}"
70
+ end
71
+ return false
36
72
  end
37
73
 
38
74
  end
@@ -6,26 +6,26 @@ module PPC
6
6
  Service = 'Creative'
7
7
 
8
8
  @map =[
9
- [:id,:creativeId],
10
- [:group_id,:adgroupId],
11
- [:title,:title],
12
- [:description1,:description1],
13
- [:description2,:description2],
14
- [:pc_destination,:pcDestinationUrl],
15
- [:pc_display,:pcDisplayUrl],
16
- [:moile_destination,:mobileDestinationUrl],
17
- [:mobile_display,:mobileDisplayUrl],
18
- [:pause,:pause],
19
- [:preference,:devicePreference]
20
- ]
9
+ [:id,:creativeId],
10
+ [:group_id,:adgroupId],
11
+ [:title,:title],
12
+ [:description1,:description1],
13
+ [:description2,:description2],
14
+ [:pc_destination,:pcDestinationUrl],
15
+ [:pc_display,:pcDisplayUrl],
16
+ [:mobile_destination,:mobileDestinationUrl],
17
+ [:mobile_display,:mobileDisplayUrl],
18
+ [:pause,:pause],
19
+ [:preference,:devicePreference]
20
+ ]
21
21
 
22
- def self.add( auth, creatives, debug = false )
22
+ def self.add( auth, creatives )
23
23
  body = { creativeTypes: make_type( creatives ) }
24
24
  response = request( auth, Service, 'addCreative', body )
25
- process( response, 'creativeTypes', debug ){ |x| reverse_type(x) }
25
+ process( response, 'creativeTypes' ){ |x| reverse_type(x) }
26
26
  end
27
27
 
28
- def self.get( auth, ids, getTemp = 0, debug = false )
28
+ def self.get( auth, ids, getTemp = 0 )
29
29
  '''
30
30
  \'getCreativeByCreativeId\'
31
31
  @ input : creative ids
@@ -34,49 +34,49 @@ module PPC
34
34
  ids = [ ids ] unless ids.is_a? Array
35
35
  body = { creativeIds: ids, getTemp: getTemp }
36
36
  response = request( auth, Service, 'getCreativeByCreativeId', body )
37
- process( response, 'creativeTypes', debug ){ |x| reverse_type(x) }
37
+ process( response, 'creativeTypes' ){ |x| reverse_type(x) }
38
38
  end
39
39
 
40
- def self.update( auth, creatives, debug = false )
40
+ def self.update( auth, creatives )
41
41
  '''
42
42
  根据实际使用情况,更新的时候creative title为必填选
43
43
  '''
44
44
  body = { creativeTypes: make_type( creatives ) }
45
- response = request( auth, Service, 'addCreative', body )
46
- process( response, 'creativeTypes', debug ){ |x| reverse_type(x) }
45
+ response = request( auth, Service, 'updateCreative', body )
46
+ process( response, 'creativeTypes' ){ |x| reverse_type(x) }
47
47
  end
48
48
 
49
- def self.delete( auth, ids, debug = false )
49
+ def self.delete( auth, ids )
50
50
  ids = [ ids ] unless ids.is_a? Array
51
51
  body = { creativeIds: ids }
52
52
  response = request( auth, Service, 'deleteCreative', body )
53
- process( response, 'result', debug ){ |x| x }
53
+ process( response, 'result' ){ |x| x }
54
54
  end
55
55
 
56
- def self.activate( auth, ids, debug = false )
56
+ def self.activate( auth, ids )
57
57
  ids = [ ids ] unless ids.is_a? Array
58
58
  body = { creativeIds: ids }
59
59
  response = request( auth, Service, 'activateCreative', body )
60
- process( response, 'creativeTypes', debug ){ |x| reverse_type(x) }
60
+ process( response, 'creativeTypes' ){ |x| reverse_type(x) }
61
61
  end
62
62
 
63
- def self.status( auth, ids, type, debug = false )
63
+ def self.status( auth, ids, type )
64
64
  ids = [ ids ] unless ids.is_a? Array
65
65
 
66
66
  type = case type
67
67
  when 'plan' then 3
68
- when 'group' then 5
69
- when 'creative' then 7
68
+ when 'group' then 5
69
+ when 'creative' then 7
70
70
  else
71
71
  Exception.new( 'type must among: \'plan\',\'group\' and \'key\' ')
72
72
  end
73
73
 
74
74
  body = { ids: ids, type: type }
75
75
  response = request( auth, Service, 'getCreativeStatus', body )
76
- process( response, 'CreativeStatus', debug ){ |x| x }
76
+ process( response, 'CreativeStatus' ){ |x| x }
77
77
  end
78
78
 
79
- def self.search_id_by_group_id( auth, ids, getTemp = 0, debug = false )
79
+ def self.search_id_by_group_id( auth, ids, getTemp = 0 )
80
80
  '''
81
81
  \'getCreativeIdByAdgroupId\'
82
82
  @ input: group ids
@@ -85,14 +85,14 @@ module PPC
85
85
  ids = [ ids ] unless ids.is_a? Array
86
86
  body = { adgroupIds: ids, getTemp: getTemp }
87
87
  response = request( auth, Service, 'getCreativeIdByAdgroupId', body )
88
- process( response, 'groupCreativeIds', debug ){ |x| make_groupCreativeIds( x ) }
88
+ process( response, 'groupCreativeIds' ){ |x| make_groupCreativeIds( x ) }
89
89
  end
90
90
 
91
- def self.search_by_group_id( auth, ids, getTemp = 0, debug = false )
91
+ def self.search_by_group_id( auth, ids, getTemp = 0 )
92
92
  ids = [ ids ] unless ids.is_a? Array
93
93
  body = { adgroupIds: ids, getTemp: getTemp }
94
94
  response = request( auth, Service, 'getCreativeByAdgroupId', body )
95
- process( response, 'groupCreatives', debug ){ |x| make_groupCreatives( x ) }
95
+ process( response, 'groupCreatives' ){ |x| make_groupCreatives( x ) }
96
96
  end
97
97
 
98
98
  private
@@ -110,10 +110,10 @@ module PPC
110
110
  private
111
111
  def self.make_groupCreatives( groupCreatives )
112
112
  group_creatives = []
113
- groupCreative.each do |groupKeyword|
113
+ groupCreatives.each do |groupCreative |
114
114
  group_creative = {}
115
115
  group_creative[:group_id] = groupCreative['adgroupId']
116
- group_creative[:keywords] = reverse_type( groupCreative['keywordTypes'] )
116
+ group_creative[:creatives] = reverse_type( groupCreative['creativeTypes'] )
117
117
  group_creatives << group_creative
118
118
  end
119
119
  return group_creatives