From 3c0eed60a744320196925a2f73183d11f0192eb5 Mon Sep 17 00:00:00 2001 From: julien Lengrand-Lambert Date: Sun, 8 Jun 2025 14:16:48 +0200 Subject: [PATCH] Makes library multiplatform (#27) * Replaces JSoup by Ksoup --- demo/build.gradle.kts | 4 +++- .../kotlin/fr/lengrand/opengraphkt/Main.kt | 6 ++--- opengraphkt/build.gradle.kts | 4 +++- .../kotlin/fr/lengrand/opengraphkt/Parser.kt | 24 +++++++++++-------- 4 files changed, 23 insertions(+), 15 deletions(-) diff --git a/demo/build.gradle.kts b/demo/build.gradle.kts index a5b42ca..f749742 100644 --- a/demo/build.gradle.kts +++ b/demo/build.gradle.kts @@ -12,7 +12,9 @@ repositories { } dependencies { - implementation("org.jsoup:jsoup:1.20.1") + implementation("com.fleeksoft.ksoup:ksoup:0.2.4") + implementation("com.fleeksoft.ksoup:ksoup-kotlinx:0.2.4") + implementation("com.fleeksoft.ksoup:ksoup-network:0.2.4") implementation(project(":opengraphkt")) testImplementation(kotlin("test")) } diff --git a/demo/src/main/kotlin/fr/lengrand/opengraphkt/Main.kt b/demo/src/main/kotlin/fr/lengrand/opengraphkt/Main.kt index edffc3a..b0eb309 100644 --- a/demo/src/main/kotlin/fr/lengrand/opengraphkt/Main.kt +++ b/demo/src/main/kotlin/fr/lengrand/opengraphkt/Main.kt @@ -1,6 +1,6 @@ package fr.lengrand.opengraphkt -import org.jsoup.Jsoup +import com.fleeksoft.ksoup.Ksoup import java.io.File import java.net.URI @@ -25,7 +25,7 @@ fun main() { println("\nExample 2: Parsing from File") try { val resourceUrl = object {}.javaClass.getResource("/example.html") - val resourceFile = File(resourceUrl.toURI()) + val resourceFile = File(resourceUrl!!.toURI()) // Parse the file val openGraphData = parser.parse(resourceFile) @@ -66,7 +66,7 @@ fun main() { // Example 4: Parse Open Graph data from a Jsoup Document println("\nExample 4: Parsing from JSoup Document") - val doc = Jsoup.parse(html) + val doc = Ksoup.parse(html) val openGraphDataDoc = parser.parse(doc) println("Title: ${openGraphDataDoc.title}") diff --git a/opengraphkt/build.gradle.kts b/opengraphkt/build.gradle.kts index ab2cf92..c28887f 100644 --- a/opengraphkt/build.gradle.kts +++ b/opengraphkt/build.gradle.kts @@ -14,7 +14,9 @@ repositories { } dependencies { - implementation("org.jsoup:jsoup:1.20.1") + implementation("com.fleeksoft.ksoup:ksoup:0.2.4") + implementation("com.fleeksoft.ksoup:ksoup-kotlinx:0.2.4") + implementation("com.fleeksoft.ksoup:ksoup-network:0.2.4") testImplementation(kotlin("test")) } diff --git a/opengraphkt/src/main/kotlin/fr/lengrand/opengraphkt/Parser.kt b/opengraphkt/src/main/kotlin/fr/lengrand/opengraphkt/Parser.kt index 8092236..7cc8d78 100644 --- a/opengraphkt/src/main/kotlin/fr/lengrand/opengraphkt/Parser.kt +++ b/opengraphkt/src/main/kotlin/fr/lengrand/opengraphkt/Parser.kt @@ -1,8 +1,11 @@ package fr.lengrand.opengraphkt -import org.jsoup.Jsoup -import org.jsoup.nodes.Document -import org.jsoup.select.Elements +import com.fleeksoft.ksoup.Ksoup +import com.fleeksoft.ksoup.network.parseGetRequestBlocking +import com.fleeksoft.ksoup.nodes.Document +import com.fleeksoft.ksoup.parseFile +import com.fleeksoft.ksoup.select.Elements +import kotlinx.coroutines.runBlocking import java.io.File import java.net.URI import java.net.URL @@ -61,21 +64,20 @@ class Parser { * Extracts all Open Graph tags from a URL and returns a structured Data object. * * @param url The URL to be parsed for Open Graph information. - * @return An Data object containing all extracted Open Graph data. + * @return A Data object containing all extracted Open Graph data. */ fun parse(url: URL) : Data { - val doc = Jsoup.connect(url.toString()).get() - return parse(doc) + return parse(Ksoup.parseGetRequestBlocking(url.toString())) } /** * Extracts all Open Graph tags from a raw HTML String and returns a structured Data object. * * @param html The raw HTML String to be parsed for Open Graph information. - * @return An Data object containing all extracted Open Graph data. + * @return A Data object containing all extracted Open Graph data. */ fun parse(html: String) : Data { - val doc = Jsoup.parse(html) + val doc = Ksoup.parse(html) return parse(doc) } @@ -84,10 +86,12 @@ class Parser { * * @param file The file to parse * @param charset The charset to use for parsing (default is UTF-8) - * @return An Data object containing all extracted Open Graph data. + * @return A Data object containing all extracted Open Graph data. */ fun parse(file: File, charset: String = "UTF-8") : Data { - val doc = Jsoup.parse(file, charset) + val doc = runBlocking { + Ksoup.parseFile(file, file.absolutePath, charset) + } return parse(doc) }