Starts fixing #8.

Removes required dependency to JSoup for users of the library.
This commit is contained in:
Julien Lengrand-Lambert
2025-05-16 23:08:28 +02:00
parent 1da49245a4
commit 0803182d88
6 changed files with 49 additions and 47 deletions

View File

@@ -1,29 +0,0 @@
package fr.lengrand.opengraphkt
import org.jsoup.Jsoup
import org.jsoup.nodes.Document
import java.io.File
/**
* DocumentFetcher's job is to take any type of input and transform it into a JSoup document for the Parser to then do its job
*/
class DocumentFetcher {
fun fromUrl(url: String): Document {
return Jsoup.connect(url).get()
}
fun fromString(html: String): Document {
return Jsoup.parse(html)
}
/**
* Parses HTML from a file and returns a JSoup Document
* @param file The file to parse
* @param charsetName The charset to use for parsing (default is UTF-8)
* @return A JSoup Document representing the parsed HTML
*/
fun fromFile(file: File, charsetName: String = "UTF-8") : Document {
return Jsoup.parse(file, charsetName)
}
}

View File

@@ -1,7 +1,10 @@
package fr.lengrand.opengraphkt
import org.jsoup.Jsoup
import org.jsoup.nodes.Document
import org.jsoup.select.Elements
import java.io.File
import java.net.URL
data class OpenGraphTag(
val property: String,
@@ -149,6 +152,40 @@ class OpenGraphParser {
return buildOpenGraphData(openGraphTags)
}
/**
* Extracts all Open Graph tags from a URL and returns a structured OpenGraphData object.
*
* @param url The URL to be parsed for Open Graph information.
* @return An OpenGraphData object containing all extracted Open Graph data.
*/
fun parse(url: URL) : OpenGraphData {
val doc = Jsoup.connect(url.toString()).get()
return parse(doc)
}
/**
* Extracts all Open Graph tags from a raw HTML String and returns a structured OpenGraphData object.
*
* @param html The raw HTML String to be parsed for Open Graph information.
* @return An OpenGraphData object containing all extracted Open Graph data.
*/
fun parse(html: String) : OpenGraphData {
val doc = Jsoup.parse(html)
return parse(doc)
}
/**
* Extracts all Open Graph tags from a raw HTML String and returns a structured OpenGraphData object.
*
* @param file The file to parse
* @param charset The charset to use for parsing (default is UTF-8)
* @return An OpenGraphData object containing all extracted Open Graph data.
*/
fun parse(file: File, charset: String = "UTF-8") : OpenGraphData {
val doc = Jsoup.parse(file, charset)
return parse(doc)
}
/**
* Extracts Open Graph tags from JSoup Elements and converts them to OpenGraphTag objects.
*

View File

@@ -1,14 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>File Example</title>
<meta property="og:title" content="File Example Title" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://example.com/file-example" />
<meta property="og:image" content="https://example.com/file-image.jpg" />
<meta property="og:description" content="An example of parsing from a file" />
</head>
<body>
<h1>File Example</h1>
</body>
</html>

View File

@@ -8,7 +8,6 @@ import kotlin.test.assertTrue
class OpenGraphParserTest {
private val parser = OpenGraphParser()
private val fetcher = DocumentFetcher()
// Sample HTML with all required OpenGraph tags and some structured properties
private val completeHtml = """
@@ -139,8 +138,7 @@ class OpenGraphParserTest {
@Test
fun `test parse with complete OpenGraph tags`() {
val document = fetcher.fromString(completeHtml)
val openGraphData = parser.parse(document)
val openGraphData = parser.parse(completeHtml)
// Verify that all required properties are extracted correctly
assertEquals("The Rock", openGraphData.title)
@@ -184,8 +182,7 @@ class OpenGraphParserTest {
@Test
fun `test parse with article-specific tags`() {
val document = fetcher.fromString(articleHtml)
val openGraphData = parser.parse(document)
val openGraphData = parser.parse(articleHtml)
// Verify basic properties
assertEquals("Breaking News", openGraphData.title)
@@ -208,8 +205,7 @@ class OpenGraphParserTest {
@Test
fun `test parse with profile-specific tags`() {
val document = fetcher.fromString(profileHtml)
val openGraphData = parser.parse(document)
val openGraphData = parser.parse(profileHtml)
// Verify basic properties
assertEquals("John Doe", openGraphData.title)
@@ -227,8 +223,7 @@ class OpenGraphParserTest {
@Test
fun `test parse with book-specific tags`() {
val document = fetcher.fromString(bookHtml)
val openGraphData = parser.parse(document)
val openGraphData = parser.parse(bookHtml)
// Verify basic properties
assertEquals("The Great Novel", openGraphData.title)
@@ -249,8 +244,7 @@ class OpenGraphParserTest {
@Test
fun `test parse with multiple images`() {
val document = fetcher.fromString(multipleImagesHtml)
val openGraphData = parser.parse(document)
val openGraphData = parser.parse(multipleImagesHtml)
// Verify basic properties
assertEquals("Photo Gallery", openGraphData.title)