yt 0.30.1 → 0.31.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +16 -1
- data/lib/yt/associations/has_reports.rb +2 -2
- data/lib/yt/collections/reports.rb +13 -1
- data/lib/yt/models/channel.rb +1 -4
- data/lib/yt/models/video.rb +0 -3
- data/lib/yt/models/video_group.rb +0 -3
- data/lib/yt/version.rb +1 -1
- data/spec/requests/as_content_owner/channel_spec.rb +2 -52
- data/spec/requests/as_content_owner/video_group_spec.rb +1 -1
- data/spec/requests/as_content_owner/video_spec.rb +12 -32
- data/yt.gemspec +1 -1
- 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: a91b5314ec281538331cb88409f06f7f40c35480
|
4
|
+
data.tar.gz: f1efe786ae1b22c549374e7cf9530c02066e9864
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 296e9759c4daefafb703eaa4522a4171a026997acbbc643c6b758fbfca35b75073377fdc92cfc178b27a29b010b7a3ffea3cbc5cc91dadcc3ef7efc7d8b13149
|
7
|
+
data.tar.gz: 83eea64183b8516e94050821269a0f444698c5c0e75f32d0f8d5e9f93e43987c7116175ec02619fb774183e87e7d551c319b7dc8cc8543a11c7004e0121959d2
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,21 @@ 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.31.1 - 2017-06-03
|
10
|
+
|
11
|
+
* [FEATURE] Add `by: :youtube_product` option for reports.
|
12
|
+
* [FEATURE] Add `Yt::Collections::Reports::YOUTUBE_PRODUCTS` to list all YouTube products (KIDS, GAMING, etc) supported by YouTube Analytics API.
|
13
|
+
* [FEATURE] Add more operating system dimensions to `Yt::Collections::Reports::OPERATING_SYSTEMS`.
|
14
|
+
|
15
|
+
## 0.31.0 - 2017-06-02
|
16
|
+
|
17
|
+
**How to upgrade**
|
18
|
+
|
19
|
+
If your code calls `.uniques` it should be removed because this metric has been
|
20
|
+
no longer supported by YouTube API as of [October 31, 2016](https://developers.google.com/youtube/analytics/revision_history#september-27-2016).
|
21
|
+
|
22
|
+
* [REMOVAL] Remove `#uniques` method for channels, videos and video groups.
|
23
|
+
|
9
24
|
## 0.30.1 - 2017-04-14
|
10
25
|
|
11
26
|
* [IMPROVEMENT] Retry 3 times if YouTube responds with 503 Backend Error
|
@@ -44,7 +59,7 @@ Finally note that this also remove the class `Yt::Description`. This class
|
|
44
59
|
was private API, so this change should not affect developers.
|
45
60
|
|
46
61
|
* [REMOVAL] Remove the option to initialize resources by URL.
|
47
|
-
* [REMOVAL] Remove
|
62
|
+
* [REMOVAL] Remove `Yt::Resource.username`
|
48
63
|
* [REMOVAL] Remove `Yt::URL` (extracted into separate gem)
|
49
64
|
* [REMOVAL] Remove `Yt::Description` (now simply a String).
|
50
65
|
|
@@ -243,7 +243,7 @@ module Yt
|
|
243
243
|
|
244
244
|
only = options.fetch :only, []
|
245
245
|
reports = Collections::Reports.of(self).tap do |reports|
|
246
|
-
reports.metrics =
|
246
|
+
reports.metrics = self.class.instance_variable_get(:@metrics).select{|k, v| k.in? only}
|
247
247
|
end
|
248
248
|
reports.within date_range, country, state, dimension, videos
|
249
249
|
end unless defined?(reports)
|
@@ -310,4 +310,4 @@ module Yt
|
|
310
310
|
end
|
311
311
|
end
|
312
312
|
end
|
313
|
-
end
|
313
|
+
end
|
@@ -19,6 +19,7 @@ module Yt
|
|
19
19
|
hash[:playlist] = {name: 'playlist', parse: ->(playlist_id, *values) { @metrics.keys.zip(values.map{|v| {playlist_id => v}}).to_h} }
|
20
20
|
hash[:device_type] = {name: 'deviceType', parse: ->(type, *values) {@metrics.keys.zip(values.map{|v| {DEVICE_TYPES.key(type) => v}}).to_h} }
|
21
21
|
hash[:operating_system] = {name: 'operatingSystem', parse: ->(os, *values) {@metrics.keys.zip(values.map{|v| {OPERATING_SYSTEMS.key(os) => v}}).to_h} }
|
22
|
+
hash[:youtube_product] = {name: 'youtubeProduct', parse: ->(product, *values) {@metrics.keys.zip(values.map{|v| {YOUTUBE_PRODUCTS.key(product) => v}}).to_h} }
|
22
23
|
hash[:country] = {name: 'country', parse: ->(country_code, *values) { @metrics.keys.zip(values.map{|v| {country_code => v}}).to_h} }
|
23
24
|
hash[:state] = {name: 'province', parse: ->(country_and_state_code, *values) { @metrics.keys.zip(values.map{|v| {country_and_state_code[3..-1] => v}}).to_h} }
|
24
25
|
hash[:gender_age_group] = {name: 'gender,ageGroup', parse: ->(gender, *values) { [gender.downcase.to_sym, *values] }}
|
@@ -68,6 +69,14 @@ module Yt
|
|
68
69
|
unsubscribed: 'UNSUBSCRIBED'
|
69
70
|
}
|
70
71
|
|
72
|
+
# @see https://developers.google.com/youtube/analytics/v1/dimsmets/dims#youtubeProduct
|
73
|
+
YOUTUBE_PRODUCTS = {
|
74
|
+
core: 'CORE',
|
75
|
+
gaming: 'GAMING',
|
76
|
+
kids: 'KIDS',
|
77
|
+
unknown: 'UNKNOWN'
|
78
|
+
}
|
79
|
+
|
71
80
|
# @see https://developers.google.com/youtube/analytics/v1/dimsmets/dims#Device_Dimensions
|
72
81
|
DEVICE_TYPES = {
|
73
82
|
desktop: 'DESKTOP',
|
@@ -85,6 +94,7 @@ module Yt
|
|
85
94
|
blackberry: 'BLACKBERRY',
|
86
95
|
chromecast: 'CHROMECAST',
|
87
96
|
docomo: 'DOCOMO',
|
97
|
+
firefox: 'FIREFOX',
|
88
98
|
hiptop: 'HIPTOP',
|
89
99
|
ios: 'IOS',
|
90
100
|
linux: 'LINUX',
|
@@ -94,8 +104,10 @@ module Yt
|
|
94
104
|
other: 'OTHER',
|
95
105
|
playstation: 'PLAYSTATION',
|
96
106
|
playstation_vita: 'PLAYSTATION_VITA',
|
107
|
+
realmedia: 'REALMEDIA',
|
97
108
|
smart_tv: 'SMART_TV',
|
98
109
|
symbian: 'SYMBIAN',
|
110
|
+
tizen: 'TIZEN',
|
99
111
|
webos: 'WEBOS',
|
100
112
|
wii: 'WII',
|
101
113
|
windows: 'WINDOWS',
|
@@ -107,9 +119,9 @@ module Yt
|
|
107
119
|
|
108
120
|
def within(days_range, country, state, dimension, videos, max_retries = 3)
|
109
121
|
@days_range = days_range
|
110
|
-
@dimension = dimension
|
111
122
|
@country = country
|
112
123
|
@state = state
|
124
|
+
@dimension = dimension
|
113
125
|
@videos = videos
|
114
126
|
if dimension == :gender_age_group # array of array
|
115
127
|
Hash.new{|h,k| h[k] = Hash.new 0.0}.tap do |hash|
|
data/lib/yt/models/channel.rb
CHANGED
@@ -114,9 +114,6 @@ module Yt
|
|
114
114
|
# @macro report_by_channel_dimensions
|
115
115
|
has_report :views, Integer
|
116
116
|
|
117
|
-
# @macro report_by_day
|
118
|
-
has_report :uniques, Integer
|
119
|
-
|
120
117
|
# @macro report_by_channel_dimensions
|
121
118
|
has_report :estimated_minutes_watched, Integer
|
122
119
|
|
@@ -317,4 +314,4 @@ module Yt
|
|
317
314
|
end
|
318
315
|
end
|
319
316
|
end
|
320
|
-
end
|
317
|
+
end
|
data/lib/yt/models/video.rb
CHANGED
data/lib/yt/version.rb
CHANGED
@@ -11,7 +11,7 @@ describe Yt::Channel, :partner do
|
|
11
11
|
let(:id) { ENV['YT_TEST_PARTNER_CHANNEL_ID'] }
|
12
12
|
|
13
13
|
describe 'multiple reports can be retrieved at once' do
|
14
|
-
metrics = {views: Integer,
|
14
|
+
metrics = {views: Integer,
|
15
15
|
estimated_minutes_watched: Integer, comments: Integer, likes: Integer,
|
16
16
|
dislikes: Integer, shares: Integer, subscribers_gained: Integer,
|
17
17
|
subscribers_lost: Integer,
|
@@ -59,7 +59,7 @@ describe Yt::Channel, :partner do
|
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
62
|
-
[:views, :
|
62
|
+
[:views, :comments, :likes, :dislikes, :shares,
|
63
63
|
:subscribers_gained, :subscribers_lost,
|
64
64
|
:videos_added_to_playlists, :videos_removed_from_playlists,
|
65
65
|
:estimated_minutes_watched, :average_view_duration,
|
@@ -487,56 +487,6 @@ describe Yt::Channel, :partner do
|
|
487
487
|
end
|
488
488
|
end
|
489
489
|
|
490
|
-
describe 'uniques can be retrieved for a single country' do
|
491
|
-
let(:country_code) { 'US' }
|
492
|
-
let(:uniques) { channel.uniques since: date, by: by, in: location }
|
493
|
-
let(:date) { 4.days.ago }
|
494
|
-
|
495
|
-
context 'and grouped by day' do
|
496
|
-
let(:by) { :day }
|
497
|
-
|
498
|
-
context 'with the :in option set to the country code' do
|
499
|
-
let(:location) { country_code }
|
500
|
-
it { expect(uniques.keys.min).to eq date.to_date }
|
501
|
-
end
|
502
|
-
|
503
|
-
context 'with the :in option set to {country: country code}' do
|
504
|
-
let(:location) { {country: country_code} }
|
505
|
-
it { expect(uniques.keys.min).to eq date.to_date }
|
506
|
-
end
|
507
|
-
end
|
508
|
-
end
|
509
|
-
|
510
|
-
describe 'uniques can be retrieved for a single US state' do
|
511
|
-
let(:state_code) { 'NY' }
|
512
|
-
let(:result) { channel.uniques since: date, by: by, in: location }
|
513
|
-
let(:date) { 4.days.ago }
|
514
|
-
|
515
|
-
context 'and grouped by day' do
|
516
|
-
let(:by) { :day }
|
517
|
-
|
518
|
-
context 'with the :in option set to {state: state code}' do
|
519
|
-
let(:location) { {state: state_code} }
|
520
|
-
it { expect(result.keys.min).to eq date.to_date }
|
521
|
-
end
|
522
|
-
|
523
|
-
context 'with the :in option set to {country: "US", state: state code}' do
|
524
|
-
let(:location) { {country: 'US', state: state_code} }
|
525
|
-
it { expect(result.keys.min).to eq date.to_date }
|
526
|
-
end
|
527
|
-
end
|
528
|
-
end
|
529
|
-
|
530
|
-
describe 'uniques can be grouped by day' do
|
531
|
-
let(:range) { {since: 4.days.ago.to_date, until: 3.days.ago.to_date} }
|
532
|
-
let(:keys) { range.values }
|
533
|
-
|
534
|
-
specify 'with the :by option set to :day' do
|
535
|
-
uniques = channel.uniques range.merge by: :day
|
536
|
-
expect(uniques.keys).to eq range.values
|
537
|
-
end
|
538
|
-
end
|
539
|
-
|
540
490
|
describe 'comments can be retrieved for a single country' do
|
541
491
|
let(:country_code) { 'US' }
|
542
492
|
let(:comments) { channel.comments since: date, by: by, in: location }
|
@@ -62,7 +62,7 @@ describe Yt::VideoGroup, :partner do
|
|
62
62
|
end
|
63
63
|
|
64
64
|
describe 'multiple reports can be retrieved at once' do
|
65
|
-
metrics = {views: Integer,
|
65
|
+
metrics = {views: Integer,
|
66
66
|
estimated_minutes_watched: Integer, comments: Integer, likes: Integer,
|
67
67
|
dislikes: Integer, shares: Integer, subscribers_gained: Integer,
|
68
68
|
subscribers_lost: Integer,
|
@@ -13,7 +13,7 @@ describe Yt::Video, :partner do
|
|
13
13
|
it { expect{video.advertising_options_set}.not_to raise_error }
|
14
14
|
end
|
15
15
|
|
16
|
-
[:views, :
|
16
|
+
[:views, :comments, :likes, :dislikes, :shares,
|
17
17
|
:subscribers_gained, :subscribers_lost,
|
18
18
|
:videos_added_to_playlists, :videos_removed_from_playlists,
|
19
19
|
:estimated_minutes_watched, :average_view_duration,
|
@@ -174,7 +174,7 @@ describe Yt::Video, :partner do
|
|
174
174
|
end
|
175
175
|
|
176
176
|
describe 'multiple reports can be retrieved at once' do
|
177
|
-
metrics = {views: Integer,
|
177
|
+
metrics = {views: Integer,
|
178
178
|
estimated_minutes_watched: Integer, comments: Integer, likes: Integer,
|
179
179
|
dislikes: Integer, shares: Integer, subscribers_gained: Integer,
|
180
180
|
subscribers_lost: Integer,
|
@@ -369,6 +369,16 @@ describe Yt::Video, :partner do
|
|
369
369
|
end
|
370
370
|
end
|
371
371
|
|
372
|
+
describe 'views can be grouped by YouTube product' do
|
373
|
+
let(:keys) { Yt::Collections::Reports::YOUTUBE_PRODUCTS.keys }
|
374
|
+
|
375
|
+
specify 'with the :by option set to :youtube_product' do
|
376
|
+
views = video.views by: :youtube_product
|
377
|
+
expect(views.keys - keys).to be_empty
|
378
|
+
expect(views.values).to all(be_an Integer)
|
379
|
+
end
|
380
|
+
end
|
381
|
+
|
372
382
|
describe 'views can be grouped by country' do
|
373
383
|
let(:range) { {since: ENV['YT_TEST_PARTNER_VIDEO_DATE']} }
|
374
384
|
|
@@ -412,36 +422,6 @@ describe Yt::Video, :partner do
|
|
412
422
|
end
|
413
423
|
end
|
414
424
|
|
415
|
-
describe 'uniques can be retrieved for a single US state' do
|
416
|
-
let(:state_code) { 'NY' }
|
417
|
-
let(:result) { video.uniques since: date, by: by, in: location }
|
418
|
-
let(:date) { 4.days.ago }
|
419
|
-
|
420
|
-
context 'and grouped by day' do
|
421
|
-
let(:by) { :day }
|
422
|
-
|
423
|
-
context 'with the :in option set to {state: state code}' do
|
424
|
-
let(:location) { {state: state_code} }
|
425
|
-
it { expect(result.keys.min).to eq date.to_date }
|
426
|
-
end
|
427
|
-
|
428
|
-
context 'with the :in option set to {country: "US", state: state code}' do
|
429
|
-
let(:location) { {country: 'US', state: state_code} }
|
430
|
-
it { expect(result.keys.min).to eq date.to_date }
|
431
|
-
end
|
432
|
-
end
|
433
|
-
end
|
434
|
-
|
435
|
-
describe 'uniques can be grouped by day' do
|
436
|
-
let(:range) { {since: 4.days.ago.to_date, until: 3.days.ago.to_date} }
|
437
|
-
let(:keys) { range.values }
|
438
|
-
|
439
|
-
specify 'with the :by option set to :day' do
|
440
|
-
uniques = video.uniques range.merge by: :day
|
441
|
-
expect(uniques.keys).to eq range.values
|
442
|
-
end
|
443
|
-
end
|
444
|
-
|
445
425
|
describe 'comments can be grouped by day' do
|
446
426
|
let(:range) { {since: 4.days.ago.to_date, until: 3.days.ago.to_date} }
|
447
427
|
let(:keys) { range.values }
|
data/yt.gemspec
CHANGED
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.31.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Claudio Baccigalupo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-06-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|