mirror of
https://github.com/jlengrand/OpenGraphKt.git
synced 2026-03-10 08:31:23 +00:00
Feat/updates 10 25 (#42)
* Update dependency com.fleeksoft.ksoup:ksoup-network to v0.2.5 (#40) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update whole ksoup to 0.2.5 * Update dependency gradle to v8.14.3 (#37) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update dependency org.junit:junit-bom to v5.14.0 (#36) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update dependency gradle to v8.14.3 (#43) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update plugin org.jetbrains.kotlin.jvm to v2.2.20 (#35) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update ktor from scraper * Update settings * Update settings * Update gradle/actions action to v4.4.4 (#31) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Adds claude init * Upgrades to Java 24 --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
e38c968151
commit
12de34aa60
6
.github/workflows/gradle.yml
vendored
6
.github/workflows/gradle.yml
vendored
@@ -34,7 +34,7 @@ jobs:
|
|||||||
# Configure Gradle for optimal use in GitHub Actions, including caching of downloaded dependencies.
|
# Configure Gradle for optimal use in GitHub Actions, including caching of downloaded dependencies.
|
||||||
# See: https://github.com/gradle/actions/blob/main/setup-gradle/README.md
|
# See: https://github.com/gradle/actions/blob/main/setup-gradle/README.md
|
||||||
- name: Setup Gradle
|
- name: Setup Gradle
|
||||||
uses: gradle/actions/setup-gradle@8379f6a1328ee0e06e2bb424dadb7b159856a326 # v4.4.0
|
uses: gradle/actions/setup-gradle@748248ddd2a24f49513d8f472f81c3a07d4d50e1 # v4.4.4
|
||||||
|
|
||||||
- name: Build with Gradle Wrapper
|
- name: Build with Gradle Wrapper
|
||||||
run: ./gradlew build
|
run: ./gradlew build
|
||||||
@@ -57,7 +57,7 @@ jobs:
|
|||||||
distribution: 'temurin'
|
distribution: 'temurin'
|
||||||
|
|
||||||
- name: Setup Gradle
|
- name: Setup Gradle
|
||||||
uses: gradle/actions/setup-gradle@8379f6a1328ee0e06e2bb424dadb7b159856a326 # v4.4.0
|
uses: gradle/actions/setup-gradle@748248ddd2a24f49513d8f472f81c3a07d4d50e1 # v4.4.4
|
||||||
|
|
||||||
- name: Build with Gradle Wrapper
|
- name: Build with Gradle Wrapper
|
||||||
run: ./gradlew koverXmlReport
|
run: ./gradlew koverXmlReport
|
||||||
@@ -88,5 +88,5 @@ jobs:
|
|||||||
# Generates and submits a dependency graph, enabling Dependabot Alerts for all project dependencies.
|
# Generates and submits a dependency graph, enabling Dependabot Alerts for all project dependencies.
|
||||||
# See: https://github.com/gradle/actions/blob/main/dependency-submission/README.md
|
# See: https://github.com/gradle/actions/blob/main/dependency-submission/README.md
|
||||||
- name: Generate and submit dependency graph
|
- name: Generate and submit dependency graph
|
||||||
uses: gradle/actions/dependency-submission@8379f6a1328ee0e06e2bb424dadb7b159856a326 # v4.4.0
|
uses: gradle/actions/dependency-submission@748248ddd2a24f49513d8f472f81c3a07d4d50e1 # v4.4.4
|
||||||
|
|
||||||
|
|||||||
6
.idea/AndroidProjectSystem.xml
generated
Normal file
6
.idea/AndroidProjectSystem.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="AndroidProjectSystem">
|
||||||
|
<option name="providerId" value="com.android.tools.idea.GradleProjectSystem" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
2
.idea/kotlinc.xml
generated
2
.idea/kotlinc.xml
generated
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="KotlinJpsPluginSettings">
|
<component name="KotlinJpsPluginSettings">
|
||||||
<option name="version" value="2.1.21" />
|
<option name="version" value="2.2.20" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
2
.idea/misc.xml
generated
2
.idea/misc.xml
generated
@@ -4,7 +4,7 @@
|
|||||||
<component name="FrameworkDetectionExcludesConfiguration">
|
<component name="FrameworkDetectionExcludesConfiguration">
|
||||||
<file type="web" url="file://$PROJECT_DIR$" />
|
<file type="web" url="file://$PROJECT_DIR$" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="temurin-21" project-jdk-type="JavaSDK">
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_24" project-jdk-name="temurin-21" project-jdk-type="JavaSDK">
|
||||||
<output url="file://$PROJECT_DIR$/out" />
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
73
CLAUDE.md
Normal file
73
CLAUDE.md
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
# CLAUDE.md
|
||||||
|
|
||||||
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||||
|
|
||||||
|
## Project Overview
|
||||||
|
|
||||||
|
OpenGraphKt is a minimalist Kotlin multiplatform library for parsing Open Graph protocol tags from HTML. It wraps Ksoup (a Kotlin port of JSoup) to extract and structure Open Graph metadata.
|
||||||
|
|
||||||
|
**Current Status**: Pre-alpha - Protocol implementation is complete for `og:` tags, but type system needs refinement.
|
||||||
|
|
||||||
|
## Project Structure
|
||||||
|
|
||||||
|
This is a multi-module Gradle project:
|
||||||
|
|
||||||
|
- `opengraphkt/` - Core library module (published to Maven Central as `fr.lengrand:opengraphkt`)
|
||||||
|
- `demo/` - Local file parsing examples
|
||||||
|
- `demo-remote/` - Remote URL parsing examples (see Main.kt for usage)
|
||||||
|
- `scrape-test/` - Testing/scraping utilities
|
||||||
|
|
||||||
|
## Common Commands
|
||||||
|
|
||||||
|
### Build and Test
|
||||||
|
```bash
|
||||||
|
./gradlew build # Build all modules
|
||||||
|
./gradlew test # Run all tests
|
||||||
|
./gradlew :opengraphkt:test # Run tests for core library only
|
||||||
|
```
|
||||||
|
|
||||||
|
### Code Coverage
|
||||||
|
```bash
|
||||||
|
./gradlew koverXmlReport # Generate XML coverage report
|
||||||
|
./gradlew koverVerify # Verify coverage meets 70% minimum threshold
|
||||||
|
```
|
||||||
|
|
||||||
|
### Publishing
|
||||||
|
```bash
|
||||||
|
./gradlew publishToMavenLocal # Publish to local Maven repo for testing
|
||||||
|
```
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
### Core Components
|
||||||
|
|
||||||
|
**Parser (`Parser.kt`)**: Main entry point that accepts multiple input types:
|
||||||
|
- `parse(url: URL)` - Fetches and parses remote HTML
|
||||||
|
- `parse(html: String)` - Parses raw HTML string
|
||||||
|
- `parse(file: File)` - Parses local HTML file
|
||||||
|
- `parse(document: Document)` - Parses Ksoup Document
|
||||||
|
|
||||||
|
The parser extracts `meta[property^=og:]` tags and builds structured data models.
|
||||||
|
|
||||||
|
**Data Models (`Models.kt`)**: Type-safe representations of Open Graph data:
|
||||||
|
- `Data` - Main container with `isValid()` method checking required fields (title, type, image, url)
|
||||||
|
- Base types: `Image`, `Video`, `Audio`
|
||||||
|
- Content-specific types: `Article`, `Book`, `Profile`
|
||||||
|
- Music types: `MusicSong`, `MusicAlbum`, `MusicPlaylist`, `MusicRadioStation`
|
||||||
|
- Video types: `VideoMovie`, `VideoEpisode`
|
||||||
|
|
||||||
|
### Key Implementation Details
|
||||||
|
|
||||||
|
**Tag Grouping**: Tags are grouped by namespace (prefix before first colon) to handle structured properties like `og:image:width`, `og:image:height` that belong to the preceding `og:image` tag.
|
||||||
|
|
||||||
|
**Date Handling**: ISO 8601 datetime parsing with fallback for date-only formats (appends `T00:00:00Z`).
|
||||||
|
|
||||||
|
**Structured Property Association**: Images/Videos/Audio with their metadata (width, height, type, etc.) are associated by parsing sequential tags - each base tag (`og:image`) is paired with following attribute tags (`og:image:width`) until the next base tag.
|
||||||
|
|
||||||
|
## Development Notes
|
||||||
|
|
||||||
|
- **JVM Toolchain**: Java 24 (see `jvmToolchain(24)` in build files)
|
||||||
|
- **Testing**: CI matrix tests on Java 17 and 23 via GitHub Actions
|
||||||
|
- **Dependencies**: Core library uses Ksoup (v0.2.5) for HTML parsing and network requests
|
||||||
|
- **Maven Coordinates**: Group `fr.lengrand`, artifact `opengraphkt`, currently at `0.1.2-SNAPSHOT`
|
||||||
|
- **Code Coverage**: Kover plugin enforces 70% minimum coverage threshold
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
plugins {
|
plugins {
|
||||||
kotlin("jvm") version "2.1.21" apply false
|
kotlin("jvm") version "2.2.20" apply false
|
||||||
}
|
}
|
||||||
@@ -19,7 +19,7 @@ tasks.test {
|
|||||||
}
|
}
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
jvmToolchain(23)
|
jvmToolchain(24)
|
||||||
}
|
}
|
||||||
|
|
||||||
application {
|
application {
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ repositories {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation("com.fleeksoft.ksoup:ksoup:0.2.4")
|
implementation("com.fleeksoft.ksoup:ksoup:0.2.5")
|
||||||
implementation("com.fleeksoft.ksoup:ksoup-kotlinx:0.2.4")
|
implementation("com.fleeksoft.ksoup:ksoup-kotlinx:0.2.5")
|
||||||
implementation("com.fleeksoft.ksoup:ksoup-network:0.2.4")
|
implementation("com.fleeksoft.ksoup:ksoup-network:0.2.5")
|
||||||
implementation(project(":opengraphkt"))
|
implementation(project(":opengraphkt"))
|
||||||
testImplementation(kotlin("test"))
|
testImplementation(kotlin("test"))
|
||||||
}
|
}
|
||||||
@@ -24,7 +24,7 @@ tasks.test {
|
|||||||
}
|
}
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
jvmToolchain(23)
|
jvmToolchain(24)
|
||||||
}
|
}
|
||||||
|
|
||||||
application {
|
application {
|
||||||
|
|||||||
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,6 +1,6 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
|
||||||
networkTimeout=10000
|
networkTimeout=10000
|
||||||
validateDistributionUrl=true
|
validateDistributionUrl=true
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
|||||||
@@ -14,9 +14,9 @@ repositories {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation("com.fleeksoft.ksoup:ksoup:0.2.4")
|
implementation("com.fleeksoft.ksoup:ksoup:0.2.5")
|
||||||
implementation("com.fleeksoft.ksoup:ksoup-kotlinx:0.2.4")
|
implementation("com.fleeksoft.ksoup:ksoup-kotlinx:0.2.5")
|
||||||
implementation("com.fleeksoft.ksoup:ksoup-network:0.2.4")
|
implementation("com.fleeksoft.ksoup:ksoup-network:0.2.5")
|
||||||
testImplementation(kotlin("test"))
|
testImplementation(kotlin("test"))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -36,7 +36,7 @@ tasks.jar {
|
|||||||
}
|
}
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
jvmToolchain(23)
|
jvmToolchain(24)
|
||||||
}
|
}
|
||||||
|
|
||||||
mavenPublishing {
|
mavenPublishing {
|
||||||
|
|||||||
@@ -11,18 +11,18 @@ repositories {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
testImplementation(platform("org.junit:junit-bom:5.13.1"))
|
testImplementation(platform("org.junit:junit-bom:5.14.0"))
|
||||||
testImplementation("org.junit.jupiter:junit-jupiter")
|
testImplementation("org.junit.jupiter:junit-jupiter")
|
||||||
implementation(kotlin("stdlib-jdk8"))
|
implementation(kotlin("stdlib-jdk8"))
|
||||||
|
|
||||||
implementation(project(":opengraphkt"))
|
implementation(project(":opengraphkt"))
|
||||||
implementation("io.ktor:ktor-client-core:3.1.3")
|
implementation("io.ktor:ktor-client-core:3.3.1")
|
||||||
implementation("io.ktor:ktor-client-cio:3.1.3")
|
implementation("io.ktor:ktor-client-cio:3.3.1")
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.test {
|
tasks.test {
|
||||||
useJUnitPlatform()
|
useJUnitPlatform()
|
||||||
}
|
}
|
||||||
kotlin {
|
kotlin {
|
||||||
jvmToolchain(23)
|
jvmToolchain(24)
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
pluginManagement {
|
pluginManagement {
|
||||||
plugins {
|
plugins {
|
||||||
kotlin("jvm") version "2.1.21"
|
kotlin("jvm") version "2.2.20"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
plugins {
|
plugins {
|
||||||
|
|||||||
Reference in New Issue
Block a user