add rudimentary parsing for browsing results
This commit is contained in:
@ -1,7 +1,9 @@
|
||||
package org.mosad.teapod.parser.crunchyroll
|
||||
|
||||
import android.util.Log
|
||||
import com.github.kittinunf.fuel.Fuel
|
||||
import com.github.kittinunf.fuel.core.FuelError
|
||||
import com.github.kittinunf.fuel.core.Parameters
|
||||
import com.github.kittinunf.fuel.json.FuelJson
|
||||
import com.github.kittinunf.fuel.json.responseJson
|
||||
import com.github.kittinunf.result.Result
|
||||
@ -12,7 +14,7 @@ import kotlinx.serialization.json.Json
|
||||
|
||||
private val json = Json { ignoreUnknownKeys = true }
|
||||
|
||||
class Cruncyroll {
|
||||
object Crunchyroll {
|
||||
|
||||
private val baseUrl = "https://beta-api.crunchyroll.com"
|
||||
|
||||
@ -47,7 +49,7 @@ class Cruncyroll {
|
||||
// println("response: $response")
|
||||
// println("response: $result")
|
||||
|
||||
println("login complete with code ${response.statusCode}")
|
||||
Log.i(javaClass.name, "login complete with code ${response.statusCode}")
|
||||
|
||||
return@withContext response.statusCode == 200
|
||||
}
|
||||
@ -56,9 +58,9 @@ class Cruncyroll {
|
||||
}
|
||||
|
||||
// TODO get/post difference
|
||||
private suspend fun requestA(endpoint: String): Result<FuelJson, FuelError> = coroutineScope {
|
||||
private suspend fun request(endpoint: String, params: Parameters = listOf()): Result<FuelJson, FuelError> = coroutineScope {
|
||||
return@coroutineScope (Dispatchers.IO) {
|
||||
val (request, response, result) = Fuel.get("$baseUrl$endpoint")
|
||||
val (request, response, result) = Fuel.get("$baseUrl$endpoint", params)
|
||||
.header("Authorization", "$tokenType $accessToken")
|
||||
.responseJson()
|
||||
|
||||
@ -71,34 +73,30 @@ class Cruncyroll {
|
||||
}
|
||||
|
||||
// TESTING
|
||||
@Serializable
|
||||
data class Test(val total: Int, val items: List<Item>)
|
||||
|
||||
@Serializable
|
||||
data class Item(val channel_id: String, val description: String)
|
||||
|
||||
// TODO sort_by, default alphabetical, n, locale de-DE
|
||||
suspend fun browse() {
|
||||
// TODO sort_by, default alphabetical, n, locale de-DE, categories
|
||||
suspend fun browse(sortBy: SortBy = SortBy.ALPHABETICAL, n: Int = 10): BrowseResult {
|
||||
val browseEndpoint = "/content/v1/browse"
|
||||
val parameters = listOf("sort_by" to sortBy.str, "n" to n)
|
||||
|
||||
val result = requestA(browseEndpoint)
|
||||
val result = request(browseEndpoint, parameters)
|
||||
|
||||
println("${result.component1()?.obj()?.get("total")}")
|
||||
|
||||
val test = json.decodeFromString<Test>(result.component1()?.obj()?.toString()!!)
|
||||
println(test)
|
||||
// val browseResult = json.decodeFromString<BrowseResult>(result.component1()?.obj()?.toString()!!)
|
||||
// println(browseResult.items.size)
|
||||
|
||||
return json.decodeFromString<BrowseResult>(result.component1()?.obj()?.toString()!!)
|
||||
}
|
||||
|
||||
// TODO
|
||||
suspend fun search() {
|
||||
val searchEndpoint = "/content/v1/search"
|
||||
|
||||
val result = requestA(searchEndpoint)
|
||||
val result = request(searchEndpoint)
|
||||
|
||||
println("${result.component1()?.obj()?.get("total")}")
|
||||
|
||||
val test = json.decodeFromString<Test>(result.component1()?.obj()?.toString()!!)
|
||||
println(test)
|
||||
val test = json.decodeFromString<BrowseResult>(result.component1()?.obj()?.toString()!!)
|
||||
println(test.items.size)
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,34 @@
|
||||
package org.mosad.teapod.parser.crunchyroll
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
/**
|
||||
* data classes for browse
|
||||
* TODO make class names more clear/possibly overlapping for now
|
||||
*/
|
||||
enum class SortBy(val str: String) {
|
||||
ALPHABETICAL("alphabetical"),
|
||||
NEWLY_ADDED("newly_added"),
|
||||
POPULARITY("popularity")
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class BrowseResult(val total: Int, val items: List<Item>)
|
||||
|
||||
@Serializable
|
||||
data class Item(
|
||||
val id: String,
|
||||
val title: String,
|
||||
val type: String,
|
||||
val channel_id: String,
|
||||
val description: String,
|
||||
val images: Images
|
||||
// TODO metadata etc.
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class Images(val poster_tall: List<List<Poster>>, val poster_wide: List<List<Poster>>)
|
||||
// crunchyroll why?
|
||||
|
||||
@Serializable
|
||||
data class Poster(val height: Int, val width: Int, val source: String, val type: String)
|
Reference in New Issue
Block a user