audiosearch 1.0.0
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.
- 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: []
|