audiosearch 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/audiosearch.rb +205 -0
- metadata +142 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f48135672343647101342f966247f37cfcf30086
|
4
|
+
data.tar.gz: 99a4dc4c7c139b2ec01e89bb5d7d5463d7cb02a0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 51cfcb3319afaf74e9f271aade6b254c60ca843355e9fb230d2eb4607f8e215c71b657b8f08fa0ec97c41af31b73f05032194c4e224a5fd4e6186a87805b7bd8
|
7
|
+
data.tar.gz: 14e79de60fe366655764d06bf8b4107d2389ec5b44afc88eda410391cfea63ba6f776485bc1443965a1f4f9775aa5d6c8ea2336bfd52468247dc4c5c88fb8b77
|
data/lib/audiosearch.rb
ADDED
@@ -0,0 +1,205 @@
|
|
1
|
+
# Audiosear.ch Ruby Client
|
2
|
+
# Copyright 2015 - Pop Up Archive
|
3
|
+
# Licensed under Apache 2 license - see LICENSE file
|
4
|
+
#
|
5
|
+
#
|
6
|
+
|
7
|
+
require 'rubygems'
|
8
|
+
require 'json'
|
9
|
+
require 'faraday_middleware'
|
10
|
+
require 'oauth2'
|
11
|
+
require 'uri'
|
12
|
+
|
13
|
+
module Audiosearch
|
14
|
+
|
15
|
+
module Error
|
16
|
+
class NotFound < StandardError
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class FaradayErrHandler < Faraday::Response::Middleware
|
22
|
+
def on_complete(env)
|
23
|
+
# Ignore any non-error response codes
|
24
|
+
return if (status = env[:status]) < 400
|
25
|
+
#puts "got response status #{status}"
|
26
|
+
case status
|
27
|
+
when 404
|
28
|
+
#raise Error::NotFound
|
29
|
+
# 404 errors not fatal
|
30
|
+
else
|
31
|
+
#puts pp(env)
|
32
|
+
super # let parent class deal with it
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
class Client
|
38
|
+
|
39
|
+
attr_accessor :host
|
40
|
+
attr_accessor :debug
|
41
|
+
attr_accessor :agent
|
42
|
+
attr_accessor :user_agent
|
43
|
+
attr_accessor :cookies
|
44
|
+
attr_accessor :api_endpoint
|
45
|
+
attr_accessor :croak_on_404
|
46
|
+
|
47
|
+
def version
|
48
|
+
return "1.0.0"
|
49
|
+
end
|
50
|
+
|
51
|
+
def initialize(args)
|
52
|
+
#puts args.inspect
|
53
|
+
@un = args[:username]
|
54
|
+
@pw = args[:password]
|
55
|
+
@oauth_id = args[:id]
|
56
|
+
@oauth_secret = args[:secret]
|
57
|
+
@oauth_redir_uri = args[:redir_uri] || 'urn:ietf:wg:oauth:2.0:oob'
|
58
|
+
@host = args[:host] || 'https://www.audiosear.ch'
|
59
|
+
@debug = args[:debug]
|
60
|
+
@user_agent = args[:user_agent] || 'audiosearch-ruby-client/'+version()
|
61
|
+
@api_endpoint = args[:api_endpoint] || '/api'
|
62
|
+
@croak_on_404 = args[:croak_on_404] || false
|
63
|
+
|
64
|
+
# normalize host
|
65
|
+
@host.gsub!(/\/$/, '')
|
66
|
+
|
67
|
+
# sanity check
|
68
|
+
begin
|
69
|
+
uri = URI.parse(@host)
|
70
|
+
rescue URI::InvalidURIError => err
|
71
|
+
raise "Bad :host value " + err
|
72
|
+
end
|
73
|
+
if (!uri.host || !uri.port)
|
74
|
+
raise "Bad :host value " + @server
|
75
|
+
end
|
76
|
+
|
77
|
+
@agent = get_agent()
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
def get_oauth_token(options={})
|
82
|
+
oauth_options = {
|
83
|
+
site: @host + @api_endpoint,
|
84
|
+
authorize_url: @host + '/oauth/authorize',
|
85
|
+
token_url: @host + '/oauth/token',
|
86
|
+
redirect_uri: @oauth_redir_uri,
|
87
|
+
connection_opts: options.merge( { :ssl => {:verify => false}, } )
|
88
|
+
}
|
89
|
+
|
90
|
+
# TODO
|
91
|
+
|
92
|
+
client = OAuth2::Client.new(@oauth_id, @oauth_secret, oauth_options) do |faraday|
|
93
|
+
faraday.request :url_encoded
|
94
|
+
faraday.response :logger if @debug
|
95
|
+
faraday.adapter :excon
|
96
|
+
end
|
97
|
+
|
98
|
+
token = nil
|
99
|
+
if @un && @pw
|
100
|
+
# TODO 3-legged oauth to @authorize_url
|
101
|
+
else
|
102
|
+
token = client.client_credentials.get_token()
|
103
|
+
end
|
104
|
+
|
105
|
+
return token
|
106
|
+
end
|
107
|
+
|
108
|
+
def get_agent()
|
109
|
+
uri = @host + @api_endpoint
|
110
|
+
opts = {
|
111
|
+
:url => uri,
|
112
|
+
:ssl => {:verify => false},
|
113
|
+
:headers => {
|
114
|
+
'User-Agent' => @user_agent,
|
115
|
+
'Accept' => 'application/json',
|
116
|
+
'Cookie' => @cookies
|
117
|
+
}
|
118
|
+
}
|
119
|
+
@token = get_oauth_token
|
120
|
+
#puts "token="
|
121
|
+
#puts pp(@token)
|
122
|
+
conn = Faraday.new(opts) do |faraday|
|
123
|
+
faraday.request :url_encoded
|
124
|
+
[:mashify, :json].each{|mw| faraday.response(mw) }
|
125
|
+
if !@croak_on_404
|
126
|
+
faraday.use Audiosearch::FaradayErrHandler
|
127
|
+
else
|
128
|
+
faraday.response(:raise_error)
|
129
|
+
end
|
130
|
+
faraday.request :authorization, 'Bearer', @token.token
|
131
|
+
faraday.response :logger if @debug
|
132
|
+
faraday.adapter :excon # IMPORTANT this is last
|
133
|
+
end
|
134
|
+
|
135
|
+
return conn
|
136
|
+
end
|
137
|
+
|
138
|
+
def get(path, params={})
|
139
|
+
resp = @agent.get @api_endpoint + path, params
|
140
|
+
@debug and pp(resp)
|
141
|
+
return Audiosearch::Response.new resp
|
142
|
+
end
|
143
|
+
|
144
|
+
def get_show(id)
|
145
|
+
resp = get('/shows/'+id.to_s)
|
146
|
+
return resp.http_resp.body
|
147
|
+
end
|
148
|
+
|
149
|
+
def get_episode(ep_id)
|
150
|
+
resp = get('/episodes/'+ep_id.to_s)
|
151
|
+
return resp.http_resp.body
|
152
|
+
end
|
153
|
+
|
154
|
+
def search(type, params)
|
155
|
+
path = '/search/'+type
|
156
|
+
get(path, params)
|
157
|
+
end
|
158
|
+
|
159
|
+
end # end Client
|
160
|
+
|
161
|
+
# dependent classes
|
162
|
+
class Response
|
163
|
+
|
164
|
+
attr_accessor :http_resp
|
165
|
+
|
166
|
+
def initialize(http_resp)
|
167
|
+
@http_resp = http_resp
|
168
|
+
|
169
|
+
#warn http_resp.headers.inspect
|
170
|
+
#warn "code=" + http_resp.status.to_s
|
171
|
+
|
172
|
+
@is_ok = false
|
173
|
+
if http_resp.status.to_s =~ /^2\d\d/
|
174
|
+
@is_ok = true
|
175
|
+
end
|
176
|
+
|
177
|
+
end
|
178
|
+
|
179
|
+
def status()
|
180
|
+
return @http_resp.status
|
181
|
+
end
|
182
|
+
|
183
|
+
def is_success()
|
184
|
+
return @is_ok
|
185
|
+
end
|
186
|
+
|
187
|
+
def method_missing(meth, *args, &block)
|
188
|
+
if @http_resp.body.respond_to? meth
|
189
|
+
@http_resp.body.send(meth, *args, &block)
|
190
|
+
else
|
191
|
+
super
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
def respond_to?(meth)
|
196
|
+
if @http_resp.body.respond_to? meth
|
197
|
+
true
|
198
|
+
else
|
199
|
+
super
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
end # end Response
|
204
|
+
|
205
|
+
end # end module
|
metadata
ADDED
@@ -0,0 +1,142 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: audiosearch
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Peter Karman
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-05-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: faraday
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: faraday_middleware
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: excon
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: hashie
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: oauth2
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: dotenv
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
description: Ruby client for the Audiosear.ch API. See https://www.audiosear.ch/
|
112
|
+
email: peter@popuparchive.com
|
113
|
+
executables: []
|
114
|
+
extensions: []
|
115
|
+
extra_rdoc_files: []
|
116
|
+
files:
|
117
|
+
- lib/audiosearch.rb
|
118
|
+
homepage: https://github.com/popuparchive/audiosearch-client-ruby
|
119
|
+
licenses:
|
120
|
+
- Apache
|
121
|
+
metadata: {}
|
122
|
+
post_install_message:
|
123
|
+
rdoc_options: []
|
124
|
+
require_paths:
|
125
|
+
- lib
|
126
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - '>='
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '0'
|
131
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
132
|
+
requirements:
|
133
|
+
- - '>='
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: '0'
|
136
|
+
requirements: []
|
137
|
+
rubyforge_project: nowarning
|
138
|
+
rubygems_version: 2.0.14
|
139
|
+
signing_key:
|
140
|
+
specification_version: 4
|
141
|
+
summary: Ruby client for the Audiosear.ch API
|
142
|
+
test_files: []
|