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