From 9c13697880b7dcb35c5ecf541e639998925380eb Mon Sep 17 00:00:00 2001 From: Pinapelz Date: Sun, 16 Apr 2023 12:34:40 -0700 Subject: Change package path to domain url --- pom.xml | 2 +- src/main/java/com/pinapelz/Holodex.java | 257 +++++++++++++++++++++ src/main/java/com/pinapelz/HolodexException.java | 25 ++ src/main/java/com/pinapelz/HolodexService.java | 212 +++++++++++++++++ src/main/java/com/pinapelz/datatypes/Channel.java | 21 ++ src/main/java/com/pinapelz/datatypes/Comment.java | 10 + .../pinapelz/datatypes/CommentSearchResult.java | 11 + .../java/com/pinapelz/datatypes/Paginated.java | 15 ++ .../java/com/pinapelz/datatypes/SimpleChannel.java | 16 ++ .../com/pinapelz/datatypes/SimpleCommentVideo.java | 21 ++ .../java/com/pinapelz/datatypes/SimpleVideo.java | 26 +++ src/main/java/com/pinapelz/datatypes/Video.java | 24 ++ .../com/pinapelz/datatypes/VideoSearchResult.java | 11 + .../factory/VideoSearchResultConverterFactory.java | 51 ++++ .../com/pinapelz/query/ChannelQueryBuilder.java | 79 +++++++ .../pinapelz/query/CommentSearchQueryBuilder.java | 134 +++++++++++ .../pinapelz/query/VideoByVideoIdQueryBuilder.java | 39 ++++ .../java/com/pinapelz/query/VideoQueryBuilder.java | 157 +++++++++++++ .../pinapelz/query/VideoSearchQueryBuilder.java | 134 +++++++++++ .../query/VideosByChannelIDQueryBuilder.java | 78 +++++++ 20 files changed, 1322 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/pinapelz/Holodex.java create mode 100644 src/main/java/com/pinapelz/HolodexException.java create mode 100644 src/main/java/com/pinapelz/HolodexService.java create mode 100644 src/main/java/com/pinapelz/datatypes/Channel.java create mode 100644 src/main/java/com/pinapelz/datatypes/Comment.java create mode 100644 src/main/java/com/pinapelz/datatypes/CommentSearchResult.java create mode 100644 src/main/java/com/pinapelz/datatypes/Paginated.java create mode 100644 src/main/java/com/pinapelz/datatypes/SimpleChannel.java create mode 100644 src/main/java/com/pinapelz/datatypes/SimpleCommentVideo.java create mode 100644 src/main/java/com/pinapelz/datatypes/SimpleVideo.java create mode 100644 src/main/java/com/pinapelz/datatypes/Video.java create mode 100644 src/main/java/com/pinapelz/datatypes/VideoSearchResult.java create mode 100644 src/main/java/com/pinapelz/factory/VideoSearchResultConverterFactory.java create mode 100644 src/main/java/com/pinapelz/query/ChannelQueryBuilder.java create mode 100644 src/main/java/com/pinapelz/query/CommentSearchQueryBuilder.java create mode 100644 src/main/java/com/pinapelz/query/VideoByVideoIdQueryBuilder.java create mode 100644 src/main/java/com/pinapelz/query/VideoQueryBuilder.java create mode 100644 src/main/java/com/pinapelz/query/VideoSearchQueryBuilder.java create mode 100644 src/main/java/com/pinapelz/query/VideosByChannelIDQueryBuilder.java diff --git a/pom.xml b/pom.xml index 6fa8018..deec17b 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.github.pinapelz jholodex - 1.0 + 1.1 JHolodex http://maven.apache.org diff --git a/src/main/java/com/pinapelz/Holodex.java b/src/main/java/com/pinapelz/Holodex.java new file mode 100644 index 0000000..70020c2 --- /dev/null +++ b/src/main/java/com/pinapelz/Holodex.java @@ -0,0 +1,257 @@ +package com.pinapelz; + +import com.google.gson.Gson; +import com.pinapelz.datatypes.*; +import com.pinapelz.query.*; +import okhttp3.MediaType; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import retrofit2.Call; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.jackson.JacksonConverterFactory; +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.lang.reflect.Field; +import java.util.concurrent.TimeUnit; + + +/** + * The class for interacting with the Holodex API + */ +public class Holodex { + private HolodexService service; + private int readTimeout = 35; + private int writeTimeout = 35; + + /** + * Instantiates a new Holodex with the default base url + * + * @param apiKey the api key + */ + public Holodex(String apiKey) { + initializeHolodexService(apiKey, "https://holodex.net"); + } + + /** + * Instantiates a new Holodex with a custom base url + * + * @param apiKey the api key + * @param baseUrl the base url + */ + public Holodex(String apiKey, String baseUrl) { + initializeHolodexService(apiKey, baseUrl); + } + + private void initializeHolodexService(String apiKey, String baseUrl){ + OkHttpClient.Builder httpClient = new OkHttpClient.Builder() + .writeTimeout(writeTimeout, TimeUnit.SECONDS) + .readTimeout(readTimeout, TimeUnit.SECONDS); + httpClient.addInterceptor(chain -> { + Request original = chain.request(); + Request request = original.newBuilder() + .header("X-APIKEY", apiKey) + .method(original.method(), original.body()) + .build(); + return chain.proceed(request); + }); + Retrofit retrofit = new Retrofit.Builder() + .baseUrl(baseUrl) + .addConverterFactory(JacksonConverterFactory.create()) + .client(httpClient.build()) + .build(); + service = retrofit.create(HolodexService.class); + } + + private Holodex setReadTimeout(int readTimeout) { + this.readTimeout = readTimeout; + return this; + } + + private Holodex setWriteTimeout(int writeTimeout) { + this.writeTimeout = writeTimeout; + return this; + } + + /** + * Gets a list of upcoming and/or live SimpleVideos matching the VideoQueryBuilder attributes + * + * @param queryBuilder the query builder + * @return A list of upcoming and/or live SimpleVideos + * @throws HolodexException the holodex exception + */ + public List getLiveAndUpcomingVideos(VideoQueryBuilder queryBuilder) throws HolodexException { + Call> call = service.getLiveVideos(queryBuilder.getChannelId(), queryBuilder.getId(), + queryBuilder.getInclude(), queryBuilder.getLang(), + queryBuilder.getLimit(), queryBuilder.getMaxUpcomingHours(), + queryBuilder.getMentionedChannelId(), queryBuilder.getOffset(), + queryBuilder.getOrder(), queryBuilder.getOrg(), + queryBuilder.getPaginated(), queryBuilder.getSort(), + queryBuilder.getStatus(), queryBuilder.getTopic(), + queryBuilder.getType()); + return executeCall(call); + } + + /** + * Gets a list of videos matching the VideoQueryBuilder attributes + * + * @param queryBuilder the query builder + * @return list of videos + * @throws HolodexException the holodex exception + */ + public List