안녕하세요 노움 입니다.
이번에는 Youtube API를 활용해서 제공 받는 data를 CollectionView에 연결하고 검색 기능을 사용해 리스트를 업데이트 하는 작업을 진행하려고 합니다.
youtube api는 아래 사이트에 들어가면 상세히 명시되어 있기 때문에 기능 구현시 찾아보시면 도움이 될거 같습니다.
https://developers.google.com/youtube/v3?hl=ko
계획 및 정리
시작에 앞서 필요한 부분을 정리하자면
1: Google API 콘솔 접근, API 키 요청
2: Google Developers Console 프로젝트 생성, 앱에 API 요청을 위한 인정 정보 필요
3: 프로젝트 생성 후 Youtube Data API가 애플리케이션에서 등록된 서비스 중 하나인지 확인
4: 앱이 사용자 인증을 필요로 하는 API 메소드를 사용하는 경우 인증 가이드 참조하여 OAuth 2.0 세팅
→ 현재 프로젝트에서는 진행하지 않겠습니다
→ API Key (key 프로퍼티)를 사용하여 API에 엑세스할 생각
5: 요청하고자 하는 API를 선택
-> 아래 사이트에 필요한 API Reference를 확인할 수 있습니다.
API Reference | YouTube Data API | Google for Developers
-> 저는 이중 video resource
를 사용 하겠습니다.
Video 리소스의 list
메서드를 사용하여 Youtube의 동영상 목록( 동영상 이미지, 제목, 등등)
6: CollectionView에 리스트 데이터 업데이트 진행
구현
구글 콘솔 사이트
(1번, 3번) API 라이브러리에 접속하여 Youtube Data API V3를 허용 합니다.
(2번) Youtube API를 사용하기 위해서는 API 키가 필요하기 때문에 이것 또한 추가하도록 하겠습니다.
코드를 구현하기 전에 정상적으로 키가 동작하는지 확인하기 위해서 Postman을 사용해볼게요
Postman API Platform | Sign Up for Free
Videos: list | YouTube Data API | Google for Developers
Video list에 대한 참조 사이트를 활용하여 필수, 필터, 선택적 키 값에 대한 프로퍼티를 설정합니다.
-필수
- part
- contentDetails
- fileDetails
- id
- …… 아래 엄청 많아서 생략
-필터
- chart: 검색하려는 차트 목록
- id: 검색되는 리소스에 대한 Youtube 동영상 ID 목록
- myRating: like, dislie로 지정된 동영상 목록
-선택적
- h1: 현지화된 메타데이터를 검색하도록 API에 지시
- maxHeight: 내장 플레이어의 최대 높이를 지정
- maxResults: 반환되는 동영상 정보의 최대 숫자를 반환
- …… 아래 엄청 많아서 생략
저는 필수: part(snippet), 필터: chart, 선택적: maxResults를 설정해 봤고 part의 snippet은 video 리소스의 title, description, imageURL을 가져올 수 있기에 선택하게 되었네요
가져오려는 동영상 리스트를 제한두기 위해 maxResults를 사용하겠습니다.
PostMan 앱을 열고 프로젝트를 만들겠습니다, PostMan에 대한 자세한 설명은 생략하니 구글링을 통해 진행해 주세요
GET 요청을 진행하고 파라미터에 필요한 사항만 체크 & 추가하여 Send를 진행합니다
정상적으로 동작한다면 200 response 아니라면 400번 혹은 500번때 response가 나타날거에요
저의 경우 key값을 파라미터에 추가하지 않고 진행해봤더니 400번 때의 메시지가 출력되었습니다.
'iOS' 카테고리의 다른 글
[iOS] 콜렉션뷰 Youtube API 활용 #2 (2) | 2024.06.06 |
---|---|
[iOS] CompositionalLayout을 한번 사용해보자 #3 (0) | 2024.05.29 |
[iOS] CompositionalLayout을 한번 사용해보자 #2 (0) | 2024.05.18 |
[iOS] CompositionalLayout을 한번 사용해보자 #1 (0) | 2024.05.13 |
[iOS] Concurrency(async & await) (0) | 2024.03.31 |