A simple Kotlin/Java library to retrieve jokes from Sv443's JokeAPI. https://github.com/ethauvin/jokeapi
Find a file
2022-10-08 22:36:01 -07:00
.circleci No JDK 19 on CircleCI, switching to 17 2022-09-26 16:59:02 -07:00
.github/workflows Upgraded to Kotlin 1.7.20 2022-09-29 21:32:03 -07:00
.idea Improved KDoc 2022-10-05 23:03:07 -07:00
gradle/wrapper Initial commit. 2022-09-21 02:50:11 -07:00
src Moved Kotlin-only functions to top-level 2022-10-08 22:36:01 -07:00
.editorconfig Initial commit. 2022-09-21 02:50:11 -07:00
.gitattributes Initial commit. 2022-09-21 02:50:11 -07:00
.gitignore Initial commit. 2022-09-21 02:50:11 -07:00
build.gradle.kts Added ability to retrieve multiple jokes 2022-10-07 01:43:02 -07:00
detekt-baseline.xml Moved Kotlin-only functions to top-level 2022-10-08 22:36:01 -07:00
gradlew Initial commit. 2022-09-21 02:50:11 -07:00
gradlew.bat Initial commit. 2022-09-21 02:50:11 -07:00
LICENSE.txt Initial commit. 2022-09-21 02:50:11 -07:00
pom.xml Moved Kotlin-only functions to top-level 2022-10-08 22:36:01 -07:00
README.md Moved Kotlin-only functions to top-level 2022-10-08 22:36:01 -07:00
settings.gradle.kts Initial commit. 2022-09-21 02:50:11 -07:00

License (3-Clause BSD) Nexus Snapshot

Quality Gate Status GitHub CI CircleCI

JokeAPI for Kotlin/Java

A simple Kotlin/Java library to retrieve jokes from Sv443's JokeAPI.

Examples (TL;DR)

import net.thauvin.erik.jokeapi.getJoke

val joke = getJoke()
val safe = getJoke(safe = true)
val pun = getJoke(category = Category.PUN)

The parameters match the joke endpoint.

A Joke class instance is returned:

data class Joke(
    val category: Category,
    val type: Type,
    val joke: List<String>,
    val flags: Set<Flag>,
    val id: Int,
    val safe: Boolean,
    val language: Language
)

To retrieve multiple jokes:

val frenchJokes = getJokes(amount = 2, type = Type.TWOPART, language = Language.FR)
frenchJokes.forEach {
    println(it.joke.joinToString("\n"))
    println("-".repeat(46))
}

If an error occurs, a JokeException is thrown:

class JokeException(
    val internalError: Boolean,
    val code: Int,
    message: String,
    val causedBy: List<String>,
    val additionalInfo: String,
    val timestamp: Long,
    cause: Throwable? = null
) : Exception(message, cause)

If an HTTP error occurs an HttpErrorException is thrown, with its message and cause matching the JokeAPI status codes:

class HttpErrorException(
    val statusCode: Int,
    message: String,
    cause: Throwable? = null
) : IOException(message, cause)

Gradle, Maven, etc.

To use with Gradle, include the following dependency in your build file:

repositories {
    mavenCentral()
    maven { url = uri("https://oss.sonatype.org/content/repositories/snapshots") }
}

dependencies {
    implementation("net.thauvin.erik:jokeapi:0.9-SNAPSHOT")
}

Instructions for using with Maven, Ivy, etc. can be found on Maven Central.

Raw Jokes

You can also retrieve one or more raw (unprocessed) jokes in all supported formats.

For example for YAML:

var joke = getRawJokes(format = Format.YAML, idRange = IdRange(22))
println(joke)
error: false
category: "Programming"
type: "single"
joke: "If Bill Gates had a dime for every time Windows crashed ... Oh wait, he does."
flags:
  nsfw: false
  religious: false
  political: false
  racist: false
  sexist: false
  explicit: false
id: 22
safe: true
lang: "en"

Java

To make it easier to use the library with Java, a configuration builder is also available:

var config = new JokeConfig.Builder()
        .type(Type.SINGLE)
        .safe(true)
        .build();
var joke = JokeApi.getJoke(config);
joke.getJoke().forEach(System.out::println);

Extending

A generic apiCall() function is available to access other JokeAPI endpoints.

For example to retrieve the French language code:

val lang = JokeApi.apiCall(
    endPoint = "langcode",
    path = "french",
    params = mapOf(Parameter.FORMAT to Format.YAML.value)
)
println(lang)
error: false
code: "fr"