diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index c06fdc6..bec87e1 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -11,32 +11,32 @@ jobs:
LAVALINK_MAVEN_PASSWORD: ${{ secrets.LAVALINK_MAVEN_PASSWORD }}
steps:
- name: Checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Java
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v4
with:
distribution: zulu
java-version: 17
cache: gradle
- name: Setup Gradle
- uses: gradle/gradle-build-action@v2
+ uses: gradle/actions/setup-gradle@v4
- name: Build and Publish
run: ./gradlew build publish --no-daemon
- name: Upload main Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
name: java-lyrics-plugin.zip
path: |
build/libs/lyrics-*.jar
- name: Upload plugin Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
name: java-lyrics-lavalyrics.zip
path: |
@@ -48,15 +48,15 @@ jobs:
if: github.event_name == 'release'
steps:
- name: Checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
- name: Download main Artifact
- uses: actions/download-artifact@v3
+ uses: actions/download-artifact@v4
with:
name: java-lyrics-plugin.zip
- name: Download plugin Artifact
- uses: actions/download-artifact@v3
+ uses: actions/download-artifact@v4
with:
name: java-lyrics-lavalyrics.zip
diff --git a/application/src/main/java/me/duncte123/lyrics/GeniusClient.java b/application/src/main/java/me/duncte123/lyrics/GeniusClient.java
index 0d3779d..9300814 100644
--- a/application/src/main/java/me/duncte123/lyrics/GeniusClient.java
+++ b/application/src/main/java/me/duncte123/lyrics/GeniusClient.java
@@ -24,6 +24,9 @@ public class GeniusClient implements AutoCloseable {
private static final ExecutorService executor = Executors.newSingleThreadExecutor();
private final HttpClientProvider httpInterfaceManager;
private final String apiKey;
+ private static final String BROWSER_USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64; rv:139.0) Gecko/20100101 Firefox/139.0";
+ private static final String PRELOAD_START = "window.__PRELOADED_STATE__ = JSON.parse('";
+ private static final String PRELOAD_END = "');";
public GeniusClient(String apiKey, HttpClientProvider httpProvider) {
this.apiKey = apiKey;
@@ -112,17 +115,40 @@ private GeniusData findGeniusData(String query) throws IOException {
private String loadLyrics(String geniusUrl) throws IOException {
final var request = new HttpGet(geniusUrl);
+ request.setHeader("user-agent", BROWSER_USER_AGENT);
+
try (final var response = getHttpInterface().execute(request)) {
final String html = IOUtils.toString(response.getEntity().getContent(), StandardCharsets.UTF_8);
- final var doc = Jsoup.parse(html);
- final var lyricsContainer = doc.select("div[data-lyrics-container]").first();
+ // fucking kill me
+ final var idx1 = html.indexOf(PRELOAD_START);
+ final var split1 = html.substring(idx1 + PRELOAD_START.length());
+ final var idx2 = split1.indexOf(PRELOAD_END);
+ final var json = split1.substring(0, idx2)
+ .replace("\\\"", "\"")
+ .replace("\\'", "'")
+ .replace("\\\\", "\\");
+
+ final var lyrics = JsonBrowser.parse(json).get("songPage").get("lyricsData").get("body").get("html").text();
+
+ if (lyrics == null || lyrics.isEmpty()) {
+ final var doc = Jsoup.parse(html);
+
+ final var lyricsContainer = doc.select("[data-lyrics-container]").first();
+
+ if (lyricsContainer == null) {
+ throw new RuntimeException("Could not find lyrics container, please report this to the developer");
+ }
- if (lyricsContainer == null) {
- throw new RuntimeException("Could not find lyrics container, please report this to the developer");
+ return lyricsContainer.wholeText()
+ .replace("
", "\n")
+ .replace("
", "\n")
+ .replace("\n\n\n", "\n")
+ .trim();
}
- return lyricsContainer.wholeText()
+ return Jsoup.parse(lyrics)
+ .wholeText()
.replace("
", "\n")
.replace("
", "\n")
.replace("\n\n\n", "\n")
diff --git a/protocol/src/main/java/me/duncte123/lyrics/model/Client.java b/protocol/src/main/java/me/duncte123/lyrics/model/Client.java
index 7d66079..315c881 100644
--- a/protocol/src/main/java/me/duncte123/lyrics/model/Client.java
+++ b/protocol/src/main/java/me/duncte123/lyrics/model/Client.java
@@ -6,7 +6,7 @@ public Client(String clientName, String clientVersion) {
}
public Client(String hl) {
- this("ANDROID_MUSIC", "6.31.55", hl);
+ this("ANDROID_MUSIC", "7.11.50", hl);
}
public Client() {