티스토리 뷰

실시간 방송을 하는 라이브 스트리밍에서, 댓글을 가져올 수 있는지? 에 대한 의뢰가 들어왔다.

 

당연히, api를 사용해서 가능한데 핵심은 "다른 계정으로" 였다.

 

즉 방송하는 계정은 따로 있고, 수집하는 계정은 연관성 없는 전혀 별도의 계정으로 수집해야 한다.

 

문서를 찾아보니 다음과 같이 있었다.

 

LiveChatMessages: list  |  YouTube Live Streaming API

pageToken string The pageToken parameter identifies a specific page in the result set that should be returned. In an API response, the nextPageToken property identify other pages that could be retrieved.

developers.google.com

문서를 해석한 결과 다음과 같았다.

 

필수 파라미터는 2개이며, 필드명은 part와 liveChatId이다.

 

여기서 part는, 내가 response 받을 때 어떤 정보를 받아올건지 지정하는 곳이다.

 

기본적으로 String이며, 각 권한별 구분은 쉼표로 한다(API 내부에서 split을 통해 구분하는듯)

 

liveChatId는 파싱할 라이브 채팅의 고유아이디 이다.

 

여기서 좀 해메였던것은, liveChatId가 별도로 존재한다는 것이였다.

 

채널 아이디, 비디오아이디 도 아닌 완전 별개로 라이브챗 아이디가 존재하는 것이여서 이를 찾는데 애를 좀 먹었다.

 

라이브채팅 파싱의 관건은
1. api 사용이 아닌 liveChatId를 어디서 어떻게 얻어오는 것인가?

2. 방송하고있는 계정이 아닌 단순 참여 계정으로 파싱을 어떻게 할 것인가?

 

였다.

먼저, 내 계정으로 다른 방송의 라이브 채팅 목록을 가져오고 싶으면, 해당 채널의 id부터 알아야 한다.

순서를 크게 정리하자면

(파싱하고 싶은)채널의 아이디를 알아낸다 -> 채널에서 방송중인 비디오의 아이디를 알아낸다 -> 비디오에서 라이브 스트리밍 챗 아이디를 알아낸다 -> 아이디로 api 호출을 해서 메세지 내용을 받아온다

 

였다.

 

크게 테스트만 해본지라 비디오 자체의 아이디를 알아내는것은 해당 비디오 링크 중간에 섞인 id값을 수동으로 가져온 뒤 테스트 하였다.

 

먼저, 채널에서 방송중인 비디오의 아이디를 알아낸다 를 수동으로 했을 경우, 그 이후를 설명한다. 

 

비디오에서 라이브 스트리밍 챗 아이디를 알아낸다 방식은,

 

        const youtubeAPI = google.youtube({ version: "v3", auth: adminJWT() });
        const list = await youtubeAPI.videos.list({
            part: "id,liveStreamingDetails",
            id: "********(이부분에 비디오 아이디를 적습니다)",
        });

auth의 adminJWT() 함수는 내가 따로 auth 얻는 함수로 만든것이다.

 

id 파라미터 부분에 채널 아이디를 적고, part에 중요한것은 'liveStreamingDetails' 을 적어줘야 한다. 이부분을 적지 않으면 라이브 스트리밍에 대한 정보를 얻어오지 않는다.

 

결과값을 확인해보면 다음과 같이 출력된다.

 

{
"kind": "youtube#videoListResponse",
"etag": "***************",
"items": [
{
"kind": "youtube#video",
"etag": "*****************",
"id": "************",
"liveStreamingDetails": {
"scheduledStartTime": "2020-09-18T10:01:01Z",
"activeLiveChatId": "***********(이부분이 라이브챗의 아이디이다)"
}
}
],
"pageInfo": {
"totalResults": 1,
"resultsPerPage": 1
}
}

여기서 items.activeLiveChatId 값을 가지고 와서, 이부분을 가지고 liveChatId 값에 할당해준 후 api 질의를 해보면

 

        const list = await youtubeAPI.liveChatMessages.list({
            liveChatId : '아이디값을 여기다가 넣는다.',
            part : 'id, snippet,authorDetails'
        })

list 변수 내부에 livechat에 관련된 데이터가 존재하여 이를 이용해 파싱이 가능하다.

 

저기서의 part는 내가 가지고올 정보를 설정하는데, snippet 부분에 채팅 정보가 담겨있다.

 

 

너무 추상적으로 적은것 같은데, 추후 더 정리해봐야 겠다.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함