네이버 라이브 스트리밍 서비스 CHZZK의 비공식 API 라이브러리입니다.
현재 구현된 기능은 다음과 같습니다.
Node 18 이상에서만 동작합니다.
npm install chzzk
pnpm add chzzk
yarn add chzzk
chzzk.naver.com
에 로그인 하신 후, 개발자 도구를 열어 Application > Cookies > https://chzzk.naver.com
에서 NID_AUT
과 NID_SES
쿠키를
확인하실 수 있습니다.
// 로그인 옵션 (선택사항)
const options = {
nidAuth: "NID_AUT 쿠키",
nidSession: "NID_SES 쿠키"
}
const client = new ChzzkClient(options)
// 채널 검색
const result = await client.search.channels("녹두로")
const channel = result.channels[0]
// 설정된 방송 정보, 방송 중이 아닐 경우에도 정보가 존재할 수 있음
const liveDetail = await client.live.detail(channel.channelId)
if (liveDetail) {
const media = liveDetail.livePlayback.media // 방송 중이 아닐 경우 비어있음
const hls = media.find(media => media.mediaId === "HLS") // HLS, LLHLS
if (hls) {
const m3u8 = await client.fetch(hls.path).then(r => r.text())
console.log(m3u8)
}
}
// 채팅 인스턴스 생성
const chzzkChat = client.chat({
channelId: channel.channelId,
// chatChannelId 의 변경을 감지하기 위한 polling 요청의 주기 (선택사항, ms 단위)
// channelId를 지정할 경우 자동으로 30초로 설정됨, 0초로 설정 시 polling 요청을 하지 않음
pollInterval: 30 * 1000
})
chzzkChat.on('connect', () => {
console.log('Connected')
// 최근 50개의 채팅 및 고정 메시지를 요청 (선택사항, 도네 및 시스템 메시지 포함이므로 주의)
chzzkChat.requestRecentChat(50)
})
// 재연결 (방송 시작 시)
chzzkChat.on('reconnect', newChatChannelId => {
console.log(`Reconnected to ${newChatChannelId}`)
})
// 일반 채팅
chzzkChat.on('chat', chat => {
const message = chat.hidden ? "[블라인드 처리 됨]" : chat.message
console.log(`${chat.profile.nickname}: ${message}`)
// 유저의 팔로우 일시 불러오기
// client.chat.profileCard(chzzkChat.chatChannelId, chat.profile.userIdHash).then(profile => {
// const following = profile.streamingProperty.following
// console.log(following ? `${following.followDate} 에 팔로우 함` : "팔로우 안함")
// })
})
// 후원 채팅
chzzkChat.on('donation', donation => {
console.log(`\n>> ${donation.profile?.nickname ?? "익명의 후원자"} 님의 ${donation.extras.payAmount}원 ${donationTypeName(donation.extras.donationType)}`)
if (donation.message) {
console.log(`>> ${donation.message}`)
}
console.log()
})
// 구독
chzzkChat.on('subscription', subscription => {
console.log(`${subscription.profile.nickname} 님이 ${subscription.extras.month} 개월 동안 ${subscription.extras.tierName} 구독중`)
})
// 시스템 메시지 (채팅 제한, 활동 제한, 운영자 임명 등)
chzzkChat.on('systemMessage', systemMessage => {
console.log(systemMessage.extras.description)
})
// 고정 메시지
chzzkChat.on('notice', notice => {
// 고정 해제 시 null
console.log(notice)
})
// RAW 이벤트
// chzzkChat.on('raw', raw => {
// console.log(raw)
// })
// 채팅 연결
await chzzkChat.connect()
ChzzkChat 은 브라우저 환경에서도 사용이 가능합니다.
// Webpack 등의 모듈 번들러를 통해 사용할 경우
import {ChzzkChat} from "chzzk"
// script 태그에서 사용할 경우
import {ChzzkChat} from "https://cdn.skypack.dev/chzzk"
// chatChannelId, accessToken 값을 제공해야 합니다. (해당 값들은 서버 환경에서만 불러올 수 있음)
const client = new ChzzkChat({
chatChannelId,
accessToken
})
baseUrls
옵션을 설정하여 ChzzkClient가 요청을 보내는 API 주소를 변경할 수 있습니다.
해당 옵션을 설정할 경우 브라우저 (클라이언트) 에서도 ChzzkClient의 사용이 가능합니다.
const client = new ChzzkClient({
baseUrls: {
chzzkBaseUrl: "https://api.chzzk.naver.com",
gameBaseUrl: "https://comm-api.game.naver.com/nng_main"
}
})