yt 0.15.0 → 0.15.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 +7 -0
- data/README.md +15 -3
- data/lib/yt/models/channel.rb +9 -0
- data/lib/yt/models/video.rb +9 -0
- data/lib/yt/version.rb +1 -1
- data/spec/requests/as_account/channel_spec.rb +3 -0
- data/spec/requests/as_account/video_spec.rb +3 -0
- data/spec/requests/as_content_owner/channel_spec.rb +81 -0
- data/spec/requests/as_content_owner/video_spec.rb +81 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 55d205cb0c564e1554416cc0342e78a3db861869
|
4
|
+
data.tar.gz: 847dc6cb07e91a609a599bf80076323bb4ed8da8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa186798f0c5e32c895d92a73b96f9db76eebf7377b1a7e7ebda53e9ef18c0ad4b48ee62aa3b987ef2baa96ad9a7a031b83c8b847bab803ea4b50c6c2de5115f
|
7
|
+
data.tar.gz: b6476451e5c3ead27bffa4e15ad4056387a9bcbf583dc37d0bce98b356a12b810ddf95046862151e0df23d7e24552a983f49433eb467a76360ed0f8f9893029a
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,13 @@ 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
|
+
|
10
|
+
## 0.15.1 - 2015-04-19
|
11
|
+
|
12
|
+
* [FEATURE] New `annotation clicks` report for videos and channels.
|
13
|
+
* [FEATURE] New `annotation click-through rate` report for videos and channels.
|
14
|
+
* [FEATURE] New `annotation close rate` report for videos and channels.
|
15
|
+
|
9
16
|
## 0.15.0 - 2015-04-19
|
10
17
|
|
11
18
|
**How to upgrade**
|
data/README.md
CHANGED
@@ -41,7 +41,7 @@ To install on your system, run
|
|
41
41
|
|
42
42
|
To use inside a bundled Ruby project, add this line to the Gemfile:
|
43
43
|
|
44
|
-
gem 'yt', '~> 0.15.
|
44
|
+
gem 'yt', '~> 0.15.1'
|
45
45
|
|
46
46
|
Since the gem follows [Semantic Versioning](http://semver.org),
|
47
47
|
indicating the full version in your Gemfile (~> *major*.*minor*.*patch*)
|
@@ -148,7 +148,7 @@ Use [Yt::Channel](http://rubydoc.info/github/Fullscreen/yt/master/Yt/Models/Chan
|
|
148
148
|
* access the channels that the channel is subscribed to
|
149
149
|
* subscribe to and unsubscribe from a channel
|
150
150
|
* delete playlists from a channel
|
151
|
-
* retrieve the daily earnings, views, comments, likes, dislikes, shares, subscribers gained/lost, estimated/average video watch and impressions of a channel by day
|
151
|
+
* retrieve the daily earnings, views, comments, likes, dislikes, shares, subscribers gained/lost, annotation clicks, annotation click-through rate, annotation close rate, estimated/average video watch and impressions of a channel by day
|
152
152
|
* retrieve the views and estimated minutes watched by traffic source
|
153
153
|
* retrieve the views and estimated minutes watched by playback location
|
154
154
|
* retrieve the views and estimated minutes watched by embedded player location
|
@@ -215,6 +215,9 @@ channel.favorites_removed from: '2014-08-30', to: '2014-08-31' #=> {Sat, 30 Aug
|
|
215
215
|
channel.estimated_minutes_watched #=> {Sun, 22 Feb 2015=>2433258.0, Mon, 23 Feb 2015=>2634360.0, …}
|
216
216
|
channel.average_view_duration #=> {Sun, 22 Feb 2015=>329.0, Mon, 23 Feb 2015=>326.0, …}
|
217
217
|
channel.average_view_percentage # {Sun, 22 Feb 2015=>38.858253094977265, Mon, 23 Feb 2015=>37.40014235438217, …}
|
218
|
+
channel.annotation_clicks #=> {Sun, 22 Feb 2015=>329.0, Mon, 23 Feb 2015=>326.0, …}
|
219
|
+
channel.annotation_click_through_rate #=> {Sun, 22 Feb 2015=>0.02, Mon, 23 Feb 2015=>0.03, …}
|
220
|
+
channel.annotation_close_rate #=> {Sun, 22 Feb 2015=>0.02, Mon, 23 Feb 2015=>0.03, …}
|
218
221
|
channel.viewer_percentage #=> {female: {'18-24' => 12.12, '25-34' => 16.16,…}…}
|
219
222
|
|
220
223
|
channel.views since: 7.days.ago, by: :traffic_source #=> {advertising: 10.0, related_video: 20.0, promoted: 5.0, subscriber: 1.0, channel: 3.0, other: 7.0}
|
@@ -257,6 +260,9 @@ channel.subscribers_lost from: '2014-08-30', to: '2014-08-31' #=> {Sat, 30 Aug 2
|
|
257
260
|
channel.estimated_minutes_watched #=> {Sun, 22 Feb 2015=>2433258.0, Mon, 23 Feb 2015=>2634360.0, …}
|
258
261
|
channel.average_view_duration #=> {Sun, 22 Feb 2015=>329.0, Mon, 23 Feb 2015=>326.0, …}
|
259
262
|
channel.average_view_percentage # {Sun, 22 Feb 2015=>38.858253094977265, Mon, 23 Feb 2015=>37.40014235438217, …}
|
263
|
+
channel.annotation_clicks #=> {Sun, 22 Feb 2015=>329.0, Mon, 23 Feb 2015=>326.0, …}
|
264
|
+
channel.annotation_click_through_rate #=> {Sun, 22 Feb 2015=>0.02, Mon, 23 Feb 2015=>0.03, …}
|
265
|
+
channel.annotation_close_rate #=> {Sun, 22 Feb 2015=>0.02, Mon, 23 Feb 2015=>0.03, …}
|
260
266
|
channel.viewer_percentage since: 7.days.ago #=> {female: {'18-24' => 12.12, '25-34' => 16.16,…}…}
|
261
267
|
|
262
268
|
channel.views since: 7.days.ago, by: :traffic_source #=> {advertising: 10.0, related_video: 20.0, promoted: 5.0, subscriber: 1.0, channel: 3.0, other: 7.0}
|
@@ -294,7 +300,7 @@ Use [Yt::Video](http://rubydoc.info/github/Fullscreen/yt/master/Yt/Models/Video)
|
|
294
300
|
* access the annotations of a video
|
295
301
|
* delete a video
|
296
302
|
* like and dislike a video
|
297
|
-
* retrieve the daily earnings, views, comments, likes, dislikes, shares, subscribers gained/lost, impressions and monetized playbacks of a video by day
|
303
|
+
* retrieve the daily earnings, views, comments, likes, dislikes, shares, subscribers gained/lost, impressions, annotation clicks, annotation click-through rate, annotation close rate and monetized playbacks of a video by day
|
298
304
|
* retrieve the views of a video by traffic source
|
299
305
|
* retrieve the views of a video by playback location
|
300
306
|
* retrieve the views of a video by embedded player location
|
@@ -397,6 +403,9 @@ video.favorites_removed from: '2014-08-30', to: '2014-08-31' #=> {Sat, 30 Aug 20
|
|
397
403
|
video.average_view_duration #=> {Sun, 22 Feb 2015=>329.0, Mon, 23 Feb 2015=>326.0, …}
|
398
404
|
video.average_view_percentage # {Sun, 22 Feb 2015=>38.858253094977265, Mon, 23 Feb 2015=>37.40014235438217, …}
|
399
405
|
video.estimated_minutes_watched #=> {Sun, 22 Feb 2015=>2433258.0, Mon, 23 Feb 2015=>2634360.0, …}
|
406
|
+
video.annotation_clicks #=> {Sun, 22 Feb 2015=>329.0, Mon, 23 Feb 2015=>326.0, …}
|
407
|
+
video.annotation_click_through_rate #=> {Sun, 22 Feb 2015=>0.02, Mon, 23 Feb 2015=>0.03, …}
|
408
|
+
video.annotation_close_rate #=> {Sun, 22 Feb 2015=>0.02, Mon, 23 Feb 2015=>0.03, …}
|
400
409
|
video.viewer_percentage #=> {female: {'18-24' => 12.12, '25-34' => 16.16,…}…}
|
401
410
|
|
402
411
|
video.views since: 7.days.ago, by: :traffic_source #=> {advertising: 10.0, related_video: 20.0, promoted: 5.0, subscriber: 1.0, channel: 3.0, other: 7.0}
|
@@ -431,6 +440,9 @@ video.average_view_percentage # {Sun, 22 Feb 2015=>38.858253094977265, Mon, 23 F
|
|
431
440
|
video.estimated_minutes_watched #=> {Sun, 22 Feb 2015=>2433258.0, Mon, 23 Feb 2015=>2634360.0, …}
|
432
441
|
video.impressions_on 5.days.ago #=> 157.0
|
433
442
|
video.monetized_playbacks_on 5.days.ago #=> 123.0
|
443
|
+
video.annotation_clicks #=> {Sun, 22 Feb 2015=>329.0, Mon, 23 Feb 2015=>326.0, …}
|
444
|
+
video.annotation_click_through_rate #=> {Sun, 22 Feb 2015=>0.02, Mon, 23 Feb 2015=>0.03, …}
|
445
|
+
video.annotation_close_rate #=> {Sun, 22 Feb 2015=>0.02, Mon, 23 Feb 2015=>0.03, …}
|
434
446
|
video.viewer_percentage #=> {female: {'18-24' => 12.12, '25-34' => 16.16,…}…}
|
435
447
|
|
436
448
|
video.views since: 7.days.ago, by: :traffic_source #=> {advertising: 10.0, related_video: 20.0, promoted: 5.0, subscriber: 1.0, channel: 3.0, other: 7.0}
|
data/lib/yt/models/channel.rb
CHANGED
@@ -58,6 +58,15 @@ module Yt
|
|
58
58
|
# @macro has_report
|
59
59
|
has_report :monetized_playbacks
|
60
60
|
|
61
|
+
# @macro has_report
|
62
|
+
has_report :annotation_clicks
|
63
|
+
|
64
|
+
# @macro has_report
|
65
|
+
has_report :annotation_click_through_rate
|
66
|
+
|
67
|
+
# @macro has_report
|
68
|
+
has_report :annotation_close_rate
|
69
|
+
|
61
70
|
# @macro has_report
|
62
71
|
has_report :viewer_percentage
|
63
72
|
|
data/lib/yt/models/video.rb
CHANGED
@@ -89,6 +89,15 @@ module Yt
|
|
89
89
|
# @macro has_report
|
90
90
|
has_report :monetized_playbacks
|
91
91
|
|
92
|
+
# @macro has_report
|
93
|
+
has_report :annotation_clicks
|
94
|
+
|
95
|
+
# @macro has_report
|
96
|
+
has_report :annotation_click_through_rate
|
97
|
+
|
98
|
+
# @macro has_report
|
99
|
+
has_report :annotation_close_rate
|
100
|
+
|
92
101
|
# @macro has_report
|
93
102
|
has_report :viewer_percentage
|
94
103
|
|
data/lib/yt/version.rb
CHANGED
@@ -175,6 +175,9 @@ describe Yt::Channel, :device_app do
|
|
175
175
|
expect{channel.estimated_minutes_watched}.not_to raise_error
|
176
176
|
expect{channel.average_view_duration}.not_to raise_error
|
177
177
|
expect{channel.average_view_percentage}.not_to raise_error
|
178
|
+
expect{channel.annotation_clicks}.not_to raise_error
|
179
|
+
expect{channel.annotation_click_through_rate}.not_to raise_error
|
180
|
+
expect{channel.annotation_close_rate}.not_to raise_error
|
178
181
|
expect{channel.viewer_percentage}.not_to raise_error
|
179
182
|
expect{channel.earnings}.to raise_error Yt::Errors::Unauthorized
|
180
183
|
expect{channel.impressions}.to raise_error Yt::Errors::Unauthorized
|
@@ -292,6 +292,9 @@ describe Yt::Video, :device_app do
|
|
292
292
|
expect{video.estimated_minutes_watched}.not_to raise_error
|
293
293
|
expect{video.average_view_duration}.not_to raise_error
|
294
294
|
expect{video.average_view_percentage}.not_to raise_error
|
295
|
+
expect{video.annotation_clicks}.not_to raise_error
|
296
|
+
expect{video.annotation_click_through_rate}.not_to raise_error
|
297
|
+
expect{video.annotation_close_rate}.not_to raise_error
|
295
298
|
expect{video.viewer_percentage}.not_to raise_error
|
296
299
|
expect{video.earnings}.to raise_error Yt::Errors::Unauthorized
|
297
300
|
expect{video.impressions}.to raise_error Yt::Errors::Unauthorized
|
@@ -845,6 +845,87 @@ describe Yt::Channel, :partner do
|
|
845
845
|
end
|
846
846
|
end
|
847
847
|
|
848
|
+
describe 'annotation clicks can be retrieved for a range of days' do
|
849
|
+
let(:date) { ENV['YT_TEST_PARTNER_VIDEO_DATE'] }
|
850
|
+
let(:date_to) { Date.parse(ENV['YT_TEST_PARTNER_VIDEO_DATE']) + 5 }
|
851
|
+
|
852
|
+
specify 'with a given start (:since option) and a given end (:until option)' do
|
853
|
+
expect(channel.annotation_clicks(since: date, until: date_to).keys.min).to eq date.to_date
|
854
|
+
end
|
855
|
+
|
856
|
+
specify 'with a given start (:from option) and a given end (:to option)' do
|
857
|
+
expect(channel.annotation_clicks(from: date, to: date_to).keys.min).to eq date.to_date
|
858
|
+
end
|
859
|
+
end
|
860
|
+
|
861
|
+
describe 'annotation clicks can be grouped by day' do
|
862
|
+
let(:range) { {since: ENV['YT_TEST_PARTNER_VIDEO_DATE'], until: Date.parse(ENV['YT_TEST_PARTNER_VIDEO_DATE']) + 5} }
|
863
|
+
|
864
|
+
specify 'without a :by option (default)' do
|
865
|
+
annotation_clicks = channel.annotation_clicks range
|
866
|
+
expect(annotation_clicks.values).to all(be_instance_of Float)
|
867
|
+
end
|
868
|
+
|
869
|
+
specify 'with the :by option set to :day' do
|
870
|
+
annotation_clicks = channel.annotation_clicks range.merge by: :day
|
871
|
+
expect(annotation_clicks.values).to all(be_instance_of Float)
|
872
|
+
end
|
873
|
+
end
|
874
|
+
|
875
|
+
describe 'annotation click-through rate can be retrieved for a range of days' do
|
876
|
+
let(:date) { ENV['YT_TEST_PARTNER_VIDEO_DATE'] }
|
877
|
+
let(:date_to) { Date.parse(ENV['YT_TEST_PARTNER_VIDEO_DATE']) + 5 }
|
878
|
+
|
879
|
+
specify 'with a given start (:since option) and a given end (:until option)' do
|
880
|
+
expect(channel.annotation_click_through_rate(since: date, until: date_to).keys.min).to eq date.to_date
|
881
|
+
end
|
882
|
+
|
883
|
+
specify 'with a given start (:from option) and a given end (:to option)' do
|
884
|
+
expect(channel.annotation_click_through_rate(from: date, to: date_to).keys.min).to eq date.to_date
|
885
|
+
end
|
886
|
+
end
|
887
|
+
|
888
|
+
describe 'annotation click-through rate can be grouped by day' do
|
889
|
+
let(:range) { {since: ENV['YT_TEST_PARTNER_VIDEO_DATE'], until: Date.parse(ENV['YT_TEST_PARTNER_VIDEO_DATE']) + 5} }
|
890
|
+
|
891
|
+
specify 'without a :by option (default)' do
|
892
|
+
annotation_click_through_rate = channel.annotation_click_through_rate range
|
893
|
+
expect(annotation_click_through_rate.values).to all(be_instance_of Float)
|
894
|
+
end
|
895
|
+
|
896
|
+
specify 'with the :by option set to :day' do
|
897
|
+
annotation_click_through_rate = channel.annotation_click_through_rate range.merge by: :day
|
898
|
+
expect(annotation_click_through_rate.values).to all(be_instance_of Float)
|
899
|
+
end
|
900
|
+
end
|
901
|
+
|
902
|
+
describe 'annotation close rate can be retrieved for a range of days' do
|
903
|
+
let(:date) { ENV['YT_TEST_PARTNER_VIDEO_DATE'] }
|
904
|
+
let(:date_to) { Date.parse(ENV['YT_TEST_PARTNER_VIDEO_DATE']) + 5 }
|
905
|
+
|
906
|
+
specify 'with a given start (:since option) and a given end (:until option)' do
|
907
|
+
expect(channel.annotation_close_rate(since: date, until: date_to).keys.min).to eq date.to_date
|
908
|
+
end
|
909
|
+
|
910
|
+
specify 'with a given start (:from option) and a given end (:to option)' do
|
911
|
+
expect(channel.annotation_close_rate(from: date, to: date_to).keys.min).to eq date.to_date
|
912
|
+
end
|
913
|
+
end
|
914
|
+
|
915
|
+
describe 'annotation close rate can be grouped by day' do
|
916
|
+
let(:range) { {since: ENV['YT_TEST_PARTNER_VIDEO_DATE'], until: Date.parse(ENV['YT_TEST_PARTNER_VIDEO_DATE']) + 5} }
|
917
|
+
|
918
|
+
specify 'without a :by option (default)' do
|
919
|
+
annotation_close_rate = channel.annotation_close_rate range
|
920
|
+
expect(annotation_close_rate.values).to all(be_instance_of Float)
|
921
|
+
end
|
922
|
+
|
923
|
+
specify 'with the :by option set to :day' do
|
924
|
+
annotation_close_rate = channel.annotation_close_rate range.merge by: :day
|
925
|
+
expect(annotation_close_rate.values).to all(be_instance_of Float)
|
926
|
+
end
|
927
|
+
end
|
928
|
+
|
848
929
|
describe 'viewer percentage can be retrieved for a range of days' do
|
849
930
|
let(:viewer_percentage) { channel.viewer_percentage since: 1.year.ago, until: 10.days.ago}
|
850
931
|
it { expect(viewer_percentage).to be_a Hash }
|
@@ -753,6 +753,87 @@ describe Yt::Video, :partner do
|
|
753
753
|
end
|
754
754
|
end
|
755
755
|
|
756
|
+
describe 'annotation clicks can be retrieved for a range of days' do
|
757
|
+
let(:date) { ENV['YT_TEST_PARTNER_VIDEO_DATE'] }
|
758
|
+
let(:date_to) { Date.parse(ENV['YT_TEST_PARTNER_VIDEO_DATE']) + 5 }
|
759
|
+
|
760
|
+
specify 'with a given start (:since option) and a given end (:until option)' do
|
761
|
+
expect(video.annotation_clicks(since: date, until: date_to).keys.min).to eq date.to_date
|
762
|
+
end
|
763
|
+
|
764
|
+
specify 'with a given start (:from option) and a given end (:to option)' do
|
765
|
+
expect(video.annotation_clicks(from: date, to: date_to).keys.min).to eq date.to_date
|
766
|
+
end
|
767
|
+
end
|
768
|
+
|
769
|
+
describe 'annotation clicks can be grouped by day' do
|
770
|
+
let(:range) { {since: ENV['YT_TEST_PARTNER_VIDEO_DATE'], until: Date.parse(ENV['YT_TEST_PARTNER_VIDEO_DATE']) + 5} }
|
771
|
+
|
772
|
+
specify 'without a :by option (default)' do
|
773
|
+
annotation_clicks = video.annotation_clicks range
|
774
|
+
expect(annotation_clicks.values).to all(be_instance_of Float)
|
775
|
+
end
|
776
|
+
|
777
|
+
specify 'with the :by option set to :day' do
|
778
|
+
annotation_clicks = video.annotation_clicks range.merge by: :day
|
779
|
+
expect(annotation_clicks.values).to all(be_instance_of Float)
|
780
|
+
end
|
781
|
+
end
|
782
|
+
|
783
|
+
describe 'annotation click-through rate can be retrieved for a range of days' do
|
784
|
+
let(:date) { ENV['YT_TEST_PARTNER_VIDEO_DATE'] }
|
785
|
+
let(:date_to) { Date.parse(ENV['YT_TEST_PARTNER_VIDEO_DATE']) + 5 }
|
786
|
+
|
787
|
+
specify 'with a given start (:since option) and a given end (:until option)' do
|
788
|
+
expect(video.annotation_click_through_rate(since: date, until: date_to).keys.min).to eq date.to_date
|
789
|
+
end
|
790
|
+
|
791
|
+
specify 'with a given start (:from option) and a given end (:to option)' do
|
792
|
+
expect(video.annotation_click_through_rate(from: date, to: date_to).keys.min).to eq date.to_date
|
793
|
+
end
|
794
|
+
end
|
795
|
+
|
796
|
+
describe 'annotation click-through rate can be grouped by day' do
|
797
|
+
let(:range) { {since: ENV['YT_TEST_PARTNER_VIDEO_DATE'], until: Date.parse(ENV['YT_TEST_PARTNER_VIDEO_DATE']) + 5} }
|
798
|
+
|
799
|
+
specify 'without a :by option (default)' do
|
800
|
+
annotation_click_through_rate = video.annotation_click_through_rate range
|
801
|
+
expect(annotation_click_through_rate.values).to all(be_instance_of Float)
|
802
|
+
end
|
803
|
+
|
804
|
+
specify 'with the :by option set to :day' do
|
805
|
+
annotation_click_through_rate = video.annotation_click_through_rate range.merge by: :day
|
806
|
+
expect(annotation_click_through_rate.values).to all(be_instance_of Float)
|
807
|
+
end
|
808
|
+
end
|
809
|
+
|
810
|
+
describe 'annotation close rate can be retrieved for a range of days' do
|
811
|
+
let(:date) { ENV['YT_TEST_PARTNER_VIDEO_DATE'] }
|
812
|
+
let(:date_to) { Date.parse(ENV['YT_TEST_PARTNER_VIDEO_DATE']) + 5 }
|
813
|
+
|
814
|
+
specify 'with a given start (:since option) and a given end (:until option)' do
|
815
|
+
expect(video.annotation_close_rate(since: date, until: date_to).keys.min).to eq date.to_date
|
816
|
+
end
|
817
|
+
|
818
|
+
specify 'with a given start (:from option) and a given end (:to option)' do
|
819
|
+
expect(video.annotation_close_rate(from: date, to: date_to).keys.min).to eq date.to_date
|
820
|
+
end
|
821
|
+
end
|
822
|
+
|
823
|
+
describe 'annotation close rate can be grouped by day' do
|
824
|
+
let(:range) { {since: ENV['YT_TEST_PARTNER_VIDEO_DATE'], until: Date.parse(ENV['YT_TEST_PARTNER_VIDEO_DATE']) + 5} }
|
825
|
+
|
826
|
+
specify 'without a :by option (default)' do
|
827
|
+
annotation_close_rate = video.annotation_close_rate range
|
828
|
+
expect(annotation_close_rate.values).to all(be_instance_of Float)
|
829
|
+
end
|
830
|
+
|
831
|
+
specify 'with the :by option set to :day' do
|
832
|
+
annotation_close_rate = video.annotation_close_rate range.merge by: :day
|
833
|
+
expect(annotation_close_rate.values).to all(be_instance_of Float)
|
834
|
+
end
|
835
|
+
end
|
836
|
+
|
756
837
|
describe 'viewer percentage can be retrieved for a range of days' do
|
757
838
|
let(:viewer_percentage) { video.viewer_percentage since: 1.year.ago, until: 10.days.ago}
|
758
839
|
it { expect(viewer_percentage).to be_a Hash }
|