yt 0.32.3 → 0.33.1

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.
Files changed (116) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +2 -2
  3. data/.travis.yml +2 -4
  4. data/CHANGELOG.md +48 -2
  5. data/README.md +54 -41
  6. data/YOUTUBE_IT.md +4 -4
  7. data/bin/yt +2 -9
  8. data/lib/yt.rb +0 -1
  9. data/lib/yt/actions/get.rb +33 -0
  10. data/lib/yt/associations/has_reports.rb +9 -14
  11. data/lib/yt/collections/claims.rb +8 -0
  12. data/lib/yt/collections/content_owners.rb +6 -2
  13. data/lib/yt/collections/playlist_items.rb +10 -1
  14. data/lib/yt/collections/reports.rb +5 -7
  15. data/lib/yt/collections/snippets.rb +1 -1
  16. data/lib/yt/config.rb +54 -0
  17. data/lib/yt/models/account.rb +21 -1
  18. data/lib/yt/models/asset.rb +27 -4
  19. data/lib/yt/models/asset_metadata.rb +1 -1
  20. data/lib/yt/models/base.rb +2 -0
  21. data/lib/yt/models/channel.rb +2 -5
  22. data/lib/yt/models/claim.rb +11 -0
  23. data/lib/yt/models/configuration.rb +70 -0
  24. data/lib/yt/models/content_owner.rb +49 -0
  25. data/lib/yt/models/match_policy.rb +4 -6
  26. data/lib/yt/models/playlist.rb +12 -2
  27. data/lib/yt/models/playlist_item.rb +8 -1
  28. data/lib/yt/models/resource.rb +70 -4
  29. data/lib/yt/models/statistics_set.rb +2 -1
  30. data/lib/yt/models/url.rb +2 -60
  31. data/lib/yt/models/video.rb +16 -3
  32. data/lib/yt/request.rb +6 -2
  33. data/lib/yt/version.rb +1 -1
  34. data/yt.gemspec +6 -3
  35. metadata +44 -176
  36. data/spec/collections/claims_spec.rb +0 -30
  37. data/spec/collections/comment_threads_spec.rb +0 -46
  38. data/spec/collections/playlist_items_spec.rb +0 -44
  39. data/spec/collections/playlists_spec.rb +0 -27
  40. data/spec/collections/policies_spec.rb +0 -30
  41. data/spec/collections/references_spec.rb +0 -30
  42. data/spec/collections/reports_spec.rb +0 -30
  43. data/spec/collections/subscriptions_spec.rb +0 -25
  44. data/spec/collections/videos_spec.rb +0 -43
  45. data/spec/constants/geography_spec.rb +0 -16
  46. data/spec/errors/forbidden_spec.rb +0 -10
  47. data/spec/errors/missing_auth_spec.rb +0 -24
  48. data/spec/errors/no_items_spec.rb +0 -10
  49. data/spec/errors/request_error_spec.rb +0 -44
  50. data/spec/errors/server_error_spec.rb +0 -10
  51. data/spec/errors/unauthorized_spec.rb +0 -10
  52. data/spec/models/account_spec.rb +0 -138
  53. data/spec/models/annotation_spec.rb +0 -180
  54. data/spec/models/asset_spec.rb +0 -20
  55. data/spec/models/channel_spec.rb +0 -127
  56. data/spec/models/claim_event_spec.rb +0 -62
  57. data/spec/models/claim_history_spec.rb +0 -27
  58. data/spec/models/claim_spec.rb +0 -223
  59. data/spec/models/comment_spec.rb +0 -40
  60. data/spec/models/comment_thread_spec.rb +0 -93
  61. data/spec/models/content_detail_spec.rb +0 -52
  62. data/spec/models/content_owner_detail_spec.rb +0 -6
  63. data/spec/models/file_detail_spec.rb +0 -13
  64. data/spec/models/live_streaming_detail_spec.rb +0 -6
  65. data/spec/models/ownership_spec.rb +0 -59
  66. data/spec/models/player_spec.rb +0 -13
  67. data/spec/models/playlist_item_spec.rb +0 -120
  68. data/spec/models/playlist_spec.rb +0 -138
  69. data/spec/models/policy_rule_spec.rb +0 -63
  70. data/spec/models/policy_spec.rb +0 -41
  71. data/spec/models/rating_spec.rb +0 -12
  72. data/spec/models/reference_spec.rb +0 -249
  73. data/spec/models/request_spec.rb +0 -204
  74. data/spec/models/resource_spec.rb +0 -42
  75. data/spec/models/right_owner_spec.rb +0 -71
  76. data/spec/models/snippet_spec.rb +0 -13
  77. data/spec/models/statistics_set_spec.rb +0 -13
  78. data/spec/models/status_spec.rb +0 -13
  79. data/spec/models/subscription_spec.rb +0 -30
  80. data/spec/models/url_spec.rb +0 -78
  81. data/spec/models/video_category_spec.rb +0 -21
  82. data/spec/models/video_spec.rb +0 -669
  83. data/spec/requests/as_account/account_spec.rb +0 -148
  84. data/spec/requests/as_account/authentications_spec.rb +0 -127
  85. data/spec/requests/as_account/channel_spec.rb +0 -246
  86. data/spec/requests/as_account/channels_spec.rb +0 -18
  87. data/spec/requests/as_account/playlist_item_spec.rb +0 -55
  88. data/spec/requests/as_account/playlist_spec.rb +0 -218
  89. data/spec/requests/as_account/thumbnail.jpg +0 -0
  90. data/spec/requests/as_account/video.mp4 +0 -0
  91. data/spec/requests/as_account/video_spec.rb +0 -408
  92. data/spec/requests/as_content_owner/account_spec.rb +0 -29
  93. data/spec/requests/as_content_owner/advertising_options_set_spec.rb +0 -15
  94. data/spec/requests/as_content_owner/asset_spec.rb +0 -20
  95. data/spec/requests/as_content_owner/bulk_report_job_spec.rb +0 -19
  96. data/spec/requests/as_content_owner/channel_spec.rb +0 -1836
  97. data/spec/requests/as_content_owner/claim_history_spec.rb +0 -20
  98. data/spec/requests/as_content_owner/content_owner_spec.rb +0 -329
  99. data/spec/requests/as_content_owner/match_policy_spec.rb +0 -17
  100. data/spec/requests/as_content_owner/ownership_spec.rb +0 -25
  101. data/spec/requests/as_content_owner/playlist_spec.rb +0 -767
  102. data/spec/requests/as_content_owner/video_group_spec.rb +0 -112
  103. data/spec/requests/as_content_owner/video_spec.rb +0 -1211
  104. data/spec/requests/as_server_app/channel_spec.rb +0 -54
  105. data/spec/requests/as_server_app/comment_spec.rb +0 -22
  106. data/spec/requests/as_server_app/comment_thread_spec.rb +0 -27
  107. data/spec/requests/as_server_app/comment_threads_spec.rb +0 -41
  108. data/spec/requests/as_server_app/playlist_item_spec.rb +0 -30
  109. data/spec/requests/as_server_app/playlist_spec.rb +0 -33
  110. data/spec/requests/as_server_app/url_spec.rb +0 -94
  111. data/spec/requests/as_server_app/video_spec.rb +0 -60
  112. data/spec/requests/as_server_app/videos_spec.rb +0 -40
  113. data/spec/requests/unauthenticated/video_spec.rb +0 -14
  114. data/spec/spec_helper.rb +0 -20
  115. data/spec/support/fail_matcher.rb +0 -15
  116. data/spec/support/global_hooks.rb +0 -48
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 13d05d40be2a978569b4d9d95088169b27efbca654c6ac31e8cc80d404a2ccc3
4
- data.tar.gz: 5ac7a2bf2c181a01f4f94af8399e1b5896160f4f60964cc8f12f02ab61688e5f
3
+ metadata.gz: 94422f128aee1411a90f1fcb39a28ef13afa5f456bf15e9722eddcc3139a46c0
4
+ data.tar.gz: a8ee06716cc4018e217da1eb98ec416511e00f6f760f88cd11ab2b7f24dd6f24
5
5
  SHA512:
6
- metadata.gz: fc36a64935d1888ee29a6e93bf076a020d249598564117ad8da8df71eadefd4c0030ccb9f213ef9537f2a7f4428d2a37084b8e72126a7ac2c8e4e00772fc818c
7
- data.tar.gz: 7442494554ac18854f428149a591cf4f36eacce42b0c9f78053f2ff4cad792bb99f95bb1bfd963c49b5046357515ebd28fe67ecac62338999e933a1e8cfed289
6
+ metadata.gz: 28cab7081f268473eca6e3165389bd40411955dbc96046e6523bf87b9de1b3e216d121fdfb68dd474bc354fc7c3591bd2c395a03d1baa0d43e5c4e9372b346b3
7
+ data.tar.gz: 98454281ad9a072638d3a3a2f28d58ab8435258d55c2c167d3ff8dd6b89daf225e2d10dc0d473f3ecece6e9cd2205d1ab9c8957eeb15faf6b8c7ed52209b4966
data/.rspec CHANGED
@@ -1,3 +1,3 @@
1
- --format documentation
2
1
  --color
3
- --fail-fast
2
+ --exclude_pattern spec/requests/as_content_owner/*_spec.rb
3
+ --tag=~slow
@@ -3,7 +3,5 @@ notifications:
3
3
  email: true
4
4
  matrix:
5
5
  include:
6
- - rvm: 1.9.3
7
- gemfile: gemfiles/Gemfile.activesupport-3.x
8
- - rvm: 2.0.0
9
- gemfile: gemfiles/Gemfile.activesupport-4.x
6
+ - rvm: 2.6.3
7
+ gemfile: gemfiles/Gemfile.activesupport-4.x
@@ -6,6 +6,52 @@ 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.33.0 - 2020-10-19
10
+
11
+ * [BUGFIX] Only retry once when exchanging a refresh token
12
+
13
+ ## 0.33.0 - 2020-04-10
14
+
15
+ If your code calls reports methods such as `views`, `likes`, or `reports`,
16
+ do not include `by: :week` option since `7DayTotals` dimension will no longer be
17
+ supported by YouTube API as of [April 15, 2020](https://developers.google.com/youtube/analytics/revision_history#october-15,-2019).
18
+
19
+ Use `by: :day` option instead and add up the numbers from each day.
20
+
21
+ If you keep using `by: :week` option after this change it will raise an error
22
+ (before the gem upgrade) or it will run with `day` dimension instead (after
23
+ the gem upgrade, like any other random input).
24
+
25
+ * [REMOVAL] Remove `by: :week` option for reports.
26
+ * [FEATURE] Add back the option of initializing a resource by its URL.
27
+ * [BUGFIX] Limit retries on refreshing tokens
28
+
29
+ **Breaking change**
30
+
31
+ If your code is using constant `Yt::URL::CHANNEL_PATTERNS` etc then it's moved to `Yt::Resource::CHANNEL_PATTERNS`, `Yt::Resource::VIDEO_PATTERNS`, and `Yt::Resource::PLAYLIST_PATTERNS`.
32
+
33
+ ## 0.32.6 - 2020-02-07
34
+
35
+ * [FEATURE] Allow partnered channels to delete playlist item.
36
+ * [FEATURE] Allow partnered channels to update video.
37
+ * [FEATURE] Allow partnered channels to update playlist.
38
+ * [FEATURE] Allow partnered channels to upload thumbnail.
39
+ * [FEATURE] Allow partnered channels to create playlist item.
40
+
41
+ ## 0.32.5 - 2019-11-06
42
+
43
+ * [BUGFIX] Fix `MatchPolicy#update` and `Asset#update` by using `PUT` instead of `PATCH`
44
+ * Update `bin/yt` file to keep `yt info` command work
45
+
46
+ ## 0.32.4 - 2019-06-26
47
+
48
+ * [FEATURE] Add `ownership_effective` method to access asset ownership ("effective") via the asset object.
49
+ * [FEATURE] List content owners of others with `content_owner.content_owners`
50
+ * [FEATURE] Add `match_info` to insert claim request.
51
+ * [FEATURE] Add `upload_reference_file` method for Reference file upload (thank you @jcohenho)
52
+ * [FEATURE] Get one asset [by request](https://developers.google.com/youtube/partner/docs/v1/assets/get) (thank you @jcohenho)
53
+ * [FEATURE] Add `update` method to Yt::Claim (thank you @jcohenho)
54
+
9
55
  ## 0.32.3 - 2019-03-15
10
56
 
11
57
  * [ENHANCEMENT] Add `Yt::URL` to get id, kind, and its resource (channel, video, playlist)
@@ -448,11 +494,11 @@ If your code expects reports to return results **by day** then you **must** add
448
494
  the `by: :day` option to your report method. The new default is `by: :range`.
449
495
  For instance `channel.views` would return
450
496
 
451
- {Wed, 8 May 2014 => 12.4, Thu, 9 May 2014 => 3.2, Fri, 10 May 2014 => …}
497
+ {Wed, 8 May 2014 => 12.4, Thu, 9 May 2014 => 3.2, Fri, 10 May 2014 => …}
452
498
 
453
499
  and now returns the same as calling `channel.views by: :range`:
454
500
 
455
- {total: 3450}
501
+ {total: 3450}
456
502
 
457
503
  Additionally, if you expect reports **by day** then you **must** specify the
458
504
  `:since` option to your report method. Previously, this value was set to
data/README.md CHANGED
@@ -8,7 +8,7 @@ The **source code** is available on [GitHub](https://github.com/Fullscreen/yt) a
8
8
  [![Build Status](http://img.shields.io/travis/Fullscreen/yt/master.svg)](https://travis-ci.org/Fullscreen/yt)
9
9
  [![Coverage Status](http://img.shields.io/coveralls/Fullscreen/yt/master.svg)](https://coveralls.io/r/Fullscreen/yt)
10
10
  [![Dependency Status](http://img.shields.io/gemnasium/Fullscreen/yt.svg)](https://gemnasium.com/Fullscreen/yt)
11
- [![Code Climate](http://img.shields.io/codeclimate/github/Fullscreen/yt.svg)](https://codeclimate.com/github/Fullscreen/yt)
11
+ [![Code Climate](https://codeclimate.com/github/Fullscreen/yt.png)](https://codeclimate.com/github/Fullscreen/yt)
12
12
  [![Online docs](http://img.shields.io/badge/docs-✓-green.svg)](http://www.rubydoc.info/gems/yt/frames)
13
13
  [![Gem Version](http://img.shields.io/gem/v/yt.svg)](http://rubygems.org/gems/yt)
14
14
 
@@ -18,7 +18,6 @@ After [registering your app](#configuring-your-app), you can run commands like:
18
18
  channel = Yt::Channel.new id: 'UCxO1tY8h1AhOz0T4ENwmpow'
19
19
  channel.title #=> "Fullscreen"
20
20
  channel.public? #=> true
21
- channel.comment_count #=> 773
22
21
  channel.videos.count #=> 12
23
22
  ```
24
23
 
@@ -44,7 +43,7 @@ To install on your system, run
44
43
 
45
44
  To use inside a bundled Ruby project, add this line to the Gemfile:
46
45
 
47
- gem 'yt', '~> 0.28.0'
46
+ gem 'yt', '~> 0.32.0'
48
47
 
49
48
  Since the gem follows [Semantic Versioning](http://semver.org),
50
49
  indicating the full version in your Gemfile (~> *major*.*minor*.*patch*)
@@ -266,6 +265,11 @@ asset = content_owner.assets.where(id: 'A969176766549462', fetch_metadata: 'effe
266
265
  asset.metadata_effective.title #=> "Neu la anh" (different due to ownership conflicts)
267
266
  ```
268
267
 
268
+ ```ruby
269
+ asset = content_owner.assets.where(id: 'A125058570526569', fetch_ownership: 'effective').first
270
+ asset.ownership_effective.general_owners.first.owner # => "XOuN81q-MeEUVrsiZeK1lQ"
271
+ ```
272
+
269
273
  * to search for an asset
270
274
 
271
275
  ```ruby
@@ -295,6 +299,32 @@ claim.claim_history #=> #<Yt::Models::ClaimHistory ...>
295
299
  claim.claim_history.events[0].type #=> "claim_create"
296
300
 
297
301
  claim.delete #=> true
302
+
303
+ data = {
304
+ is_manual_claim: true,
305
+ content_type: 'audiovisual',
306
+ asset_id: 'A123123123123123',
307
+ policy: { id: 'S123123123123123' },
308
+ video_id: 'myvIdeoIdYT',
309
+ match_info: {
310
+ match_segments: [
311
+ {
312
+ manual_segment: {
313
+ start: '00:00:20.000',
314
+ finish: '00:01:20.000'
315
+ }
316
+ },
317
+ {
318
+ manual_segment: {
319
+ start: '00:02:30.000',
320
+ finish: '00:03:50.000'
321
+ }
322
+ }
323
+ ]
324
+ }
325
+ }
326
+
327
+ content_owner.claims.insert(data)
298
328
  ```
299
329
 
300
330
  *The methods above require to be authenticated as the video’s content owner (see below).*
@@ -492,55 +522,37 @@ end
492
522
  so use the approach that you prefer.
493
523
  If a variable is set in both places, then `Yt.configure` takes precedence.
494
524
 
495
- Why you should use Yt…
496
- ======================
497
-
498
- … and not [youtube_it](https://github.com/kylejginavan/youtube_it)?
499
- Because youtube_it does not support YouTube API V3, and the YouTube API V2 has
500
- been [officially deprecated as of March 4, 2014](https://developers.google.com/youtube/2.0/developers_guide_protocol_audience).
501
- If you need help upgrading your code, check [YOUTUBE_IT.md](https://github.com/Fullscreen/yt/blob/master/YOUTUBE_IT.md),
502
- a step-by-step comparison between youtube_it and Yt to make upgrade easier.
503
-
504
- … and not [Google Api Client](https://github.com/google/google-api-ruby-client)?
505
- Because Google Api Client is poorly coded, poorly documented and adds many
506
- dependencies, bloating the size of your project.
507
-
508
- … and not your own code? Because Yt is fully tested, well documented,
509
- has few dependencies and helps you forget about the burden of dealing with
510
- Google API!
511
-
512
525
  How to test
513
526
  ===========
514
527
 
515
- Yt comes with two different sets of tests:
528
+ To run tests:
516
529
 
517
- 1. tests in `spec/models`, `spec/collections` and `spec/errors` **do not hit** the YouTube API
518
- 1. tests in `spec/requests` **hit** the YouTube API and require authentication
530
+ ```bash
531
+ rspec
532
+ ```
519
533
 
520
- The reason why some tests actually hit the YouTube API is because they are
521
- meant to really integrate Yt with YouTube. YouTube API is not exactly
522
- *the most reliable* API out there, so we need to make sure that the responses
523
- match the documentation.
534
+ We recommend RSpec >= 3.8.
524
535
 
525
- You don’t have to run all the tests every time you change code.
526
- Travis CI is already set up to do this for when whenever you push a branch
527
- or create a pull request for this project.
536
+ Yt comes with two different sets of tests:
528
537
 
529
- To only run tests against models, collections and errors (which do not hit the API), type:
538
+ 1. Unit tests in `spec/models`, `spec/collections` and `spec/errors`
539
+ 2. Legacy integration tests in `spec/requests`
530
540
 
531
- ```bash
532
- rspec spec/models spec/collections spec/errors
533
- ```
541
+ Coming soon will be a new set of high-level integration tests.
534
542
 
535
- To also run live-tests against the YouTube API, type:
543
+ Integration tests are recorded with VCR. Some of the tests refer to
544
+ fixture data that an arbitrary account may not have access to. If you
545
+ need to modify one of these tests or re-record the cassette, we'd
546
+ suggest working against your own version of the testing setup. Then in
547
+ your pull request, we can help canonize your test/fixtures.
536
548
 
537
- ```bash
538
- rspec
539
- ```
549
+ Some of the integration tests require authentication. These can be set
550
+ with the following environment variables:
540
551
 
541
- This will fail unless you have set up a test YouTube application and some
542
- tests YouTube accounts to hit the API. Once again, you probably don’t need
543
- this, since Travis CI already takes care of running this kind of tests.
552
+ * `YT_TEST_CLIENT_ID`
553
+ * `YT_TEST_CLIENT_SECRET`
554
+ * `YT_TEST_API_KEY`
555
+ * `YT_TEST_REFRESH_TOKEN`
544
556
 
545
557
  How to release new versions
546
558
  ===========================
@@ -568,3 +580,4 @@ the [YouTube Analytics API](https://developers.google.com/youtube/analytics).
568
580
  If you find that a method is missing, fork the project, add the missing code,
569
581
  write the appropriate tests, then submit a pull request, and it will gladly
570
582
  be merged!
583
+
@@ -141,7 +141,7 @@ client = YouTubeIt::Client.new
141
141
  client.videos_by(:query => "penguin", :author => "liz")
142
142
  # with yt: the 'author' filter was removed from YouTube API V3, so the
143
143
  # request must be done using the channel of the requested author
144
- channel = Yt::Channel.new id: 'UCxxxxxxxxx'
144
+ channel = Yt::Channel.new url: 'youtube.com/liz'
145
145
  channel.videos.where(q: 'penguin')
146
146
  ```
147
147
 
@@ -176,7 +176,7 @@ client = YouTubeIt::Client.new
176
176
  client.videos_by(:user => 'liz')
177
177
  # with yt: the 'author' filter was removed from YouTube API V3, so the
178
178
  # request must be done using the channel of the requested author
179
- channel = Yt::Channel.new id: 'UCxxxxxxxxx'
179
+ channel = Yt::Channel.new url: 'youtube.com/liz'
180
180
  channel.videos.where(q: 'penguin')
181
181
  ```
182
182
 
@@ -188,7 +188,7 @@ client = YouTubeIt::Client.new
188
188
  client.videos_by(:favorites, :user => 'liz')
189
189
  # with yt: note that only *old* channels have a "Favorites" playlist, since
190
190
  # "Favorites" has been deprecated by YouTube in favor of "Liked Videos".
191
- channel = Yt::Channel.new id: 'UCxxxxxxxxx'
191
+ channel = Yt::Channel.new url: 'youtube.com/liz'
192
192
  channel.related_playlists.find{|p| p.title == 'Favorites'}
193
193
  ```
194
194
 
@@ -832,4 +832,4 @@ TODO
832
832
 
833
833
  $ client.activity(user) #default current user
834
834
 
835
- -->
835
+ -->
data/bin/yt CHANGED
@@ -8,20 +8,13 @@ rescue LoadError
8
8
  end
9
9
 
10
10
  Yt.configuration.log_level = :debug
11
- id = ARGV[1] || 'BPNYv0vd78A'
11
+ id = ARGV[1] || 'rdwz7QiG0lk'
12
12
 
13
13
  case ARGV[0]
14
14
  when 'info'
15
15
  puts "Yt version #{Yt::VERSION}"
16
16
  video = Yt::Video.new id: id
17
- puts video.annotations.first.text
18
- when 'annotations'
19
- video = Yt::Video.new id: id
20
- count = video.annotations.size
21
- puts "Video #{id} has #{count} #{'annotation'.pluralize count}"
22
- video.annotations.each.with_index do |annotation, i|
23
- puts "#{i+1}) #{annotation.text}"
24
- end
17
+ puts video.title
25
18
  when 'video'
26
19
  video = Yt::Video.new id: id
27
20
  views = "#{video.view_count} #{'view'.pluralize video.view_count}"
data/lib/yt.rb CHANGED
@@ -13,7 +13,6 @@ require 'yt/models/video_group'
13
13
  require 'yt/models/comment_thread'
14
14
  require 'yt/models/ownership'
15
15
  require 'yt/models/advertising_options_set'
16
- require 'yt/models/url'
17
16
 
18
17
  # An object-oriented Ruby client for YouTube.
19
18
  # Helps creating applications that need to interact with YouTube objects.
@@ -0,0 +1,33 @@
1
+ require 'yt/request'
2
+
3
+ module Yt
4
+ module Actions
5
+ module Get
6
+ include Base
7
+
8
+ def get
9
+ response = get_request(get_params).run
10
+ @data.merge! response.body
11
+ self
12
+ end
13
+
14
+ private
15
+
16
+ def get_request(params = {})
17
+ @list_request = Yt::Request.new(params).tap do |request|
18
+ print "#{request.as_curl}\n" if Yt.configuration.developing?
19
+ end
20
+ end
21
+
22
+ def get_params
23
+ {}.tap do |params|
24
+ params[:method] = :get
25
+ params[:host] = 'www.googleapis.com'
26
+ params[:auth] = @auth
27
+ params[:exptected_response] = Net::HTTPOK
28
+ params[:api_key] = Yt.configuration.api_key if Yt.configuration.api_key
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -10,7 +10,7 @@ module Yt
10
10
  # @option options [Array<Symbol>] :only The metrics to generate reports
11
11
  # for.
12
12
  # @option options [Symbol] :by (:day) The dimension to collect metrics
13
- # by. Accepted values are: +:day+, +:week+, +:month+.
13
+ # by. Accepted values are: +:day+, +:month+.
14
14
  # @option options [#to_date] :since The first day of the time-range.
15
15
  # Also aliased as +:from+.
16
16
  # @option options [#to_date] :until The last day of the time-range.
@@ -40,11 +40,6 @@ module Yt
40
40
  # @example Get the $1 for this and last month:
41
41
  # resource.$1 since: 1.month.ago, by: :month
42
42
  # # => {Wed, 01 Apr 2014..Thu, 30 Apr 2014 => 12.0, Fri, 01 May 2014..Sun, 31 May 2014 => 34.0, …}
43
- # @return [Hash<Range<Date, Date>, $2>] if grouped by week, the $1
44
- # for each week in the time-range.
45
- # @example Get the $1 for this and last week:
46
- # resource.$1 since: 1.week.ago, by: :week
47
- # # => {Wed, 01 Apr 2014..Tue, 07 Apr 2014 => 20.0, Wed, 08 Apr 2014..Tue, 14 Apr 2014 => 13.0, …}
48
43
  # @macro report
49
44
 
50
45
  # @!macro [new] report_with_range
@@ -75,19 +70,19 @@ module Yt
75
70
 
76
71
  # @!macro [new] report_by_day
77
72
  # @option options [Symbol] :by (:day) The dimension to collect $1 by.
78
- # Accepted values are: +:day+, +:week+, +:month+.
73
+ # Accepted values are: +:day+, +:month+.
79
74
  # @macro report_with_day
80
75
 
81
76
  # @!macro [new] report_by_day_and_country
82
77
  # @option options [Symbol] :by (:day) The dimension to collect $1 by.
83
- # Accepted values are: +:day+, +:week+, +:month+, :+range+.
78
+ # Accepted values are: +:day+, +:month+, :+range+.
84
79
  # @macro report_with_day
85
80
  # @macro report_with_range
86
81
  # @macro report_with_country
87
82
 
88
83
  # @!macro [new] report_by_day_and_state
89
84
  # @option options [Symbol] :by (:day) The dimension to collect $1 by.
90
- # Accepted values are: +:day+, +:week+, +:month+, :+range+.
85
+ # Accepted values are: +:day+, +:month+, :+range+.
91
86
  # @macro report_with_day
92
87
  # @macro report_with_range
93
88
  # @macro report_with_country_and_state
@@ -128,7 +123,7 @@ module Yt
128
123
 
129
124
  # @!macro [new] report_by_video_dimensions
130
125
  # @option options [Symbol] :by (:day) The dimension to collect $1 by.
131
- # Accepted values are: +:day+, +:week+, +:month+, +:range+,
126
+ # Accepted values are: +:day+, +:month+, +:range+,
132
127
  # +:traffic_source+,+:search_term+, +:playback_location+,
133
128
  # +:related_video+, +:embedded_player_location+.
134
129
  # @option options [Array<Symbol>] :includes ([:id]) if grouped by
@@ -162,7 +157,7 @@ module Yt
162
157
 
163
158
  # @!macro [new] report_by_channel_dimensions
164
159
  # @option options [Symbol] :by (:day) The dimension to collect $1 by.
165
- # Accepted values are: +:day+, +:week+, +:month+, +:range+,
160
+ # Accepted values are: +:day+, +:month+, +:range+,
166
161
  # +:traffic_source+, +:search_term+, +:playback_location+, +:video+,
167
162
  # +:related_video+, +:playlist+, +:embedded_player_location+.
168
163
  # @return [Hash<Symbol, $2>] if grouped by embedded player location,
@@ -175,7 +170,7 @@ module Yt
175
170
 
176
171
  # @!macro [new] report_by_playlist_dimensions
177
172
  # @option options [Symbol] :by (:day) The dimension to collect $1 by.
178
- # Accepted values are: +:day+, +:week+, +:month+, +:range+,
173
+ # Accepted values are: +:day+, +:month+, +:range+,
179
174
  # +:traffic_source+, +:playback_location+, +:related_video+, +:video+,
180
175
  # +:playlist+.
181
176
  # @macro report_with_channel_dimensions
@@ -228,7 +223,7 @@ module Yt
228
223
  def define_reports_method(metric, type)
229
224
  (@metrics ||= {})[metric] = type
230
225
  define_method :reports do |options = {}|
231
- from = options[:since] || options[:from] || (options[:by].in?([:day, :week, :month]) ? 5.days.ago : '2005-02-01')
226
+ from = options[:since] || options[:from] || (options[:by].in?([:day, :month]) ? 5.days.ago : '2005-02-01')
232
227
  to = options[:until] || options[:to] || Date.today
233
228
  location = options[:in]
234
229
  country = location.is_a?(Hash) ? location[:country] : location
@@ -252,7 +247,7 @@ module Yt
252
247
 
253
248
  def define_metric_method(metric)
254
249
  define_method metric do |options = {}|
255
- from = options[:since] || options[:from] || (options[:by].in?([:day, :week, :month]) ? 5.days.ago : '2005-02-01')
250
+ from = options[:since] || options[:from] || (options[:by].in?([:day, :month]) ? 5.days.ago : '2005-02-01')
256
251
  to = options[:until] || options[:to] || Date.today
257
252
  location = options[:in]
258
253
  country = location.is_a?(Hash) ? location[:country] : location
@@ -11,6 +11,7 @@ module Yt
11
11
  underscore_keys! attributes
12
12
  body = attributes.slice :asset_id, :video_id, :content_type, :policy
13
13
  body[:policy] = {id: attributes[:policy_id]} if attributes[:policy_id]
14
+ body[:match_info] = match_attributes(attributes[:match_info]) if attributes[:match_info]
14
15
  params = attributes.slice(:is_manual_claim).merge({on_behalf_of_content_owner: @auth.owner_name})
15
16
  do_insert(params: params, body: body)
16
17
  end
@@ -38,6 +39,13 @@ module Yt
38
39
  super
39
40
  end
40
41
 
42
+ def match_attributes(attributes = {})
43
+ segments = attributes[:match_segments].map do |segment|
44
+ { manual_segment: (segment[:manual_segment] || segment).slice(:start, :finish) }
45
+ end
46
+ { matchSegments: segments }
47
+ end
48
+
41
49
  # @return [Hash] the parameters to submit to YouTube to list claims
42
50
  # administered by the content owner.
43
51
  # @see https://developers.google.com/youtube/partner/docs/v1/claims/list