twitter-ads 5.1.0 → 7.0.1

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 (66) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -2
  3. data/README.md +1 -1
  4. data/lib/twitter-ads.rb +8 -4
  5. data/lib/twitter-ads/account.rb +6 -25
  6. data/lib/twitter-ads/audiences/tailored_audience.rb +98 -3
  7. data/lib/twitter-ads/{targeting_criteria/behavior_taxonomy.rb → campaign/advertiser_business_categories.rb} +6 -6
  8. data/lib/twitter-ads/campaign/campaign.rb +1 -2
  9. data/lib/twitter-ads/campaign/content_categories.rb +23 -0
  10. data/lib/twitter-ads/campaign/funding_instrument.rb +1 -2
  11. data/lib/twitter-ads/campaign/line_item.rb +4 -4
  12. data/lib/twitter-ads/campaign/organic_tweet.rb +1 -3
  13. data/lib/twitter-ads/campaign/targeting_criteria.rb +0 -1
  14. data/lib/twitter-ads/campaign/tweet.rb +4 -49
  15. data/lib/twitter-ads/client.rb +2 -2
  16. data/lib/twitter-ads/creative/account_media.rb +4 -6
  17. data/lib/twitter-ads/creative/draft_tweet.rb +40 -0
  18. data/lib/twitter-ads/creative/image_app_download_card.rb +2 -2
  19. data/lib/twitter-ads/creative/image_conversation_card.rb +3 -2
  20. data/lib/twitter-ads/creative/media_creative.rb +2 -3
  21. data/lib/twitter-ads/creative/media_library.rb +12 -13
  22. data/lib/twitter-ads/creative/promoted_account.rb +1 -2
  23. data/lib/twitter-ads/creative/promoted_tweet.rb +1 -2
  24. data/lib/twitter-ads/creative/scheduled_tweet.rb +1 -12
  25. data/lib/twitter-ads/creative/tweets.rb +52 -0
  26. data/lib/twitter-ads/creative/video_app_download_card.rb +4 -6
  27. data/lib/twitter-ads/creative/video_conversation_card.rb +6 -6
  28. data/lib/twitter-ads/creative/video_website_card.rb +3 -5
  29. data/lib/twitter-ads/creative/website_card.rb +2 -2
  30. data/lib/twitter-ads/cursor.rb +6 -0
  31. data/lib/twitter-ads/enum.rb +19 -9
  32. data/lib/twitter-ads/error.rb +5 -15
  33. data/lib/twitter-ads/http/request.rb +37 -2
  34. data/lib/twitter-ads/http/response.rb +1 -13
  35. data/lib/twitter-ads/resources/analytics.rb +99 -47
  36. data/lib/twitter-ads/resources/dsl.rb +8 -1
  37. data/lib/twitter-ads/restapi.rb +29 -0
  38. data/lib/twitter-ads/settings/tax.rb +13 -1
  39. data/lib/twitter-ads/targeting/audience_summary.rb +47 -0
  40. data/lib/twitter-ads/targeting_criteria/{behavior.rb → conversation.rb} +3 -7
  41. data/lib/twitter-ads/utils.rb +23 -0
  42. data/lib/twitter-ads/version.rb +1 -1
  43. data/spec/fixtures/audience_summary.json +14 -0
  44. data/spec/fixtures/line_items_all.json +2 -10
  45. data/spec/fixtures/line_items_load.json +0 -1
  46. data/spec/fixtures/tweet_previews.json +23 -0
  47. data/spec/spec_helper.rb +1 -4
  48. data/spec/twitter-ads/campaign/line_item_spec.rb +0 -1
  49. data/spec/twitter-ads/campaign/targeting_criteria_spec.rb +0 -1
  50. data/spec/twitter-ads/campaign/tweet_spec.rb +0 -59
  51. data/spec/twitter-ads/client_spec.rb +17 -1
  52. data/spec/twitter-ads/creative/media_creative_spec.rb +1 -1
  53. data/spec/twitter-ads/creative/tweet_previews_spec.rb +41 -0
  54. data/spec/twitter-ads/rate_limit_spec.rb +247 -0
  55. data/spec/twitter-ads/retry_count_spec.rb +61 -0
  56. data/spec/twitter-ads/{creative/image_app_download_card_spec.rb → targeting/audience_summary_spec.rb} +16 -18
  57. metadata +46 -47
  58. data/lib/twitter-ads/audiences/audience_intelligence.rb +0 -68
  59. data/lib/twitter-ads/targeting/reach_estimate.rb +0 -78
  60. data/spec/fixtures/tweet_preview.json +0 -24
  61. data/spec/twitter-ads/campaign/reach_estimate_spec.rb +0 -103
  62. data/spec/twitter-ads/creative/account_media_spec.rb +0 -32
  63. data/spec/twitter-ads/creative/image_conversation_card_spec.rb +0 -40
  64. data/spec/twitter-ads/creative/video_app_download_card_spec.rb +0 -42
  65. data/spec/twitter-ads/creative/video_conversation_card_spec.rb +0 -51
  66. data/spec/twitter-ads/creative/website_card_spec.rb +0 -42
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+ # Copyright (C) 2019 Twitter, Inc.
3
+
4
+ require 'spec_helper'
5
+
6
+ describe TwitterAds::Campaign do
7
+
8
+ before(:each) do
9
+ allow_any_instance_of(Object).to receive(:sleep)
10
+ stub_fixture(:get, :accounts_load, "#{ADS_API}/accounts/2iqph")
11
+ end
12
+
13
+ let(:client) do
14
+ Client.new(
15
+ Faker::Lorem.characters(40),
16
+ Faker::Lorem.characters(40),
17
+ Faker::Lorem.characters(40),
18
+ Faker::Lorem.characters(40),
19
+ options: {
20
+ retry_max: 1,
21
+ retry_delay: 3000,
22
+ retry_on_status: [404, 500, 503]
23
+ }
24
+ )
25
+ end
26
+ let(:account) { client.accounts('2iqph') }
27
+
28
+ it 'test retry count - success' do
29
+ stub = stub_request(:get, "#{ADS_API}/accounts/2iqph/campaigns").to_return(
30
+ {
31
+ body: fixture(:campaigns_all),
32
+ status: 404
33
+ },
34
+ {
35
+ body: fixture(:campaigns_all),
36
+ status: 200
37
+ }
38
+ )
39
+ cusor = described_class.all(account)
40
+ expect(cusor).to be_instance_of(Cursor)
41
+ expect(stub).to have_been_requested.times(2)
42
+ end
43
+
44
+ it 'test retry count - fail' do
45
+ stub = stub_request(:get, "#{ADS_API}/accounts/2iqph/campaigns").to_return(
46
+ {
47
+ body: fixture(:campaigns_all),
48
+ status: 404
49
+ }
50
+ ).times(2)
51
+
52
+ begin
53
+ cusor = described_class.all(account)
54
+ rescue NotFound => e
55
+ cusor = e
56
+ end
57
+ expect(cusor).to be_instance_of(NotFound)
58
+ expect(stub).to have_been_requested.times(2)
59
+ end
60
+
61
+ end
@@ -3,11 +3,12 @@
3
3
 
4
4
  require 'spec_helper'
5
5
 
6
- describe TwitterAds::Creative::ImageAppDownloadCard do
6
+ describe TwitterAds::AudienceSummary do
7
7
 
8
8
  before(:each) do
9
9
  stub_fixture(:get, :accounts_all, "#{ADS_API}/accounts")
10
10
  stub_fixture(:get, :accounts_load, "#{ADS_API}/accounts/2iqph")
11
+ stub_fixture(:post, :audience_summary, "#{ADS_API}/accounts/2iqph/audience_summary")
11
12
  end
12
13
 
13
14
  let(:client) do
@@ -20,24 +21,21 @@ describe TwitterAds::Creative::ImageAppDownloadCard do
20
21
  end
21
22
 
22
23
  let(:account) { client.accounts.first }
24
+ let(:params) {
25
+ {
26
+ targeting_criteria: [{
27
+ targeting_type: 'LOCATION',
28
+ targeting_value: '96683cc9126741d1'
29
+ }]
30
+ }
31
+ }
23
32
 
24
33
  # check model properties
25
- subject { described_class.new(account) }
26
- read = %w(id created_at updated_at deleted)
27
-
28
- write = %w(
29
- name
30
- country_code
31
- iphone_app_id
32
- iphone_deep_link
33
- ipad_app_id
34
- ipad_deep_link
35
- googleplay_app_id
36
- googleplay_deep_link
37
- app_cta
38
- wide_app_image_media_id
39
- )
40
-
41
- include_examples 'object property check', read, write
34
+ subject { described_class.fetch(account, params) }
35
+
36
+ it 'has all the correct properties' do
37
+ expect(subject[:audience_size][:min]).to eq(41133600)
38
+ expect(subject[:audience_size][:max]).to eq(50274400)
39
+ end
42
40
 
43
41
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twitter-ads
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.1.0
4
+ version: 7.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Babich
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2019-06-14 00:00:00.000000000 Z
15
+ date: 2020-09-25 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: multi_json
@@ -57,10 +57,11 @@ files:
57
57
  - bin/twitter-ads
58
58
  - lib/twitter-ads.rb
59
59
  - lib/twitter-ads/account.rb
60
- - lib/twitter-ads/audiences/audience_intelligence.rb
61
60
  - lib/twitter-ads/audiences/tailored_audience.rb
61
+ - lib/twitter-ads/campaign/advertiser_business_categories.rb
62
62
  - lib/twitter-ads/campaign/app_list.rb
63
63
  - lib/twitter-ads/campaign/campaign.rb
64
+ - lib/twitter-ads/campaign/content_categories.rb
64
65
  - lib/twitter-ads/campaign/funding_instrument.rb
65
66
  - lib/twitter-ads/campaign/iab_category.rb
66
67
  - lib/twitter-ads/campaign/line_item.rb
@@ -71,6 +72,7 @@ files:
71
72
  - lib/twitter-ads/client.rb
72
73
  - lib/twitter-ads/creative/account_media.rb
73
74
  - lib/twitter-ads/creative/cards_fetch.rb
75
+ - lib/twitter-ads/creative/draft_tweet.rb
74
76
  - lib/twitter-ads/creative/image_app_download_card.rb
75
77
  - lib/twitter-ads/creative/image_conversation_card.rb
76
78
  - lib/twitter-ads/creative/media_creative.rb
@@ -80,6 +82,7 @@ files:
80
82
  - lib/twitter-ads/creative/promoted_tweet.rb
81
83
  - lib/twitter-ads/creative/scheduled_tweet.rb
82
84
  - lib/twitter-ads/creative/tweet_previews.rb
85
+ - lib/twitter-ads/creative/tweets.rb
83
86
  - lib/twitter-ads/creative/video_app_download_card.rb
84
87
  - lib/twitter-ads/creative/video_conversation_card.rb
85
88
  - lib/twitter-ads/creative/video_website_card.rb
@@ -97,12 +100,12 @@ files:
97
100
  - lib/twitter-ads/resources/dsl.rb
98
101
  - lib/twitter-ads/resources/persistence.rb
99
102
  - lib/twitter-ads/resources/resource.rb
103
+ - lib/twitter-ads/restapi.rb
100
104
  - lib/twitter-ads/settings/tax.rb
101
105
  - lib/twitter-ads/settings/user.rb
102
- - lib/twitter-ads/targeting/reach_estimate.rb
106
+ - lib/twitter-ads/targeting/audience_summary.rb
103
107
  - lib/twitter-ads/targeting_criteria/app_store_category.rb
104
- - lib/twitter-ads/targeting_criteria/behavior.rb
105
- - lib/twitter-ads/targeting_criteria/behavior_taxonomy.rb
108
+ - lib/twitter-ads/targeting_criteria/conversation.rb
106
109
  - lib/twitter-ads/targeting_criteria/device.rb
107
110
  - lib/twitter-ads/targeting_criteria/event.rb
108
111
  - lib/twitter-ads/targeting_criteria/interest.rb
@@ -120,6 +123,7 @@ files:
120
123
  - spec/fixtures/accounts_load.json
121
124
  - spec/fixtures/app_lists_all.json
122
125
  - spec/fixtures/app_lists_load.json
126
+ - spec/fixtures/audience_summary.json
123
127
  - spec/fixtures/campaigns_all.json
124
128
  - spec/fixtures/campaigns_load.json
125
129
  - spec/fixtures/funding_instruments_all.json
@@ -135,7 +139,7 @@ files:
135
139
  - spec/fixtures/reach_estimate.json
136
140
  - spec/fixtures/tailored_audiences_all.json
137
141
  - spec/fixtures/tailored_audiences_load.json
138
- - spec/fixtures/tweet_preview.json
142
+ - spec/fixtures/tweet_previews.json
139
143
  - spec/fixtures/videos_all.json
140
144
  - spec/fixtures/videos_load.json
141
145
  - spec/quality_spec.rb
@@ -146,21 +150,18 @@ files:
146
150
  - spec/twitter-ads/audiences/tailored_audience_spec.rb
147
151
  - spec/twitter-ads/campaign/app_list_spec.rb
148
152
  - spec/twitter-ads/campaign/line_item_spec.rb
149
- - spec/twitter-ads/campaign/reach_estimate_spec.rb
150
153
  - spec/twitter-ads/campaign/targeting_criteria_spec.rb
151
154
  - spec/twitter-ads/campaign/tweet_spec.rb
152
155
  - spec/twitter-ads/client_spec.rb
153
- - spec/twitter-ads/creative/account_media_spec.rb
154
- - spec/twitter-ads/creative/image_app_download_card_spec.rb
155
- - spec/twitter-ads/creative/image_conversation_card_spec.rb
156
156
  - spec/twitter-ads/creative/media_creative_spec.rb
157
157
  - spec/twitter-ads/creative/promoted_account_spec.rb
158
158
  - spec/twitter-ads/creative/promoted_tweet_spec.rb
159
- - spec/twitter-ads/creative/video_app_download_card_spec.rb
160
- - spec/twitter-ads/creative/video_conversation_card_spec.rb
161
- - spec/twitter-ads/creative/website_card_spec.rb
159
+ - spec/twitter-ads/creative/tweet_previews_spec.rb
162
160
  - spec/twitter-ads/cursor_spec.rb
163
161
  - spec/twitter-ads/placements_spec.rb
162
+ - spec/twitter-ads/rate_limit_spec.rb
163
+ - spec/twitter-ads/retry_count_spec.rb
164
+ - spec/twitter-ads/targeting/audience_summary_spec.rb
164
165
  - spec/twitter-ads/utils_spec.rb
165
166
  - twitter-ads.gemspec
166
167
  homepage: https://github.com/twitterdev/twitter-ruby-ads-sdk
@@ -187,50 +188,48 @@ signing_key:
187
188
  specification_version: 4
188
189
  summary: The officially supported Twitter Ads API SDK for Ruby.
189
190
  test_files:
190
- - spec/spec_helper.rb
191
- - spec/twitter-ads/audiences/tailored_audience_spec.rb
191
+ - spec/support/helpers.rb
192
+ - spec/quality_spec.rb
193
+ - spec/shared/properties.rb
192
194
  - spec/twitter-ads/cursor_spec.rb
193
- - spec/twitter-ads/account_spec.rb
194
- - spec/twitter-ads/client_spec.rb
195
- - spec/twitter-ads/placements_spec.rb
196
- - spec/twitter-ads/campaign/targeting_criteria_spec.rb
197
- - spec/twitter-ads/campaign/app_list_spec.rb
198
- - spec/twitter-ads/campaign/reach_estimate_spec.rb
195
+ - spec/twitter-ads/rate_limit_spec.rb
196
+ - spec/twitter-ads/audiences/tailored_audience_spec.rb
197
+ - spec/twitter-ads/targeting/audience_summary_spec.rb
199
198
  - spec/twitter-ads/campaign/line_item_spec.rb
199
+ - spec/twitter-ads/campaign/targeting_criteria_spec.rb
200
200
  - spec/twitter-ads/campaign/tweet_spec.rb
201
- - spec/twitter-ads/creative/account_media_spec.rb
202
- - spec/twitter-ads/creative/website_card_spec.rb
203
- - spec/twitter-ads/creative/video_app_download_card_spec.rb
204
- - spec/twitter-ads/creative/media_creative_spec.rb
201
+ - spec/twitter-ads/campaign/app_list_spec.rb
205
202
  - spec/twitter-ads/creative/promoted_tweet_spec.rb
206
- - spec/twitter-ads/creative/image_conversation_card_spec.rb
207
- - spec/twitter-ads/creative/video_conversation_card_spec.rb
203
+ - spec/twitter-ads/creative/tweet_previews_spec.rb
204
+ - spec/twitter-ads/creative/media_creative_spec.rb
208
205
  - spec/twitter-ads/creative/promoted_account_spec.rb
209
- - spec/twitter-ads/creative/image_app_download_card_spec.rb
206
+ - spec/twitter-ads/account_spec.rb
210
207
  - spec/twitter-ads/utils_spec.rb
211
- - spec/shared/properties.rb
212
- - spec/support/helpers.rb
213
- - spec/fixtures/line_items_load.json
214
- - spec/fixtures/promotable_users_all.json
215
- - spec/fixtures/reach_estimate.json
216
- - spec/fixtures/tweet_preview.json
217
- - spec/fixtures/accounts_features.json
208
+ - spec/twitter-ads/client_spec.rb
209
+ - spec/twitter-ads/placements_spec.rb
210
+ - spec/twitter-ads/retry_count_spec.rb
211
+ - spec/spec_helper.rb
212
+ - spec/fixtures/promoted_tweets_all.json
213
+ - spec/fixtures/campaigns_load.json
214
+ - spec/fixtures/promoted_tweets_load.json
218
215
  - spec/fixtures/videos_all.json
216
+ - spec/fixtures/accounts_load.json
219
217
  - spec/fixtures/line_items_all.json
220
- - spec/fixtures/placements.json
221
- - spec/fixtures/promotable_users_load.json
222
- - spec/fixtures/tailored_audiences_all.json
223
- - spec/fixtures/promoted_tweets_all.json
218
+ - spec/fixtures/accounts_features.json
219
+ - spec/fixtures/line_items_load.json
224
220
  - spec/fixtures/funding_instruments_load.json
221
+ - spec/fixtures/videos_load.json
222
+ - spec/fixtures/funding_instruments_all.json
223
+ - spec/fixtures/tweet_previews.json
225
224
  - spec/fixtures/tailored_audiences_load.json
225
+ - spec/fixtures/placements.json
226
+ - spec/fixtures/tailored_audiences_all.json
227
+ - spec/fixtures/reach_estimate.json
226
228
  - spec/fixtures/app_lists_load.json
227
- - spec/fixtures/promoted_tweets_load.json
228
- - spec/fixtures/funding_instruments_all.json
229
- - spec/fixtures/campaigns_load.json
229
+ - spec/fixtures/audience_summary.json
230
+ - spec/fixtures/campaigns_all.json
230
231
  - spec/fixtures/app_lists_all.json
231
- - spec/fixtures/accounts_load.json
232
+ - spec/fixtures/promotable_users_all.json
232
233
  - spec/fixtures/no_content.json
233
- - spec/fixtures/campaigns_all.json
234
234
  - spec/fixtures/accounts_all.json
235
- - spec/fixtures/videos_load.json
236
- - spec/quality_spec.rb
235
+ - spec/fixtures/promotable_users_load.json
@@ -1,68 +0,0 @@
1
- # frozen_string_literal: true
2
- # Copyright (C) 2019 Twitter, Inc.
3
-
4
- module TwitterAds
5
- class AudienceIntelligence
6
-
7
- include TwitterAds::DSL
8
- include TwitterAds::Resource::InstanceMethods
9
-
10
- attr_reader :account
11
-
12
- # writable
13
- property :conversation_type
14
- property :targeting_inputs
15
- property :audience_definition
16
-
17
- # demographics-only
18
- property :start_time, type: :time
19
- property :end_time, type: :time
20
-
21
- # read
22
- property :operator_type, read_only: true
23
- property :targeting_type, read_only: true
24
- property :targeting_value, read_only: true
25
- property :localized, read_only: true
26
-
27
- RESOURCE_CONVERSATIONS = "/#{TwitterAds::API_VERSION}/" \
28
- 'accounts/%{account_id}/audience_intelligence/' \
29
- 'conversations' # @api private
30
- RESOURCE_DEMOGRAPHICS = "/#{TwitterAds::API_VERSION}/" \
31
- 'accounts/%{account_id}/audience_intelligence/' \
32
- 'demographics' # @api private
33
-
34
- def initialize(account)
35
- @account = account
36
- self
37
- end
38
-
39
- def conversations
40
- headers = { 'Content-Type' => 'application/json' }
41
- params = {
42
- conversation_type: conversation_type,
43
- audience_definition: audience_definition,
44
- targeting_inputs: targeting_inputs
45
- }
46
- resource = RESOURCE_CONVERSATIONS % { account_id: account.id }
47
- request = Request.new(account.client, :post, resource, body: params.to_json, headers: headers)
48
- Cursor.new(self.class, request, init_with: [account])
49
- end
50
-
51
- def demographics
52
- headers = { 'Content-Type' => 'application/json' }
53
- params = {
54
- audience_definition: audience_definition,
55
- targeting_inputs: targeting_inputs
56
- }
57
- resource = RESOURCE_DEMOGRAPHICS % { account_id: account.id }
58
- response = Request.new(
59
- account.client,
60
- :post,
61
- resource,
62
- body: params.to_json,
63
- headers: headers).perform
64
- response.body[:data]
65
- # cannot use cursor here given that the response "keys" are dynmaic based on input values
66
- end
67
- end
68
- end
@@ -1,78 +0,0 @@
1
- # frozen_string_literal: true
2
- # Copyright (C) 2019 Twitter, Inc.
3
-
4
- module TwitterAds
5
- module ReachEstimate
6
-
7
- class << self
8
-
9
- # Get a reach estimate for the specified line item details.
10
- #
11
- # @example
12
- # TwitterAds::ReachEstimate.fetch(
13
- # account,
14
- # 'PROMOTED_TWEETS',
15
- # 'WEBSITE_CLICKS',
16
- # 5500000,
17
- # 30000000,
18
- # similar_to_followers_of_user: 2153688540,
19
- # gender: 2
20
- # )
21
- #
22
- # @param client [Client] The Client object instance.
23
- # @param product_type [String] The product type being targeted.
24
- # @param objective [String] The objective being targeted.
25
- # @param campaign_daily_budget_amount_local_micro [Long] Daily budget in micros.
26
- # @param opts [Hash] A Hash of extended options.
27
- #
28
- # @option opts [Long] :bid_amount_local_micro Bid amount in local currency micros.
29
- # @option opts [String] :bid_type The bidding mechanism.
30
- # @option opts [String] :currency ISO-4217 Currency code for bid amount.
31
- # @option opts [String] :followers_of_users Comma-separated user IDs.
32
- # @option opts [String] :similar_to_followers_of_users Comma-separated user IDs.
33
- # @option opts [String] :locations Comma-separated location IDs.
34
- # @option opts [String] :interests Comma-seaprated interest IDs.
35
- # @option opts [String] :gender Gender identifier.
36
- # @option opts [String] :platforms Comma-separated platform IDs.
37
- # @option opts [String] :tailored_audiences Comma-separated tailored audience IDs.
38
- # @option opts [String] :tailored_audiences_expanded Comma-separated tailoerd audience IDs.
39
- # @option opts [String] :languages Comma-separated language IDs.
40
- # @option opts [String] :platform_versions Comma-separated platform version IDs.
41
- # @option opts [String] :devices Comma-separated device IDs.
42
- # @option opts [String] :behaviors Comma-separated behavior IDs.
43
- # @option opts [String] :behaviors_expanded Comma-separated behaviors IDs.
44
- # @option opts [String] :campaign engagement Campaign ID for Tweet Engager Retargeting.
45
- # @option opts [String] :user_engagement Promoted User ID for Tweet Engager Retargeting.
46
- # @option opts [String] :engagement_type engagement type for Tweet Engager Retargeting.
47
- # @option opts [String] :network_operators Network operators to target
48
- # @option opts [String] :app_store_categories App store categories to target.
49
- # @option opts [String] :app_store_categories_expanded App store categories with lookalikes.
50
- #
51
- # @return [Hash] A hash containing count and infinite_bid_count.
52
- #
53
- # @since 1.0.0
54
- # @see https://developer.twitter.com/en/docs/ads/campaign-management/api-reference/reach-estimate
55
- def fetch(account, product_type, objective, campaign_daily_budget,
56
- opts = {})
57
- resource = "/#{TwitterAds::API_VERSION}/accounts/#{account.id}/reach_estimate"
58
- params = {
59
- product_type: product_type,
60
- objective: objective,
61
- campaign_daily_budget_amount_local_micro: campaign_daily_budget
62
- }.merge!(opts)
63
-
64
- # The response value count is "bid sensitive", we default to bid_type=AUTO here to preserve
65
- # expected behavior despite an API change that occurred in December 2015.
66
- unless params.keys.include?(:bid_type) || params.keys.include?(:bid_amount_local_micro)
67
- params = { bid_type: 'AUTO' }.merge!(params)
68
- end
69
-
70
- response = TwitterAds::Request.new(account.client, :get,
71
- resource, params: params).perform
72
- response.body[:data]
73
- end
74
-
75
- end
76
-
77
- end
78
- end
@@ -1,24 +0,0 @@
1
- {
2
- "data_type": "tweet_preview",
3
- "data": [
4
- {
5
- "platform": "web",
6
- "preview": " <div><img><div><div><div><a>AdsAPI</a><a>@AdsAPI</a></div></div><div>Hello World!</div><div><div><img><div><div></div><div><span> Ratings/pricing not available for preview </span><span> Ratings/pricing not available for preview </span></div><div></div> INSTALL </div></div></div><a><img></a><div><div><span></span><span>Promoted by AdsAPI</span></div></div></div></div>"
7
- },
8
- {
9
- "platform": "android",
10
- "preview": " <div><img><div><div><div><a>AdsAPI</a><a>@AdsAPI</a></div></div><div>Hello World!</div><div><div><img><div><div></div><div><span> Ratings/pricing not available for preview </span><span> Ratings/pricing not available for preview </span></div><div></div> INSTALL </div></div></div><a><img></a><div><div><span></span><span>Promoted by AdsAPI</span></div></div></div></div>"
11
- },
12
- {
13
- "platform": "iphone",
14
- "preview": " <div><img><div><div><div><a>AdsAPI</a><a>@AdsAPI</a></div></div><div>Hello World!</div><div><div><img><div><div></div><div><span> Ratings/pricing not available for preview </span><span> Ratings/pricing not available for preview </span></div><div></div> INSTALL </div></div></div><a><img></a><div><div><span></span><span>Promoted by AdsAPI</span></div></div></div></div>"
15
- }
16
- ],
17
- "request": {
18
- "params": {
19
- "status": "Hello World!",
20
- "card_id": "pfs",
21
- "account_id": "2iqph"
22
- }
23
- }
24
- }