lib/sklik-api/campaign_parts/adgroup.rb in sklik-api-0.0.15 vs lib/sklik-api/campaign_parts/adgroup.rb in sklik-api-0.0.16
- old
+ new
@@ -98,12 +98,17 @@
def to_hash
if @adgroup_data
@adgroup_data
else
@adgroup_data = @args
- @adgroup_data[:ads] = Adtext.find(self).collect{|a| a.to_hash}
- @adgroup_data[:keywords] = Keyword.find(self).collect{|k| k.to_hash}
+ if @args[:status] != :stopped
+ @adgroup_data[:ads] = Adtext.find(self).collect{|a| a.to_hash}
+ @adgroup_data[:keywords] = Keyword.find(self).collect{|k| k.to_hash}
+ else
+ @adgroup_data[:ads] = []
+ @adgroup_data[:keywords] = []
+ end
@adgroup_data
end
end
@@ -167,47 +172,55 @@
if @args[:adgroup_id] #do update
############
## KEYWORDS
############
- #create new keyowrds and delete old
- @saved_keywords = keywords.inject({}){|o,k| o[k.args[:keyword]] = k ; o}
- @new_keywords = @keywords.inject({}){|o,k| o[k.args[:keyword]] = k ; o}
- #keywords to be deleted
- (@saved_keywords.keys - @new_keywords.keys).each do |k|
- #don't try to remove already removed keyword
- @saved_keywords[k].remove unless @saved_keywords[k].args[:status] == :stopped
+ #update keywords
+ keywords_error = []
+ @new_keywords = @keywords.clone
+ delete_first = true
+ while @new_keywords && @new_keywords.size > 0 do
+ begin
+ connection.call('keywords.set', @args[:adgroup_id], @new_keywords[0..199].collect{|k| k.create_args.last }, delete_first) do |params|
+ @campaign.errors << params[:statusMessage] if params[:statusMessage] != "OK"
+ end
+ rescue Exception => e
+ @campaign.errors << e.message
+ end
+ @new_keywords = @new_keywords[200..-1]
+ delete_first = false
end
- #keywords to be created
- (@new_keywords.keys - @saved_keywords.keys).each do |k|
- @new_keywords[k].save
- end
-
- #check status to be running
- (@new_keywords.keys & @saved_keywords.keys).each do |k|
- @saved_keywords[k].restore if @saved_keywords[k].args[:status] == :stopped
- end
-
############
## ADTEXTS
############
#create new adtexts and delete old
@saved_adtexts = adtexts.inject({}){|o,a| o[a.uniq_identifier] = a ; o}
@new_adtexts = @adtexts.inject({}){|o,a| o[a.uniq_identifier] = a ; o}
#adtexts to be deleted
(@saved_adtexts.keys - @new_adtexts.keys).each do |k|
+ puts "deleting adtext #{@saved_adtexts[k]} in #{@args[:name]}"
#don't try to remove already removed adtext
@saved_adtexts[k].remove unless @saved_adtexts[k].args[:status] == :stopped
end
#adtexts to be created
(@new_adtexts.keys - @saved_adtexts.keys).each do |k|
- @new_adtexts[k].save
+ puts "creating new adtext #{k} in #{@args[:name]}"
+ begin
+ @new_adtexts[k].save
+ rescue Exception => e
+ #take care about error message -> do it nicer
+ if /There is error from sklik ad.create: Invalid parameters/ =~ e.message
+ @campaign.errors << "Problem with creating #{@new_adtexts[k].args} in adgroup #{@args[:name]}"
+ else
+ @campaign.errors << e.message
+ end
+ end
end
#check status to be running
(@new_adtexts.keys & @saved_adtexts.keys).each do |k|
@saved_adtexts[k].restore if @saved_adtexts[k].args[:status] == :stopped
@@ -233,21 +246,23 @@
end
#create keywords
keywords_error = []
- @keywords.each do |keyword|
+ @new_keywords = @keywords.clone
+ delete_first = true
+ while @new_keywords && @new_keywords.size > 0 do
begin
- keyword.save
- rescue Exception => e
- #take care about error message -> do it nicer
- if /Sklik returned: keyword.create: Invalid data in request/ =~ e.message
- keywords_error << e.message.split("{:name=>\"").last.split("\", :matchType").first
- else
- @campaign.errors << e.message
+ connection.call('keywords.set', @args[:adgroup_id], @new_keywords[0..199].collect{|k| k.create_args.last }, delete_first) do |params|
+ @campaign.errors << params[:statusMessage] if params[:statusMessage] != "OK"
end
+ rescue Exception => e
+ @campaign.errors << e.message
end
+ @new_keywords = @new_keywords[200..-1]
+ delete_first = false
end
+
if keywords_error.size > 0
@campaign.errors << "Problem with creating keywords: #{keywords_error.join(", ")} in adgroup #{@args[:name]}"
end
end