mirror of
https://github.com/Shabinder/SpotiFlyer.git
synced 2024-11-22 09:04:32 +01:00
ktor impl
This commit is contained in:
parent
d52ab8155b
commit
a647d1ebce
@ -5,12 +5,13 @@ import android.util.Log
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.ui.platform.setContent
|
||||
import com.shabinder.common.authenticateSpotify
|
||||
import com.shabinder.common.spotify.authenticateSpotify
|
||||
import com.shabinder.common.ui.SpotiFlyerMain
|
||||
import com.shabinder.common.youtube.YoutubeMusic
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class MainActivity : AppCompatActivity() {
|
||||
class MainActivity : AppCompatActivity(),YoutubeMusic {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContent {
|
||||
@ -18,7 +19,9 @@ class MainActivity : AppCompatActivity() {
|
||||
SpotiFlyerMain()
|
||||
scope.launch(Dispatchers.IO) {
|
||||
val token = authenticateSpotify()
|
||||
val response = getYoutubeMusicResponse("filhaal")
|
||||
Log.i("Spotify",token.toString())
|
||||
Log.i("Youtube",response)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,13 +0,0 @@
|
||||
package com.shabinder.common.database
|
||||
|
||||
import com.squareup.sqldelight.db.SqlDriver
|
||||
import com.squareup.sqldelight.sqlite.driver.JdbcSqliteDriver
|
||||
import com.shabinder.database.TodoDatabase
|
||||
|
||||
@Suppress("FunctionName") // FactoryFunction
|
||||
actual fun TestDatabaseDriver(): SqlDriver {
|
||||
val driver = JdbcSqliteDriver(JdbcSqliteDriver.IN_MEMORY)
|
||||
TodoDatabase.Schema.create(driver)
|
||||
|
||||
return driver
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
package com.shabinder.common.database
|
||||
|
||||
import android.content.Context
|
||||
import com.squareup.sqldelight.android.AndroidSqliteDriver
|
||||
import com.squareup.sqldelight.db.SqlDriver
|
||||
import com.shabinder.database.TodoDatabase
|
||||
|
||||
@Suppress("FunctionName") // FactoryFunction
|
||||
fun TodoDatabaseDriver(context: Context): SqlDriver =
|
||||
AndroidSqliteDriver(
|
||||
schema = TodoDatabase.Schema,
|
||||
context = context,
|
||||
name = "TodoDatabase.db"
|
||||
)
|
@ -12,6 +12,7 @@ kotlin {
|
||||
implementation(project(":common:database"))
|
||||
implementation("org.kodein.di:kodein-di:${Versions.kodein}")
|
||||
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.0.1")
|
||||
implementation(Extras.jsonKlaxon)
|
||||
implementation(Ktor.clientCore)
|
||||
implementation(Ktor.clientCio)
|
||||
implementation(Ktor.clientJson)
|
||||
|
@ -0,0 +1,101 @@
|
||||
package com.shabinder.common.gaana
|
||||
|
||||
import com.shabinder.common.spotify.kotlinxSerializer
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.features.json.*
|
||||
import io.ktor.client.request.*
|
||||
|
||||
private const val TOKEN = "b2e6d7fbc136547a940516e9b77e5990"
|
||||
private const val BASE_URL = "https://api.gaana.com/"
|
||||
|
||||
interface GaanaRequests {
|
||||
/*
|
||||
* Api Request: http://api.gaana.com/?type=playlist&subtype=playlist_detail&seokey=gaana-dj-hindi-top-50-1&token=b2e6d7fbc136547a940516e9b77e5990&format=JSON
|
||||
*
|
||||
* subtype : ["most_popular_playlist" , "playlist_home_featured" ,"playlist_detail" ,"user_playlist" ,"topCharts"]
|
||||
**/
|
||||
suspend fun getGaanaPlaylist(
|
||||
type: String = "playlist",
|
||||
subtype: String = "playlist_detail",
|
||||
seokey: String,
|
||||
format: String = "JSON",
|
||||
limit: Int = 2000
|
||||
): GaanaPlaylist{
|
||||
return httpClient.get(
|
||||
"$BASE_URL/?type=$type&subtype=$subtype&seokey=$seokey&token=$TOKEN&format=$format&limit=$limit"
|
||||
)
|
||||
}
|
||||
|
||||
/*
|
||||
* Api Request: http://api.gaana.com/?type=album&subtype=album_detail&seokey=kabir-singh&token=b2e6d7fbc136547a940516e9b77e5990&format=JSON
|
||||
*
|
||||
* subtype : ["most_popular" , "new_release" ,"featured_album" ,"similar_album" ,"all_albums", "album" ,"album_detail" ,"album_detail_info"]
|
||||
**/
|
||||
suspend fun getGaanaAlbum(
|
||||
type: String = "album",
|
||||
subtype: String = "album_detail",
|
||||
seokey: String,
|
||||
format: String = "JSON",
|
||||
limit: Int = 2000
|
||||
): GaanaAlbum{
|
||||
return httpClient.get(
|
||||
"$BASE_URL/?type=$type&subtype=$subtype&seokey=$seokey&token=$TOKEN&format=$format&limit=$limit"
|
||||
)
|
||||
}
|
||||
|
||||
/*
|
||||
* Api Request: http://api.gaana.com/?type=song&subtype=song_detail&seokey=pachtaoge&token=b2e6d7fbc136547a940516e9b77e5990&format=JSON
|
||||
*
|
||||
* subtype : ["most_popular" , "hot_songs" ,"recommendation" ,"song_detail"]
|
||||
**/
|
||||
suspend fun getGaanaSong(
|
||||
type: String = "song",
|
||||
subtype: String = "song_detail",
|
||||
seokey: String,
|
||||
format: String = "JSON",
|
||||
): GaanaSong{
|
||||
return httpClient.get(
|
||||
"$BASE_URL/?type=$type&subtype=$subtype&seokey=$seokey&token=$TOKEN&format=$format"
|
||||
)
|
||||
}
|
||||
|
||||
/*
|
||||
* Api Request: https://api.gaana.com/?type=artist&subtype=artist_details_info&seokey=neha-kakkar&token=b2e6d7fbc136547a940516e9b77e5990&format=JSON
|
||||
*
|
||||
* subtype : ["most_popular" , "artist_list" ,"artist_track_listing" ,"artist_album" ,"similar_artist","artist_details" ,"artist_details_info"]
|
||||
**/
|
||||
suspend fun getGaanaArtistDetails(
|
||||
type: String = "artist",
|
||||
subtype: String = "artist_details_info",
|
||||
seokey: String,
|
||||
format: String = "JSON",
|
||||
): GaanaArtistDetails{
|
||||
return httpClient.get(
|
||||
"$BASE_URL/?type=$type&subtype=$subtype&seokey=$seokey&token=$TOKEN&format=$format"
|
||||
)
|
||||
}
|
||||
/*
|
||||
* Api Request: http://api.gaana.com/?type=artist&subtype=artist_track_listing&seokey=neha-kakkar&limit=50&token=b2e6d7fbc136547a940516e9b77e5990&format=JSON
|
||||
*
|
||||
* subtype : ["most_popular" , "artist_list" ,"artist_track_listing" ,"artist_album" ,"similar_artist","artist_details" ,"artist_details_info"]
|
||||
**/
|
||||
suspend fun getGaanaArtistTracks(
|
||||
type: String = "artist",
|
||||
subtype: String = "artist_track_listing",
|
||||
seokey: String,
|
||||
format: String = "JSON",
|
||||
limit: Int = 50
|
||||
): GaanaArtistTracks{
|
||||
return httpClient.get(
|
||||
"$BASE_URL/?type=$type&subtype=$subtype&seokey=$seokey&token=$TOKEN&format=$format&limit=$limit"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
val httpClient by lazy {
|
||||
HttpClient {
|
||||
install(JsonFeature) {
|
||||
serializer = kotlinxSerializer
|
||||
}
|
||||
}
|
||||
}
|
@ -1,6 +1,5 @@
|
||||
package com.shabinder.common
|
||||
package com.shabinder.common.spotify
|
||||
|
||||
import com.shabinder.common.spotify.Token
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.features.auth.*
|
||||
import io.ktor.client.features.auth.providers.*
|
||||
@ -16,7 +15,8 @@ suspend fun authenticateSpotify(): Token {
|
||||
}
|
||||
}
|
||||
|
||||
private val spotifyAuthClient = HttpClient {
|
||||
private val spotifyAuthClient by lazy {
|
||||
HttpClient {
|
||||
val clientId = "694d8bf4f6ec420fa66ea7fb4c68f89d"
|
||||
val clientSecret = "02ca2d4021a7452dae2328b47a6e8fe8"
|
||||
|
||||
@ -30,6 +30,7 @@ private val spotifyAuthClient = HttpClient {
|
||||
install(JsonFeature) {
|
||||
serializer = kotlinxSerializer
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val kotlinxSerializer = KotlinxSerializer( kotlinx.serialization.json.Json {
|
@ -0,0 +1,47 @@
|
||||
package com.shabinder.common.spotify
|
||||
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.features.json.*
|
||||
import io.ktor.client.request.*
|
||||
|
||||
private const val BASE_URL = "https://api.spotify.com/v1/"
|
||||
|
||||
private val spotifyRequestsClient by lazy {
|
||||
HttpClient {
|
||||
install(JsonFeature) {
|
||||
serializer = kotlinxSerializer
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
interface SpotifyRequests {
|
||||
|
||||
suspend fun getPlaylist(playlistID: String):Playlist{
|
||||
return spotifyRequestsClient.get("$BASE_URL/playlists/$playlistID")
|
||||
}
|
||||
|
||||
suspend fun getPlaylistTracks(
|
||||
playlistID: String?,
|
||||
offset: Int = 0,
|
||||
limit: Int = 100
|
||||
):PagingObjectPlaylistTrack{
|
||||
return spotifyRequestsClient.get("$BASE_URL/playlists/$playlistID/tracks?offset=$offset&limit=$limit")
|
||||
}
|
||||
|
||||
suspend fun getTrack(id: String?):Track{
|
||||
return spotifyRequestsClient.get("$BASE_URL/tracks/$id")
|
||||
}
|
||||
|
||||
suspend fun getEpisode(id: String?) :Track{
|
||||
return spotifyRequestsClient.get("$BASE_URL/episodes/$id")
|
||||
}
|
||||
|
||||
suspend fun getShow(id: String?): Track{
|
||||
return spotifyRequestsClient.get("$BASE_URL/shows/$id")
|
||||
}
|
||||
|
||||
suspend fun getAlbum(id: String):Album{
|
||||
return spotifyRequestsClient.get("$BASE_URL/albums/$id")
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
package com.shabinder.common.youtube
|
||||
|
||||
import com.shabinder.common.gaana.httpClient
|
||||
import io.ktor.client.request.*
|
||||
import io.ktor.client.statement.*
|
||||
import io.ktor.http.*
|
||||
import kotlinx.serialization.json.buildJsonObject
|
||||
import kotlinx.serialization.json.put
|
||||
import kotlinx.serialization.json.putJsonObject
|
||||
|
||||
private const val apiKey = "AIzaSyC9XL3ZjWddXya6X74dJoCTL-WEYFDNX30"
|
||||
|
||||
interface YoutubeMusic {
|
||||
|
||||
suspend fun getYoutubeMusicResponse(query: String):String{
|
||||
return httpClient.post("https://music.youtube.com/youtubei/v1/search?alt=json&key=$apiKey"){
|
||||
contentType(ContentType.Application.Json)
|
||||
headers{
|
||||
//append("Content-Type"," application/json")
|
||||
append("Referer"," https://music.youtube.com/search")
|
||||
}
|
||||
body = buildJsonObject {
|
||||
putJsonObject("context"){
|
||||
putJsonObject("client"){
|
||||
put("clientName" ,"WEB_REMIX")
|
||||
put("clientVersion" ,"0.1")
|
||||
}
|
||||
}
|
||||
put("query",query)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
fun makeJsonBody(query: String):JsonObject{
|
||||
val client = JsonObject()
|
||||
client["clientName"] = "WEB_REMIX"
|
||||
client["clientVersion"] = "0.1"
|
||||
|
||||
val context = JsonObject()
|
||||
context["client"] = client
|
||||
|
||||
val mainObject = JsonObject()
|
||||
mainObject["context"] = context
|
||||
mainObject["query"] = query
|
||||
|
||||
return mainObject
|
||||
}*/
|
Loading…
Reference in New Issue
Block a user