yt 0.27.0 → 0.28.0
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 +4 -4
- data/CHANGELOG.md +12 -0
- data/lib/yt.rb +1 -1
- data/lib/yt/associations/has_reports.rb +2 -2
- data/lib/yt/collections/reports.rb +3 -3
- data/lib/yt/models/channel.rb +2 -2
- data/lib/yt/models/video.rb +2 -2
- data/lib/yt/models/video_group.rb +2 -2
- data/lib/yt/version.rb +1 -1
- data/spec/requests/as_account/channel_spec.rb +2 -2
- data/spec/requests/as_account/video_spec.rb +12 -12
- data/spec/requests/as_content_owner/channel_spec.rb +43 -43
- data/spec/requests/as_content_owner/video_group_spec.rb +1 -1
- data/spec/requests/as_content_owner/video_spec.rb +23 -23
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a5e55e68762b528cbc7c42e4fe7e22adf9281696
|
4
|
+
data.tar.gz: 90ee508824b125d5c3870033530892cf55d0f333
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da61fb4dcd83bd430f17be5c41d86fd77c943706ed515644ddefe633753f13d396bcf9c26805c95795881ea8e56fa87377fd41cb4fb9eacbbeaf0f9c46f36c3f
|
7
|
+
data.tar.gz: 4e640d95814a39547d4512ee9bdf5f96bc52370c3b0b70d41c8111f11326343464bf6d64087fed7b843406f5f7ef3d1836164a28241506a02b9eeee233c2b0ee
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,18 @@ For more information about changelogs, check
|
|
6
6
|
[Keep a Changelog](http://keepachangelog.com) and
|
7
7
|
[Vandamme](http://tech-angels.github.io/vandamme).
|
8
8
|
|
9
|
+
## 0.28.0 - 2016-10-18
|
10
|
+
|
11
|
+
**How to upgrade**
|
12
|
+
|
13
|
+
If your code calls `.earnings` and `.impressions`
|
14
|
+
then you must replace that code with `.estimated_revenue` and
|
15
|
+
`.ad_impressions` since those metrics will no longer be supported by
|
16
|
+
YouTube API as of [November 4, 2016](https://developers.google.com/youtube/analytics/revision_history#august-10-2016).
|
17
|
+
|
18
|
+
* [breaking change] Change deprecated `earnings` to `estimated_revenue`
|
19
|
+
* [breaking change] Change deprecated `impressions` to `ad_impressions`
|
20
|
+
|
9
21
|
## 0.27.0 - 2016-10-07
|
10
22
|
|
11
23
|
**How to upgrade**
|
data/lib/yt.rb
CHANGED
@@ -18,7 +18,7 @@ require 'yt/models/advertising_options_set'
|
|
18
18
|
# An object-oriented Ruby client for YouTube.
|
19
19
|
# Helps creating applications that need to interact with YouTube objects.
|
20
20
|
# Inclused methods to access YouTube Data API V3 resources (channels, videos,
|
21
|
-
# ...), YouTube Analytics API V2 resources (metrics,
|
21
|
+
# ...), YouTube Analytics API V2 resources (metrics, estimated_revenue, ...), and
|
22
22
|
# objects not available through the API (annotations).
|
23
23
|
module Yt
|
24
24
|
end
|
@@ -299,11 +299,11 @@ module Yt
|
|
299
299
|
|
300
300
|
def define_all_metric_method(metric, type)
|
301
301
|
define_method "all_#{metric}" do
|
302
|
-
# @note Asking for the "
|
302
|
+
# @note Asking for the "estimated_revenue" metric of a day in which a channel
|
303
303
|
# made 0 USD returns the wrong "nil". But adding to the request the
|
304
304
|
# "estimatedMinutesWatched" metric returns the correct value 0.
|
305
305
|
metrics = {metric => type}
|
306
|
-
metrics[:estimated_minutes_watched] = Integer if metric == :
|
306
|
+
metrics[:estimated_minutes_watched] = Integer if metric == :estimated_revenue
|
307
307
|
Collections::Reports.of(self).tap{|reports| reports.metrics = metrics}
|
308
308
|
end
|
309
309
|
private "all_#{metric}"
|
@@ -136,7 +136,7 @@ module Yt
|
|
136
136
|
elsif dimension.in? [:traffic_source, :country, :state, :playback_location, :device_type, :operating_system, :subscribed_status]
|
137
137
|
hash = hash.transform_values{|h| h.sort_by{|range, v| -v}.to_h}
|
138
138
|
end
|
139
|
-
(@metrics.one? || @metrics.keys == [:
|
139
|
+
(@metrics.one? || @metrics.keys == [:estimated_revenue, :estimated_minutes_watched]) ? hash[@metrics.keys.first] : hash
|
140
140
|
end
|
141
141
|
# NOTE: Once in a while, YouTube responds with 400 Error and the message
|
142
142
|
# "Invalid query. Query did not conform to the expectations."; in this
|
@@ -179,8 +179,8 @@ module Yt
|
|
179
179
|
params['max-results'] = 50 if @dimension.in? [:playlist, :video]
|
180
180
|
params['max-results'] = 25 if @dimension.in? [:embedded_player_location, :related_video, :search_term, :referrer]
|
181
181
|
if @dimension.in? [:video, :playlist, :embedded_player_location, :related_video, :search_term, :referrer]
|
182
|
-
if @metrics.keys == [:
|
183
|
-
params['sort'] = '-
|
182
|
+
if @metrics.keys == [:estimated_revenue, :estimated_minutes_watched]
|
183
|
+
params['sort'] = '-estimatedRevenue'
|
184
184
|
else
|
185
185
|
params['sort'] = "-#{@metrics.keys.join(',').to_s.camelize(:lower)}"
|
186
186
|
end
|
data/lib/yt/models/channel.rb
CHANGED
@@ -181,10 +181,10 @@ module Yt
|
|
181
181
|
has_report :card_teaser_click_rate, Float
|
182
182
|
|
183
183
|
# @macro report_by_day_and_country
|
184
|
-
has_report :
|
184
|
+
has_report :estimated_revenue, Float
|
185
185
|
|
186
186
|
# @macro report_by_day_and_country
|
187
|
-
has_report :
|
187
|
+
has_report :ad_impressions, Integer
|
188
188
|
|
189
189
|
# @macro report_by_day_and_country
|
190
190
|
has_report :monetized_playbacks, Integer
|
data/lib/yt/models/video.rb
CHANGED
@@ -464,10 +464,10 @@ module Yt
|
|
464
464
|
has_report :card_teaser_click_rate, Float
|
465
465
|
|
466
466
|
# @macro report_by_day_and_country
|
467
|
-
has_report :
|
467
|
+
has_report :estimated_revenue, Float
|
468
468
|
|
469
469
|
# @macro report_by_day_and_country
|
470
|
-
has_report :
|
470
|
+
has_report :ad_impressions, Integer
|
471
471
|
|
472
472
|
# @macro report_by_day_and_country
|
473
473
|
has_report :monetized_playbacks, Integer
|
@@ -90,10 +90,10 @@ module Yt
|
|
90
90
|
has_report :annotation_close_rate, Float
|
91
91
|
|
92
92
|
# @macro report_by_day_and_country
|
93
|
-
has_report :
|
93
|
+
has_report :estimated_revenue, Float
|
94
94
|
|
95
95
|
# @macro report_by_day_and_country
|
96
|
-
has_report :
|
96
|
+
has_report :ad_impressions, Integer
|
97
97
|
|
98
98
|
# @macro report_by_day_and_country
|
99
99
|
has_report :monetized_playbacks, Integer
|
data/lib/yt/version.rb
CHANGED
@@ -215,8 +215,8 @@ describe Yt::Channel, :device_app do
|
|
215
215
|
expect{channel.card_teaser_clicks}.not_to raise_error
|
216
216
|
expect{channel.card_teaser_click_rate}.not_to raise_error
|
217
217
|
expect{channel.viewer_percentage}.not_to raise_error
|
218
|
-
expect{channel.
|
219
|
-
expect{channel.
|
218
|
+
expect{channel.estimated_revenue}.to raise_error Yt::Errors::Unauthorized
|
219
|
+
expect{channel.ad_impressions}.to raise_error Yt::Errors::Unauthorized
|
220
220
|
expect{channel.monetized_playbacks}.to raise_error Yt::Errors::Unauthorized
|
221
221
|
expect{channel.playback_based_cpm}.to raise_error Yt::Errors::Unauthorized
|
222
222
|
end
|
@@ -305,8 +305,8 @@ describe Yt::Video, :device_app do
|
|
305
305
|
expect{video.card_teaser_clicks}.not_to raise_error
|
306
306
|
expect{video.card_teaser_click_rate}.not_to raise_error
|
307
307
|
expect{video.viewer_percentage}.not_to raise_error
|
308
|
-
expect{video.
|
309
|
-
expect{video.
|
308
|
+
expect{video.estimated_revenue}.to raise_error Yt::Errors::Unauthorized
|
309
|
+
expect{video.ad_impressions}.to raise_error Yt::Errors::Unauthorized
|
310
310
|
expect{video.monetized_playbacks}.to raise_error Yt::Errors::Unauthorized
|
311
311
|
expect{video.playback_based_cpm}.to raise_error Yt::Errors::Unauthorized
|
312
312
|
expect{video.advertising_options_set}.to raise_error Yt::Errors::Forbidden
|
@@ -710,8 +710,8 @@ describe Yt::Video, :device_app do
|
|
710
710
|
expect{video.annotation_click_through_rate}.not_to raise_error
|
711
711
|
expect{video.annotation_close_rate}.not_to raise_error
|
712
712
|
expect{video.viewer_percentage}.not_to raise_error
|
713
|
-
expect{video.
|
714
|
-
expect{video.
|
713
|
+
expect{video.estimated_revenue}.to raise_error Yt::Errors::Unauthorized
|
714
|
+
expect{video.ad_impressions}.to raise_error Yt::Errors::Unauthorized
|
715
715
|
expect{video.monetized_playbacks}.to raise_error Yt::Errors::Unauthorized
|
716
716
|
expect{video.playback_based_cpm}.to raise_error Yt::Errors::Unauthorized
|
717
717
|
expect{video.advertising_options_set}.to raise_error Yt::Errors::Forbidden
|
@@ -1096,8 +1096,8 @@ describe Yt::Video, :device_app do
|
|
1096
1096
|
expect{video.annotation_click_through_rate}.not_to raise_error
|
1097
1097
|
expect{video.annotation_close_rate}.not_to raise_error
|
1098
1098
|
expect{video.viewer_percentage}.not_to raise_error
|
1099
|
-
expect{video.
|
1100
|
-
expect{video.
|
1099
|
+
expect{video.estimated_revenue}.to raise_error Yt::Errors::Unauthorized
|
1100
|
+
expect{video.ad_impressions}.to raise_error Yt::Errors::Unauthorized
|
1101
1101
|
expect{video.monetized_playbacks}.to raise_error Yt::Errors::Unauthorized
|
1102
1102
|
expect{video.playback_based_cpm}.to raise_error Yt::Errors::Unauthorized
|
1103
1103
|
expect{video.advertising_options_set}.to raise_error Yt::Errors::Forbidden
|
@@ -1501,8 +1501,8 @@ describe Yt::Video, :device_app do
|
|
1501
1501
|
expect{video.annotation_click_through_rate}.not_to raise_error
|
1502
1502
|
expect{video.annotation_close_rate}.not_to raise_error
|
1503
1503
|
expect{video.viewer_percentage}.not_to raise_error
|
1504
|
-
expect{video.
|
1505
|
-
expect{video.
|
1504
|
+
expect{video.estimated_revenue}.to raise_error Yt::Errors::Unauthorized
|
1505
|
+
expect{video.ad_impressions}.to raise_error Yt::Errors::Unauthorized
|
1506
1506
|
expect{video.monetized_playbacks}.to raise_error Yt::Errors::Unauthorized
|
1507
1507
|
expect{video.playback_based_cpm}.to raise_error Yt::Errors::Unauthorized
|
1508
1508
|
expect{video.advertising_options_set}.to raise_error Yt::Errors::Forbidden
|
@@ -1906,8 +1906,8 @@ describe Yt::Video, :device_app do
|
|
1906
1906
|
expect{video.annotation_click_through_rate}.not_to raise_error
|
1907
1907
|
expect{video.annotation_close_rate}.not_to raise_error
|
1908
1908
|
expect{video.viewer_percentage}.not_to raise_error
|
1909
|
-
expect{video.
|
1910
|
-
expect{video.
|
1909
|
+
expect{video.estimated_revenue}.to raise_error Yt::Errors::Unauthorized
|
1910
|
+
expect{video.ad_impressions}.to raise_error Yt::Errors::Unauthorized
|
1911
1911
|
expect{video.monetized_playbacks}.to raise_error Yt::Errors::Unauthorized
|
1912
1912
|
expect{video.playback_based_cpm}.to raise_error Yt::Errors::Unauthorized
|
1913
1913
|
expect{video.advertising_options_set}.to raise_error Yt::Errors::Forbidden
|
@@ -2312,8 +2312,8 @@ describe Yt::Video, :device_app do
|
|
2312
2312
|
expect{video.annotation_click_through_rate}.not_to raise_error
|
2313
2313
|
expect{video.annotation_close_rate}.not_to raise_error
|
2314
2314
|
expect{video.viewer_percentage}.not_to raise_error
|
2315
|
-
expect{video.
|
2316
|
-
expect{video.
|
2315
|
+
expect{video.estimated_revenue}.to raise_error Yt::Errors::Unauthorized
|
2316
|
+
expect{video.ad_impressions}.to raise_error Yt::Errors::Unauthorized
|
2317
2317
|
expect{video.monetized_playbacks}.to raise_error Yt::Errors::Unauthorized
|
2318
2318
|
expect{video.playback_based_cpm}.to raise_error Yt::Errors::Unauthorized
|
2319
2319
|
expect{video.advertising_options_set}.to raise_error Yt::Errors::Forbidden
|
@@ -22,7 +22,7 @@ describe Yt::Channel, :partner do
|
|
22
22
|
card_impressions: Integer, card_clicks: Integer,
|
23
23
|
card_click_rate: Float, card_teaser_impressions: Integer,
|
24
24
|
card_teaser_clicks: Integer, card_teaser_click_rate: Float,
|
25
|
-
|
25
|
+
estimated_revenue: Float, ad_impressions: Integer,
|
26
26
|
monetized_playbacks: Integer, playback_based_cpm: Float}
|
27
27
|
specify 'by day, and are chronologically sorted' do
|
28
28
|
range = {since: 5.days.ago.to_date, until: 3.days.ago.to_date}
|
@@ -63,11 +63,11 @@ describe Yt::Channel, :partner do
|
|
63
63
|
:subscribers_gained, :subscribers_lost,
|
64
64
|
:videos_added_to_playlists, :videos_removed_from_playlists,
|
65
65
|
:estimated_minutes_watched, :average_view_duration,
|
66
|
-
:average_view_percentage, :
|
66
|
+
:average_view_percentage, :ad_impressions, :monetized_playbacks,
|
67
67
|
:annotation_clicks, :annotation_click_through_rate,
|
68
68
|
:card_impressions, :card_clicks, :card_click_rate,
|
69
69
|
:card_teaser_impressions, :card_teaser_clicks, :card_teaser_click_rate,
|
70
|
-
:playback_based_cpm, :annotation_close_rate, :
|
70
|
+
:playback_based_cpm, :annotation_close_rate, :estimated_revenue].each do |metric|
|
71
71
|
describe "#{metric} can be retrieved for a range of days" do
|
72
72
|
let(:date_in) { ENV['YT_TEST_PARTNER_VIDEO_DATE'] }
|
73
73
|
let(:date_out) { Date.parse(ENV['YT_TEST_PARTNER_VIDEO_DATE']) + 5 }
|
@@ -126,10 +126,10 @@ describe Yt::Channel, :partner do
|
|
126
126
|
card_click_rate: Float, card_teaser_impressions: Integer,
|
127
127
|
card_teaser_clicks: Integer, card_teaser_click_rate: Float,
|
128
128
|
videos_added_to_playlists: Integer, videos_removed_from_playlists: Integer,
|
129
|
-
average_view_percentage: Float,
|
129
|
+
average_view_percentage: Float, ad_impressions: Integer,
|
130
130
|
shares: Integer, playback_based_cpm: Float,
|
131
131
|
monetized_playbacks: Integer, annotation_close_rate: Float,
|
132
|
-
|
132
|
+
estimated_revenue: Float}.each do |metric, type|
|
133
133
|
describe "#{metric} can be grouped by range" do
|
134
134
|
let(:metric) { metric }
|
135
135
|
|
@@ -151,24 +151,24 @@ describe Yt::Channel, :partner do
|
|
151
151
|
end
|
152
152
|
end
|
153
153
|
|
154
|
-
describe '
|
154
|
+
describe 'estimated_revenue can be retrieved for a specific day' do
|
155
155
|
# NOTE: This test sounds redundant, but it’s actually a reflection of
|
156
156
|
# another irrational behavior of YouTube API. In short, if you ask for
|
157
|
-
# the "
|
158
|
-
# the API returns "nil". But if you also for the "
|
157
|
+
# the "estimated_revenue" metric of a day in which a channel made 0 USD, then
|
158
|
+
# the API returns "nil". But if you also for the "estimated_revenue" metric AND
|
159
159
|
# the "estimatedMinutesWatched" metric, then the API returns the
|
160
160
|
# correct value of "0", while still returning nil for those days in
|
161
|
-
# which the
|
161
|
+
# which the estimated_revenue have not been estimated yet.
|
162
162
|
context 'in which the channel did not make any money' do
|
163
|
-
let(:zero_date) { ENV['
|
164
|
-
let(:
|
165
|
-
it { expect(
|
163
|
+
let(:zero_date) { ENV['YT_TEST_PARTNER_CHANNEL_NO_estimated_revenue_DATE'] }
|
164
|
+
let(:estimated_revenue) { channel.estimated_revenue_on zero_date}
|
165
|
+
it { expect(estimated_revenue).to eq 0 }
|
166
166
|
end
|
167
167
|
end
|
168
168
|
|
169
|
-
describe '
|
169
|
+
describe 'estimated_revenue can be retrieved for a single country' do
|
170
170
|
let(:country_code) { 'US' }
|
171
|
-
let(:
|
171
|
+
let(:estimated_revenue) { channel.estimated_revenue since: date, by: by, in: location }
|
172
172
|
let(:date) { 4.days.ago }
|
173
173
|
|
174
174
|
context 'and grouped by day' do
|
@@ -176,12 +176,12 @@ describe Yt::Channel, :partner do
|
|
176
176
|
|
177
177
|
context 'with the :in option set to the country code' do
|
178
178
|
let(:location) { country_code }
|
179
|
-
it { expect(
|
179
|
+
it { expect(estimated_revenue.keys.min).to eq date.to_date }
|
180
180
|
end
|
181
181
|
|
182
182
|
context 'with the :in option set to {country: country code}' do
|
183
183
|
let(:location) { {country: country_code} }
|
184
|
-
it { expect(
|
184
|
+
it { expect(estimated_revenue.keys.min).to eq date.to_date }
|
185
185
|
end
|
186
186
|
end
|
187
187
|
|
@@ -190,34 +190,34 @@ describe Yt::Channel, :partner do
|
|
190
190
|
|
191
191
|
context 'with the :in option set to the country code' do
|
192
192
|
let(:location) { country_code }
|
193
|
-
it { expect(
|
193
|
+
it { expect(estimated_revenue.keys).to eq [country_code] }
|
194
194
|
end
|
195
195
|
|
196
196
|
context 'with the :in option set to {country: country code}' do
|
197
197
|
let(:location) { {country: country_code} }
|
198
|
-
it { expect(
|
198
|
+
it { expect(estimated_revenue.keys).to eq [country_code] }
|
199
199
|
end
|
200
200
|
end
|
201
201
|
end
|
202
202
|
|
203
|
-
describe '
|
203
|
+
describe 'estimated_revenue can be grouped by day' do
|
204
204
|
let(:range) { {since: 4.days.ago.to_date, until: 3.days.ago.to_date} }
|
205
205
|
let(:keys) { range.values }
|
206
206
|
|
207
207
|
specify 'with the :by option set to :day' do
|
208
|
-
|
209
|
-
expect(
|
208
|
+
estimated_revenue = channel.estimated_revenue range.merge by: :day
|
209
|
+
expect(estimated_revenue.keys).to eq range.values
|
210
210
|
end
|
211
211
|
end
|
212
212
|
|
213
|
-
describe '
|
213
|
+
describe 'estimated_revenue can be grouped by country' do
|
214
214
|
let(:range) { {since: 4.days.ago, until: 3.days.ago} }
|
215
215
|
|
216
216
|
specify 'with the :by option set to :country' do
|
217
|
-
|
218
|
-
expect(
|
219
|
-
expect(
|
220
|
-
expect(
|
217
|
+
estimated_revenue = channel.estimated_revenue range.merge by: :country
|
218
|
+
expect(estimated_revenue.keys).to all(be_a String)
|
219
|
+
expect(estimated_revenue.keys.map(&:length).uniq).to eq [2]
|
220
|
+
expect(estimated_revenue.values).to all(be_a Float)
|
221
221
|
end
|
222
222
|
end
|
223
223
|
|
@@ -1319,9 +1319,9 @@ describe Yt::Channel, :partner do
|
|
1319
1319
|
end
|
1320
1320
|
end
|
1321
1321
|
|
1322
|
-
describe '
|
1322
|
+
describe 'ad_impressions can be retrieved for a single country' do
|
1323
1323
|
let(:country_code) { 'US' }
|
1324
|
-
let(:
|
1324
|
+
let(:ad_impressions) { channel.ad_impressions since: date, by: by, in: location }
|
1325
1325
|
let(:date) { ENV['YT_TEST_PARTNER_PLAYLIST_DATE'] }
|
1326
1326
|
|
1327
1327
|
context 'and grouped by day' do
|
@@ -1329,12 +1329,12 @@ describe Yt::Channel, :partner do
|
|
1329
1329
|
|
1330
1330
|
context 'with the :in option set to the country code' do
|
1331
1331
|
let(:location) { country_code }
|
1332
|
-
it { expect(
|
1332
|
+
it { expect(ad_impressions.keys.min).to eq date.to_date }
|
1333
1333
|
end
|
1334
1334
|
|
1335
1335
|
context 'with the :in option set to {country: country code}' do
|
1336
1336
|
let(:location) { {country: country_code} }
|
1337
|
-
it { expect(
|
1337
|
+
it { expect(ad_impressions.keys.min).to eq date.to_date }
|
1338
1338
|
end
|
1339
1339
|
end
|
1340
1340
|
|
@@ -1343,34 +1343,34 @@ describe Yt::Channel, :partner do
|
|
1343
1343
|
|
1344
1344
|
context 'with the :in option set to the country code' do
|
1345
1345
|
let(:location) { country_code }
|
1346
|
-
it { expect(
|
1346
|
+
it { expect(ad_impressions.keys).to eq [country_code] }
|
1347
1347
|
end
|
1348
1348
|
|
1349
1349
|
context 'with the :in option set to {country: country code}' do
|
1350
1350
|
let(:location) { {country: country_code} }
|
1351
|
-
it { expect(
|
1351
|
+
it { expect(ad_impressions.keys).to eq [country_code] }
|
1352
1352
|
end
|
1353
1353
|
end
|
1354
1354
|
end
|
1355
1355
|
|
1356
|
-
describe '
|
1356
|
+
describe 'ad_impressions can be grouped by day' do
|
1357
1357
|
let(:range) { {since: 4.days.ago.to_date, until: 3.days.ago.to_date} }
|
1358
1358
|
let(:keys) { range.values }
|
1359
1359
|
|
1360
1360
|
specify 'with the :by option set to :day' do
|
1361
|
-
|
1362
|
-
expect(
|
1361
|
+
ad_impressions = channel.ad_impressions range.merge by: :day
|
1362
|
+
expect(ad_impressions.keys).to eq range.values
|
1363
1363
|
end
|
1364
1364
|
end
|
1365
1365
|
|
1366
|
-
describe '
|
1366
|
+
describe 'ad_impressions can be grouped by country' do
|
1367
1367
|
let(:range) { {since: ENV['YT_TEST_PARTNER_PLAYLIST_DATE']} }
|
1368
1368
|
|
1369
1369
|
specify 'with the :by option set to :country' do
|
1370
|
-
|
1371
|
-
expect(
|
1372
|
-
expect(
|
1373
|
-
expect(
|
1370
|
+
ad_impressions = channel.ad_impressions range.merge by: :country
|
1371
|
+
expect(ad_impressions.keys).to all(be_a String)
|
1372
|
+
expect(ad_impressions.keys.map(&:length).uniq).to eq [2]
|
1373
|
+
expect(ad_impressions.values).to all(be_an Integer)
|
1374
1374
|
end
|
1375
1375
|
end
|
1376
1376
|
|
@@ -1872,8 +1872,8 @@ describe Yt::Channel, :partner do
|
|
1872
1872
|
context 'not managed by the authenticated Content Owner' do
|
1873
1873
|
let(:id) { 'UCBR8-60-B28hp2BmDPdntcQ' }
|
1874
1874
|
|
1875
|
-
specify '
|
1876
|
-
expect{channel.
|
1875
|
+
specify 'estimated_revenue and ad_impressions cannot be retrieved' do
|
1876
|
+
expect{channel.estimated_revenue}.to raise_error Yt::Errors::Forbidden
|
1877
1877
|
expect{channel.views}.to raise_error Yt::Errors::Forbidden
|
1878
1878
|
end
|
1879
1879
|
|
@@ -1883,4 +1883,4 @@ describe Yt::Channel, :partner do
|
|
1883
1883
|
end
|
1884
1884
|
end
|
1885
1885
|
end
|
1886
|
-
end
|
1886
|
+
end
|
@@ -60,7 +60,7 @@ describe Yt::VideoGroup, :partner do
|
|
60
60
|
average_view_duration: Integer,
|
61
61
|
average_view_percentage: Float, annotation_clicks: Integer,
|
62
62
|
annotation_click_through_rate: Float,
|
63
|
-
annotation_close_rate: Float,
|
63
|
+
annotation_close_rate: Float, estimated_revenue: Float, ad_impressions: Integer,
|
64
64
|
monetized_playbacks: Integer}
|
65
65
|
|
66
66
|
specify 'by day, and are chronologically sorted' do
|
@@ -17,11 +17,11 @@ describe Yt::Video, :partner do
|
|
17
17
|
:subscribers_gained, :subscribers_lost,
|
18
18
|
:videos_added_to_playlists, :videos_removed_from_playlists,
|
19
19
|
:estimated_minutes_watched, :average_view_duration,
|
20
|
-
:average_view_percentage, :
|
20
|
+
:average_view_percentage, :ad_impressions, :monetized_playbacks,
|
21
21
|
:annotation_clicks, :annotation_click_through_rate, :playback_based_cpm,
|
22
22
|
:card_impressions, :card_clicks, :card_click_rate,
|
23
23
|
:card_teaser_impressions, :card_teaser_clicks, :card_teaser_click_rate,
|
24
|
-
:annotation_close_rate, :
|
24
|
+
:annotation_close_rate, :estimated_revenue].each do |metric|
|
25
25
|
describe "#{metric} can be retrieved for a range of days" do
|
26
26
|
let(:date_in) { ENV['YT_TEST_PARTNER_VIDEO_DATE'] }
|
27
27
|
let(:date_out) { Date.parse(ENV['YT_TEST_PARTNER_VIDEO_DATE']) + 5 }
|
@@ -94,13 +94,13 @@ describe Yt::Video, :partner do
|
|
94
94
|
shares: Integer, subscribers_gained: Integer, subscribers_lost: Integer,
|
95
95
|
videos_added_to_playlists: Integer, videos_removed_from_playlists: Integer,
|
96
96
|
estimated_minutes_watched: Integer, average_view_duration: Integer,
|
97
|
-
average_view_percentage: Float,
|
97
|
+
average_view_percentage: Float, ad_impressions: Integer,
|
98
98
|
monetized_playbacks: Integer, annotation_clicks: Integer,
|
99
99
|
annotation_click_through_rate: Float, annotation_close_rate: Float,
|
100
100
|
card_impressions: Integer, card_clicks: Integer,
|
101
101
|
card_click_rate: Float, card_teaser_impressions: Integer,
|
102
102
|
card_teaser_clicks: Integer, card_teaser_click_rate: Float,
|
103
|
-
|
103
|
+
estimated_revenue: Float}.each do |metric, type|
|
104
104
|
describe "#{metric} can be grouped by range" do
|
105
105
|
let(:metric) { metric }
|
106
106
|
|
@@ -126,11 +126,11 @@ describe Yt::Video, :partner do
|
|
126
126
|
:subscribers_gained, :subscribers_lost,
|
127
127
|
:videos_added_to_playlists, :videos_removed_from_playlists,
|
128
128
|
:estimated_minutes_watched, :average_view_duration,
|
129
|
-
:average_view_percentage, :
|
129
|
+
:average_view_percentage, :ad_impressions, :monetized_playbacks,
|
130
130
|
:card_impressions, :card_clicks, :card_click_rate,
|
131
131
|
:card_teaser_impressions, :card_teaser_clicks, :card_teaser_click_rate,
|
132
132
|
:annotation_clicks, :annotation_click_through_rate,
|
133
|
-
:annotation_close_rate, :
|
133
|
+
:annotation_close_rate, :estimated_revenue].each do |metric|
|
134
134
|
describe "#{metric} can be retrieved for a single country" do
|
135
135
|
let(:result) { video.public_send metric, options }
|
136
136
|
|
@@ -185,7 +185,7 @@ describe Yt::Video, :partner do
|
|
185
185
|
card_click_rate: Float, card_teaser_impressions: Integer,
|
186
186
|
card_teaser_clicks: Integer, card_teaser_click_rate: Float,
|
187
187
|
annotation_click_through_rate: Float,
|
188
|
-
annotation_close_rate: Float,
|
188
|
+
annotation_close_rate: Float, estimated_revenue: Float, ad_impressions: Integer,
|
189
189
|
monetized_playbacks: Integer}
|
190
190
|
|
191
191
|
specify 'by day' do
|
@@ -222,24 +222,24 @@ describe Yt::Video, :partner do
|
|
222
222
|
end
|
223
223
|
end
|
224
224
|
|
225
|
-
describe '
|
225
|
+
describe 'estimated_revenue can be grouped by day' do
|
226
226
|
let(:range) { {since: 4.days.ago.to_date, until: 3.days.ago.to_date} }
|
227
227
|
let(:keys) { range.values }
|
228
228
|
|
229
229
|
specify 'with the :by option set to :day' do
|
230
|
-
|
231
|
-
expect(
|
230
|
+
estimated_revenue = video.estimated_revenue range.merge by: :day
|
231
|
+
expect(estimated_revenue.keys).to eq range.values
|
232
232
|
end
|
233
233
|
end
|
234
234
|
|
235
|
-
describe '
|
235
|
+
describe 'estimated_revenue can be grouped by country' do
|
236
236
|
let(:range) { {since: 4.days.ago, until: 3.days.ago} }
|
237
237
|
|
238
238
|
specify 'with the :by option set to :country' do
|
239
|
-
|
240
|
-
expect(
|
241
|
-
expect(
|
242
|
-
expect(
|
239
|
+
estimated_revenue = video.estimated_revenue range.merge by: :country
|
240
|
+
expect(estimated_revenue.keys).to all(be_a String)
|
241
|
+
expect(estimated_revenue.keys.map(&:length).uniq).to eq [2]
|
242
|
+
expect(estimated_revenue.values).to all(be_a Float)
|
243
243
|
end
|
244
244
|
end
|
245
245
|
|
@@ -874,24 +874,24 @@ describe Yt::Video, :partner do
|
|
874
874
|
end
|
875
875
|
end
|
876
876
|
|
877
|
-
describe '
|
877
|
+
describe 'ad_impressions can be grouped by day' do
|
878
878
|
let(:range) { {since: 4.days.ago.to_date, until: 3.days.ago.to_date} }
|
879
879
|
let(:keys) { range.values }
|
880
880
|
|
881
881
|
specify 'with the :by option set to :day' do
|
882
|
-
|
883
|
-
expect(
|
882
|
+
ad_impressions = video.ad_impressions range.merge by: :day
|
883
|
+
expect(ad_impressions.keys).to eq range.values
|
884
884
|
end
|
885
885
|
end
|
886
886
|
|
887
|
-
describe '
|
887
|
+
describe 'ad_impressions can be grouped by country' do
|
888
888
|
let(:range) { {since: ENV['YT_TEST_PARTNER_VIDEO_DATE']} }
|
889
889
|
|
890
890
|
specify 'with the :by option set to :country' do
|
891
|
-
|
892
|
-
expect(
|
893
|
-
expect(
|
894
|
-
expect(
|
891
|
+
ad_impressions = video.ad_impressions range.merge by: :country
|
892
|
+
expect(ad_impressions.keys).to all(be_a String)
|
893
|
+
expect(ad_impressions.keys.map(&:length).uniq).to eq [2]
|
894
|
+
expect(ad_impressions.values).to all(be_an Integer)
|
895
895
|
end
|
896
896
|
end
|
897
897
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.28.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Claudio Baccigalupo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-10-
|
11
|
+
date: 2016-10-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|