320x100
320x100

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 환경 구성
: 젠킨스 파이프라인 작성
  

300x250
728x90