purdie 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7f46d0b6fa8e244b5a53666845b74189a9f507bf
4
- data.tar.gz: 614020df5e1ad274e2d9075ce3f3ec33c13e769a
3
+ metadata.gz: a14361f8e926e30d231a55883fd912f97d8819cd
4
+ data.tar.gz: d136e42f963c194290b756216219b47394b53961
5
5
  SHA512:
6
- metadata.gz: 79cde95a05ba138c62c6e84332a4f85203a111a2938e6c0ac45d5c5c61a69885e2f0afba1c5b97c16f8c24c56444844ea910396de14bcc316b607a12fabc983a
7
- data.tar.gz: fcd40af1139507167898355935d5c6a107643086256746f5a20fd866260ee922d8c65d4c72481c47a0f487ca788c5f4ec2c108418c15c7f3517eff779bfda7af
6
+ metadata.gz: 2ca8d9d2def2594320c9c74589ac5c796d9b98ef6f7df603947a17ee0b75320022b92270d4e774eea6d3aec9f293ab96fb17c0f7340fbf31f0325a787c3fbd6b
7
+ data.tar.gz: b00b45a907e843712b764e81f13f15388de8c8af60d88ce202ab7c4cd1e5c84e5294a24362bea809286a94d2262b1eabedeef516b249214adf39da5a73bca35f
@@ -1,6 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.2.0
3
+ - 2.3.0
4
4
  env:
5
5
  global:
6
6
  - secure: Pp7JaGVsZyPJPaZHgpWEibRDtpg4aWWTC9yb7SITdXTJ7AN5gZPLIyNuYfY937Ypq2JoJAI2yhJzfMPTQJ/FwF8OV1d9dUZyDv3R6aMsE41xJoL6X2bLtyh3TduULSIeiemoOEk4Y5JqOJb8JEyFMd0n+0AD+hn+HBPysIfwgHM=
data/README.md CHANGED
@@ -4,11 +4,10 @@
4
4
  [![Code Climate](http://img.shields.io/codeclimate/github/rawfunkmaharishi/purdie.svg?style=flat-square)](https://codeclimate.com/github/rawfunkmaharishi/purdie)
5
5
  [![Gem Version](http://img.shields.io/gem/v/purdie.svg?style=flat-square)](https://rubygems.org/gems/purdie)
6
6
  [![License](http://img.shields.io/:license-mit-blue.svg?style=flat-square)](http://rawfunkmaharishi.mit-license.org)
7
- [![Badges](http://img.shields.io/:badges-7/7-ff6799.svg?style=flat-square)](https://github.com/badges/badgerbadgerbadger)
8
7
 
9
8
  #Purdie
10
9
 
11
- We have music on SoundCloud, photos on Flickr, and videos on Vimeo, and we want to feature them on [http://rawfunkmaharishi.uk/](http://rawfunkmaharishi.uk/). Up until now, this has been managed by curating, by hand (or [very shonky scripts](https://github.com/rawfunkmaharishi/rawfunkmaharishi.github.io/blob/master/flickriser.rb)), [bits](https://github.com/rawfunkmaharishi/rawfunkmaharishi.github.io/blob/master/_data/sounds.yml) [of](https://github.com/rawfunkmaharishi/rawfunkmaharishi.github.io/blob/master/_data/pictures.yml) [YAML](https://github.com/rawfunkmaharishi/rawfunkmaharishi.github.io/blob/master/_data/videos.yml) to feed into Jekyll, but this gets old quickly, especially when you run into things like SoundCloud's decision to only expose the track ID deep inside the embeddable iframe code.
10
+ My band has music on SoundCloud, photos on Flickr, and videos on Vimeo, and we want to feature them on [http://rawfunkmaharishi.uk/](http://rawfunkmaharishi.uk/). Up until now, this has been managed by curating, by hand (or [very shonky scripts](https://github.com/rawfunkmaharishi/rawfunkmaharishi.github.io/blob/master/flickriser.rb)), [bits](https://github.com/rawfunkmaharishi/rawfunkmaharishi.github.io/blob/master/_data/soundcloud.yml) [of](https://github.com/rawfunkmaharishi/rawfunkmaharishi.github.io/blob/master/_data/flickr.yml) [YAML](https://github.com/rawfunkmaharishi/rawfunkmaharishi.github.io/blob/master/_data/vimeo.yml) to feed into Jekyll, but this gets old quickly, especially when you run into things like SoundCloud's decision to only expose the track ID deep inside the embeddable iframe code.
12
11
 
13
12
  But this is dumb. It's 2015 and everything has an API, so let's build a robot to do this stuff properly!
14
13
 
@@ -18,7 +17,7 @@ Up until now, the Hand-Crafted YAML (which sounds like a thing you may be able t
18
17
 
19
18
  ###Moving the hacks upstream
20
19
 
21
- Moving the metadata is not 100% foolproof, however: for example, we have photos on [our Flickr account](https://www.flickr.com/photos/rawfunkmaharishi/) which were not taken by us, but by our friend [Kim](http://www.kimberlycabbott.com/). But the Flickr API has no way of knowing this, so I've added a tag to those pictures which looks like `photographer:kim` and then I'm looking for and extracting that in this gem. Similarly, for the SoundCloud music, I'd like to tag them with a recording location but this is not supported, so I'm nailing that straight into the _Description_ field.
20
+ Moving the metadata is not 100% foolproof, however: for example, we have photos on [our Flickr account](https://www.flickr.com/photos/rawfunkmaharishi/) which were not taken by us, but by our friend [Kim](http://www.kimberlycabbott.com/). But the Flickr API has no way of knowing this, so I've added a tag to those pictures which looks like `photographer:kim` and then I'm looking for and extracting that in this gem. Similarly, for the SoundCloud music, I'd like to tag them with a recording location (and now an engineer's name) but this is not supported, so I'm nailing those into the _Description_ field as something YAML-ish.
22
21
 
23
22
  Am I going to regret these decisions? Almost certainly.
24
23
 
@@ -38,7 +37,7 @@ or
38
37
 
39
38
  ###Configuration
40
39
 
41
- You need to create a *_sources* directory in your Jekyll project, containing files with one-URL-per-line, like this:
40
+ You need to create a `_sources` directory in your Jekyll project, containing files with one-URL-per-line, like this:
42
41
 
43
42
  https://soundcloud.com/rawfunkmaharishi/hexaflexagon-1
44
43
  https://soundcloud.com/rawfunkmaharishi/junalbandi-3
@@ -47,13 +46,13 @@ It also resolves sets/albums on all of the supported services, so this kind of t
47
46
 
48
47
  https://www.flickr.com/photos/pikesley/sets/72157648589429938/
49
48
 
50
- ####Notes about *_sources*:
49
+ ####Notes about `_sources`:
51
50
 
52
51
  * Purdie maps each input file onto an output file, replacing any extension with _.yaml_, something like:
53
- * \_sources/flickr.csv -> \_data/flickr.yaml
54
- * \_sources/pictures.source -> \_data/pictures.yaml
55
- * \_sources/soundcloud.sounds -> \_data/soundcloud.yaml
56
- * \_sources/vimeo -> \_data/vimeo.yaml
52
+ * `_sources/flickr.csv` -> `_data/flickr.yaml`
53
+ * `_sources/pictures.source` -> `_data/pictures.yaml`
54
+ * `_sources/soundcloud.sounds` -> `_data/soundcloud.yaml`
55
+ * `_sources/vimeo` -> `_data/vimeo.yaml`
57
56
 
58
57
  * Mixing up different services in the same input file makes no sense to Purdie. Don't do this
59
58
  * If a URL appears multiple times in a resolved list, only the first appearance will be propagated to the output file
@@ -67,15 +66,13 @@ You also need a *.env* file with the relevant credentials in it:
67
66
 
68
67
  VIMEO_BEARER_TOKEN: this_is_bearer_token
69
68
 
70
- YOUTUBE_API_KEY: this_is_key_for_youtube
71
-
72
- (get those things from [Flickr](https://www.flickr.com/services/apps/create/apply), [SoundCloud](http://soundcloud.com/you/apps/new), [Vimeo](https://developer.vimeo.com/apps/new) and [YouTube](https://console.developers.google.com/project))
69
+ (get those things from [Flickr](https://www.flickr.com/services/apps/create/apply), [SoundCloud](http://soundcloud.com/you/apps/new) and [Vimeo](https://developer.vimeo.com/apps/new)
73
70
 
74
71
  And then you can run
75
72
 
76
73
  purdie fetch
77
74
 
78
- (`fetch` is the default task (in fact currently the only task), so just `purdie` will work) and it will dump out YAML files into *_data*:
75
+ (`fetch` is the default task (in fact currently the only task), so just `purdie` will work) and it will dump out YAML files into `_data`:
79
76
 
80
77
  flickr.yaml
81
78
  pictures.yaml
@@ -86,7 +83,7 @@ ready for Jekyll to consume.
86
83
 
87
84
  ###Customisation
88
85
 
89
- You can supply your own *_config/purdie.yaml* file to specify a few things:
86
+ You can supply your own `_config/purdie.yaml` file to specify a few things:
90
87
 
91
88
  # Flickr photos are happy to have a null title
92
89
  default_title: Raw Funk Maharishi
@@ -108,7 +105,7 @@ Tread carefully for now, because my metadata hacks aren't fully documented, and
108
105
 
109
106
  ##What next?
110
107
 
111
- There's no reason I couldn't support other services - I've already added [YouTube](https://github.com/rawfunkmaharishi/purdie/blob/master/spec/services/youtube_spec.rb) [support](https://github.com/rawfunkmaharishi/purdie/blob/master/lib/purdie/services/youtube.rb) and others should be fairly simple. There's some introspection magic at the heart of all of this which means that as long as each service is represented by a class that:
108
+ There's no reason I couldn't support other services. There's some introspection magic at the heart of all of this which means that as long as each service is represented by a class that:
112
109
 
113
110
  * includes the `Purdie::Service` module, and
114
111
  * sports a `::matcher` class method which returns a string which will pick a URL out of an input file, and
@@ -13,24 +13,28 @@ Feature: Soundcloud set
13
13
  ---
14
14
  - title: Hexaflexagon
15
15
  id: 193008299
16
+ url: http://soundcloud.com/rawfunkmaharishi/hexaflexagon-1
16
17
  location: Islington Academy
17
18
  date: '2015-02-18'
18
19
  license: Attribution-NonCommercial-ShareAlike
19
20
  license_url: http://creativecommons.org/licenses/by-nc-sa/4.0/
20
21
  - title: Beer, Of Course, But Why
21
22
  id: 193006525
23
+ url: http://soundcloud.com/rawfunkmaharishi/beer-of-course-but-why
22
24
  location: Islington Academy
23
25
  date: '2015-02-18'
24
26
  license: Attribution-NonCommercial-ShareAlike
25
27
  license_url: http://creativecommons.org/licenses/by-nc-sa/4.0/
26
28
  - title: Junalbandi
27
29
  id: 193005357
30
+ url: http://soundcloud.com/rawfunkmaharishi/junalbandi-3
28
31
  location: Islington Academy
29
32
  date: '2015-02-18'
30
33
  license: Attribution-NonCommercial-ShareAlike
31
34
  license_url: http://creativecommons.org/licenses/by-nc-sa/4.0/
32
35
  - title: Bernard
33
36
  id: 192841052
37
+ url: http://soundcloud.com/rawfunkmaharishi/bernard
34
38
  location: Islington Academy
35
39
  date: '2015-02-18'
36
40
  license: Attribution-NonCommercial-ShareAlike
@@ -12,6 +12,7 @@ Feature: Soundcloud
12
12
  """
13
13
  - title: Hexaflexagon
14
14
  id: 193008299
15
+ url: http://soundcloud.com/rawfunkmaharishi/hexaflexagon-1
15
16
  location: Islington Academy
16
17
  date: '2015-02-18'
17
18
  license: Attribution-NonCommercial-ShareAlike
@@ -30,12 +31,14 @@ Feature: Soundcloud
30
31
  """
31
32
  - title: Hexaflexagon
32
33
  id: 193008299
34
+ url: http://soundcloud.com/rawfunkmaharishi/hexaflexagon-1
33
35
  location: Islington Academy
34
36
  date: '2015-02-18'
35
37
  license: Attribution-NonCommercial-ShareAlike
36
38
  license_url: http://creativecommons.org/licenses/by-nc-sa/4.0/
37
39
  - title: Junalbandi
38
40
  id: 193005357
41
+ url: http://soundcloud.com/rawfunkmaharishi/junalbandi-3
39
42
  location: Islington Academy
40
43
  date: '2015-02-18'
41
44
  license: Attribution-NonCommercial-ShareAlike
@@ -20,4 +20,3 @@ require 'purdie/service'
20
20
  require 'purdie/services/soundcloud'
21
21
  require 'purdie/services/flickr'
22
22
  require 'purdie/services/vimeo'
23
- require 'purdie/services/youtube'
@@ -21,7 +21,8 @@ module Purdie
21
21
  results = {}
22
22
  results['title'] = track['title']
23
23
  results['id'] = track['id']
24
-
24
+ results['url'] = track['permalink_url']
25
+
25
26
  description = YAML.load track['description']
26
27
  if description.class == Hash
27
28
  description.keys.each do |k|
@@ -1,3 +1,3 @@
1
1
  module Purdie
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
@@ -25,7 +25,6 @@ Gem::Specification.new do |spec|
25
25
  spec.add_dependency 'flickraw-cached', '= 20120701'
26
26
  spec.add_dependency 'soundcloud', '~> 0.3'
27
27
  spec.add_dependency 'activesupport', '~> 4.2'
28
- spec.add_dependency 'google-api-client', '~> 0.8'
29
28
 
30
29
  spec.add_development_dependency 'bundler', '~> 1.7'
31
30
  spec.add_development_dependency 'rake', '~> 10.0'
@@ -85,31 +85,5 @@ module Purdie
85
85
  }
86
86
  end
87
87
  end
88
-
89
- describe YouTube do
90
- after :each do
91
- reset_env
92
- end
93
-
94
- it 'responds usefully in the face of no credentials' do
95
- unset_env
96
- y = YouTube.new
97
- expect { y.distill 'https://www.youtube.com/watch?v=JCix1XW329g' }.to raise_exception { |e|
98
- expect(e).to be_a Purdie::CredentialsException
99
- expect(e.service.class).to eq Purdie::Services::YouTube
100
- expect(e.message).to eq 'missing'
101
- }
102
- end
103
-
104
- it 'responds usefully in the face of duff credentials' do
105
- randomise_env
106
- y = YouTube.new
107
- expect { y.distill 'https://www.youtube.com/watch?v=JCix1XW329g' }.to raise_exception { |e|
108
- expect(e).to be_a Purdie::CredentialsException
109
- expect(e.service.class).to eq Purdie::Services::YouTube
110
- expect(e.message).to eq 'duff'
111
- }
112
- end
113
- end
114
88
  end
115
89
  end
@@ -30,11 +30,5 @@ module Purdie
30
30
  expect(Purdie.strip_scheme resolved[0]).to eq '//soundcloud.com/rawfunkmaharishi/beer-of-course-but-why'
31
31
  expect(Purdie.strip_scheme resolved[2]).to eq '//soundcloud.com/rawfunkmaharishi/junalbandi-3'
32
32
  end
33
-
34
- it 'resolves a YouTube playlist', :vcr do
35
- resolved = Resolver.resolve 'https://www.youtube.com/playlist?list=PLuPLM2FI60-OIgFTc9YCrGgH5XWGT6znV'
36
- expect(resolved.count).to eq 9
37
- expect(Purdie.strip_scheme resolved.first).to eq '//youtube.com/watch?v=U23Ezi6q30E'
38
- end
39
33
  end
40
34
  end
@@ -17,6 +17,7 @@ module Purdie
17
17
  "---
18
18
  title: Hexaflexagon
19
19
  id: 193008299
20
+ url: http://soundcloud.com/rawfunkmaharishi/hexaflexagon-1
20
21
  location: Islington Academy
21
22
  date: '2015-02-18'
22
23
  license: Attribution-NonCommercial-ShareAlike
@@ -31,6 +32,7 @@ license_url: http://creativecommons.org/licenses/by-nc-sa/4.0/
31
32
  "---
32
33
  title: Don The Crown
33
34
  id: 234830006
35
+ url: http://soundcloud.com/rawfunkmaharishi/don-the-crown-1
34
36
  location: Rogue Studios
35
37
  engineer: Alessio
36
38
  date: '2015-11-25'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: purdie
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - pikesley
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-28 00:00:00.000000000 Z
11
+ date: 2016-01-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -108,20 +108,6 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '4.2'
111
- - !ruby/object:Gem::Dependency
112
- name: google-api-client
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: '0.8'
118
- type: :runtime
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: '0.8'
125
111
  - !ruby/object:Gem::Dependency
126
112
  name: bundler
127
113
  requirement: !ruby/object:Gem::Requirement
@@ -358,8 +344,6 @@ files:
358
344
  - features/support/vcr.rb
359
345
  - features/vimeo-albums.feature
360
346
  - features/vimeo.feature
361
- - features/youtube-playlist.feature
362
- - features/youtube.feature
363
347
  - lib/purdie.rb
364
348
  - lib/purdie/bernard.rb
365
349
  - lib/purdie/cli.rb
@@ -373,7 +357,6 @@ files:
373
357
  - lib/purdie/services/flickr.rb
374
358
  - lib/purdie/services/soundcloud.rb
375
359
  - lib/purdie/services/vimeo.rb
376
- - lib/purdie/services/youtube.rb
377
360
  - lib/purdie/source_list.rb
378
361
  - lib/purdie/version.rb
379
362
  - purdie.gemspec
@@ -387,7 +370,6 @@ files:
387
370
  - spec/purdie/services/flickr_spec.rb
388
371
  - spec/purdie/services/soundcloud_spec.rb
389
372
  - spec/purdie/services/vimeo_spec.rb
390
- - spec/purdie/services/youtube_spec.rb
391
373
  - spec/purdie/source_list_spec.rb
392
374
  - spec/spec_helper.rb
393
375
  - spec/support/fixtures/output-generator
@@ -450,7 +432,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
450
432
  version: '0'
451
433
  requirements: []
452
434
  rubyforge_project:
453
- rubygems_version: 2.4.5
435
+ rubygems_version: 2.5.1
454
436
  signing_key:
455
437
  specification_version: 4
456
438
  summary: Capture metadata from Flickr, SoundCloud et al for when we're building a
@@ -504,8 +486,6 @@ test_files:
504
486
  - features/support/vcr.rb
505
487
  - features/vimeo-albums.feature
506
488
  - features/vimeo.feature
507
- - features/youtube-playlist.feature
508
- - features/youtube.feature
509
489
  - spec/purdie/bernard_spec.rb
510
490
  - spec/purdie/config_spec.rb
511
491
  - spec/purdie/duff_keys_spec.rb
@@ -516,7 +496,6 @@ test_files:
516
496
  - spec/purdie/services/flickr_spec.rb
517
497
  - spec/purdie/services/soundcloud_spec.rb
518
498
  - spec/purdie/services/vimeo_spec.rb
519
- - spec/purdie/services/youtube_spec.rb
520
499
  - spec/purdie/source_list_spec.rb
521
500
  - spec/spec_helper.rb
522
501
  - spec/support/fixtures/output-generator
@@ -559,4 +538,3 @@ test_files:
559
538
  - spec/vcr/Purdie_SourceList/resolve_sets/resolves_a_Flickr_set.yml
560
539
  - spec/vcr/Purdie_SourceList/resolve_sets/resolves_a_SoundCloud_set.yml
561
540
  - spec/vcr/Purdie_SourceList/resolves_a_Flickr_set.yml
562
- has_rdoc:
@@ -1,52 +0,0 @@
1
- @vcr
2
- Feature: YouTube playlists
3
-
4
- Scenario: Generate YAML for a YouTube playlist
5
- Given a file named "_sources/youtube" with:
6
- """
7
- https://www.youtube.com/playlist?list=PLuPLM2FI60-OIgFTc9YCrGgH5XWGT6znV
8
- """
9
- When I successfully run `purdie fetch`
10
- Then a file named "_data/youtube.yaml" should exist
11
- And the file "_data/youtube.yaml" should contain:
12
- """
13
- ---
14
- - title: Chuck Rainey - Bernard Purdie Project "Love the One Your With...Drink Muddy
15
- Water"
16
- id: U23Ezi6q30E
17
- license: YouTube
18
- license_url: https://www.youtube.com/static?gl=GB&template=terms
19
- - title: Godfathers of Groove Bernard "Pretty" Purdie,Grant Green Jr,Ruben Wilson
20
- March 30-31
21
- id: _ZbWTg8G6eM
22
- license: YouTube
23
- license_url: https://www.youtube.com/static?gl=GB&template=terms
24
- - title: Pretty Purdie - Good Livin' (Good Lovin') HQ
25
- id: zJnnNZk9o0Q
26
- license: YouTube
27
- license_url: https://www.youtube.com/static?gl=GB&template=terms
28
- - title: Hot Popcorn Bernard Purdie
29
- id: baQe6MoSAHw
30
- license: YouTube
31
- license_url: https://www.youtube.com/static?gl=GB&template=terms
32
- - title: Red Beans and Rice Bernard Purdie
33
- id: NLFP1T1e2BA
34
- license: YouTube
35
- license_url: https://www.youtube.com/static?gl=GB&template=terms
36
- - title: Bernard Purdie - Ad Lib
37
- id: E9E0WxLbqVA
38
- license: YouTube
39
- license_url: https://www.youtube.com/static?gl=GB&template=terms
40
- - title: Bernard Purdie - Black Purd's Theme
41
- id: wa-K4LouFVk
42
- license: YouTube
43
- license_url: https://www.youtube.com/static?gl=GB&template=terms
44
- - title: Bernard "Pretty" Purdie - Heavy Soul Slinger
45
- id: LatmKZQd7-s
46
- license: YouTube
47
- license_url: https://www.youtube.com/static?gl=GB&template=terms
48
- - title: 'Bernard "Pretty" Purdie: Funky Grooves in Japan'
49
- id: P842kq0bnOc
50
- license: YouTube
51
- license_url: https://www.youtube.com/static?gl=GB&template=terms
52
- """
@@ -1,20 +0,0 @@
1
- @vcr
2
- Feature: YouTube
3
-
4
- Scenario: Generate YouTube YAML
5
- Given a file named "_sources/youtube.movies" with:
6
- """
7
- https://www.youtube.com/watch?v=Qt_J0jNqtZg&list=PLuPLM2FI60-M0-aWejF9WgB-Dkt1TuQXv&index=2
8
- """
9
- When I successfully run `purdie fetch`
10
- Then a file named "_data/youtube.yaml" should exist
11
- And the file "_data/youtube.yaml" should contain:
12
- """
13
- - title: Sam Pikesley – Vandalising your Github commit history for fun and profit
14
- id: Qt_J0jNqtZg
15
- license: Attribution
16
- license_url: https://creativecommons.org/licenses/by/3.0/
17
- """
18
- And a file named "_data/soundcloud.yaml" should not exist
19
- And a file named "_data/vimeo.yaml" should not exist
20
- And a file named "_data/flickr.yaml" should not exist
@@ -1,104 +0,0 @@
1
- require 'google/api_client'
2
-
3
- module Purdie
4
- module Services
5
- class YouTube
6
- include Service
7
-
8
- API_SERVICE_NAME = 'youtube'
9
- API_VERSION = 'v3'
10
-
11
- def configure
12
- @api_service_name = 'youtube'
13
- @api_version = 'v3'
14
- super
15
- end
16
-
17
- def client
18
- @client ||= Google::APIClient.new(
19
- key: ENV['YOUTUBE_API_KEY'],
20
- authorization: nil,
21
- application_name: self.class.name.split('::').first,
22
- application_version: Purdie::VERSION
23
- )
24
- end
25
-
26
- def yt_service
27
- @yt_service ||= client.discovered_api(
28
- @api_service_name,
29
- @api_version
30
- )
31
- end
32
-
33
- def get_data id, part
34
- client.execute!(
35
- api_method: yt_service.videos.list,
36
- parameters: {
37
- id: id,
38
- part: part
39
- }
40
- )
41
- end
42
-
43
- def get url
44
- begin
45
- data = get_data Purdie.get_id(url), 'status,snippet'
46
- JSON.parse data.body
47
- rescue Google::APIClient::ClientError => ce
48
- raise Purdie::CredentialsException.new self, 'missing' if ce.message.match /Daily Limit for Unauthenticated Use Exceeded/
49
- raise Purdie::CredentialsException.new self, 'duff' if ce.message.match /Bad Request/
50
- end
51
- end
52
-
53
- def distill url
54
- video = get url
55
- results = {}
56
-
57
- results['title'] = video['items'][0]['snippet']['localized']['title']
58
- results['id'] = Purdie.get_id(url)
59
-
60
- results.attach_license self, video['items'][0]['status']['license']
61
-
62
- results
63
- end
64
-
65
- def self.resolve url
66
- query = CGI.parse(URI.parse(url).query).keys
67
- return [url] unless (query.include?('list') and not query.include?('index'))
68
-
69
- set = YouTube.client.execute!(
70
- api_method: YouTube.yt_service.playlist_items.list,
71
- parameters: {
72
- playlistId: 'PLuPLM2FI60-OIgFTc9YCrGgH5XWGT6znV',
73
- part: 'contentDetails',
74
- maxResults: 50
75
- }
76
- ).body
77
-
78
- ids = JSON.parse(set)['items'].map { |v| v['contentDetails']['videoId'] }
79
-
80
- ids.map { |id| "https://youtube.com/watch?v=#{id}"}
81
- end
82
-
83
- def self.client
84
- Google::APIClient.new(
85
- key: ENV['YOUTUBE_API_KEY'],
86
- authorization: nil,
87
- application_name: self.class.name.split('::').first,
88
- application_version: Purdie::VERSION
89
- )
90
- end
91
-
92
- def self.yt_service
93
- client.discovered_api(
94
- API_SERVICE_NAME,
95
- API_VERSION
96
- )
97
- end
98
-
99
- def self.matcher
100
- 'youtube.com'
101
- end
102
- end
103
- end
104
- end
@@ -1,40 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Purdie
4
- module Services
5
- describe YouTube do
6
- before :each do
7
- @yt = YouTube.new
8
- end
9
-
10
- it 'gets a video', :vcr do
11
- expect(@yt.get 'https://www.youtube.com/watch?v=JCix1XW329g').to be_a Hash
12
- end
13
-
14
- it 'has yaml for a video', :vcr do
15
- dist = @yt.distill 'https://www.youtube.com/watch?v=JCix1XW329g'
16
- expect(dist.to_yaml).to eq(
17
- "---
18
- title: EMFCamp 2014 Day 3 Lightning talk 6
19
- id: JCix1XW329g
20
- license: Attribution
21
- license_url: https://creativecommons.org/licenses/by/3.0/
22
- "
23
- )
24
- end
25
-
26
- it 'gets the correct license', :vcr do
27
- vid = @yt.distill 'https://www.youtube.com/watch?v=baQe6MoSAHw'
28
- expect(vid['license']).to eq 'YouTube'
29
- end
30
-
31
- context 'resolve a playlist', :vcr do
32
- it 'resolves a playlist from a shitty YouTube URL', :vcr do
33
- list = YouTube.resolve 'https://www.youtube.com/playlist?list=PLuPLM2FI60-OIgFTc9YCrGgH5XWGT6znV'
34
- expect(list.count).to eq 9
35
- expect(list[8]).to eq 'https://youtube.com/watch?v=P842kq0bnOc'
36
- end
37
- end
38
- end
39
- end
40
- end