From a9d47087cde678a9ec9db03da22d66b09f107791 Mon Sep 17 00:00:00 2001 From: Suhas Dissanayake Date: Fri, 19 Jun 2026 16:12:05 +0530 Subject: [PATCH] fix: reddit unauthorized api issue --- .../net/youapps/wallpaper_apis/re/Reddit.kt | 7 ++- .../youapps/wallpaper_apis/re/RedditApi.kt | 50 ++++++++++--------- .../wallpaper_apis/re/obj/ChildData.kt | 13 ----- .../youapps/wallpaper_apis/re/obj/Children.kt | 9 ---- .../net/youapps/wallpaper_apis/re/obj/Data.kt | 10 ---- .../youapps/wallpaper_apis/re/obj/Images.kt | 10 ---- .../youapps/wallpaper_apis/re/obj/Preview.kt | 9 ---- .../wallpaper_apis/re/obj/RedditResp.kt | 9 ---- .../youapps/wallpaper_apis/re/obj/Source.kt | 14 ------ 9 files changed, 29 insertions(+), 102 deletions(-) delete mode 100644 wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/obj/ChildData.kt delete mode 100644 wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/obj/Children.kt delete mode 100644 wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/obj/Data.kt delete mode 100644 wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/obj/Images.kt delete mode 100644 wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/obj/Preview.kt delete mode 100644 wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/obj/RedditResp.kt delete mode 100644 wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/obj/Source.kt diff --git a/wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/Reddit.kt b/wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/Reddit.kt index 0f89d00c..69bb4701 100644 --- a/wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/Reddit.kt +++ b/wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/Reddit.kt @@ -1,17 +1,16 @@ package net.youapps.wallpaper_apis.re -import net.youapps.wallpaper_apis.re.obj.RedditResp +import okhttp3.ResponseBody import retrofit2.http.GET import retrofit2.http.Path import retrofit2.http.Query - interface Reddit { - @GET("r/{subreddit}/{sort}.json") + @GET("r/{subreddit}/{sort}.rss") suspend fun getRedditData( @Path("subreddit") subreddit: String, @Path("sort") sort: String, @Query("t") time: String? = null, @Query("after") after: String? = null - ): RedditResp + ): ResponseBody } diff --git a/wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/RedditApi.kt b/wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/RedditApi.kt index e0fa4d36..e336628f 100644 --- a/wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/RedditApi.kt +++ b/wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/RedditApi.kt @@ -1,5 +1,6 @@ package net.youapps.wallpaper_apis.re +import com.fleeksoft.ksoup.Ksoup import net.youapps.wallpaper_apis.RetrofitHelper import net.youapps.wallpaper_apis.Wallpaper import net.youapps.wallpaper_apis.WallpaperApi @@ -28,34 +29,35 @@ class RedditApi : WallpaperApi() { // reset the after query if starting from the beginning if (page == 1) nextPageAfter = null - val communityName = communityName!!.replaceFirst("r/", "") - - val response = - api.getRedditData( - communityName, - selectedFilters["sort"]!!, - selectedFilters["time"], - nextPageAfter - ) - // needed in order to load the next page - nextPageAfter = response.data?.after + val subreddit = communityName!!.replaceFirst("r/", "") + + val xml = api.getRedditData( + subreddit, + selectedFilters["sort"]!!, + selectedFilters["time"], + nextPageAfter + ).string() + + val doc = Ksoup.parseXml(xml) + val entries = doc.select("entry") + + nextPageAfter = entries.lastOrNull()?.selectFirst("id")?.text() - return response.data?.children?.filter { - it.childData.url?.matches(imageRegex) == true - }?.map { child -> - val data = child.childData - val preview = data.preview?.images?.firstOrNull() - val thumb = preview?.resolutions?.sortedBy { it.height } - ?.firstOrNull { it.height != null && it.height > 400 }?.imgUrl ?: data.thumbnail + return entries.mapNotNull { entry -> + val content = Ksoup.parse(entry.selectFirst("content")?.text().orEmpty()) + val imgSrc = content.select("a[href]") + .map { it.attr("href") } + .firstOrNull { it.matches(imageRegex) } ?: return@mapNotNull null Wallpaper( - imgSrc = preview?.source?.imgUrl ?: data.url.orEmpty(), - title = data.title, - thumb = thumb, - resolution = preview?.source?.let { img -> "${img.width}x${img.height}" }, - url = data.permalink?.let { baseUrl + it } + imgSrc = imgSrc, + title = entry.selectFirst("title")?.text(), + thumb = content.selectFirst("img")?.attr("src"), + url = entry.selectFirst("link")?.attr("href"), + author = entry.selectFirst("author")?.selectFirst("name")?.text(), + creationDate = entry.selectFirst("published")?.text()?.take(10), ) - }.orEmpty() + } } override suspend fun getRandomWallpaperUrl(): String? = getWallpapers(1).randomOrNull()?.imgSrc diff --git a/wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/obj/ChildData.kt b/wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/obj/ChildData.kt deleted file mode 100644 index d3a3626b..00000000 --- a/wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/obj/ChildData.kt +++ /dev/null @@ -1,13 +0,0 @@ -package net.youapps.wallpaper_apis.re.obj - -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable - -@Serializable -data class ChildData( - @SerialName("title") val title: String? = null, - @SerialName("url") val url: String? = null, - @SerialName("preview") val preview: Preview? = null, - @SerialName("thumbnail") val thumbnail: String? = null, - @SerialName("permalink") val permalink: String? = null, -) diff --git a/wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/obj/Children.kt b/wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/obj/Children.kt deleted file mode 100644 index 7c9fa15f..00000000 --- a/wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/obj/Children.kt +++ /dev/null @@ -1,9 +0,0 @@ -package net.youapps.wallpaper_apis.re.obj - -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable - -@Serializable -data class Children( - @SerialName("data") val childData: ChildData -) diff --git a/wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/obj/Data.kt b/wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/obj/Data.kt deleted file mode 100644 index f2e133f2..00000000 --- a/wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/obj/Data.kt +++ /dev/null @@ -1,10 +0,0 @@ -package net.youapps.wallpaper_apis.re.obj - -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable - -@Serializable -data class Data( - @SerialName("after") val after: String? = null, - @SerialName("children") val children: ArrayList? = arrayListOf() -) diff --git a/wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/obj/Images.kt b/wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/obj/Images.kt deleted file mode 100644 index dab3833c..00000000 --- a/wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/obj/Images.kt +++ /dev/null @@ -1,10 +0,0 @@ -package net.youapps.wallpaper_apis.re.obj - -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable - -@Serializable -data class Images( - @SerialName("source") val source: Source? = null, - @SerialName("resolutions") val resolutions: List = emptyList() -) diff --git a/wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/obj/Preview.kt b/wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/obj/Preview.kt deleted file mode 100644 index 6e969da0..00000000 --- a/wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/obj/Preview.kt +++ /dev/null @@ -1,9 +0,0 @@ -package net.youapps.wallpaper_apis.re.obj - -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable - -@Serializable -data class Preview( - @SerialName("images") val images: ArrayList? = arrayListOf() -) diff --git a/wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/obj/RedditResp.kt b/wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/obj/RedditResp.kt deleted file mode 100644 index 123d96ac..00000000 --- a/wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/obj/RedditResp.kt +++ /dev/null @@ -1,9 +0,0 @@ -package net.youapps.wallpaper_apis.re.obj - -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable - -@Serializable -data class RedditResp( - @SerialName("data") val data: Data? = null -) diff --git a/wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/obj/Source.kt b/wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/obj/Source.kt deleted file mode 100644 index a35156a8..00000000 --- a/wallpaper-apis/src/main/java/net/youapps/wallpaper_apis/re/obj/Source.kt +++ /dev/null @@ -1,14 +0,0 @@ -package net.youapps.wallpaper_apis.re.obj - -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable - -@Serializable -data class Source( - @SerialName("url") val url: String? = null, - @SerialName("width") val width: Int? = null, - @SerialName("height") val height: Int? = null -) { - val imgUrl - get() = url?.replace("&", "&") -}