-1- Youtube Data API 3 videos:List 받아와 Hot 10 Thumbnails 만들기 [ 1 ]
0. NewProject 만들어 두고 build.gradle 의존성 추가 및 Manifest 권한 부여
build.gradle
android {
buildFeatures {
viewBinding = true
buildConfig = true
}
}
dependencies {
// gson converter
implementation("com.google.code.gson:gson:2.10.1")
implementation("com.squareup.retrofit2:converter-gson:2.9.0")
// url 이미지 로딩 coil Library
implementation("io.coil-kt:coil:2.4.0")
// coroutine Library
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3")
// viewModel Library
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2")
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2")
implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.2")
// retrofit, okHttp3, moshi converter Library
implementation("com.squareup.retrofit2:retrofit:2.9.0")
implementation("com.squareup.okhttp3:okhttp:4.10.0")
implementation("com.squareup.okhttp3:logging-interceptor:4.10.0")
// fragment
implementation("androidx.fragment:fragment-ktx:1.6.1")
...
}
❌ JVM 오류가 발생할 시 JVM 버전 17을 맞춰주고 다시 시도 해보자.
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
Manifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET"/>
<application
...
</application>
</manifest>
- 네트워크 통신을 위해 INTERNET 권한 부여
1. API Key 발급받기
https://console.cloud.google.com/
- 구글 클라우드 콘솔로 이동해서 API KEY를 발급 받는다
[ 1 - 1 ] API 및 서비스 / 라이브러리로 이동.
[ 1 - 2 ] 라이브러리 화면 중앙 API 및 서비스 검색에 ' youtube api ' 검색 후 youtube Data API 3 사용하기
[ 1 - 3 ] 사용하기 , API 사용해 보기 링크를 타고 들어가면 리소스 유형, 메소드 등 정보가 많으니 참조하기.
[ 1 - 4 ] 사용자 인증 정보로 넘어가서 사용자 인증정보 만들기
- 이후 안내되는 방식대로 인증 정보 추가해주면 API key가 정상적으로 발급이 된다.
2. Key 정상작동 확인하기, Json Data 받기
[ 2 - 1 ] most popular videos - Trending 동영상을 확인하기 위해 list ( most popular videos ) 클릭
- Data API 3 Videos : List 에서 본인이 사용할 프로퍼티를 추가해준 뒤 API Key를 체크해주고 Excute 클릭해준다
- 다음과 같은 API 요청코드가 나온다. 코드가 안나올 경우 execute 우측에 Show Code 클릭 해주면 확인 가능하다.
- https://youtube.googleapis.com/youtube/v3/videos?part=snippet&chart=mostPopular&hl=ko-KR&maxResults=1®ionCode=KR&videoCategoryId=20&key=[YOUR_API_KEY]
- [YOUR_API_KEY] 부분에 [ 1 ] 에서 발급받은 본인 키를 입력 후 URL 검색창에 입력해주고 이동해주면 된다.
- 정상적으로 API 검색이 완료되었으면 해당 내용 Json을 복사해서 Android Studio 에서 플러그인 통해서 class로 만들어주자
[ 2 - 2 ] Android studio - Json To Kotlin Class 플러그인 사용해서 Data Class 생성해주기.
- Generate가 완료되면 Data 클래스가 생기면 취향에 맞게 데이터 위치를 바꿔주면 된다.
Video category Id list
1 - Film & Animation
2 - Autos & Vehicles
10 - Music
15 - Pets & Animals
17 - Sports
18 - Short Movies
19 - Travel & Events
20 - Gaming
21 - Videoblogging
22 - People & Blogs
23 - Comedy
24 - Entertainment
25 - News & Politics
26 - Howto & Style
27 - Education
28 - Science & Technology
29 - Nonprofits & Activism
30 - Movies
31 - Anime/Animation
32 - Action/Adventure
33 - Classics
34 - Comedy
35 - Documentary
36 - Drama
37 - Family
38 - Foreign
39 - Horror
40 - Sci-Fi/Fantasy
41 - Thriller
42 - Shorts
43 - Shows
44 - Trailers
VideoInterface.kt
interface VideoInterface {
@GET("videos")
suspend fun searchYoutube(
@Query("key") key: String = Constants.API_KEY,
@Query("part") part: String,
@Query("videoCategoryId") videoCategoryId :String,
@Query("chart") chart:String,
@Query("hl") hl:String,
@Query("maxResults")maxResults:Int,
@Query("regionCode")regionCode:String,
) : Response<SearchResponse>
}
- [ 2 - 1 ] 의 API 사용해보기에서 사용한 매개변수를 토대로 Interface를 만들어준다,
- 비동기적으로 처리할 수 있도록 suspend annotation 및 Response< 2- 2에서 생성한 데이터명 > 을 지정해준다.
- Youtube Data API 3 는 API Key 를 통해 Headers로 특정할 수 없어 API Key로는 Headers로 데이터를 받을 수 없고, Query 매개변수로 Key를 전달해야 한다.
- Headers를 특정할 수 있어 헤더를 통한 인증을 요구하는 경우 경우 ( 예 : Kakao API )에는 Headers 를 사용해야 한다.
- Header에 저장하는 것과 차이점
- Key가 URL의 쿼리 매개변수로 포함하는지, HTTP 헤더에 키를 배치하는지와 같이 API Key가 API 요청에 포함되는 방식의 차이이다.
- 헤더는 URL에 포함되지 않기 때문에 Headers에 Key를 저장하는 것이 URL에 포함하는 것보다 더 안전할 수 있다. 로그나 브라우저 기록에서 쉽게 볼 수 없기 때문이다.
RetrofitInstance.kt
object RetrofitInstance {
private val okHttpClient: OkHttpClient by lazy {
val interceptor = HttpLoggingInterceptor()
if (BuildConfig.DEBUG)
interceptor.level = HttpLoggingInterceptor.Level.BODY
else
interceptor.level = HttpLoggingInterceptor.Level.NONE
OkHttpClient.Builder()
.connectTimeout(20, TimeUnit.SECONDS)
.writeTimeout(20, TimeUnit.SECONDS)
.readTimeout(20, TimeUnit.SECONDS)
.addNetworkInterceptor(interceptor)
.build()
}
private val searchRetrofit: Retrofit by lazy {
Retrofit.Builder()
.baseUrl("https://youtube.googleapis.com/youtube/v3/")
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build()
}
val api: VideoInterface by lazy {
searchRetrofit.create(VideoInterface::class.java)
}
}
- Retrofit에 관해서는 아래 글에서 추가로 설명.
[오늘 복습한 내용]
1. API 키 발급 방법과, Docs를 효율적으로 읽는 방법
[오류,에러 등등]
1. 특별한 오류는 없었다.
[느낀 점]
1. 어렵다
2. 더하기 → 곱셈 → 미적분
3. 선택과 집중을 잘하자. 아직까진 공회전이 너무 잦은 것 같다
[Reference]
// Youtube Data API 3
https://han-py.tistory.com/432
https://android-uni.tistory.com/10
https://developers.google.com/youtube/v3/docs/search/list?hl=ko&apix_params=%7B%22part%22%3A%5B%22snippet%22%5D%2C%22maxResults%22%3A10%2C%22q%22%3A%22oneofthegirls%22%7D
https://developers.google.com/youtube/v3/docs/videos/list?hl=ko&apix_params=%7B%22part%22%3A%5B%22snippet%22%5D%2C%22chart%22%3A%22mostPopular%22%2C%22hl%22%3A%22ko-KR%22%2C%22maxResults%22%3A1%2C%22regionCode%22%3A%22KR%22%2C%22videoCategoryId%22%3A%2220%22%7D
https://stackoverflow.com/questions/61389951/how-to-use-youtube-data-api
// Category ID
'TIL' 카테고리의 다른 글
[TIL] kotlin Youtube Data API 3 - [ 2 ] videos:List 받아와 Trending 10 Thumbnails 만들기 (2) | 2023.09.30 |
---|---|
[TIL] kotlin Retrofit 개념, 응답 처리 메서드 ( Response<T>, Call<T> ) (0) | 2023.09.27 |
[TIL] Kotlin SQLite (0) | 2023.09.23 |
[TIL] Kotlin Coroutine의 구조와 간단한 예제 (0) | 2023.09.22 |
[TIL] Kotlin Navigation 라이브러리를 통해 Fragment 전환 (0) | 2023.09.21 |