ya-api-direct 0.2.6 → 0.2.10

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 8f3c62a4147b06184b0d5bab7cc3fa342b8a89eb
4
- data.tar.gz: 27f6fc767137703e4845175105a6a05aba8bfa57
2
+ SHA256:
3
+ metadata.gz: c3834e0a678f9eb91e7523dbca830f99d72660940079dfcc9340082d64ab2ec7
4
+ data.tar.gz: bf72e62469f98178a4a1ee62fe1c27849d8f23826db06c07354b87aaec6c9b47
5
5
  SHA512:
6
- metadata.gz: 7484bd472a1cddb7ec2b6e949b53fab93626dd228a42c668f26201ad803455e7d9bb4096c5032e0a0800cd9fee9f4748cb304f3533b051bc9c7035eb95bb6ef1
7
- data.tar.gz: 9233ece009e06fc3ce269f35d1b2369517f4e10ab32a1c68d3ab3e99104042024f1ee596b49caa3f67ebf726725d262e57b474ed89d3940d8fba8cb543c05a13
6
+ metadata.gz: fbd2d4b2b37ef73cf0b8269de00dd00a91b289948dea5285ca43172a26e5a3570664aa78b907f985c75962e617f6c5e08dd6812492ad261506e49e53151f9e45
7
+ data.tar.gz: c56f376feb05d6b7ccdc3d5d54e78e46773ba8defa047484a6a82b860bcfd7d184672c46a34b636527b13854087ec20da0f239de0956f31c2024b8ce7bf422d6
data/Gemfile CHANGED
@@ -1,7 +1,7 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gem 'jruby-openssl', platforms: :jruby
4
- gem 'rake'
4
+ gem 'rake', '>= 12.3.3'
5
5
  gem 'yard'
6
6
  #gem 'tsv'
7
7
 
@@ -16,4 +16,4 @@ group :test do
16
16
  gem 'yardstick'
17
17
  end
18
18
 
19
- gemspec
19
+ gemspec
data/README.md CHANGED
@@ -36,14 +36,14 @@ request = {
36
36
 
37
37
  options = { token: Token }
38
38
  @direct = Ya::API::Direct::Client.new(options)
39
- json = direct.campaigns.get request
39
+ json = @direct.campaigns.get request
40
40
  ```
41
41
 
42
42
  Call methods from versions 4 and 4 Live:
43
43
 
44
44
  ```ruby
45
45
  @direct = Ya::API::Direct::Client.new({ token: Token })
46
- json = direct.v4.GetCampaignsList
46
+ json = @direct.v4.GetCampaignsList
47
47
  ```
48
48
 
49
49
  All names of controllers and methods are equal to ones from Direct API help. 4 vs 4 Live is autodetected.
@@ -2,7 +2,7 @@ require "ya/api/direct/constants"
2
2
  require "ya/api/direct/gateway"
3
3
  require "ya/api/direct/direct_service_v4"
4
4
  require "ya/api/direct/direct_service_v5"
5
- require "ya/api/direct/exception"
5
+ require "ya/api/direct/exceptions"
6
6
 
7
7
  require 'time'
8
8
 
@@ -14,7 +14,7 @@ module Ya::API::Direct
14
14
  class Client
15
15
  attr_reader :cache_timestamp, :units_data, :gateway,
16
16
  :v4, :v5
17
-
17
+
18
18
  # Initializes a new Client object
19
19
  #
20
20
  # @param config [Hash]
@@ -75,7 +75,7 @@ module Ya::API::Direct
75
75
  end
76
76
 
77
77
  private
78
-
78
+
79
79
  def init_v4
80
80
  @v4 = DirectServiceV4.new self, (API_V4 + API_V4_LIVE)
81
81
  end
@@ -90,4 +90,4 @@ module Ya::API::Direct
90
90
  end
91
91
  end
92
92
  end
93
- end
93
+ end
@@ -3,38 +3,83 @@ module Ya
3
3
  module Direct
4
4
  API_V5 = {
5
5
  "AdGroups" => [
6
- "add", "update", "delete", "get"
6
+ "add", "update", "delete", "get"
7
+ ],
8
+ "AgencyClients" => [
9
+ "add", "update", "get"
7
10
  ],
8
11
  "Ads" => [
9
12
  "add", "update", "delete", "suspend", "resume", "archive", "unarchive", "moderate", "get"
10
13
  ],
14
+ "AdExtensions" => [
15
+ "add", "delete", "get"
16
+ ],
17
+ "AdImages" => [
18
+ "add", "delete", "get"
19
+ ],
20
+ "AudienceTargets" => [
21
+ "add", "delete", "suspend", "resume", "get", "setBids"
22
+ ],
11
23
  "Bids" => [
12
24
  "set", "setAuto", "get"
13
25
  ],
14
26
  "BidModifiers" => [
15
- "add", "delete", "get", "set", "toggle"
16
- ],
27
+ "add", "delete", "get", "set", "toggle"
28
+ ],
29
+ "Businesses" => [
30
+ "get"
31
+ ],
17
32
  "Campaigns" => [
18
33
  "add", "update", "delete", "suspend", "resume", "archive", "unarchive", "get"
19
- ],
34
+ ],
20
35
  "Changes" => [
21
36
  "checkDictionaries", "checkCampaigns", "check"
22
- ],
37
+ ],
38
+ "Clients" => [
39
+ "get", "update"
40
+ ],
41
+ "Creatives" => [
42
+ "get"
43
+ ],
23
44
  "Dictionaries" => [
24
- "get"
45
+ "get"
46
+ ],
47
+ "DynamicFeedAdTargets" => [
48
+ "add", "delete", "suspend", "resume", "get", "setBids"
25
49
  ],
26
50
  "DynamicTextAdTargets" => [
27
51
  "add", "delete", "suspend", "resume", "get", "setBids"
28
52
  ],
53
+ "Feeds" => [
54
+ "add", "delete", "get", "update"
55
+ ],
29
56
  "Keywords" => [
30
57
  "add", "update", "delete", "suspend", "resume", "get"
31
58
  ],
59
+ "KeywordBids" => [
60
+ "set", "setAuto", "get"
61
+ ],
32
62
  "KeywordsResearch" => [
33
- "hasSearchVolume"
63
+ "hasSearchVolume", "deduplicate"
64
+ ],
65
+ "Leads" => [
66
+ "get"
67
+ ],
68
+ "NegativeKeywordSharedSets" => [
69
+ "add", "update", "delete", "get"
70
+ ],
71
+ "RetargetingLists" => [
72
+ "add", "update", "delete", "get"
34
73
  ],
35
74
  "Sitelinks" => [
36
75
  "add", "get", "delete"
37
76
  ],
77
+ "SmartAdTargets" => [
78
+ "add", "update", "setBids", "delete", "suspend", "resume", "get"
79
+ ],
80
+ "TurboPages" => [
81
+ "get"
82
+ ],
38
83
  "VCards" => [
39
84
  "add", "get", "delete"
40
85
  ],
@@ -0,0 +1,33 @@
1
+ require "ya/api/direct/constants"
2
+
3
+ module Ya::API::Direct
4
+ class Exception < StandardError
5
+ attr_reader :error
6
+
7
+ def initialize( error )
8
+ @error = error
9
+ end
10
+
11
+ def to_s
12
+ [ @error['error_code'], @error['error_string'], @error['error_detail'], @error['request_id'] ].join(' : ')
13
+ end
14
+ end
15
+
16
+ class RequestError < StandardError
17
+ attr_reader :method, :version, :request, :response
18
+
19
+ def initialize( method: , version: , request: , response: )
20
+ @method = method
21
+ @version = version
22
+ @request = request
23
+ @response = response
24
+ end
25
+
26
+ def to_s
27
+ if response.body && ['text/json', 'application/json'].include?( response["Content-Type"] ) && error = JSON.parse( response.body )['error']
28
+ err_msg = error.values_at('error_code', 'error_string', 'error_detail', 'request_id').reject(&:blank?).join(' : ')
29
+ end
30
+ [ ['HTTP ', response.code].join, err_msg ].compact.join(': ')
31
+ end
32
+ end
33
+ end
@@ -4,10 +4,11 @@ require "json"
4
4
 
5
5
  require "ya/api/direct/constants"
6
6
  require "ya/api/direct/url_helper"
7
+ require "ya/api/direct/exceptions"
7
8
 
8
9
  module Ya::API::Direct
9
10
  class Gateway
10
- attr_reader :config
11
+ attr_reader :config, :response
11
12
  def initialize(config)
12
13
  @config = config
13
14
  end
@@ -23,11 +24,25 @@ module Ya::API::Direct
23
24
  http = Net::HTTP.new(uri.host, uri.port)
24
25
  http.use_ssl = true
25
26
  http.verify_mode = @config[:ssl] ? OpenSSL::SSL::VERIFY_PEER : OpenSSL::SSL::VERIFY_NONE
26
- response = http.request(request)
27
+
28
+ begin
29
+ response = http.request(request)
30
+ if (response.kind_of? Net::HTTPCreated) || (response.kind_of? Net::HTTPAccepted)
31
+ sleep response['retryIn'].to_i
32
+ end
33
+ end while(response.kind_of? Net::HTTPCreated) || (response.kind_of? Net::HTTPAccepted)
34
+
35
+ @response = response
36
+
27
37
  if response.kind_of? Net::HTTPSuccess
28
38
  UrlHelper.parse_data response, ver
29
39
  else
30
- raise response.inspect
40
+ raise RequestError.new(
41
+ method: method,
42
+ version: ver,
43
+ request: request,
44
+ response: response
45
+ )
31
46
  end
32
47
  end
33
48
 
@@ -57,4 +72,4 @@ module Ya::API::Direct
57
72
  body
58
73
  end
59
74
  end
60
- end
75
+ end
@@ -1,6 +1,6 @@
1
1
  require "json"
2
2
 
3
- require "ya/api/direct/exception"
3
+ require "ya/api/direct/exceptions"
4
4
 
5
5
 
6
6
  module Ya::API::Direct
@@ -10,7 +10,7 @@ module Ya::API::Direct
10
10
  # @author Rikki Mongoose
11
11
  class UrlHelper
12
12
  # Generate Yandex Direct API url for a call
13
- #
13
+ #
14
14
  # @param mode [Symbol] Direct API mode, `:sandbox` or `:production`
15
15
  # @param mode [Symbol] Direct API version, `:v5` or `:v4` or `:v4live`
16
16
  # @param mode [Symbol] Direct API service to use
@@ -50,7 +50,7 @@ module Ya::API::Direct
50
50
  end
51
51
 
52
52
  # Extract Yandex Direct API units values from responce HTTP header
53
- #
53
+ #
54
54
  # @param responce_header [Hash] Yandex Direct API response header
55
55
  # @return [Hash] Units data, extracted from header
56
56
  def self.extract_response_units(response_header)
@@ -66,7 +66,7 @@ module Ya::API::Direct
66
66
  private
67
67
 
68
68
  def self.parse_data(response, ver)
69
- if response["Content-Type"] == "application/json; charset=utf-8"
69
+ if response["Content-Type"].start_with?("application/json")
70
70
  response_body = JSON.parse(response.body)
71
71
  validate_response! response_body
72
72
  result = { data: response_body }
@@ -81,15 +81,14 @@ module Ya::API::Direct
81
81
 
82
82
  def self.validate_response!(response_body)
83
83
  if response_body.has_key? 'error'
84
- response_error = response_body['error']
85
- raise Exception.new(response_error['error_detail'], response_error['error_string'], response_error['error_code'])
84
+ raise Exception.new( response_body['error'] )
86
85
  end
87
86
  end
88
87
 
89
88
  def self.from_tsv_to_json(response_body)
90
89
  report_name = response_body.slice!(/^(.+?)\n/)
91
90
  keys = response_body.slice!(/^(.+?)\n/).split("\t")
92
- rows = response_body.match(/rows:(.+?)\n/)[1].to_i - 1
91
+ rows = response_body.match(/rows:(.+?)\n/)[1].to_i
93
92
  values = []
94
93
  rows.times do |row|
95
94
  hash_values = {}
@@ -101,4 +100,4 @@ module Ya::API::Direct
101
100
  values
102
101
  end
103
102
  end
104
- end
103
+ end
@@ -1,7 +1,7 @@
1
1
  module Ya
2
2
  module Api
3
3
  module Direct
4
- VERSION = "0.2.6"
4
+ VERSION = "0.2.10"
5
5
  end
6
6
  end
7
7
  end
data/lib/ya/api/direct.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  require "ya/api/direct/version"
2
2
  require "ya/api/direct/client"
3
- require "ya/api/direct/exception"
3
+ require "ya/api/direct/exceptions"
@@ -6,7 +6,7 @@ require 'ya/api/direct/version'
6
6
  Gem::Specification.new do |s|
7
7
  s.name = 'ya-api-direct'
8
8
  s.version = Ya::Api::Direct::VERSION
9
- s.date = '2018-04-19'
9
+ s.date = '2021-12-12'
10
10
  s.summary = "Yandex Direct API v5, v4 and v4 Live"
11
11
  s.description = "Ruby implementation for Yandex Direct API of versions 5, 4 and 4 Live"
12
12
  s.authors = "Rikki Mongoose"
@@ -18,8 +18,9 @@ Gem::Specification.new do |s|
18
18
  s.bindir = "exe"
19
19
  s.executables = s.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
20
  s.require_paths = ["lib"]
21
+ s.required_ruby_version = ">= 2.5.0"
21
22
 
22
- s.add_development_dependency "bundler", "~> 1.12"
23
- s.add_development_dependency "rake", "~> 10.0"
23
+ s.add_development_dependency "bundler", ">= 2.2.33"
24
+ s.add_development_dependency "rake", ">= 12.3.3"
24
25
  s.add_development_dependency "minitest", "~> 5.0"
25
26
  end
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ya-api-direct
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.2.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rikki Mongoose
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-04-19 00:00:00.000000000 Z
11
+ date: 2021-12-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.12'
19
+ version: 2.2.33
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.12'
26
+ version: 2.2.33
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: 12.3.3
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: 12.3.3
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: minitest
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -74,7 +74,7 @@ files:
74
74
  - lib/ya/api/direct/direct_service_base.rb
75
75
  - lib/ya/api/direct/direct_service_v4.rb
76
76
  - lib/ya/api/direct/direct_service_v5.rb
77
- - lib/ya/api/direct/exception.rb
77
+ - lib/ya/api/direct/exceptions.rb
78
78
  - lib/ya/api/direct/gateway.rb
79
79
  - lib/ya/api/direct/url_helper.rb
80
80
  - lib/ya/api/direct/version.rb
@@ -91,15 +91,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
91
91
  requirements:
92
92
  - - ">="
93
93
  - !ruby/object:Gem::Version
94
- version: '0'
94
+ version: 2.5.0
95
95
  required_rubygems_version: !ruby/object:Gem::Requirement
96
96
  requirements:
97
97
  - - ">="
98
98
  - !ruby/object:Gem::Version
99
99
  version: '0'
100
100
  requirements: []
101
- rubyforge_project:
102
- rubygems_version: 2.5.1
101
+ rubygems_version: 3.1.2
103
102
  signing_key:
104
103
  specification_version: 4
105
104
  summary: Yandex Direct API v5, v4 and v4 Live
@@ -1,17 +0,0 @@
1
- require "ya/api/direct/constants"
2
-
3
- module Ya::API::Direct
4
- class Exception < StandardError
5
- attr_reader :error_detail, :error_code, :error_str
6
-
7
- def initialize(error_detail, error_str, error_code)
8
- @error_detail = error_detail
9
- @error_str = error_str
10
- @error_code = error_code
11
- end
12
-
13
- def to_s
14
- "#{@error_str} : #{@error_detail} : #{@error_code}"
15
- end
16
- end
17
- end