Rename youtube-music module to innertube and rewrite it
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
package it.vfsfitvnm.youtubemusic.requests
|
||||
|
||||
import io.ktor.client.call.body
|
||||
import io.ktor.client.request.get
|
||||
import io.ktor.client.request.post
|
||||
import io.ktor.client.request.setBody
|
||||
import io.ktor.http.ContentType
|
||||
import io.ktor.http.contentType
|
||||
import it.vfsfitvnm.youtubemusic.Innertube
|
||||
import it.vfsfitvnm.youtubemusic.models.Context
|
||||
import it.vfsfitvnm.youtubemusic.models.PlayerResponse
|
||||
import it.vfsfitvnm.youtubemusic.models.bodies.PlayerBody
|
||||
import it.vfsfitvnm.youtubemusic.utils.runCatchingNonCancellable
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
suspend fun Innertube.player(body: PlayerBody) = runCatchingNonCancellable {
|
||||
val response = client.post(player) {
|
||||
setBody(body)
|
||||
mask("playabilityStatus.status,playerConfig.audioConfig,streamingData.adaptiveFormats")
|
||||
}.body<PlayerResponse>()
|
||||
|
||||
if (response.playabilityStatus?.status == "OK") {
|
||||
response
|
||||
} else {
|
||||
@Serializable
|
||||
data class AudioStream(
|
||||
val url: String,
|
||||
val bitrate: Long
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class PipedResponse(
|
||||
val audioStreams: List<AudioStream>
|
||||
)
|
||||
|
||||
val safePlayerResponse = client.post(player) {
|
||||
setBody(body.copy(context = Context.DefaultAgeRestrictionBypass))
|
||||
mask("playabilityStatus.status,playerConfig.audioConfig,streamingData.adaptiveFormats")
|
||||
}.body<PlayerResponse>()
|
||||
|
||||
if (safePlayerResponse.playabilityStatus?.status != "OK") {
|
||||
return@runCatchingNonCancellable response
|
||||
}
|
||||
|
||||
val audioStreams = client.get("https://watchapi.whatever.social/streams/${body.videoId}") {
|
||||
contentType(ContentType.Application.Json)
|
||||
}.body<PipedResponse>().audioStreams
|
||||
|
||||
safePlayerResponse.copy(
|
||||
streamingData = safePlayerResponse.streamingData?.copy(
|
||||
adaptiveFormats = safePlayerResponse.streamingData.adaptiveFormats?.map { adaptiveFormat ->
|
||||
adaptiveFormat.copy(
|
||||
url = audioStreams.find { it.bitrate == adaptiveFormat.bitrate }?.url
|
||||
)
|
||||
}
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user