twitter-ads 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +2 -0
  4. data/CONTRIBUTING.md +77 -0
  5. data/LICENSE +22 -0
  6. data/README.md +111 -0
  7. data/Rakefile +86 -0
  8. data/bin/twitter-ads +42 -0
  9. data/lib/twitter-ads.rb +54 -0
  10. data/lib/twitter-ads/account.rb +229 -0
  11. data/lib/twitter-ads/audiences/tailored_audience.rb +177 -0
  12. data/lib/twitter-ads/campaign/app_list.rb +42 -0
  13. data/lib/twitter-ads/campaign/campaign.rb +40 -0
  14. data/lib/twitter-ads/campaign/funding_instrument.rb +33 -0
  15. data/lib/twitter-ads/campaign/line_item.rb +91 -0
  16. data/lib/twitter-ads/campaign/promotable_user.rb +28 -0
  17. data/lib/twitter-ads/campaign/targeting_criteria.rb +77 -0
  18. data/lib/twitter-ads/campaign/tweet.rb +83 -0
  19. data/lib/twitter-ads/client.rb +92 -0
  20. data/lib/twitter-ads/creative/app_download_card.rb +44 -0
  21. data/lib/twitter-ads/creative/image_app_download_card.rb +44 -0
  22. data/lib/twitter-ads/creative/image_conversation_card.rb +44 -0
  23. data/lib/twitter-ads/creative/lead_gen_card.rb +46 -0
  24. data/lib/twitter-ads/creative/promoted_account.rb +38 -0
  25. data/lib/twitter-ads/creative/promoted_tweet.rb +87 -0
  26. data/lib/twitter-ads/creative/video.rb +43 -0
  27. data/lib/twitter-ads/creative/video_app_download_card.rb +47 -0
  28. data/lib/twitter-ads/creative/video_conversation_card.rb +46 -0
  29. data/lib/twitter-ads/creative/website_card.rb +48 -0
  30. data/lib/twitter-ads/cursor.rb +127 -0
  31. data/lib/twitter-ads/enum.rb +135 -0
  32. data/lib/twitter-ads/error.rb +93 -0
  33. data/lib/twitter-ads/http/request.rb +127 -0
  34. data/lib/twitter-ads/http/response.rb +74 -0
  35. data/lib/twitter-ads/http/ton_upload.rb +140 -0
  36. data/lib/twitter-ads/legacy.rb +7 -0
  37. data/lib/twitter-ads/resources/analytics.rb +90 -0
  38. data/lib/twitter-ads/resources/dsl.rb +108 -0
  39. data/lib/twitter-ads/resources/persistence.rb +43 -0
  40. data/lib/twitter-ads/resources/resource.rb +92 -0
  41. data/lib/twitter-ads/targeting/reach_estimate.rb +69 -0
  42. data/lib/twitter-ads/utils.rb +76 -0
  43. data/lib/twitter-ads/version.rb +6 -0
  44. data/spec/fixtures/accounts_all.json +65 -0
  45. data/spec/fixtures/accounts_features.json +18 -0
  46. data/spec/fixtures/accounts_load.json +19 -0
  47. data/spec/fixtures/app_lists_all.json +22 -0
  48. data/spec/fixtures/app_lists_load.json +31 -0
  49. data/spec/fixtures/campaigns_all.json +208 -0
  50. data/spec/fixtures/campaigns_load.json +27 -0
  51. data/spec/fixtures/funding_instruments_all.json +74 -0
  52. data/spec/fixtures/funding_instruments_load.json +28 -0
  53. data/spec/fixtures/line_items_all.json +292 -0
  54. data/spec/fixtures/line_items_load.json +36 -0
  55. data/spec/fixtures/placements.json +35 -0
  56. data/spec/fixtures/promotable_users_all.json +57 -0
  57. data/spec/fixtures/promotable_users_load.json +18 -0
  58. data/spec/fixtures/promoted_tweets_all.json +212 -0
  59. data/spec/fixtures/promoted_tweets_load.json +19 -0
  60. data/spec/fixtures/reach_estimate.json +19 -0
  61. data/spec/fixtures/tailored_audiences_all.json +67 -0
  62. data/spec/fixtures/tailored_audiences_load.json +29 -0
  63. data/spec/fixtures/tweet_preview.json +24 -0
  64. data/spec/fixtures/videos_all.json +50 -0
  65. data/spec/fixtures/videos_load.json +22 -0
  66. data/spec/quality_spec.rb +15 -0
  67. data/spec/shared/properties.rb +20 -0
  68. data/spec/spec_helper.rb +61 -0
  69. data/spec/support/helpers.rb +42 -0
  70. data/spec/twitter-ads/account_spec.rb +315 -0
  71. data/spec/twitter-ads/audiences/tailored_audience_spec.rb +45 -0
  72. data/spec/twitter-ads/campaign/app_list_spec.rb +108 -0
  73. data/spec/twitter-ads/campaign/line_item_spec.rb +95 -0
  74. data/spec/twitter-ads/campaign/reach_estimate_spec.rb +98 -0
  75. data/spec/twitter-ads/campaign/targeting_criteria_spec.rb +39 -0
  76. data/spec/twitter-ads/campaign/tweet_spec.rb +83 -0
  77. data/spec/twitter-ads/client_spec.rb +115 -0
  78. data/spec/twitter-ads/creative/app_download_card_spec.rb +44 -0
  79. data/spec/twitter-ads/creative/image_app_download_card_spec.rb +43 -0
  80. data/spec/twitter-ads/creative/image_conversation_card_spec.rb +40 -0
  81. data/spec/twitter-ads/creative/lead_gen_card_spec.rb +46 -0
  82. data/spec/twitter-ads/creative/promoted_account_spec.rb +30 -0
  83. data/spec/twitter-ads/creative/promoted_tweet_spec.rb +46 -0
  84. data/spec/twitter-ads/creative/video_app_download_card_spec.rb +42 -0
  85. data/spec/twitter-ads/creative/video_conversation_card_spec.rb +52 -0
  86. data/spec/twitter-ads/creative/video_legacy_spec.rb +43 -0
  87. data/spec/twitter-ads/creative/video_spec.rb +43 -0
  88. data/spec/twitter-ads/creative/website_card_spec.rb +37 -0
  89. data/spec/twitter-ads/cursor_spec.rb +67 -0
  90. data/spec/twitter-ads/placements_spec.rb +36 -0
  91. data/spec/twitter-ads/utils_spec.rb +101 -0
  92. data/twitter-ads.gemspec +37 -0
  93. metadata +247 -0
  94. metadata.gz.sig +0 -0
@@ -0,0 +1,36 @@
1
+ {
2
+ "data_type": "line_item",
3
+ "data": {
4
+ "placement_type": "PROMOTED_ACCOUNT",
5
+ "bid_type": "MAX",
6
+ "name": "Untitled",
7
+ "placements": [
8
+ "ALL_ON_TWITTER"
9
+ ],
10
+ "bid_amount_local_micro": 2000000,
11
+ "automatically_select_bid": false,
12
+ "advertiser_domain": null,
13
+ "primary_web_event_tag": null,
14
+ "charge_by": "ENGAGEMENT",
15
+ "product_type": "PROMOTED_ACCOUNT",
16
+ "bid_unit": "ENGAGEMENT",
17
+ "total_budget_amount_local_micro": null,
18
+ "objective": "CUSTOM",
19
+ "id": "bw2",
20
+ "paused": false,
21
+ "account_id": "2iqph",
22
+ "optimization": "DEFAULT",
23
+ "categories": [],
24
+ "currency": "USD",
25
+ "created_at": "2011-07-11T20:36:11Z",
26
+ "updated_at": "2011-09-04T19:39:51Z",
27
+ "include_sentiment": null,
28
+ "campaign_id": "2wap7",
29
+ "deleted": false
30
+ },
31
+ "request": {
32
+ "params": {
33
+ "account_id": "2iqph"
34
+ }
35
+ }
36
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "data_type": "placement",
3
+ "data": [
4
+ {
5
+ "product_type": "PROMOTED_TWEETS",
6
+ "placements": [
7
+ [
8
+ "ALL_ON_TWITTER"
9
+ ],
10
+ [
11
+ "ALL_ON_TWITTER",
12
+ "PUBLISHER_NETWORK"
13
+ ],
14
+ [
15
+ "PUBLISHER_NETWORK"
16
+ ],
17
+ [
18
+ "PUBLISHER_NETWORK",
19
+ "TWITTER_TIMELINE"
20
+ ],
21
+ [
22
+ "TWITTER_SEARCH"
23
+ ],
24
+ [
25
+ "TWITTER_TIMELINE"
26
+ ]
27
+ ]
28
+ }
29
+ ],
30
+ "request": {
31
+ "params": {
32
+ "product_type": "PROMOTED_TWEETS"
33
+ }
34
+ }
35
+ }
@@ -0,0 +1,57 @@
1
+ {
2
+ "request": {
3
+ "params": {
4
+ "account_id": "2iqph"
5
+ }
6
+ },
7
+ "data": [
8
+ {
9
+ "user_id": "330677333",
10
+ "id": "4k",
11
+ "account_id": "2iqph",
12
+ "created_at": "2011-11-14T21:26:54Z",
13
+ "updated_at": "2014-07-30T23:49:23Z",
14
+ "deleted": false,
15
+ "promotable_user_type": "FULL"
16
+ },
17
+ {
18
+ "user_id": "154303893",
19
+ "id": "5ze",
20
+ "account_id": "2iqph",
21
+ "created_at": "2012-04-23T16:02:08Z",
22
+ "updated_at": "2014-05-20T19:07:17Z",
23
+ "deleted": false,
24
+ "promotable_user_type": "RETWEETS_ONLY"
25
+ },
26
+ {
27
+ "user_id": "16088304",
28
+ "id": "2jbq3",
29
+ "account_id": "2iqph",
30
+ "created_at": "2013-08-21T10:31:01Z",
31
+ "updated_at": "2014-05-20T12:35:01Z",
32
+ "deleted": false,
33
+ "promotable_user_type": "RETWEETS_ONLY"
34
+ },
35
+ {
36
+ "user_id": "14216557",
37
+ "id": "2jlym",
38
+ "account_id": "2iqph",
39
+ "created_at": "2013-09-04T22:36:24Z",
40
+ "updated_at": "2014-05-20T20:09:11Z",
41
+ "deleted": false,
42
+ "promotable_user_type": "RETWEETS_ONLY"
43
+ },
44
+ {
45
+ "user_id": "312226591",
46
+ "id": "2kuyo",
47
+ "account_id": "2iqph",
48
+ "created_at": "2013-09-12T22:59:10Z",
49
+ "updated_at": "2014-05-22T14:36:22Z",
50
+ "deleted": false,
51
+ "promotable_user_type": "RETWEETS_ONLY"
52
+ }
53
+ ],
54
+ "data_type": "promotable_user",
55
+ "total_count": 5,
56
+ "next_cursor": null
57
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "request": {
3
+ "params": {
4
+ "promotable_user_id": "4k",
5
+ "account_id": "2iqph"
6
+ }
7
+ },
8
+ "data_type": "promotable_user",
9
+ "data": {
10
+ "user_id": "330677333",
11
+ "id": "4k",
12
+ "account_id": "2iqph",
13
+ "created_at": "2011-11-14T21:26:54Z",
14
+ "updated_at": "2014-07-30T23:49:23Z",
15
+ "deleted": false,
16
+ "promotable_user_type": "FULL"
17
+ }
18
+ }
@@ -0,0 +1,212 @@
1
+ {
2
+ "request": {
3
+ "params": {
4
+ "account_id": "2iqph"
5
+ }
6
+ },
7
+ "data": [
8
+ {
9
+ "line_item_id": "2b7xw",
10
+ "id": "6thl4",
11
+ "paused": false,
12
+ "created_at": "2015-04-11T20:50:25Z",
13
+ "updated_at": "2015-04-11T20:50:25Z",
14
+ "approval_status": "ACCEPTED",
15
+ "tweet_id": "585127452231467008",
16
+ "deleted": false
17
+ },
18
+ {
19
+ "line_item_id": "2b7xw",
20
+ "id": "6thl3",
21
+ "paused": false,
22
+ "created_at": "2015-04-11T20:50:25Z",
23
+ "updated_at": "2015-04-11T20:50:25Z",
24
+ "approval_status": "ACCEPTED",
25
+ "tweet_id": "586731999949230081",
26
+ "deleted": false
27
+ },
28
+ {
29
+ "line_item_id": "2b7xw",
30
+ "id": "6thl5",
31
+ "paused": false,
32
+ "created_at": "2015-04-11T20:50:25Z",
33
+ "updated_at": "2015-04-11T20:50:25Z",
34
+ "approval_status": "ACCEPTED",
35
+ "tweet_id": "583313515869544448",
36
+ "deleted": false
37
+ },
38
+ {
39
+ "line_item_id": "2b7xw",
40
+ "id": "6thl6",
41
+ "paused": false,
42
+ "created_at": "2015-04-11T20:50:25Z",
43
+ "updated_at": "2015-04-11T20:50:25Z",
44
+ "approval_status": "ACCEPTED",
45
+ "tweet_id": "583081704308396032",
46
+ "deleted": false
47
+ },
48
+ {
49
+ "line_item_id": "2b7xw",
50
+ "id": "6thl7",
51
+ "paused": false,
52
+ "created_at": "2015-04-11T20:50:25Z",
53
+ "updated_at": "2015-04-11T20:50:25Z",
54
+ "approval_status": "ACCEPTED",
55
+ "tweet_id": "583073876369903616",
56
+ "deleted": false
57
+ },
58
+ {
59
+ "line_item_id": "2b7xw",
60
+ "id": "6thl8",
61
+ "paused": false,
62
+ "created_at": "2015-04-11T20:50:25Z",
63
+ "updated_at": "2015-04-11T20:50:25Z",
64
+ "approval_status": "ACCEPTED",
65
+ "tweet_id": "582367545145065472",
66
+ "deleted": false
67
+ },
68
+ {
69
+ "line_item_id": "2b7xw",
70
+ "id": "6thlb",
71
+ "paused": false,
72
+ "created_at": "2015-04-11T20:50:25Z",
73
+ "updated_at": "2015-04-11T20:50:25Z",
74
+ "approval_status": "ACCEPTED",
75
+ "tweet_id": "577486751108853760",
76
+ "deleted": false
77
+ },
78
+ {
79
+ "line_item_id": "2b7xw",
80
+ "id": "6thle",
81
+ "paused": false,
82
+ "created_at": "2015-04-11T20:50:25Z",
83
+ "updated_at": "2015-04-11T20:50:25Z",
84
+ "approval_status": "ACCEPTED",
85
+ "tweet_id": "567096999225622529",
86
+ "deleted": false
87
+ },
88
+ {
89
+ "line_item_id": "2b7xw",
90
+ "id": "6thlf",
91
+ "paused": false,
92
+ "created_at": "2015-04-11T20:50:25Z",
93
+ "updated_at": "2015-04-11T20:50:25Z",
94
+ "approval_status": "ACCEPTED",
95
+ "tweet_id": "558306878145695744",
96
+ "deleted": false
97
+ },
98
+ {
99
+ "line_item_id": "2b7xw",
100
+ "id": "6thlg",
101
+ "paused": false,
102
+ "created_at": "2015-04-11T20:50:25Z",
103
+ "updated_at": "2015-04-11T20:50:25Z",
104
+ "approval_status": "ACCEPTED",
105
+ "tweet_id": "556576716651778048",
106
+ "deleted": false
107
+ },
108
+ {
109
+ "line_item_id": "2b7xw",
110
+ "id": "6thlh",
111
+ "paused": false,
112
+ "created_at": "2015-04-11T20:50:25Z",
113
+ "updated_at": "2015-04-11T20:50:25Z",
114
+ "approval_status": "ACCEPTED",
115
+ "tweet_id": "554808298604883968",
116
+ "deleted": false
117
+ },
118
+ {
119
+ "line_item_id": "2b7xw",
120
+ "id": "6thln",
121
+ "paused": false,
122
+ "created_at": "2015-04-11T20:50:25Z",
123
+ "updated_at": "2015-04-11T20:50:25Z",
124
+ "approval_status": "ACCEPTED",
125
+ "tweet_id": "541420699643285506",
126
+ "deleted": false
127
+ },
128
+ {
129
+ "line_item_id": "2b7xw",
130
+ "id": "6thlo",
131
+ "paused": false,
132
+ "created_at": "2015-04-11T20:50:25Z",
133
+ "updated_at": "2015-04-11T20:50:25Z",
134
+ "approval_status": "ACCEPTED",
135
+ "tweet_id": "540630410880110592",
136
+ "deleted": false
137
+ },
138
+ {
139
+ "line_item_id": "2b7xw",
140
+ "id": "6thlp",
141
+ "paused": false,
142
+ "created_at": "2015-04-11T20:50:25Z",
143
+ "updated_at": "2015-04-11T20:50:25Z",
144
+ "approval_status": "ACCEPTED",
145
+ "tweet_id": "539985554486878208",
146
+ "deleted": false
147
+ },
148
+ {
149
+ "line_item_id": "2b7xw",
150
+ "id": "6thlq",
151
+ "paused": false,
152
+ "created_at": "2015-04-11T20:50:25Z",
153
+ "updated_at": "2015-04-11T20:50:25Z",
154
+ "approval_status": "ACCEPTED",
155
+ "tweet_id": "536352096103432193",
156
+ "deleted": false
157
+ },
158
+ {
159
+ "line_item_id": "2b7xw",
160
+ "id": "6tt7l",
161
+ "paused": false,
162
+ "created_at": "2015-04-12T23:47:44Z",
163
+ "updated_at": "2015-04-12T23:47:44Z",
164
+ "approval_status": "ACCEPTED",
165
+ "tweet_id": "587383478448218112",
166
+ "deleted": false
167
+ },
168
+ {
169
+ "line_item_id": "2b7xw",
170
+ "id": "6tt7m",
171
+ "paused": false,
172
+ "created_at": "2015-04-12T23:47:44Z",
173
+ "updated_at": "2015-04-12T23:47:44Z",
174
+ "approval_status": "ACCEPTED",
175
+ "tweet_id": "587292858576666625",
176
+ "deleted": false
177
+ },
178
+ {
179
+ "line_item_id": "2b7xw",
180
+ "id": "6ugv1",
181
+ "paused": false,
182
+ "created_at": "2015-04-13T22:19:08Z",
183
+ "updated_at": "2015-04-13T22:19:08Z",
184
+ "approval_status": "ACCEPTED",
185
+ "tweet_id": "587741638593753089",
186
+ "deleted": false
187
+ },
188
+ {
189
+ "line_item_id": "2b7xw",
190
+ "id": "6w7b5",
191
+ "paused": false,
192
+ "created_at": "2015-04-16T17:01:56Z",
193
+ "updated_at": "2015-04-16T17:01:56Z",
194
+ "approval_status": "ACCEPTED",
195
+ "tweet_id": "588719630467915777",
196
+ "deleted": false
197
+ },
198
+ {
199
+ "line_item_id": "2dw80",
200
+ "id": "70dbj",
201
+ "paused": false,
202
+ "created_at": "2015-04-23T20:27:27Z",
203
+ "updated_at": "2015-04-23T20:27:27Z",
204
+ "approval_status": "ACCEPTED",
205
+ "tweet_id": "591337582350376961",
206
+ "deleted": false
207
+ }
208
+ ],
209
+ "data_type": "promoted_tweet",
210
+ "total_count": 20,
211
+ "next_cursor": null
212
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "data_type": "promoted_tweet",
3
+ "data": {
4
+ "line_item_id": "2b7xw",
5
+ "id": "6thl4",
6
+ "paused": false,
7
+ "created_at": "2015-04-11T20:50:25Z",
8
+ "updated_at": "2015-04-11T20:50:25Z",
9
+ "approval_status": "ACCEPTED",
10
+ "tweet_id": "585127452231467008",
11
+ "deleted": false
12
+ },
13
+ "request": {
14
+ "params": {
15
+ "promoted_tweet_id": "6thl4",
16
+ "account_id": "2iqph"
17
+ }
18
+ }
19
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "data" : {
3
+ "count" : 1617516,
4
+ "infinite_bid_count" : 1840178
5
+ },
6
+ "data_type" : "reach_estimate",
7
+ "request" : {
8
+ "params" : {
9
+ "objective" : "WEBSITE_CLICKS",
10
+ "gender" : "FEMALE",
11
+ "followers_of_users" : null,
12
+ "product_type" : "PROMOTED_TWEETS",
13
+ "similar_to_followers_of_users" : [
14
+ 2153688540
15
+ ],
16
+ "account_id" : "2iqph"
17
+ }
18
+ }
19
+ }
@@ -0,0 +1,67 @@
1
+ {
2
+ "request": {
3
+ "params": {
4
+ "account_id": "2iqph"
5
+ }
6
+ },
7
+ "data": [
8
+ {
9
+ "targetable": false,
10
+ "name": "TA #2",
11
+ "targetable_types": [
12
+ "WEB",
13
+ "EXCLUDED_WEB"
14
+ ],
15
+ "audience_type": "WEB",
16
+ "id": "abc2",
17
+ "reasons_not_targetable": [
18
+ "TOO_SMALL"
19
+ ],
20
+ "list_type": null,
21
+ "created_at": "2014-03-09T20:35:41Z",
22
+ "updated_at": "2014-06-11T09:38:06Z",
23
+ "partner_source": "OTHER",
24
+ "deleted": false,
25
+ "audience_size": null
26
+ },
27
+ {
28
+ "targetable": true,
29
+ "name": "TA #1",
30
+ "targetable_types": [
31
+ "CRM",
32
+ "EXCLUDED_CRM"
33
+ ],
34
+ "audience_type": "CRM",
35
+ "id": "abc1",
36
+ "reasons_not_targetable": [],
37
+ "list_type": "DEVICE_ID",
38
+ "created_at": "2014-05-22T17:37:12Z",
39
+ "updated_at": "2014-05-22T21:05:33Z",
40
+ "partner_source": "OTHER",
41
+ "deleted": false,
42
+ "audience_size": null
43
+ },
44
+ {
45
+ "targetable": false,
46
+ "name": "TA #3",
47
+ "targetable_types": [
48
+ "CRM",
49
+ "EXCLUDED_CRM"
50
+ ],
51
+ "audience_type": "CRM",
52
+ "id": "abc3",
53
+ "reasons_not_targetable": [
54
+ "TOO_SMALL"
55
+ ],
56
+ "list_type": "EMAIL",
57
+ "created_at": "2014-05-22T21:43:45Z",
58
+ "updated_at": "2014-05-23T02:27:31Z",
59
+ "partner_source": "OTHER",
60
+ "deleted": false,
61
+ "audience_size": null
62
+ }
63
+ ],
64
+ "data_type": "tailored_audiences",
65
+ "total_count": 3,
66
+ "next_cursor": null
67
+ }