From 745ecb427c511dd8d0283925ca2937daa85c9510 Mon Sep 17 00:00:00 2001 From: louwar Date: Fri, 17 Mar 2023 12:30:20 +0100 Subject: [PATCH] =?UTF-8?q?impl=C3=A9mentation=20de=20l'API=20themovieDB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CineCool/app/build.gradle | 8 +++ .../main/java/fr/iut/cinecool/ApiClient.kt | 66 +++++++++++++++++++ .../java/fr/iut/cinecool/DetailActivity.kt | 2 + .../fr/iut/cinecool/interfaces/ApiService.kt | 15 +++++ .../main/java/fr/iut/cinecool/model/Movie.kt | 11 +++- .../fr/iut/cinecool/model/MovieResponse.kt | 7 ++ 6 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 CineCool/app/src/main/java/fr/iut/cinecool/ApiClient.kt create mode 100644 CineCool/app/src/main/java/fr/iut/cinecool/interfaces/ApiService.kt create mode 100644 CineCool/app/src/main/java/fr/iut/cinecool/model/MovieResponse.kt diff --git a/CineCool/app/build.gradle b/CineCool/app/build.gradle index 8154b2c..fb4072b 100644 --- a/CineCool/app/build.gradle +++ b/CineCool/app/build.gradle @@ -47,4 +47,12 @@ dependencies { testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' + + implementation "com.squareup.okhttp3:okhttp:4.9.3" + implementation "com.squareup.okhttp3:logging-interceptor:4.9.3" + implementation "com.google.code.gson:gson:2.8.9" + implementation 'com.squareup.retrofit2:retrofit:2.9.0' + implementation 'com.squareup.retrofit2:converter-gson:2.9.0' + + } \ No newline at end of file diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/ApiClient.kt b/CineCool/app/src/main/java/fr/iut/cinecool/ApiClient.kt new file mode 100644 index 0000000..d1a3863 --- /dev/null +++ b/CineCool/app/src/main/java/fr/iut/cinecool/ApiClient.kt @@ -0,0 +1,66 @@ +package fr.iut.cinecool + +import retrofit2.Call +import com.google.android.gms.common.api.Response +import com.google.gson.GsonBuilder +import fr.iut.cinecool.interfaces.ApiService +import fr.iut.cinecool.model.MovieResponse +import okhttp3.OkHttpClient +import okhttp3.logging.HttpLoggingInterceptor +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory +import javax.security.auth.callback.Callback + +class ApiClient { + + companion object { + + private const val BASE_URL = "https://api.themoviedb.org/3/" + + fun create(): ApiService { + + val gson = GsonBuilder() + .setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ") + .create() + + val logger = HttpLoggingInterceptor() + logger.level = HttpLoggingInterceptor.Level.BASIC + + val client = OkHttpClient.Builder() + .addInterceptor(logger) + .build() + + val retrofit = Retrofit.Builder() + .baseUrl(BASE_URL) + .addConverterFactory(GsonConverterFactory.create(gson)) + .client(client) + .build() + + return retrofit.create(ApiService::class.java) + } + + val retrofit = Retrofit.Builder() + .baseUrl("https://api.themoviedb.org/3/") + .addConverterFactory(GsonConverterFactory.create()) + .build() + + val movieApiService = retrofit.create(ApiService::class.java) + + val apiKey = "a97243d7813d31446f6c43284e6854d5" + val call = movieApiService.getPopularMovies(apiKey) + + // TO DO + /*call.enqueue(object : Callback { + override fun onResponse(call: Call, response: Response) { + // Code à exécuter lorsque la réponse est reçue + val movies = response.body()?.results + // Traitez les films renvoyés ici + } + + override fun onFailure(call: Call, t: Throwable) { + // Code à exécuter en cas d'échec de la requête + } + })*/ + + } +} diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/DetailActivity.kt b/CineCool/app/src/main/java/fr/iut/cinecool/DetailActivity.kt index 55ef061..03a55c0 100644 --- a/CineCool/app/src/main/java/fr/iut/cinecool/DetailActivity.kt +++ b/CineCool/app/src/main/java/fr/iut/cinecool/DetailActivity.kt @@ -48,4 +48,6 @@ class DetailActivity : AppCompatActivity() { textView2.text="Contenu de la page" } + + } \ No newline at end of file diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/interfaces/ApiService.kt b/CineCool/app/src/main/java/fr/iut/cinecool/interfaces/ApiService.kt new file mode 100644 index 0000000..b1fec6d --- /dev/null +++ b/CineCool/app/src/main/java/fr/iut/cinecool/interfaces/ApiService.kt @@ -0,0 +1,15 @@ +package fr.iut.cinecool.interfaces + +import fr.iut.cinecool.model.Movie +import fr.iut.cinecool.model.MovieResponse +import retrofit2.Call +import retrofit2.http.GET +import retrofit2.http.Query + +interface ApiService { + + @GET("movie/popular") + fun getPopularMovies(@Query("api_key") apiKey: String): Call + + +} diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/model/Movie.kt b/CineCool/app/src/main/java/fr/iut/cinecool/model/Movie.kt index c250227..1a00ecf 100644 --- a/CineCool/app/src/main/java/fr/iut/cinecool/model/Movie.kt +++ b/CineCool/app/src/main/java/fr/iut/cinecool/model/Movie.kt @@ -1,5 +1,14 @@ package fr.iut.cinecool.model import android.graphics.drawable.Drawable +import com.google.gson.annotations.SerializedName +data class Movie(val id:Int, val name:String, var mark:Int, val realisator:String, var duration: Double, val icon:Int) -data class Movie(val id:Int, val name:String, var mark:Int, val realisator:String, var duration: Double, val icon:Int) \ No newline at end of file +// D'après l'API (TheMovieDB) +data class MovieAPI( + @SerializedName("id") val id: Int, + @SerializedName("title") val title: String, + @SerializedName("overview") val overview: String, + @SerializedName("poster_path") val posterPath: String?, + @SerializedName("vote_average") val voteAverage: Float +) diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/model/MovieResponse.kt b/CineCool/app/src/main/java/fr/iut/cinecool/model/MovieResponse.kt new file mode 100644 index 0000000..07e1712 --- /dev/null +++ b/CineCool/app/src/main/java/fr/iut/cinecool/model/MovieResponse.kt @@ -0,0 +1,7 @@ +package fr.iut.cinecool.model +import com.google.gson.annotations.SerializedName + +// MovieResponse pour stocker la réponse JSON de l'API : +data class MovieResponse( + @SerializedName("results") val movies: List +)