brainzz 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +59 -10
- data/lib/brainzz.rb +11 -3
- data/lib/brainzz/commands/analytics_command.rb +20 -4
- data/lib/brainzz/commands/like_count_by_day_command.rb +14 -0
- data/lib/brainzz/commands/like_totals_command.rb +27 -0
- data/lib/brainzz/commands/video_stats_command.rb +13 -0
- data/lib/brainzz/commands/view_count_by_day_command.rb +14 -0
- data/lib/brainzz/commands/view_totals_command.rb +28 -0
- data/lib/brainzz/core.rb +14 -2
- data/lib/brainzz/enums/view_source_enum.rb +15 -0
- data/lib/brainzz/factories.rb +1 -0
- data/lib/brainzz/factories/like_count.rb +14 -0
- data/lib/brainzz/factories/sequences.rb +4 -0
- data/lib/brainzz/factories/view_count.rb +24 -1
- data/lib/brainzz/models/like_count.rb +19 -0
- data/lib/brainzz/models/video_stat.rb +29 -0
- data/lib/brainzz/models/view_count.rb +17 -8
- data/lib/brainzz/params/{view_count_params.rb → video_stats_params.rb} +1 -1
- data/lib/brainzz/responses/like_count_response.rb +5 -0
- data/lib/brainzz/responses/video_stats_response.rb +38 -0
- data/lib/brainzz/responses/view_count_response.rb +2 -7
- metadata +14 -4
- data/lib/brainzz/commands/view_count_command.rb +0 -41
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3a7df38b3c5dbf4532513c08d8a57155167738f9
|
4
|
+
data.tar.gz: 425b4f946d597db63e5e5f85a28810d36e3934d7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d06108933d0b0d71a5b09484018b999e565ce5ebfe9bfe5944c083183e7d880de8be5c27004b31d2ec9508537a9e163e0a74a7c47d281354631d00e958b35fa5
|
7
|
+
data.tar.gz: 1ca881f5099f8930ec5139159abae5ecdc37100a283b8cc0d01748dbb3f526456c83d7a6bfefc6c20ea899d5feb688e2184b113e6e751914eda2bfafdc6a74dc
|
data/README.md
CHANGED
@@ -25,15 +25,41 @@ Check `config/dotenv/test.env` for the required keys.
|
|
25
25
|
The values in this file are required environment variables
|
26
26
|
when consuming this gem.
|
27
27
|
|
28
|
+
Environment Variables
|
29
|
+
---------------------
|
30
|
+
Brainzz requires the use of multiple environment variables:
|
31
|
+
- BRAINZZ_GOOGLE_API_KEY
|
32
|
+
- BRAINZZ_CLIENT_ID
|
33
|
+
- BRAINZZ_CLIENT_SECRET
|
34
|
+
- BRAINZZ_REFRESH_TOKEN
|
35
|
+
- BRAINZZ_CONTENT_OWNER:
|
36
|
+
- the Google account for the CMS that owns the YouTube channel data being sought
|
37
|
+
|
38
|
+
Place values in `config/dotenv/integration.env`.
|
39
|
+
|
40
|
+
### Attaining BRAINZZ_GOOGLE_API_KEY
|
41
|
+
|
28
42
|
Follow the instructions [here][atv-wiki-google-api-key]
|
29
43
|
to find the required values.
|
30
44
|
|
31
|
-
|
45
|
+
### Attaining BRAINZZ_REFRESH_TOKEN
|
46
|
+
An OAUTH refresh token for the BRAINZZ_CONTENT_OWNER Google account
|
47
|
+
uses BRAINZZ_CLIENT_SECRET and BRAINZZ_CLIENT_SECRET
|
32
48
|
|
49
|
+
`BRAINZZ_CLIENT_ID` and `BRAINZZ_CLIENT_SECRET`.
|
50
|
+
- Go to the [Google OAuth Playground][google-oauth-playground]
|
51
|
+
- Log in with the Google account for BRAINZZ_CONTENT_OWNER
|
52
|
+
- Click on the gear (upper-right)
|
53
|
+
- Click check box to "Use your own OAuth credentials"
|
54
|
+
- Fill in BRAINZZ_CLIENT_ID and BRAINZZ_CLIENT_SECRET
|
55
|
+
- In Step 1 (Select & Authorize APIs) scroll down to YouTube Analytics API v1
|
56
|
+
- Click the last item "yt-analytics.readonly"
|
57
|
+
- Click blue 'Authorize APIs' button
|
58
|
+
- Exchange code for tokens
|
59
|
+
- Grab value for the Refresh Token and store
|
33
60
|
|
34
61
|
Interface
|
35
62
|
---------
|
36
|
-
|
37
63
|
All public endpoints are exposed in Brainzz::Core.
|
38
64
|
|
39
65
|
Every response from the public API is wrapped in a `Response` object
|
@@ -74,20 +100,13 @@ This endpoint returns a hash with video ids as keys
|
|
74
100
|
and video objects as the values.
|
75
101
|
|
76
102
|
|
77
|
-
###
|
103
|
+
### views_by_day_for
|
78
104
|
|
79
105
|
#### Parameters
|
80
106
|
|
81
|
-
* channel id (String)
|
82
107
|
* video id (String)
|
83
108
|
* start date (DateTime)
|
84
109
|
* end date (DateTime)
|
85
|
-
* refresh token (String)
|
86
|
-
|
87
|
-
Refresh token must be a refresh token for the channel owner
|
88
|
-
using the same client id and client secret that are set in
|
89
|
-
`BRAINZZ_CLIENT_ID` and `BRAINZZ_CLIENT_SECRET`.
|
90
|
-
|
91
110
|
|
92
111
|
#### Result
|
93
112
|
|
@@ -111,6 +130,35 @@ corresponding to the following YouTube referrals:
|
|
111
130
|
|
112
131
|
The constants are defined in `Brainzz::ViewCountEnum`
|
113
132
|
|
133
|
+
### view_totals_for
|
134
|
+
|
135
|
+
#### Parameters
|
136
|
+
same as views_by_day_for
|
137
|
+
|
138
|
+
#### Result
|
139
|
+
same as views_by_day_for except date values are nil
|
140
|
+
views for date range are aggregated per source type
|
141
|
+
|
142
|
+
### likes_by_day_for
|
143
|
+
|
144
|
+
#### Parameters
|
145
|
+
|
146
|
+
* video id (String)
|
147
|
+
* start date (DateTime)
|
148
|
+
* end date (DateTime)
|
149
|
+
|
150
|
+
#### Result
|
151
|
+
|
152
|
+
An array of `Brainzz::LikeCount` objects ordered by date in ascending order.
|
153
|
+
|
154
|
+
### like_totals_for
|
155
|
+
|
156
|
+
#### Parameters
|
157
|
+
same as likes_by_day_for
|
158
|
+
|
159
|
+
#### Result
|
160
|
+
same as likes_by_day_for except date values are nil
|
161
|
+
likes for date range are aggregated
|
114
162
|
|
115
163
|
Factories
|
116
164
|
---------
|
@@ -130,3 +178,4 @@ will also build and push this gem to RubyGems.
|
|
130
178
|
|
131
179
|
|
132
180
|
[atv-wiki-google-api-key]: https://www.github.com/awesomenesstv/wiki#google-api-key
|
181
|
+
[google-oauth-playground]: https://developers.google.com/oauthplayground/
|
data/lib/brainzz.rb
CHANGED
@@ -10,7 +10,9 @@ require_relative 'brainzz/enums/view_source_enum'
|
|
10
10
|
|
11
11
|
require_relative 'brainzz/models/base_model'
|
12
12
|
require_relative 'brainzz/models/video'
|
13
|
+
require_relative 'brainzz/models/video_stat'
|
13
14
|
require_relative 'brainzz/models/view_count'
|
15
|
+
require_relative 'brainzz/models/like_count'
|
14
16
|
require_relative 'brainzz/models/playlist_item'
|
15
17
|
require_relative 'brainzz/models/playlist_items_wrapper'
|
16
18
|
|
@@ -19,19 +21,25 @@ require_relative 'brainzz/services/access_token_service'
|
|
19
21
|
require_relative 'brainzz/params/base_params'
|
20
22
|
require_relative 'brainzz/params/analytics_params'
|
21
23
|
require_relative 'brainzz/params/video_details_params'
|
22
|
-
require_relative 'brainzz/params/
|
24
|
+
require_relative 'brainzz/params/video_stats_params'
|
23
25
|
require_relative 'brainzz/params/playlist_items_params'
|
24
26
|
|
25
27
|
require_relative 'brainzz/responses/playlist_items_response'
|
26
28
|
require_relative 'brainzz/responses/video_details_response'
|
29
|
+
require_relative 'brainzz/responses/video_stats_response'
|
27
30
|
require_relative 'brainzz/responses/view_count_response'
|
31
|
+
require_relative 'brainzz/responses/like_count_response'
|
28
32
|
|
29
33
|
require_relative 'brainzz/commands/base_command'
|
30
34
|
require_relative 'brainzz/commands/data_command'
|
31
|
-
require_relative 'brainzz/commands/analytics_command'
|
32
35
|
require_relative 'brainzz/commands/playlist_items_command'
|
33
36
|
require_relative 'brainzz/commands/video_details_command'
|
34
|
-
require_relative 'brainzz/commands/
|
37
|
+
require_relative 'brainzz/commands/analytics_command'
|
38
|
+
require_relative 'brainzz/commands/video_stats_command'
|
39
|
+
require_relative 'brainzz/commands/view_totals_command'
|
40
|
+
require_relative 'brainzz/commands/view_count_by_day_command'
|
41
|
+
require_relative 'brainzz/commands/like_totals_command'
|
42
|
+
require_relative 'brainzz/commands/like_count_by_day_command'
|
35
43
|
|
36
44
|
require_relative 'brainzz/core'
|
37
45
|
|
@@ -3,16 +3,20 @@ module Brainzz
|
|
3
3
|
class << self
|
4
4
|
private
|
5
5
|
|
6
|
+
def base_url
|
7
|
+
'https://www.googleapis.com/youtube/analytics/v1'
|
8
|
+
end
|
9
|
+
|
10
|
+
def endpoint
|
11
|
+
'reports'
|
12
|
+
end
|
13
|
+
|
6
14
|
def headers
|
7
15
|
super.merge({
|
8
16
|
'Authorization' => "Bearer #{access_token}",
|
9
17
|
})
|
10
18
|
end
|
11
19
|
|
12
|
-
def base_url
|
13
|
-
'https://www.googleapis.com/youtube/analytics/v1'
|
14
|
-
end
|
15
|
-
|
16
20
|
def access_token
|
17
21
|
AccessTokenService.retrieve_token refresh_token
|
18
22
|
end
|
@@ -20,6 +24,18 @@ module Brainzz
|
|
20
24
|
def refresh_token
|
21
25
|
ENV['BRAINZZ_REFRESH_TOKEN']
|
22
26
|
end
|
27
|
+
|
28
|
+
def params(analytics_params)
|
29
|
+
super.merge({
|
30
|
+
'ids' => "contentOwner==#{content_owner}",
|
31
|
+
'start-date' => analytics_params.start_date,
|
32
|
+
'end-date' => analytics_params.end_date,
|
33
|
+
})
|
34
|
+
end
|
35
|
+
|
36
|
+
def content_owner
|
37
|
+
ENV['BRAINZZ_CONTENT_OWNER']
|
38
|
+
end
|
23
39
|
end
|
24
40
|
end
|
25
41
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Brainzz
|
2
|
+
class LikeTotalsCommand < VideoStatsCommand
|
3
|
+
class << self
|
4
|
+
def execute(video_id, start_date, end_date)
|
5
|
+
video_stats_params = VideoStatsParams.new ({
|
6
|
+
:video_id => video_id,
|
7
|
+
:start_date => start_date,
|
8
|
+
:end_date => end_date,
|
9
|
+
})
|
10
|
+
|
11
|
+
if video_stats_params.valid?
|
12
|
+
LikeCountResponse.new get(video_stats_params)
|
13
|
+
else
|
14
|
+
LikeCountResponse.new
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def params(video_stats_params)
|
21
|
+
super.merge({
|
22
|
+
'metrics' => 'likes',
|
23
|
+
})
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Brainzz
|
2
|
+
class ViewTotalsCommand < VideoStatsCommand
|
3
|
+
class << self
|
4
|
+
def execute(video_id, start_date, end_date)
|
5
|
+
video_stats_params = VideoStatsParams.new ({
|
6
|
+
:video_id => video_id,
|
7
|
+
:start_date => start_date,
|
8
|
+
:end_date => end_date,
|
9
|
+
})
|
10
|
+
|
11
|
+
if video_stats_params.valid?
|
12
|
+
ViewCountResponse.new get(video_stats_params)
|
13
|
+
else
|
14
|
+
ViewCountResponse.new
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def params(video_stats_params)
|
21
|
+
super.merge({
|
22
|
+
'metrics' => 'views',
|
23
|
+
'dimensions' => 'insightTrafficSourceType',
|
24
|
+
})
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/brainzz/core.rb
CHANGED
@@ -10,8 +10,20 @@ module Brainzz
|
|
10
10
|
VideoDetailsCommand.execute video_ids
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
14
|
-
|
13
|
+
def views_by_day_for(video_id, start_date, end_date)
|
14
|
+
ViewCountByDayCommand.execute video_id, start_date, end_date
|
15
|
+
end
|
16
|
+
|
17
|
+
def view_totals_for(video_id, start_date, end_date)
|
18
|
+
ViewTotalsCommand.execute video_id, start_date, end_date
|
19
|
+
end
|
20
|
+
|
21
|
+
def likes_by_day_for(video_id, start_date, end_date)
|
22
|
+
LikeCountByDayCommand.execute video_id, start_date, end_date
|
23
|
+
end
|
24
|
+
|
25
|
+
def like_totals_for(video_id, start_date, end_date)
|
26
|
+
LikeTotalsCommand.execute video_id, start_date, end_date
|
15
27
|
end
|
16
28
|
end
|
17
29
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
module Brainzz
|
2
2
|
module ViewSourceEnum
|
3
|
+
extend self
|
4
|
+
|
3
5
|
ADVERTISING = 1
|
4
6
|
ANNOTATION = 2
|
5
7
|
EXT_URL = 3
|
@@ -12,6 +14,10 @@ module Brainzz
|
|
12
14
|
YT_CHANNEL = 10
|
13
15
|
YT_OTHER_PAGE = 11
|
14
16
|
YT_SEARCH = 12
|
17
|
+
EXT_APP = 13
|
18
|
+
INFO_CARD = 14
|
19
|
+
|
20
|
+
UNKNOWN = -1
|
15
21
|
|
16
22
|
SOURCES = {
|
17
23
|
'advertising' => ADVERTISING,
|
@@ -26,6 +32,15 @@ module Brainzz
|
|
26
32
|
'yt_channel' => YT_CHANNEL,
|
27
33
|
'yt_other_page' => YT_OTHER_PAGE,
|
28
34
|
'yt_search' => YT_SEARCH,
|
35
|
+
'ext_app' => EXT_APP,
|
36
|
+
'info_card' => INFO_CARD,
|
29
37
|
}
|
38
|
+
|
39
|
+
def key_for(value)
|
40
|
+
constants.each do |constant|
|
41
|
+
return constant.to_s.downcase if const_get(constant) == value
|
42
|
+
end
|
43
|
+
nil
|
44
|
+
end
|
30
45
|
end
|
31
46
|
end
|
data/lib/brainzz/factories.rb
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
FactoryGirl.define do
|
2
|
+
factory :brainzz_like_count, :class => Brainzz::LikeCount do
|
3
|
+
likes { rand(1_000_000) + 1 }
|
4
|
+
day { DateTime.parse((DateTime.now - rand(100)).strftime('%F')) }
|
5
|
+
|
6
|
+
factory :brainzz_aggregate_like_count do
|
7
|
+
day nil
|
8
|
+
end
|
9
|
+
|
10
|
+
initialize_with do
|
11
|
+
Brainzz::LikeCount.new({})
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -9,4 +9,8 @@ FactoryGirl.define do
|
|
9
9
|
sequence(:brainzz_playlist_item_id) { |n| "playlist-item-id-#{n}" }
|
10
10
|
|
11
11
|
sequence(:brainzz_next_page_token) { |n| "page-token-#{n}" }
|
12
|
+
|
13
|
+
sequence(:brainzz_view_count_source) do |n|
|
14
|
+
n % Brainzz::ViewSourceEnum::SOURCES.count + 1
|
15
|
+
end
|
12
16
|
end
|
@@ -2,13 +2,36 @@ FactoryGirl.define do
|
|
2
2
|
factory :brainzz_view_count, :class => Brainzz::ViewCount do
|
3
3
|
views { rand(1_000_000) + 1 }
|
4
4
|
day { DateTime.parse((DateTime.now - rand(100)).strftime('%F')) }
|
5
|
-
source {
|
5
|
+
source { generate :brainzz_view_count_source }
|
6
|
+
|
7
|
+
factory :brainzz_aggregate_view_count do
|
8
|
+
day nil
|
9
|
+
end
|
6
10
|
|
7
11
|
Brainzz::ViewSourceEnum::SOURCES.each do |key, value|
|
8
12
|
factory "brainzz_#{key}_view_count".to_sym,
|
9
13
|
:class => Brainzz::ViewCount do
|
10
14
|
source value
|
11
15
|
end
|
16
|
+
|
17
|
+
factory "brainzz_#{key}_aggregate_view_count".to_sym,
|
18
|
+
:class => Brainzz::ViewCount do
|
19
|
+
source value
|
20
|
+
day nil
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
factory :brainzz_unknown_view_count do
|
25
|
+
source nil
|
26
|
+
end
|
27
|
+
|
28
|
+
factory :brainzz_unknown_aggregate_view_count do
|
29
|
+
source Brainzz::ViewSourceEnum::UNKNOWN
|
30
|
+
day nil
|
31
|
+
end
|
32
|
+
|
33
|
+
initialize_with do
|
34
|
+
Brainzz::ViewCount.new({})
|
12
35
|
end
|
13
36
|
end
|
14
37
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Brainzz
|
2
|
+
class LikeCount < VideoStat
|
3
|
+
attr_accessor :likes
|
4
|
+
|
5
|
+
def initialize(hash)
|
6
|
+
super
|
7
|
+
|
8
|
+
@hash = hash
|
9
|
+
|
10
|
+
@likes = normalize_stat(likes_data)
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def likes_data
|
16
|
+
data && keys['likes'] && data[keys['likes']]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Brainzz
|
2
|
+
class VideoStat < BaseModel
|
3
|
+
attr_accessor :day
|
4
|
+
|
5
|
+
def initialize(hash)
|
6
|
+
@hash = hash
|
7
|
+
|
8
|
+
@day = transform_date(day_data)
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def data
|
14
|
+
@hash['data'] || @hash[:data]
|
15
|
+
end
|
16
|
+
|
17
|
+
def keys
|
18
|
+
@hash['keys'] || @hash[:keys]
|
19
|
+
end
|
20
|
+
|
21
|
+
def day_data
|
22
|
+
data && keys['day'] && data[keys['day']]
|
23
|
+
end
|
24
|
+
|
25
|
+
def normalize_stat(stat)
|
26
|
+
stat.to_i if stat
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -1,20 +1,29 @@
|
|
1
1
|
module Brainzz
|
2
|
-
class ViewCount <
|
3
|
-
attr_accessor :views, :
|
2
|
+
class ViewCount < VideoStat
|
3
|
+
attr_accessor :views, :source
|
4
4
|
|
5
|
-
def initialize(
|
6
|
-
|
7
|
-
|
8
|
-
@
|
5
|
+
def initialize(hash)
|
6
|
+
super
|
7
|
+
|
8
|
+
@hash = hash
|
9
|
+
|
10
|
+
@views = normalize_stat(views_data)
|
11
|
+
@source = source_value(source_data)
|
9
12
|
end
|
10
13
|
|
11
14
|
private
|
12
15
|
|
13
|
-
def
|
14
|
-
|
16
|
+
def views_data
|
17
|
+
data && keys['views'] && data[keys['views']]
|
18
|
+
end
|
19
|
+
|
20
|
+
def source_data
|
21
|
+
data && keys['insightTrafficSourceType'] &&
|
22
|
+
data[keys['insightTrafficSourceType']]
|
15
23
|
end
|
16
24
|
|
17
25
|
def source_value(source)
|
26
|
+
return if source.nil?
|
18
27
|
source = '' unless source.is_a?(String)
|
19
28
|
Brainzz::ViewSourceEnum::SOURCES[source.downcase]
|
20
29
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Brainzz
|
2
|
+
class VideoStatsResponse < Reverb::Response
|
3
|
+
class << self
|
4
|
+
def model
|
5
|
+
@model
|
6
|
+
end
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
def make_with_model(model)
|
11
|
+
@model = model
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def on_success
|
18
|
+
self.data = []
|
19
|
+
keys = column_headers
|
20
|
+
body['rows'].each do |row|
|
21
|
+
self.data << self.class.model.new({
|
22
|
+
:data => row,
|
23
|
+
:keys => keys,
|
24
|
+
})
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def column_headers
|
29
|
+
column_headers = {}
|
30
|
+
|
31
|
+
body['columnHeaders'].each_with_index do |header, index|
|
32
|
+
column_headers[header['name']] = index
|
33
|
+
end
|
34
|
+
|
35
|
+
column_headers
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
metadata
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: brainzz
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Travis Herrick
|
8
8
|
- Joshua Book
|
9
|
+
- Haskel Ash
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date: 2015-
|
13
|
+
date: 2015-04-08 00:00:00.000000000 Z
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
name: faraday
|
@@ -180,29 +181,38 @@ files:
|
|
180
181
|
- lib/brainzz/commands/analytics_command.rb
|
181
182
|
- lib/brainzz/commands/base_command.rb
|
182
183
|
- lib/brainzz/commands/data_command.rb
|
184
|
+
- lib/brainzz/commands/like_count_by_day_command.rb
|
185
|
+
- lib/brainzz/commands/like_totals_command.rb
|
183
186
|
- lib/brainzz/commands/playlist_items_command.rb
|
184
187
|
- lib/brainzz/commands/video_details_command.rb
|
185
|
-
- lib/brainzz/commands/
|
188
|
+
- lib/brainzz/commands/video_stats_command.rb
|
189
|
+
- lib/brainzz/commands/view_count_by_day_command.rb
|
190
|
+
- lib/brainzz/commands/view_totals_command.rb
|
186
191
|
- lib/brainzz/core.rb
|
187
192
|
- lib/brainzz/enums/view_source_enum.rb
|
188
193
|
- lib/brainzz/factories.rb
|
194
|
+
- lib/brainzz/factories/like_count.rb
|
189
195
|
- lib/brainzz/factories/playlist_item.rb
|
190
196
|
- lib/brainzz/factories/playlist_items_wrapper.rb
|
191
197
|
- lib/brainzz/factories/sequences.rb
|
192
198
|
- lib/brainzz/factories/video.rb
|
193
199
|
- lib/brainzz/factories/view_count.rb
|
194
200
|
- lib/brainzz/models/base_model.rb
|
201
|
+
- lib/brainzz/models/like_count.rb
|
195
202
|
- lib/brainzz/models/playlist_item.rb
|
196
203
|
- lib/brainzz/models/playlist_items_wrapper.rb
|
197
204
|
- lib/brainzz/models/video.rb
|
205
|
+
- lib/brainzz/models/video_stat.rb
|
198
206
|
- lib/brainzz/models/view_count.rb
|
199
207
|
- lib/brainzz/params/analytics_params.rb
|
200
208
|
- lib/brainzz/params/base_params.rb
|
201
209
|
- lib/brainzz/params/playlist_items_params.rb
|
202
210
|
- lib/brainzz/params/video_details_params.rb
|
203
|
-
- lib/brainzz/params/
|
211
|
+
- lib/brainzz/params/video_stats_params.rb
|
212
|
+
- lib/brainzz/responses/like_count_response.rb
|
204
213
|
- lib/brainzz/responses/playlist_items_response.rb
|
205
214
|
- lib/brainzz/responses/video_details_response.rb
|
215
|
+
- lib/brainzz/responses/video_stats_response.rb
|
206
216
|
- lib/brainzz/responses/view_count_response.rb
|
207
217
|
- lib/brainzz/services/access_token_service.rb
|
208
218
|
- license/gplv3.md
|
@@ -1,41 +0,0 @@
|
|
1
|
-
module Brainzz
|
2
|
-
class ViewCountCommand < AnalyticsCommand
|
3
|
-
class << self
|
4
|
-
def execute(video_id, start_date, end_date)
|
5
|
-
view_count_params = ViewCountParams.new({
|
6
|
-
:video_id => video_id,
|
7
|
-
:start_date => start_date,
|
8
|
-
:end_date => end_date
|
9
|
-
})
|
10
|
-
|
11
|
-
if view_count_params.valid?
|
12
|
-
ViewCountResponse.new get(view_count_params)
|
13
|
-
else
|
14
|
-
ViewCountResponse.new
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
private
|
19
|
-
|
20
|
-
def endpoint
|
21
|
-
'reports'
|
22
|
-
end
|
23
|
-
|
24
|
-
def params(view_count_params)
|
25
|
-
super.merge({
|
26
|
-
'ids' => "contentOwner==#{content_owner}",
|
27
|
-
'filters' => "video==#{view_count_params.video_id}",
|
28
|
-
'metrics' => 'views',
|
29
|
-
'dimensions' => 'day,insightTrafficSourceType',
|
30
|
-
'start-date' => view_count_params.start_date,
|
31
|
-
'end-date' => view_count_params.end_date,
|
32
|
-
'sort' => 'day',
|
33
|
-
})
|
34
|
-
end
|
35
|
-
|
36
|
-
def content_owner
|
37
|
-
ENV['BRAINZZ_CONTENT_OWNER']
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|