holodex 2.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 8fd9580663797301e759f8cac86325513e4c3fcd5a260a16a87b12bb35da8cde
4
+ data.tar.gz: cbaf60bf00bb2a4091656949fca714eb9c956ae3fd819fbe5a2f94f217087477
5
+ SHA512:
6
+ metadata.gz: f5ba962f644112ae78ae5c001ebc7135adaa3264f007b51c45e92e198c271f29cc65ff5e85fecde93d80f03e4a10c3cc7e4ffe9a7b0035deb13db7afe8aed8ac
7
+ data.tar.gz: 960505befea5cd64e1b1c7c8ccfa8b094ebdbec166710e0f400a06f1b1cca3f8ddc44e53279c97e2212210fbaab769e663d63bfbb9bfe40c174221557e13a757
@@ -0,0 +1,4 @@
1
+ class Holodex
2
+ # https://docs.holodex.net/docs/holodex/5dfaf299ea9fd-get-channel-information
3
+ def channel(id) = get("/channels/#{id}")
4
+ end
@@ -0,0 +1,4 @@
1
+ class Holodex
2
+ # https://docs.holodex.net/docs/holodex/4fd0f20623a29-list-channels
3
+ def channels(**) = get('/channels', **)
4
+ end
@@ -0,0 +1,4 @@
1
+ class Holodex
2
+ # https://docs.holodex.net/#operation/post-search-commentSearch
3
+ def comment_search(**) = post('/search/commentSearch', **)
4
+ end
@@ -0,0 +1,15 @@
1
+ class Holodex
2
+ class ResourceError < StandardError
3
+ attr_reader :http_code, :data
4
+
5
+ def initialize(http_code, data)
6
+ @http_code = http_code
7
+ @data = data
8
+ super("Holodex returned an HTTP #@http_code with the following payload: #@data")
9
+ end
10
+
11
+ def [](key)
12
+ @data[key]
13
+ end
14
+ end # Error
15
+ end
@@ -0,0 +1,4 @@
1
+ class Holodex
2
+ # https://docs.holodex.net/docs/holodex/b675902a04ca9-query-live-and-upcoming-videos
3
+ def live(**) = get('/live', **)
4
+ end
@@ -0,0 +1,4 @@
1
+ class Holodex
2
+ # https://docs.holodex.net/#operation/get-v2-channels-channelId-clips
3
+ def related_videos(id:, type:, **) = get("channels/#{id}/#{type}", **)
4
+ end
@@ -0,0 +1,4 @@
1
+ class Holodex
2
+ # https://docs.holodex.net/docs/holodex/f1e355dc4cb79-quickly-access-live-upcoming-for-a-set-of-channels
3
+ def users_live(*channels) = get('/users/live', channels:)
4
+ end
@@ -0,0 +1,4 @@
1
+ class Holodex
2
+ # https://docs.holodex.net/docs/holodex/d18465c977416-get-a-single-video-s-metadata
3
+ def video(id, lang: nil, c: nil) = get("/videos/#{id}", lang:, c:)
4
+ end
@@ -0,0 +1,4 @@
1
+ class Holodex
2
+ # https://docs.holodex.net/#operation/post-search-videoSearch
3
+ def video_search(**) = post('/search/videoSearch', **)
4
+ end
@@ -0,0 +1,4 @@
1
+ class Holodex
2
+ # https://docs.holodex.net/docs/holodex/ba328f7332280-query-videos
3
+ def videos(**) = get('/videos', **)
4
+ end
data/lib/holodex.rb ADDED
@@ -0,0 +1,67 @@
1
+ require 'net/http'
2
+ require 'json'
3
+
4
+ require_relative 'holodex/resource/error'
5
+
6
+ require_relative 'holodex/resource/live'
7
+ require_relative 'holodex/resource/videos'
8
+ require_relative 'holodex/resource/channel'
9
+ require_relative 'holodex/resource/related_videos'
10
+ require_relative 'holodex/resource/users_live'
11
+ require_relative 'holodex/resource/video'
12
+ require_relative 'holodex/resource/channels'
13
+ require_relative 'holodex/resource/video_search'
14
+ require_relative 'holodex/resource/comment_search'
15
+
16
+ # https://docs.holodex.net/
17
+ class Holodex
18
+ BASE_API = 'https://holodex.net/api/v2'
19
+ DEFAULT_HEADERS = { 'Content-Type' => 'application/json; charset=utf-8' }
20
+
21
+ def initialize(api_key)
22
+ @headers = DEFAULT_HEADERS.merge('X-APIKEY' => api_key)
23
+ end
24
+
25
+ private
26
+
27
+ def encode_query(data)
28
+ data.transform_keys!(&:to_s)
29
+ data.transform_values! do |value|
30
+ case value
31
+ when Array then value.join(',')
32
+ when true then 1
33
+ when false then 0
34
+ else
35
+ value
36
+ end
37
+ end
38
+
39
+ URI.encode_www_form(data)
40
+ end
41
+
42
+ # Takes the reponse object from Net::HTTP.
43
+ # By overloading this method, one can change how responses are parsed.
44
+ def parse(response)
45
+ if Net::HTTPSuccess === response
46
+ JSON.parse(response.body)
47
+ else
48
+ raise ResourceError.new(response.code, JSON.parse(response.body))
49
+ end
50
+ end
51
+
52
+ def get(path, **)
53
+ query = encode_query(**)
54
+ uri = URI(BASE_API + path + "#{'?' << query unless query.empty?}")
55
+ response = Net::HTTP.get_response(uri, @headers)
56
+
57
+ parse(response)
58
+ end
59
+
60
+ def post(path, **)
61
+ payload = JSON.generate(**)
62
+ uri = URI(BASE_API + path)
63
+ response = Net::HTTP.post(uri, payload, @headers)
64
+
65
+ parse(response)
66
+ end
67
+ end
metadata ADDED
@@ -0,0 +1,53 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: holodex
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Akseluhreyter
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-08-07 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description:
14
+ email:
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/holodex.rb
20
+ - lib/holodex/resource/channel.rb
21
+ - lib/holodex/resource/channels.rb
22
+ - lib/holodex/resource/comment_search.rb
23
+ - lib/holodex/resource/error.rb
24
+ - lib/holodex/resource/live.rb
25
+ - lib/holodex/resource/related_videos.rb
26
+ - lib/holodex/resource/users_live.rb
27
+ - lib/holodex/resource/video.rb
28
+ - lib/holodex/resource/video_search.rb
29
+ - lib/holodex/resource/videos.rb
30
+ homepage:
31
+ licenses:
32
+ - MIT
33
+ metadata: {}
34
+ post_install_message:
35
+ rdoc_options: []
36
+ require_paths:
37
+ - lib
38
+ required_ruby_version: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: '3.2'
43
+ required_rubygems_version: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ requirements: []
49
+ rubygems_version: 3.4.17
50
+ signing_key:
51
+ specification_version: 4
52
+ summary: Wrapper for the Holodex API.
53
+ test_files: []