shikimori-api 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.
Files changed (90) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +20 -0
  3. data/lib/shikimori/api/client.rb +34 -0
  4. data/lib/shikimori/api/errors.rb +21 -0
  5. data/lib/shikimori/api/rest.rb +115 -0
  6. data/lib/shikimori/api/uri.rb +18 -0
  7. data/lib/shikimori/api/v1/achievements.rb +32 -0
  8. data/lib/shikimori/api/v1/animes.rb +252 -0
  9. data/lib/shikimori/api/v1/appear.rb +40 -0
  10. data/lib/shikimori/api/v1/bans.rb +31 -0
  11. data/lib/shikimori/api/v1/calendars.rb +32 -0
  12. data/lib/shikimori/api/v1/characters.rb +52 -0
  13. data/lib/shikimori/api/v1/clubs.rb +329 -0
  14. data/lib/shikimori/api/v1/comments.rb +161 -0
  15. data/lib/shikimori/api/v1/constants.rb +107 -0
  16. data/lib/shikimori/api/v1/dialogs.rb +78 -0
  17. data/lib/shikimori/api/v1/favorites.rb +148 -0
  18. data/lib/shikimori/api/v1/forums.rb +31 -0
  19. data/lib/shikimori/api/v1/friends.rb +57 -0
  20. data/lib/shikimori/api/v1/genres.rb +31 -0
  21. data/lib/shikimori/api/v1/ignores.rb +62 -0
  22. data/lib/shikimori/api/v1/mangas.rb +211 -0
  23. data/lib/shikimori/api/v1/messages.rb +168 -0
  24. data/lib/shikimori/api/v1/people.rb +53 -0
  25. data/lib/shikimori/api/v1/publishers.rb +31 -0
  26. data/lib/shikimori/api/v1/ranobe.rb +206 -0
  27. data/lib/shikimori/api/v1/reviews.rb +89 -0
  28. data/lib/shikimori/api/v1/stats.rb +31 -0
  29. data/lib/shikimori/api/v1/studios.rb +31 -0
  30. data/lib/shikimori/api/v1/styles.rb +112 -0
  31. data/lib/shikimori/api/v1/topic_ignores.rb +63 -0
  32. data/lib/shikimori/api/v1/topics.rb +237 -0
  33. data/lib/shikimori/api/v1/user_images.rb +36 -0
  34. data/lib/shikimori/api/v1/user_rates.rb +194 -0
  35. data/lib/shikimori/api/v1/users.rb +310 -0
  36. data/lib/shikimori/api/v1/videos.rb +85 -0
  37. data/lib/shikimori/api/v1.rb +77 -0
  38. data/lib/shikimori/api/v2/abuse_requests.rb +103 -0
  39. data/lib/shikimori/api/v2/episode_notifications.rb +54 -0
  40. data/lib/shikimori/api/v2/topic_ignore.rb +54 -0
  41. data/lib/shikimori/api/v2/user_ignore.rb +54 -0
  42. data/lib/shikimori/api/v2/user_rates.rb +171 -0
  43. data/lib/shikimori/api/v2.rb +27 -0
  44. data/lib/shikimori/api/version.rb +8 -0
  45. data/lib/shikimori/api.rb +14 -0
  46. data/lib/shikimori-api.rb +3 -0
  47. data/shikimori-api.gemspec +40 -0
  48. data/sig/shikimori/api/client.rbs +12 -0
  49. data/sig/shikimori/api/rest.rbs +30 -0
  50. data/sig/shikimori/api/uri.rbs +10 -0
  51. data/sig/shikimori/api/v1/achievements.rbs +15 -0
  52. data/sig/shikimori/api/v1/animes.rbs +23 -0
  53. data/sig/shikimori/api/v1/appear.rbs +15 -0
  54. data/sig/shikimori/api/v1/bans.rbs +15 -0
  55. data/sig/shikimori/api/v1/calendars.rbs +15 -0
  56. data/sig/shikimori/api/v1/characters.rbs +16 -0
  57. data/sig/shikimori/api/v1/clubs.rbs +29 -0
  58. data/sig/shikimori/api/v1/comments.rbs +19 -0
  59. data/sig/shikimori/api/v1/constants.rbs +19 -0
  60. data/sig/shikimori/api/v1/dialogs.rbs +17 -0
  61. data/sig/shikimori/api/v1/favorites.rbs +23 -0
  62. data/sig/shikimori/api/v1/forums.rbs +15 -0
  63. data/sig/shikimori/api/v1/friends.rbs +16 -0
  64. data/sig/shikimori/api/v1/genres.rbs +15 -0
  65. data/sig/shikimori/api/v1/ignores.rbs +16 -0
  66. data/sig/shikimori/api/v1/mangas.rbs +23 -0
  67. data/sig/shikimori/api/v1/messages.rbs +20 -0
  68. data/sig/shikimori/api/v1/people.rbs +16 -0
  69. data/sig/shikimori/api/v1/publishers.rbs +15 -0
  70. data/sig/shikimori/api/v1/ranobe.rbs +23 -0
  71. data/sig/shikimori/api/v1/reviews.rbs +19 -0
  72. data/sig/shikimori/api/v1/stats.rbs +15 -0
  73. data/sig/shikimori/api/v1/studios.rbs +15 -0
  74. data/sig/shikimori/api/v1/styles.rbs +18 -0
  75. data/sig/shikimori/api/v1/topic_ignores.rbs +16 -0
  76. data/sig/shikimori/api/v1/topics.rbs +40 -0
  77. data/sig/shikimori/api/v1/user_images.rbs +15 -0
  78. data/sig/shikimori/api/v1/user_rates.rbs +44 -0
  79. data/sig/shikimori/api/v1/users.rbs +28 -0
  80. data/sig/shikimori/api/v1/videos.rbs +23 -0
  81. data/sig/shikimori/api/v1.rbs +41 -0
  82. data/sig/shikimori/api/v2/abuse_requests.rbs +18 -0
  83. data/sig/shikimori/api/v2/episode_notifications.rbs +25 -0
  84. data/sig/shikimori/api/v2/topic_ignore.rbs +16 -0
  85. data/sig/shikimori/api/v2/user_ignore.rbs +16 -0
  86. data/sig/shikimori/api/v2/user_rates.rbs +43 -0
  87. data/sig/shikimori/api/v2.rbs +16 -0
  88. data/sig/shikimori/api/version.rbs +5 -0
  89. data/sig/shikimori/api.rbs +18 -0
  90. metadata +137 -0
@@ -0,0 +1,310 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Shikimori
4
+ module API
5
+ class V1
6
+ # Methods for the Users API
7
+ #
8
+ # @see https://shikimori.one/api/doc/1.0/users Shikimori's API documentation
9
+ module Users
10
+ # Get list of users
11
+ #
12
+ # @option headers [Hash] Request headers
13
+ # @option query [Hash] Query string parameters for request
14
+ # @option query [Integer] :page Number of page. Must be between 1 and 100000
15
+ # @option query [Integer] :limit Number of titles per page. Must be a lower or equal that 50
16
+ # @option query [String] :search Find user by name
17
+ #
18
+ # @return [Array<Hash>] Array of hashes representing users
19
+ #
20
+ # @see https://shikimori.one/api/doc/1.0/users/index Shikimori's API documentation
21
+ # @example Search users with by name "ivan"
22
+ # client = Shikimori::API::Client.new(
23
+ # app_name: 'Api Test',
24
+ # aceess_token: '****',
25
+ # refresh_token: '****'
26
+ # )
27
+ #
28
+ # client.v1.users(search: 'ivan')
29
+ def users(headers: nil, **query)
30
+ rest.get base_url.join('users').url, headers: headers, query: query
31
+ end
32
+
33
+ # Get an user
34
+ #
35
+ # @option id [#to_s] User id
36
+ # @option headers [Hash] Request headers
37
+ # @option query [Hash] Query string parameters for request
38
+ #
39
+ # @return [Hash] Hash representing user
40
+ #
41
+ # @see https://shikimori.one/api/doc/1.0/users/show Shikimori's API documentation
42
+ # @example Get a user with id equal to 1
43
+ # client = Shikimori::API::Client.new(
44
+ # app_name: 'Api Test',
45
+ # aceess_token: '****',
46
+ # refresh_token: '****'
47
+ # )
48
+ #
49
+ # client.v1.user(1)
50
+ def user(id, headers: nil, **query)
51
+ rest.get base_url.join('users', id.to_s).url, headers: headers, query: query
52
+ end
53
+
54
+ # Get an user's brief info
55
+ #
56
+ # @option id [#to_s] User id
57
+ # @option headers [Hash] Request headers
58
+ # @option query [Hash] Query string parameters for request
59
+ #
60
+ # @return [Hash] Hash representing user
61
+ #
62
+ # @see https://shikimori.one/api/doc/1.0/users/info Shikimori's API documentation
63
+ # @example Get a user info with id equal to 1
64
+ # client = Shikimori::API::Client.new(
65
+ # app_name: 'Api Test',
66
+ # aceess_token: '****',
67
+ # refresh_token: '****'
68
+ # )
69
+ # client.v1.user_info(1)
70
+ def user_info(id, headers: nil, **query)
71
+ rest.get base_url.join('users', id.to_s, 'info').url, headers: headers, query: query
72
+ end
73
+
74
+ # Get an current user's brief info
75
+ #
76
+ # @option headers [Hash] Request headers
77
+ # @option query [Hash] Query string parameters for request
78
+ #
79
+ # @return [Hash] Hash representing user
80
+ #
81
+ # @see https://shikimori.one/api/doc/1.0/users/whoami Shikimori's API documentation
82
+ # @example Get a current user info
83
+ # client = Shikimori::API::Client.new(
84
+ # app_name: 'Api Test',
85
+ # aceess_token: '****',
86
+ # refresh_token: '****'
87
+ # )
88
+ # client.v1.whoami
89
+ def whoami(headers: nil, **query)
90
+ rest.get base_url.join('users', 'whoami').url, headers: headers, query: query
91
+ end
92
+
93
+ # Sign out the user
94
+ #
95
+ # @option headers [Hash] Request headers
96
+ # @option query [Hash] Query string parameters for request
97
+ #
98
+ # @return [Hash] Hash representing user
99
+ #
100
+ # @see https://shikimori.one/api/doc/1.0/users/sign_out Shikimori's API documentation
101
+ # @example Sign out current user
102
+ # client = Shikimori::API::Client.new(
103
+ # app_name: 'Api Test',
104
+ # aceess_token: '****',
105
+ # refresh_token: '****'
106
+ # )
107
+ # client.v1.sign_out
108
+ def sign_out(headers: nil, **query)
109
+ rest.get base_url.join('users', 'sign_out').url, headers: headers, query: query
110
+ end
111
+
112
+ # Get an user's friends
113
+ #
114
+ # @option id [#to_s] User id
115
+ # @option headers [Hash] Request headers
116
+ # @option query [Hash] Query string parameters for request
117
+ #
118
+ # @return [Array<Hash>] Array of hashes representing user's friends
119
+ #
120
+ # @see https://shikimori.one/api/doc/1.0/users/friends Shikimori's API documentation
121
+ # @example
122
+ # client = Shikimori::API::Client.new(
123
+ # app_name: 'Api Test',
124
+ # aceess_token: '****',
125
+ # refresh_token: '****'
126
+ # )
127
+ # client.v1.user_friends(1)
128
+ def user_friends(id, headers: nil, **query)
129
+ rest.get base_url.join('users', id.to_s, 'friends').url, headers: headers, query: query
130
+ end
131
+
132
+ # Get an user's clubs
133
+ #
134
+ # @option id [#to_s] User id
135
+ # @option headers [Hash] Request headers
136
+ # @option query [Hash] Query string parameters for request
137
+ #
138
+ # @return [Array<Hash>] Array of hashes representing user's clubs
139
+ #
140
+ # @see https://shikimori.one/api/doc/1.0/users/clubs Shikimori's API documentation
141
+ # @example
142
+ # client = Shikimori::API::Client.new(
143
+ # app_name: 'Api Test',
144
+ # aceess_token: '****',
145
+ # refresh_token: '****'
146
+ # )
147
+ # client.v1.user_clubs(1)
148
+ def user_clubs(id, headers: nil, **query)
149
+ rest.get base_url.join('users', id.to_s, 'clubs').url, headers: headers, query: query
150
+ end
151
+
152
+ # Get an user's anime rates
153
+ #
154
+ # @option id [#to_s] User id
155
+ # @option headers [Hash] Request headers
156
+ # @option query [Hash] Query string parameters for request
157
+ # @option query [Integer] :page Number of page. Must be between 1 and 100000
158
+ # @option query [Integer] :limit Number of titles per page. Must be a lower or equal that 5000
159
+ # @option query [TrueClass, FalseClass] :censored Set to true to discard hentai, yaoi and yuri
160
+ # @option query ['planned', 'watching', 'rewatching', 'completed', 'on_hold', 'dropped'] :status Watching status
161
+ #
162
+ # @return [Array<Hash>] Array of hashes representing user's anime rates
163
+ #
164
+ # @see https://shikimori.one/api/doc/1.0/users/anime_rates Shikimori's API documentation
165
+ # @example
166
+ # client = Shikimori::API::Client.new(
167
+ # app_name: 'Api Test',
168
+ # aceess_token: '****',
169
+ # refresh_token: '****'
170
+ # )
171
+ # client.v1.user_anime_rates(1)
172
+ def user_anime_rates(id, headers: nil, **query)
173
+ rest.get base_url.join('users', id.to_s, 'anime_rates').url, headers: headers, query: query
174
+ end
175
+
176
+ # Get an user's manga rates
177
+ #
178
+ # @option id [#to_s] User id
179
+ # @option headers [Hash] Request headers
180
+ # @option query [Hash] Query string parameters for request
181
+ # @option query [Integer] :page Number of page. Must be between 1 and 100000
182
+ # @option query [Integer] :limit Number of titles per page. Must be a lower or equal that 5000
183
+ # @option query [TrueClass, FalseClass] :censored Set to true to discard hentai, yaoi and yuri
184
+ #
185
+ # @return [Array<Hash>] Array of hashes representing user's manga rates
186
+ #
187
+ # @see https://shikimori.one/api/doc/1.0/users/manga_rates Shikimori's API documentation
188
+ # @example
189
+ # client = Shikimori::API::Client.new(
190
+ # app_name: 'Api Test',
191
+ # aceess_token: '****',
192
+ # refresh_token: '****'
193
+ # )
194
+ # client.v1.user_manga_rates(1)
195
+ def user_manga_rates(id, headers: nil, **query)
196
+ rest.get base_url.join('users', id.to_s, 'manga_rates').url, headers: headers, query: query
197
+ end
198
+
199
+ # Get an user's favorites
200
+ #
201
+ # @option id [#to_s] User id
202
+ # @option headers [Hash] Request headers
203
+ # @option query [Hash] Query string parameters for request
204
+ #
205
+ # @return [Hash] Hash representing user's favorites
206
+ #
207
+ # @see https://shikimori.one/api/doc/1.0/users/favourites Shikimori's API documentation
208
+ # @example
209
+ # client = Shikimori::API::Client.new(
210
+ # app_name: 'Api Test',
211
+ # aceess_token: '****',
212
+ # refresh_token: '****'
213
+ # )
214
+ # client.v1.user_favorites(1)
215
+ def user_favorites(id, headers: nil, **query)
216
+ rest.get base_url.join('users', id.to_s, 'favourites').url, headers: headers, query: query
217
+ end
218
+
219
+ # Get an user's messages
220
+ # Requires `messages` oauth scope
221
+ #
222
+ # @option id [#to_s] User id
223
+ # @option headers [Hash] Request headers
224
+ # @option query [Hash] Query string parameters for request
225
+ # @option query [Integer] :page Number of page. Must be between 1 and 100000
226
+ # @option query [Integer] :limit Number of titles per page. Must be a lower or equal that 100
227
+ # @option query ['inbox', 'private', 'sent', 'news', 'notifications'] :type Type of messages
228
+ #
229
+ # @return [Array<Hash>] Array of hashes representing user's messages
230
+ #
231
+ # @see https://shikimori.one/api/doc/1.0/users/messages Shikimori's API documentation
232
+ # @example Get user's messages from inbox
233
+ # client = Shikimori::API::Client.new(
234
+ # app_name: 'Api Test',
235
+ # aceess_token: '****',
236
+ # refresh_token: '****'
237
+ # )
238
+ # client.v1.user_messages(1, type: 'inbox', limit: 10)
239
+ def user_messages(id, headers: nil, **query)
240
+ rest.get base_url.join('users', id.to_s, 'messages').url, headers: headers, query: query
241
+ end
242
+
243
+ # Get an user's unread messages
244
+ # Requires `messages` oauth scope
245
+ #
246
+ # @option id [#to_s] User id
247
+ # @option headers [Hash] Request headers
248
+ # @option query [Hash] Query string parameters for request
249
+ #
250
+ # @return [Hash] Hash representing user's messages
251
+ #
252
+ # @see https://shikimori.one/api/doc/1.0/users/unread_messages Shikimori's API documentation
253
+ # @example Get user's unread messages
254
+ # client = Shikimori::API::Client.new(
255
+ # app_name: 'Api Test',
256
+ # aceess_token: '****',
257
+ # refresh_token: '****'
258
+ # )
259
+ # client.v1.user_unread_messages(1, type: 'inbox', limit: 10)
260
+ def user_unread_messages(id, headers: nil, **query)
261
+ rest.get base_url.join('users', id.to_s, 'unread_messages').url, headers: headers, query: query
262
+ end
263
+
264
+ # Get an user's history
265
+ #
266
+ # @option id [#to_s] User id
267
+ # @option headers [Hash] Request headers
268
+ # @option query [Hash] Query string parameters for request
269
+ # @option query [Integer] :page Number of page. Must be between 1 and 100000
270
+ # @option query [Integer] :limit Number of titles per page. Must be a lower or equal that 100
271
+ # @option query [Integer] :target_id Target ID
272
+ # @option query ['Anime', 'Manga'] :target_type Target type
273
+ #
274
+ # @return [Array<Hash>] Array of hashes representing user's history
275
+ #
276
+ # @see https://shikimori.one/api/doc/1.0/users/history Shikimori's API documentation
277
+ # @example Get user's manga history
278
+ # client = Shikimori::API::Client.new(
279
+ # app_name: 'Api Test',
280
+ # aceess_token: '****',
281
+ # refresh_token: '****'
282
+ # )
283
+ # client.v1.user_history(1, type: 'manga', limit: 10)
284
+ def user_history(id, headers: nil, **query)
285
+ rest.get base_url.join('users', id.to_s, 'history').url, headers: headers, query: query
286
+ end
287
+
288
+ # Get an user's bans
289
+ #
290
+ # @option id [#to_s] User id
291
+ # @option headers [Hash] Request headers
292
+ # @option query [Hash] Query string parameters for request
293
+ #
294
+ # @return [Array<Hash>] Array of hashes representing user's bans
295
+ #
296
+ # @see https://shikimori.one/api/doc/1.0/users/bans Shikimori's API documentation
297
+ # @example Get user's manga bans
298
+ # client = Shikimori::API::Client.new(
299
+ # app_name: 'Api Test',
300
+ # aceess_token: '****',
301
+ # refresh_token: '****'
302
+ # )
303
+ # client.v1.user_bans
304
+ def user_bans(id, headers: nil, **query)
305
+ rest.get base_url.join('users', id.to_s, 'bans').url, headers: headers, query: query
306
+ end
307
+ end
308
+ end
309
+ end
310
+ end
@@ -0,0 +1,85 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Shikimori
4
+ module API
5
+ class V1
6
+ # Methods for the Videos API
7
+ #
8
+ # @see https://shikimori.one/api/doc/1.0/videos Shikimori's API documentation
9
+ module Videos
10
+ # Get anime videos
11
+ #
12
+ # @param anime_id [#to_s] Anime id
13
+ # @param headers [Hash] Request headers
14
+ # @param query [Hash] Query string parameters for request
15
+ #
16
+ # @return [Array<Hash>] Array of hashes representing videos
17
+ #
18
+ # @see https://shikimori.one/api/doc/1.0/videos/index Shikimori's API documentation
19
+ # @example Get videos for anime with id equal to 1
20
+ # client = Shikimori::API::Client.new(
21
+ # app_name: 'Api Test',
22
+ # aceess_token: '****',
23
+ # refresh_token: '****'
24
+ # )
25
+ # client.v1.anime_videos(1)
26
+ def anime_videos(anime_id, headers: nil, **query)
27
+ rest.get base_url.join('animes', anime_id.to_s, 'videos').url, headers: headers, query: query
28
+ end
29
+
30
+ # Create Video
31
+ #
32
+ # @param video [Hash] Video data for creating
33
+ # @option video [String] :name Name of video
34
+ # @option video ['pv', 'character_trailer', 'cm', 'op',
35
+ # 'ed', 'op_ed_clip', 'clip', 'other', 'episode_preview'] :kind Type of video
36
+ # @option video [String] :url URL to video.
37
+ # Supported hostings: youtube, vk, ok, coub, rutube, vimeo, sibnet,
38
+ # yandex, streamable, smotret_anime, myvi, youmite, viuly, stormo, mediafile
39
+ # @param headers [Hash] Request headers
40
+ # @param query [Hash] Query string parameters for request
41
+ #
42
+ # @return [Hash] Hash representing created video
43
+ #
44
+ # @see https://shikimori.one/api/doc/1.0/videos/create Shikimori's API documentation
45
+ # @example
46
+ # client = Shikimori::API::Client.new(
47
+ # app_name: 'Api Test',
48
+ # aceess_token: '****',
49
+ # refresh_token: '****'
50
+ # )
51
+ # video = { name: 'Funny cat!', kind: 'ed', url: 'https://youtu.be/dQw4w9WgXcQ' }
52
+ # client.v1.create_anime_video(1, video)
53
+ def create_anime_video(anime_id, video, headers: nil, **query)
54
+ rest.post base_url.join('animes', anime_id.to_s, 'videos').url,
55
+ { video: video },
56
+ headers: headers, query: query
57
+ end
58
+
59
+ # Delete Video
60
+ #
61
+ # @param anime_id [#to_s] Anime id
62
+ # @param video_id [#to_s] Video id
63
+ # @param headers [Hash] Request headers
64
+ # @param query [Hash] Query string parameters for request
65
+ #
66
+ # @return [Boolean] True if deletion successful, false otherwise.
67
+ #
68
+ # @see https://shikimori.one/api/doc/1.0/videos/destroy Shikimori's API documentation
69
+ # @example
70
+ # client = Shikimori::API::Client.new(
71
+ # app_name: 'Api Test',
72
+ # aceess_token: '****',
73
+ # refresh_token: '****'
74
+ # )
75
+ #
76
+ # client.v1.delete_anime_video(anime_id: 1, video_id: 1)
77
+ def delete_anime_video(anime_id:, video_id:, headers: nil, **query)
78
+ rest.delete base_url.join('animes', anime_id.to_s, 'videos', video_id.to_s).url,
79
+ headers: headers,
80
+ query: query
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,77 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'v1/achievements'
4
+ require_relative 'v1/animes'
5
+ require_relative 'v1/appear'
6
+ require_relative 'v1/bans'
7
+ require_relative 'v1/calendars'
8
+ require_relative 'v1/characters'
9
+ require_relative 'v1/clubs'
10
+ require_relative 'v1/comments'
11
+ require_relative 'v1/constants'
12
+ require_relative 'v1/dialogs'
13
+ require_relative 'v1/favorites'
14
+ require_relative 'v1/forums'
15
+ require_relative 'v1/friends'
16
+ require_relative 'v1/genres'
17
+ require_relative 'v1/ignores'
18
+ require_relative 'v1/mangas'
19
+ require_relative 'v1/messages'
20
+ require_relative 'v1/people'
21
+ require_relative 'v1/publishers'
22
+ require_relative 'v1/ranobe'
23
+ require_relative 'v1/reviews'
24
+ require_relative 'v1/stats'
25
+ require_relative 'v1/studios'
26
+ require_relative 'v1/styles'
27
+ require_relative 'v1/topic_ignores'
28
+ require_relative 'v1/topics'
29
+ require_relative 'v1/user_images'
30
+ require_relative 'v1/user_rates'
31
+ require_relative 'v1/users'
32
+ require_relative 'v1/videos'
33
+
34
+ module Shikimori
35
+ module API
36
+ # Methods for first version of shikimori's API
37
+ class V1
38
+ include Achievements
39
+ include Animes
40
+ include Appear
41
+ include Bans
42
+ include Calendars
43
+ include Characters
44
+ include Clubs
45
+ include Comments
46
+ include Constants
47
+ include Dialogs
48
+ include Favorites
49
+ include Forums
50
+ include Friends
51
+ include Genres
52
+ include Ignores
53
+ include Mangas
54
+ include Messages
55
+ include People
56
+ include Publishers
57
+ include Ranobe
58
+ include Reviews
59
+ include Stats
60
+ include Studios
61
+ include Styles
62
+ include TopicIgnores
63
+ include Topics
64
+ include UserImages
65
+ include UserRates
66
+ include Users
67
+ include Videos
68
+
69
+ attr_reader :rest, :base_url
70
+
71
+ def initialize(base_url:, rest:)
72
+ @rest = rest
73
+ @base_url = base_url
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,103 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Shikimori
4
+ module API
5
+ class V2
6
+ # Methods for the Abuse requests API
7
+ #
8
+ # @see https://shikimori.one/api/doc/2.0/abuse_requests Shikimori's API documentation
9
+ module AbuseRequests
10
+ # Abuse offtopic request
11
+ #
12
+ # @param abuse_request [Hash] Abuse request data for creating
13
+ # @option abuse_request [Integer] :comment_id Comment id
14
+ # @param headers [Hash] Request headers
15
+ # @param query [Hash] Query string parameters for request
16
+ #
17
+ # @return [Hash] Hash representing abuse request
18
+ #
19
+ # @see https://shikimori.one/api/doc/2.0/abuse_requests/offtopic Shikimori's API documentation
20
+ # @example
21
+ # client = Shikimori::API::Client.new(
22
+ # app_name: 'Api Test',
23
+ # aceess_token: '****',
24
+ # refresh_token: '****'
25
+ # )
26
+ # client.v2.abuse_offtopic_request({ comment_id: 1, topic_id: 1, reason: 'Nani?!' })
27
+ def abuse_offtopic_request(abuse_request, headers: nil, **query)
28
+ rest.post base_url.join('abuse_requests', 'offtopic').url, abuse_request.to_h, headers: headers, query: query
29
+ end
30
+
31
+ # Abuse review request
32
+ #
33
+ # @param abuse_request [Hash] Abuse request data for creating
34
+ # @option abuse_request [Integer] :comment_id Comment id
35
+ # @option abuse_request [Integer] :topic_id Comment id
36
+ # @param headers [Hash] Request headers
37
+ # @param query [Hash] Query string parameters for request
38
+ #
39
+ # @return [Hash] Hash representing abuse request
40
+ #
41
+ # @see https://shikimori.one/api/doc/2.0/abuse_requests/convert_review Shikimori's API documentation
42
+ # @example
43
+ # client = Shikimori::API::Client.new(
44
+ # app_name: 'Api Test',
45
+ # aceess_token: '****',
46
+ # refresh_token: '****'
47
+ # )
48
+ # client.v2.abuse_review_request({ topic_id: 1 })
49
+ def abuse_review_request(abuse_request, headers: nil, **query)
50
+ rest.post base_url.join('abuse_requests', 'convert_review').url,
51
+ abuse_request.to_h,
52
+ headers: headers, query: query
53
+ end
54
+
55
+ # Abuse abuse request
56
+ #
57
+ # @param abuse_request [Hash] Abuse request data for creating
58
+ # @option abuse_request [Integer] :comment_id Comment id
59
+ # @option abuse_request [Integer] :topic_id Comment id
60
+ # @option abuse_request [String] :reason Reason to abuse
61
+ # @param headers [Hash] Request headers
62
+ # @param query [Hash] Query string parameters for request
63
+ #
64
+ # @return [Hash] Hash representing abuse request
65
+ #
66
+ # @see https://shikimori.one/api/doc/2.0/abuse_requests/abuse Shikimori's API documentation
67
+ # @example
68
+ # client = Shikimori::API::Client.new(
69
+ # app_name: 'Api Test',
70
+ # aceess_token: '****',
71
+ # refresh_token: '****'
72
+ # )
73
+ # client.v2.abuse_request({ topic_id: 1, reason: 'Nani?!' })
74
+ def abuse_request(abuse_request, headers: nil, **query)
75
+ rest.post base_url.join('abuse_requests', 'abuse').url, abuse_request.to_h, headers: headers, query: query
76
+ end
77
+
78
+ # Abuse spoiler request
79
+ #
80
+ # @param abuse_request [Hash] Abuse request data for creating
81
+ # @option abuse_request [Integer] :comment_id Comment id
82
+ # @option abuse_request [Integer] :topic_id Comment id
83
+ # @option abuse_request [String] :reason Reason to abuse
84
+ # @param headers [Hash] Request headers
85
+ # @param query [Hash] Query string parameters for request
86
+ #
87
+ # @return [Hash] Hash representing abuse request
88
+ #
89
+ # @see https://shikimori.one/api/doc/2.0/abuse_requests/spoiler Shikimori's API documentation
90
+ # @example
91
+ # client = Shikimori::API::Client.new(
92
+ # app_name: 'Api Test',
93
+ # aceess_token: '****',
94
+ # refresh_token: '****'
95
+ # )
96
+ # client.v2.abuse_spoiler_request({ comment_id: 1, reason: 'Nani?!' })
97
+ def abuse_spoiler_request(abuse_request, headers: nil, **query)
98
+ rest.post base_url.join('abuse_requests', 'spoiler').url, abuse_request.to_h, headers: headers, query: query
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Shikimori
4
+ module API
5
+ class V2
6
+ # Methods for the Episode notifications API
7
+ #
8
+ # @see https://shikimori.one/api/doc/2.0/episode_notifications Shikimori's API documentation
9
+ module EpisodeNotifications
10
+ # Notify shikimori about anime episode release
11
+ #
12
+ # @param episode_notification [Hash] Episode notification data for creating
13
+ # @option episode_notification [Integer] :anime_id Anime id
14
+ # @option episode_notification [Integer] :episode Episode number
15
+ # @option episode_notification [String] :aired_at Date and time of aired
16
+ # @option episode_notification ['true', 'false', 1, 0] :is_fandub Is fandub?
17
+ # @option episode_notification ['true', 'false', 1, 0] :is_raw Is raw?
18
+ # @option episode_notification ['true', 'false', 1, 0] :is_subtitles Is with subtitles?
19
+ # @option episode_notification ['true', 'false', 1, 0] :is_anime365 Is Anime365?
20
+ # @param token [String] Private token required to access this api
21
+ # @param headers [Hash] Request headers
22
+ # @param query [Hash] Query string parameters for request
23
+ #
24
+ # @return [Hash] Hash representing created episode notification
25
+ #
26
+ # @see https://shikimori.one/api/doc/2.0/episode_notifications/create Shikimori's API documentation
27
+ # @example
28
+ # client = Shikimori::API::Client.new(
29
+ # app_name: 'Api Test',
30
+ # aceess_token: '****',
31
+ # refresh_token: '****'
32
+ # )
33
+ #
34
+ # notification = {
35
+ # aired_at: "2022-11-19T17:19:31+03:00",
36
+ # anime_id: "35",
37
+ # episode: "3",
38
+ # is_anime365: "true",
39
+ # is_fandub: "true",
40
+ # is_raw: "false",
41
+ # is_subtitles: "false"
42
+ # }
43
+ # token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
44
+ #
45
+ # client.v2.create_episode_notification(notification, token: token)
46
+ def create_episode_notification(episode_notification, token:, headers: nil, **query)
47
+ rest.post base_url.join('episode_notifications').url,
48
+ { episode_notification: episode_notification, token: token },
49
+ headers: headers, query: query
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Shikimori
4
+ module API
5
+ class V2
6
+ # Methods for the Topic ignores API
7
+ #
8
+ # @see https://shikimori.one/api/doc/2.0/Topic%20Ignore Shikimori's API documentation
9
+ module TopicIgnore
10
+ # Add topic to ignore by id.
11
+ # Requires `topics` oauth scope
12
+ #
13
+ # @param topic_id [#to_s] Topic id
14
+ # @param headers [Hash] Request headers
15
+ # @param query [Hash] Query string parameters for request
16
+ #
17
+ # @return [Hash] Hash representing created topic ignore
18
+ #
19
+ # @see https://shikimori.one/api/doc/2.0/Topic%20Ignore/create Shikimori's API documentation
20
+ # @example Add to ignore a topic with id equal to 1
21
+ # client = Shikimori::API::Client.new(
22
+ # app_name: 'Api Test',
23
+ # aceess_token: '****',
24
+ # refresh_token: '****'
25
+ # )
26
+ # client.v2.create_topic_ignore(1)
27
+ def create_topic_ignore(topic_id, headers: nil, **query)
28
+ rest.post base_url.join('topics', topic_id.to_s, 'ignore').url, {}, headers: headers, query: query
29
+ end
30
+
31
+ # Delete a topic ignore by id.
32
+ # Requires `ignores` oauth scope
33
+ #
34
+ # @param topic_id [#to_s] Topic id
35
+ # @param headers [Hash] Request headers
36
+ # @param query [Hash] Query string parameters for request
37
+ #
38
+ # @return [Boolean] True if deletion successful, false otherwise.
39
+ #
40
+ # @see https://shikimori.one/api/doc/2.0/Topic%20Ignore/destroy Shikimori's API documentation
41
+ # @example Delete a topic ignore
42
+ # client = Shikimori::API::Client.new(
43
+ # app_name: 'Api Test',
44
+ # aceess_token: '****',
45
+ # refresh_token: '****'
46
+ # )
47
+ # client.v2.delete_topic_ignore(1)
48
+ def delete_topic_ignore(topic_id, headers: nil, **query)
49
+ rest.delete base_url.join('topics', topic_id.to_s, 'ignore').url, headers: headers, query: query
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end