twitter-ads 5.1.0 → 7.0.1

Sign up to get free protection for your applications and to get access to all the features.
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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 66b5f0101e9a3bb56a76274588cc25949cd5427a6993cf545934472013c019c1
4
- data.tar.gz: 74f5b1183e980d2793ba90af482b70fdfdd8c6b47dfbd80a99c0208c77f42289
3
+ metadata.gz: b42045b5ca461ee6f6a13ed129264351506089d23622ad2429a1a154e0b2b03f
4
+ data.tar.gz: 431d8797b1d1aa606c10672780708112053710b0e745e46e13bd602097c48ca9
5
5
  SHA512:
6
- metadata.gz: 627d24d41572df3ecbd8078ab336da7008d3e9ffed57a3af1ac03d41c7c44014eee2d9da920b50505e2b24c866a80049825574cff377532c5146a5515857214b
7
- data.tar.gz: 03e79e1ce3c97d62a7bc9aae41b94bfd0709fc7899e4c248f403e652e6d7bd51c060d32466f392162ed5bd62853c61ff2e1ca4c39a2debe19cecef0fc80e218b
6
+ metadata.gz: fb703d3ef21d673d313c7223474e5dabbdb0d64233b88550a1135773118273a71272a38b791c927139773de1b62e639f06075fd9a25a94668e9a7cefd9bd0f82
7
+ data.tar.gz: bcef25e9c1a7a4d3ac331bbf901dbaefbe00121a7f0ca6e66c484f0b93585d5d8e85d7d8e46d3bfe771cc5daa584735626300a3b56743e529e4de5031aff3a36
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (C) 2019 Twitter, Inc.
3
+ Copyright (C) 2020 Twitter, Inc.
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -19,4 +19,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
19
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
20
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
21
  SOFTWARE.
22
-
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- Getting Started [![Build Status](https://travis-ci.org/twitterdev/twitter-ruby-ads-sdk.svg?branch=master)](https://travis-ci.org/twitterdev/twitter-ruby-ads-sdk) [![Code Climate](https://codeclimate.com/github/twitterdev/twitter-ruby-ads-sdk/badges/gpa.svg)](https://codeclimate.com/github/twitterdev/twitter-ruby-ads-sdk) [![Test Coverage](https://codeclimate.com/github/twitterdev/twitter-ruby-ads-sdk/badges/coverage.svg)](https://codeclimate.com/github/twitterdev/twitter-ruby-ads-sdk/coverage) [![Gem Version](https://badge.fury.io/rb/twitter-ads.svg)](http://badge.fury.io/rb/twitter-ads)
1
+ Getting Started [![Build Status](https://travis-ci.org/twitterdev/twitter-ruby-ads-sdk.svg?branch=master)](https://travis-ci.org/twitterdev/twitter-ruby-ads-sdk)[![Gem Version](https://badge.fury.io/rb/twitter-ads.svg)](http://badge.fury.io/rb/twitter-ads)
2
2
  ------
3
3
 
4
4
  ##### Installation
@@ -27,7 +27,8 @@ require 'twitter-ads/resources/batch'
27
27
  require 'twitter-ads/http/request'
28
28
  require 'twitter-ads/http/response'
29
29
 
30
- require 'twitter-ads/audiences/audience_intelligence'
30
+ require 'twitter-ads/restapi.rb'
31
+
31
32
  require 'twitter-ads/audiences/tailored_audience'
32
33
 
33
34
  require 'twitter-ads/campaign/app_list'
@@ -39,19 +40,20 @@ require 'twitter-ads/campaign/targeting_criteria'
39
40
  require 'twitter-ads/campaign/tweet'
40
41
  require 'twitter-ads/campaign/organic_tweet'
41
42
  require 'twitter-ads/campaign/iab_category'
43
+ require 'twitter-ads/campaign/advertiser_business_categories'
44
+ require 'twitter-ads/campaign/content_categories'
42
45
 
43
46
  require 'twitter-ads/targeting_criteria/tv_market'
44
47
  require 'twitter-ads/targeting_criteria/tv_show'
45
48
  require 'twitter-ads/targeting_criteria/event'
46
49
  require 'twitter-ads/targeting_criteria/device'
50
+ require 'twitter-ads/targeting_criteria/conversation'
47
51
  require 'twitter-ads/targeting_criteria/platform'
48
52
  require 'twitter-ads/targeting_criteria/platform_version'
49
53
  require 'twitter-ads/targeting_criteria/network_operator'
50
54
  require 'twitter-ads/targeting_criteria/location'
51
55
  require 'twitter-ads/targeting_criteria/interest'
52
56
  require 'twitter-ads/targeting_criteria/language'
53
- require 'twitter-ads/targeting_criteria/behavior'
54
- require 'twitter-ads/targeting_criteria/behavior_taxonomy'
55
57
  require 'twitter-ads/targeting_criteria/app_store_category'
56
58
 
57
59
  require 'twitter-ads/creative/account_media'
@@ -63,14 +65,16 @@ require 'twitter-ads/creative/media_library'
63
65
  require 'twitter-ads/creative/promoted_account'
64
66
  require 'twitter-ads/creative/promoted_tweet'
65
67
  require 'twitter-ads/creative/scheduled_tweet'
68
+ require 'twitter-ads/creative/draft_tweet'
66
69
  require 'twitter-ads/creative/video_app_download_card'
67
70
  require 'twitter-ads/creative/video_conversation_card'
68
71
  require 'twitter-ads/creative/video_website_card'
69
72
  require 'twitter-ads/creative/website_card'
70
73
  require 'twitter-ads/creative/poll_cards'
71
74
  require 'twitter-ads/creative/tweet_previews'
75
+ require 'twitter-ads/creative/tweets'
72
76
 
73
- require 'twitter-ads/targeting/reach_estimate'
77
+ require 'twitter-ads/targeting/audience_summary'
74
78
 
75
79
  require 'twitter-ads/measurement/web_event_tag'
76
80
  require 'twitter-ads/measurement/app_event_tag'
@@ -17,14 +17,12 @@ module TwitterAds
17
17
  property :updated_at, type: :time, read_only: true
18
18
  property :deleted, type: :bool, read_only: true
19
19
 
20
- RESOURCE_COLLECTION = "/#{TwitterAds::API_VERSION}/" \
21
- 'accounts' # @api private
22
- RESOURCE = "/#{TwitterAds::API_VERSION}/" \
23
- 'accounts/%{id}' # @api private
24
- FEATURES = "/#{TwitterAds::API_VERSION}/" \
25
- 'accounts/%{id}/features' # @api private
26
- SCOPED_TIMELINE = "/#{TwitterAds::API_VERSION}/" \
27
- 'accounts/%{id}/scoped_timeline' # @api private
20
+ RESOURCE_COLLECTION = "/#{TwitterAds::API_VERSION}/" \
21
+ 'accounts' # @api private
22
+ RESOURCE = "/#{TwitterAds::API_VERSION}/" \
23
+ 'accounts/%{id}' # @api private
24
+ FEATURES = "/#{TwitterAds::API_VERSION}/" \
25
+ 'accounts/%{id}/features' # @api private
28
26
  AUTHENTICATED_USER_ACCESS = "/#{TwitterAds::API_VERSION}/" \
29
27
  'accounts/%{id}/authenticated_user_access' # @api private
30
28
 
@@ -248,23 +246,6 @@ module TwitterAds
248
246
  load_resource(TailoredAudience, id, opts)
249
247
  end
250
248
 
251
- # Returns the most recent promotable Tweets created by one or more specified Twitter users.
252
- #
253
- # @param ids [Array] An Array of Twitter user IDs.
254
- # @param opts [Hash] A Hash of extended options.
255
- #
256
- # @return [Array] An Array of Tweet objects.
257
- #
258
- # @since 0.2.3
259
- def scoped_timeline(ids, opts = {})
260
- ids = ids.join(',') if ids.is_a?(Array)
261
- params = { user_ids: ids }.merge!(opts)
262
- resource = SCOPED_TIMELINE % { id: @id }
263
- request = Request.new(client, :get, resource, params: params)
264
- response = request.perform
265
- response.body[:data]
266
- end
267
-
268
249
  def authenticated_user_access
269
250
  params = {}
270
251
  resource = AUTHENTICATED_USER_ACCESS % { id: @id }
@@ -29,9 +29,9 @@ module TwitterAds
29
29
  'accounts/%{account_id}/tailored_audiences' # @api private
30
30
  RESOURCE = "/#{TwitterAds::API_VERSION}/" \
31
31
  'accounts/%{account_id}/tailored_audiences/%{id}' # @api private
32
- RESOURCE_USERS = "/#{TwitterAds::API_VERSION}/ \
33
- accounts/%{account_id}/tailored_audiences/ \
34
- %{id}/users" # @api private
32
+ RESOURCE_USERS = "/#{TwitterAds::API_VERSION}/" \
33
+ 'accounts/%{account_id}/tailored_audiences/' \
34
+ '%{id}/users' # @api private
35
35
 
36
36
  LIST_TYPES = %w(
37
37
  EMAIL
@@ -138,4 +138,99 @@ module TwitterAds
138
138
  end
139
139
 
140
140
  end
141
+
142
+ class TailoredAudiencePermission
143
+
144
+ include TwitterAds::DSL
145
+ include TwitterAds::Resource
146
+
147
+ attr_reader :account
148
+
149
+ # read-only
150
+ property :created_at, type: :time, read_only: true
151
+ property :updated_at, type: :time, read_only: true
152
+ property :deleted, type: :bool, read_only: true
153
+
154
+ property :id
155
+ property :tailored_audience_id
156
+ property :granted_account_id
157
+ property :permission_level
158
+
159
+ RESOURCE_COLLECTION = "/#{TwitterAds::API_VERSION}/" \
160
+ 'accounts/%{account_id}/tailored_audiences/' \
161
+ '%{tailored_audience_id}/permissions' # @api private
162
+ RESOURCE = "/#{TwitterAds::API_VERSION}/" \
163
+ 'accounts/%{account_id}/tailored_audiences/' \
164
+ '%{tailored_audience_id}/permissions/%{id}' # @api private
165
+
166
+ def initialize(account)
167
+ @account = account
168
+ self
169
+ end
170
+
171
+ class << self
172
+
173
+ # Retrieve details for some or
174
+ # all permissions associated with the specified tailored audience.
175
+ #
176
+ # @exapmle
177
+ # permissions = TailoredAudiencePermission.all(account, '36n4f')
178
+ #
179
+ # @param account [Account] The account object instance.
180
+ # @param tailored_audience_id [String] The tailored audience id.
181
+ #
182
+ # @since 5.2.0
183
+ #
184
+ # @return [TailoredAudiencePermission] The tailored audience permission instance.
185
+ def all(account, tailored_audience_id, opts = {})
186
+ params = {}.merge!(opts)
187
+ resource = RESOURCE_COLLECTION % {
188
+ account_id: account.id,
189
+ tailored_audience_id: tailored_audience_id
190
+ }
191
+ request = Request.new(account.client, :get, resource, params: params)
192
+ Cursor.new(self, request, init_with: [account])
193
+ end
194
+
195
+ end
196
+
197
+ # Saves or updates the current object instance
198
+ # depending on the presence of `object.tailored_audience_id`.
199
+ #
200
+ # @exapmle
201
+ # object.save
202
+ #
203
+ # @since 5.2.0
204
+ #
205
+ # @return [self] Returns the instance refreshed from the API.
206
+ def save
207
+ resource = RESOURCE_COLLECTION % {
208
+ account_id: account.id,
209
+ tailored_audience_id: tailored_audience_id
210
+ }
211
+ params = to_params
212
+ response = Request.new(account.client, :post, resource, params: params).perform
213
+ from_response(response.body[:data])
214
+ end
215
+
216
+ # Deletes the current or specified tailored audience permission.
217
+ #
218
+ # @example
219
+ # object.delete!
220
+ #
221
+ # Note: calls to this method are destructive and irreverisble.
222
+ #
223
+ # @since 5.2.0
224
+ #
225
+ # @return [self] Returns the instance refreshed from the API.
226
+ def delete!
227
+ resource = RESOURCE % {
228
+ account_id: account.id,
229
+ tailored_audience_id: tailored_audience_id,
230
+ id: @id
231
+ }
232
+ response = Request.new(account.client, :delete, resource).perform
233
+ from_response(response.body[:data])
234
+ end
235
+ end
141
236
  end
@@ -2,19 +2,19 @@
2
2
  # Copyright (C) 2019 Twitter, Inc.
3
3
 
4
4
  module TwitterAds
5
- class BehaviorTaxonomy
5
+ class AdvertiserBusinessCategories
6
6
 
7
7
  include TwitterAds::DSL
8
8
  include TwitterAds::Resource
9
9
 
10
+ attr_reader :account
11
+
10
12
  property :id, read_only: true
11
13
  property :name, read_only: true
12
- property :parent_id, read_only: true
13
- property :created_at, read_only: true
14
- property :updated_at, read_only: true
14
+ property :iab_categories, read_only: true
15
15
 
16
- RESOURCE_COLLECTION = "/#{TwitterAds::API_VERSION}/" \
17
- 'targeting_criteria/behavior_taxonomies' # @api private
16
+ # @api private
17
+ RESOURCE_COLLECTION = "/#{TwitterAds::API_VERSION}/advertiser_business_categories"
18
18
 
19
19
  def initialize(account)
20
20
  @account = account
@@ -2,12 +2,11 @@
2
2
  # Copyright (C) 2019 Twitter, Inc.
3
3
 
4
4
  module TwitterAds
5
- class Campaign
5
+ class Campaign < Analytics
6
6
 
7
7
  include TwitterAds::DSL
8
8
  include TwitterAds::Resource
9
9
  include TwitterAds::Persistence
10
- include TwitterAds::Analytics
11
10
  include TwitterAds::Batch
12
11
 
13
12
  attr_reader :account
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+ # Copyright (C) 2019 Twitter, Inc.
3
+
4
+ module TwitterAds
5
+ class ContentCategories
6
+
7
+ include TwitterAds::DSL
8
+ include TwitterAds::Resource
9
+
10
+ attr_reader :account
11
+
12
+ property :id, read_only: true
13
+ property :name, read_only: true
14
+ property :iab_categories, read_only: true
15
+
16
+ RESOURCE_COLLECTION = "/#{TwitterAds::API_VERSION}/content_categories" # @api private
17
+
18
+ def initialize(account)
19
+ @account = account
20
+ self
21
+ end
22
+ end
23
+ end
@@ -2,11 +2,10 @@
2
2
  # Copyright (C) 2019 Twitter, Inc.
3
3
 
4
4
  module TwitterAds
5
- class FundingInstrument
5
+ class FundingInstrument < Analytics
6
6
 
7
7
  include TwitterAds::DSL
8
8
  include TwitterAds::Resource
9
- include TwitterAds::Analytics
10
9
 
11
10
  attr_reader :account
12
11
 
@@ -2,12 +2,11 @@
2
2
  # Copyright (C) 2019 Twitter, Inc.
3
3
 
4
4
  module TwitterAds
5
- class LineItem
5
+ class LineItem < Analytics
6
6
 
7
7
  include TwitterAds::DSL
8
8
  include TwitterAds::Resource
9
9
  include TwitterAds::Persistence
10
- include TwitterAds::Analytics
11
10
  include TwitterAds::Batch
12
11
 
13
12
  attr_reader :account
@@ -18,6 +17,7 @@ module TwitterAds
18
17
  property :updated_at, type: :time, read_only: true
19
18
 
20
19
  property :advertiser_domain
20
+ property :android_app_store_identifier
21
21
  property :automatically_select_bid
22
22
  property :bid_amount_local_micro
23
23
  property :bid_unit
@@ -26,7 +26,7 @@ module TwitterAds
26
26
  property :charge_by
27
27
  property :end_time, type: :time
28
28
  property :entity_status
29
- property :include_sentiment
29
+ property :ios_app_store_identifier
30
30
  property :name
31
31
  property :objective
32
32
  property :optimization
@@ -40,7 +40,7 @@ module TwitterAds
40
40
  property :advertiser_user_id
41
41
  property :bid_type
42
42
  property :tracking_tags
43
- property :lookalike_expansion
43
+ property :audience_expansion
44
44
 
45
45
  # sdk only
46
46
  property :to_delete, type: :bool
@@ -3,9 +3,7 @@
3
3
  # Author Bob, Nugit
4
4
 
5
5
  module TwitterAds
6
- class OrganicTweet
7
-
8
- include TwitterAds::Analytics
6
+ class OrganicTweet < Analytics
9
7
 
10
8
  end
11
9
  end
@@ -22,7 +22,6 @@ module TwitterAds
22
22
  property :targeting_type
23
23
  property :targeting_value
24
24
  property :tailored_audience_expansion, type: :bool
25
- property :tailored_audience_type
26
25
  property :location_type
27
26
 
28
27
  # sdk only
@@ -2,66 +2,21 @@
2
2
  # Copyright (C) 2019 Twitter, Inc.
3
3
 
4
4
  module TwitterAds
5
- module Tweet
5
+ class Tweet < Analytics
6
6
 
7
- # cannot instaniate Tweet, only including class methods for stats
8
- extend TwitterAds::Analytics::ClassMethods
9
-
10
- RESOURCE_COLLECTION = "/#{TwitterAds::API_VERSION}/" \
11
- 'accounts/%{account_id}/tweet/preview' # @api private
12
- RESOURCE = "/#{TwitterAds::API_VERSION}/" \
13
- 'accounts/%{account_id}/tweet/preview/%{id}' # @api private
14
- RESOURCE_CREATE = "/#{TwitterAds::API_VERSION}/" \
15
- 'accounts/%{account_id}/tweet' # @api private
7
+ RESOURCE_CREATE = "/#{TwitterAds::API_VERSION}/" \
8
+ 'accounts/%{account_id}/tweet' # @api private
16
9
 
17
10
  class << self
18
11
 
19
- # Returns an HTML preview of a tweet, either new or existing
20
- #
21
- # @example
22
- # Tweet.preview(account, text: 'potatoes can be deadly...')
23
- # Tweet.preview(account, id: 634798319504617472)
24
- #
25
- # @param client [Client] The Client object instance.
26
- # @param account [Account] The Account object instance.
27
- # @param opts [Hash] A hash of options.
28
- #
29
- # @option opts [Integer] :id The ID of an existing Tweet you want to preview.
30
- # @option opts [String] :text The text of your status update.
31
- # @option opts [Array] :media_ids A list of up to four media IDs to associate with the Tweet.
32
- # @option opts [String] :card_id The base-36 ID of a revenue card to be embedded in the Tweet.
33
- # @option opts [String] :preview_target The target to render the Tweet preview
34
- # for (eg. TWITTER_TIMELINES).
35
- #
36
- # @return [Array] An array containing platforms & their respective tweet previews
37
- #
38
- # @since 0.2.0
39
- # @see https://dev.twitter.com/ads/reference/get/accounts/%3Aaccount_id/tweet/preview
40
- def preview(account, opts = {})
41
- resource = opts.key?(:id) ? RESOURCE : RESOURCE_COLLECTION
42
- resource = resource % { account_id: account.id, id: opts.delete(:id) }
43
-
44
- # url encodes status message if present
45
- opts[:text] = URI.escape(opts[:text]) if opts.key?(:text)
46
-
47
- # handles array to string conversion for media IDs
48
- if opts.key?(:media_ids) && opts[:media_ids].respond_to?(:join)
49
- opts[:media_ids] = opts[:media_ids].join(',')
50
- end
51
-
52
- response = TwitterAds::Request.new(account.client, :get, resource, params: opts).perform
53
- response.body[:data]
54
- end
55
-
56
12
  # Creates a "Promoted-Only" Tweet using the specialized Ads API end point.
57
13
  #
58
14
  # @param opts [Hash] A hash of options.
59
15
  #
60
16
  # @option opts [String] :text The main Tweet body.
61
- # @option opts [Array] :media_ids A list of up to four media IDs to associate with the Tweet.
17
+ # @option opts [Array] :media_keys A list of media keys (up to 4) to associate with the Tweet.
62
18
  # @option opts [Integer] :as_user_id The user ID whom you are posting the Tweet on behalf of.
63
19
  # @option opts [Boolean] :trim_user Excludes the user object from the hydrated Tweet response.
64
- # @option opts [String] :video_id The Video UUID to be associated with thie Tweet.
65
20
  # @option opts [String] :video_title An optional title to be included.
66
21
  # @option opts [String] :video_description An optional description to be included.
67
22
  # @option opts [String] :video_cta An optional CTA value for the associated video.