1. 스크립트 생성
: api / services / loader / config / queries / models
: 이후 필요한 코드 붙혀넣기
2. youtube API 적용
: 1개씩 쿼리하여 값 가져오기
기존 legacy code 분석
```
{ reqQ: '야채주스', resIds: 'I8pECeKmJ0s,4F13b0VySIo,s3HjDIvQaHI' }
> 여기서 resIds는 야채주스로 검색한 결과의 비디오 Id이다
const { google } = require('googleapis');
const youtube = google.youtube('v3');
youtube.search, apiOpts.search
search: {
key : KEY,
part : 'id',
order : 'date',
maxResults : 3,
type : 'video',
videoEmbeddable: 'true',
videoSyndicated: 'true',
fields : 'items(id)',
q : '맛있는 국수',
},
const response = await youtube.search.list(apiOpts.search)
```
3. 내일 할 것
유튜브 요리영상 데이터 스키마
- CookingVideo
{ keyword: '', videoId: '', title: '', thumbnail: '', url: '', channelId: '', theme: '' }
: theme = 'meal' 등
검색 키워드 스키마
- Keyword
{ keywords: [], theme: '', type: '' }
: 주제마다 배열에 넣어서 5개의 row로 해결
: theme = 'meal' 등
: type = 'cooking' 등
요리 채널 스키마
- CookingChannel
{ keyword: '', channelId: '', title: '', thumbail: '', url: '' }
구성 스키마
- Config
{ name: '', value: '' }
개발 순서
1. 유튜브 요리영상 DB 저장 로직 구현
: test API 작성 (/test 에서 services/videoCollect의 서비스를 실행)
: 데이터 정재 후 실제 로직에 반영 (services & models & queries)
> videoId가 중복되지 않도록 저장 (update의 upsert 이용)
2. 검색 키워드 DB 저장 로직 구현
: Loader에서 json을 읽어 DB에 저장
> 작성된 것을 중복이 없을 경우 추가 저장 되도록 (update의 upsert 이용)
3. 유튜브 요리영상 DB 자동저장 로직 구현
: Keywords 컬렉션에서 값을 가지고와서 검색어 입력 되도록 로직 설계
: queries에서 config의 keyword 가져오고 youtube token이 만료될 때까지 반복
: 만료되면 다른 키로 바꿔치기
4. CookingVideo random Select
※ Legacy Channel DB
```
{
"id": "UCVZJVNLhjYYZMrJB6rPUUIQ",
"url": "https://www.youtube.com/channel/UCVZJVNLhjYYZMrJB6rPUUIQ",
"title": "Saladmaster Korea",
"thumbnail": "https://yt3.ggpht.com/ytc/AKedOLTsma6fFQBpFRdVlCmAmdaiFsETgG1Se09JFejQ=s88-c-k-c0x00ffffff-no-rj",
"__v": 0
}
```
※ Legacy Video DB
```
{
"query": "닭가슴살 뭐 먹지?",
"id": "H2QVpMOmbsQ",
"url": "https://www.youtube.com/watch?v=H2QVpMOmbsQ",
"channelId": "UCGUyEtMoKB6OAeLt3cUFBog",
"title": "왓츄잇? 코로나 확진에도 3닭 닭가슴살,고구마샐러드/매콤막국수/현미밥에 닭가슴살 #shorts",
"thumbnail": "https://i.ytimg.com/vi/H2QVpMOmbsQ/default.jpg",
"__v": 0
}
```
4. Video Collct를 위한 준비
로직
: requestYoutubeApiForVideo()를 호출하면 DB의 Keyword 컬렉션에서
type을 기준으로 SELECT하여 검색어 목록을 불러온다
: meal / snack / sports / diet / wellbeing. 각 theme 별로 요청을 수행하고 데이터를 저장한다
5. 현황
: Youtube Data Api 쿼리 후 DB 저장 성공
: 런타임 시 keyword.json 읽어 keyword 컬렉션에 upsert 완료
: 런타임 시 config.json 읽어 config 컬렉션에 upsert 완료
6. 금일 최종 정리
완성한 기능
: Youtube Data API Request 및 response 처리
: CookingVideo / Config / Keyword에 대한 스키마 정의 및 컬렉션 CREATE 로직 구현
: Keyword에 대한 Select / Upsert 로직 구현
: Config에 대한 Select / Upsert 로직 구현
: CookingVideo에 대한 Upsert 로직 구현
: 요리영상에 대해서 각 theme에 맞게 저장되도록 로직 구현
: Token Key 하루 할당량 만료 시 다른 키를 사용하도록 구현
해야할 일
: 25시간마다 도는 스케줄러를 도입하여 CookingVideo 자동 Upsert 되도록 구현
: Cooking Video 랜덤으로 9개 Select 구현
: Cooking Channel에 대한 Upsert / Select 로직 구현
: 서버에 젠킨스 CICD 환경 구성
: 젠킨스 파이프라인 작성
'Development > Project' 카테고리의 다른 글
220612 이게뭐약 리팩토링 요구사항 정의 및 설계 (0) | 2022.06.19 |
---|---|
쉽게 쓰인 유튜브 API 튜토리얼 (모해묵지의 1차 리팩토링을 마치며) (0) | 2022.05.05 |
모해묵지 개발 명세서 (0) | 2022.04.25 |
모해묵지 아키텍쳐 설계 (0) | 2022.04.06 |
모해묵지 개발을 위한 준비 (0) | 2022.02.26 |