vlivepy is reverse-engineered Python-based API of VLIVE(vlive.tv)
Project description
Language
Korean English
vlivepy
vlivepy는 파이썬 기반의 vlive.tv 비공식 API입니다.
설치
PyPI 를 통해 설치할 수 있습니다.
$ python -m pip install vlivepy
Documentation
목차
들어가기에 앞서
이 문서에서 사용되는 용어와 표현법에 대해 알아봅니다.
용어
videoSeq
: url의~/video/
뒤에 오는 6자리 숫자 코드입니다. VLIVE 상에서 officialVideo를 가리킵니다.postId
: url 의~/post/
뒤에 오는0-12345678
형태의 코드입니다. VLIVE 상에서 게시물을 가리칩니다.vodId
: VLIVE 내부적으로 사용되는 36자리 Hex형태의 코드입니다.vpdid2
: 유저를 나타내는 64자리 Hex형태의 코드입니다.inKey
: VOD 정보 로드시 사용되는 값입니다.
표현
함수나 객체의 매개변수에 대한 설명은 코드블럭으로 작성됩니다. 인수는 함수 내에서 선언한 순서대로 작성되며 예시 값이 제공됩니다. 선택적 인수는 # Optional
주석이 붙고 기본값을 예시로 제공합니다.
함수와 매개변수에 대한 코드블럭 예시는 아래와 같습니다.
from vlivepy import getPostInfo
# 아래 라인은 함수 예시와 필수적 인수의 설명에 대한 예시입니다.
getPostInfo(post="0-12345678",
# 아래 라인은 선택적 인수의 설먕에 대한 예시입니다.
session=None, # Optional
silent=False) # Optional
API
getUserSession()
VLIVE 웹사이트에 로그인하여 requests.Session 객체를 반환합니다. 로그인에는 이메일 로그인 방식을 사용합니다
from vlivepy import getUserSession
getUserSession(email="user@email.id",
pwd="userPassword!",
silent=False) # Optional
email
: 로그인 할 계정의 이메일 아이디입니다.pwd
: 로그인 할 계정의 비밀번호 입니다.silent
: 연결이나 파싱 오류가 발생했을 시 Exception 대신 None을 리턴합니다.
getPostInfo()
postId를 통해 VLIVE Post의 정보를 로드하여 dict 객체를 리턴합니다.
from vlivepy import getPostInfo
getPostInfo(post="0-12345678",
session=None, # Optional
silent=False) # Optional
getPostInfo()
합수는 다음의 변수를 갖습니다:
post
: postId를 입력합니다.session
: 회원인증이 필요한 포스트인 경우 UserSession이 필요합니다.silent
: 연결이나 파싱 오류가 발생했을 시 Exception 대신 None을 리턴합니다.
getOfficialVideoPost()
videoSeq를 통해 VLIVE Video의 정보를 로드하여 dict 객체를 리턴합니다
from vlivepy import getOfficialVideoPost
getOfficialVideoPost(videoSeq="123456",
session=None, # Optional
silent=False) # Optional
videoSeq
: 영상의 videoSeq를 입력합니다.session
: 회원인증이 필요한 영상인 경우 UserSession이 필요합니다.silent
: 연결이나 파싱 오류가 발생했을 시 Exception 대신 None을 리턴합니다.
getInkeyData()
VLIVE VOD와 계정 정보에 해당하는 inKey를 로드합니다.
from vlivepy import getInkeyData
getInkeyData(videoSeq="123456",
session=None, # Optional
silent=False) # Optional
videoSeq
: 영상의 videoSeq를 입력합니다.session
: 회원인증이 필요한 영상인 경우 UserSession이 필요합니다.silent
: 연결이나 파싱 오류가 발생했을 시 Exception 대신 None을 리턴합니다.
getLivePlayInfo()
VLIVE LIVE의 재생에 관련된 정보를 가져옵니다.
from vlivepy import getLivePlayInfo
getLivePlayInfo(videoSeq="123456",
session=None, # Optional
vpdid2=None, # Optional
silent=False) # Optional
videoSeq
: 영상의 videoSeq를 입력합니다.session
: 회원인증이 필요한 영상인 경우 UserSession이 필요합니다.vpdid2
: 미리 로드한 vpdid2 값이 있다면 이를 사용하여 데이터 사용량을 줄일 수 있습니다.silent
: 연결이나 파싱 오류가 발생했을 시 Exception 대신 None을 리턴합니다.
getLiveStatus()
VLIVE LIVE의 현재 상태 정보를 가져옵니다.
from vlivepy import getLiveStatus
getLiveStatus(videoSeq="123456",
silent=False) # Optional
videoSeq
: 영상의 videoSeq를 입력합니다.silent
: 연결이나 파싱 오류가 발생했을 시 Exception 대신 None을 리턴합니다.
getVodPlayInfo()
VLIVE VOD의 재생에 관련된 정보를 가져옵니다.
from vlivepy import getVodPlayInfo
getVodPlayInfo(videoSeq="123456",
vodId=None, # Optional
session=None, # Optional
silent=False) # Optional
videoSeq
: 영상의 videoSeq를 입력합니다.vodId
: 미리 로드한 vodId 값이 있다면 이를 사용하여 데이터 사용량을 줄일 수 있습니다.session
: 회원인증이 필요한 영상인 경우 UserSession이 필요합니다.silent
: 연결이나 파싱 오류가 발생했을 시 Exception 대신 None을 리턴합니다.
Utils
utils.postIdToVideoSeq()
VLIVE postId를 videoSeq로 변환합니다.
from vlivepy.utils import postIdToVideoSeq
postIdToVideoSeq(post="0-12345678",
silent=False) # Optional
post
: postId를 입력합니다.silent
: 연결이나 파싱 오류가 발생했을 시 Exception 대신 None을 리턴합니다.
utils.getVpdid2()
계정 정보로 부터 vpdid2 값을 구합니다.
from vlivepy import getUserSession
from vlivepy.utils import getVpdid2
user = getUserSession(email="user@email.id", pwd="userPassword!")
getVpdid2(session=user,
silent=False) # Optional
session
: 회원 정보를 담은 UserSession이 필요합니다.silent
: 연결이나 파싱 오류가 발생했을 시 Exception 대신 None을 리턴합니다.
utils.getVodId()
videoSeq에 해당하는 vodId를 구합니다.
from vlivepy.utils import getVodId
getVodId(videoSeq="123456",
silent=False) # Optional
videoSeq
: 영상의 videoSeq를 입력합니다.silent
: 연결이나 파싱 오류가 발생했을 시 Exception 대신 None을 리턴합니다.
utils.getUpcomingList()
VLIVE 일정표 를 파싱하고 List(of UpcomingVideo) 리턴합니다.
from vlivepy.utils import getUpcomingList
print (getUpcomingList(date=None, # Optional
silent=False)) # Optional
# [UpcomingVideo(...), ...]
getUpcomingList()
함수는 다음의 변수를 갖습니다:
date
: 로드 할 날짜를 입력합니다. 포맷은%Y%m%d
입니다. None 일 경우 오늘 일정표를 로드합니다.silent
: 연결이나 파싱 오류가 발생했을 시 Exception 대신 None을 리턴합니다.
UpcomingVideo
UpcomingVideo는 일정표의 개별 일정에 대응되는 namedtuple
객체입니다.
UpcomingVideo은 다음의 필드를 가집니다:
필드 | 설명 | 값 |
---|---|---|
seq |
videoSeq 값 | Any |
time |
VOD공개/방송시작 시간 | Any |
cseq |
방송(업로드)하는 채널의 channelSeq 값 | Any |
cname |
방송(업로드)하는 채널의 이름 | Any |
ctype |
방송(업로드)하는 채널의 타입 | PREMIUM : 멤버십 채널 방송 BASIC : 일반 채널 방송 |
name |
방송(VOD) 제목 | Any |
type |
스케쥴 타입 | VOD : 공개된 VOD 입니다. UPCOMING_VOD : 시간이 예약된 VOD 입니다. UPCOMING_LIVE : 시간이 예약된 LIVE 입니다. LIVE : 지금 방송중인 LIVE 입니다. |
product |
판매상품 여부 | PAID : V LIVE+ 등 유료 상품 NONE : (멤버십 라이브 포함) 일반 라이브 |
utils.dumpSession()
잦은 로그인으로 인해 로그인이 일시적으로 제한되는 상황을 방지하기 위해 UserSession을 저장합니다.
from vlivepy import getUserSession
from vlivepy.utils import dumpSession
user = getUserSession(email="user@email.id", pwd="userPassword!")
with open("user.pkl", mode="wb") as f:
dumpSession(session=user,
fp=f)
utils.loadSession()
저장한 UserSession을 로드합니다.
from vlivepy.utils import loadSession
with open("user.pkl", mode="rb") as f:
user = loadSession(f)
Video
Video
객체는 getPostInfo 결과를 캐싱하고 사용 가능한 API를 메소드로 갖습니다.
Video
객체의 PostInfo는 임시 캐싱을 사용합니다. refresh_rate
변수를 0으로 설정하면 캐시된 정보를 사용하지 않습니다.
from vlivepy import Video
# postId를 통한 초기화 `https://www.vlive.tv/post/0-18396482`
Video("0-18396482")
# videoSeq를 이용한 초기화 `https://www.vlive.tv/video/142851`
Video("142851")
video = Video(number="142851",
session=None, # Optional
refresh_rate=10) # Optional
number
: 로드할 영상의 videoSeq나 postId가 필요합니다.session
: 특정 UserSession을 이용해 로드합니다.refresh_rate
: 캐시 수명입니다. 초 단위이며 해당시간이 초과했을 경우 PostInfo를 다시 로드합니다.
Video.Properties
Video 객체에서 제공하는 property는 아래와 같습니다.
videoSeq
: Video 객체의 videoSeq값 리턴postInfo
: VLIVE Video의 postInfo 리턴is_vod
: VLIVE Video가 VOD일 경우True
vod_id
: VLIVE Video가 VOD인 경우 vodId 리턴title
: VLIVE Video의 제목channelCode
VLIVE Video가 작성된 채널의 ChannelCode 리턴channelName
VLIVE Video가 작성된 채널의 이름 리턴
Video.refresh()
캐시의 수명을 확인하여 캐시가 만료됐다면 데이터를 새로 로드합니다. force
변수를 통해 캐시 수명을 무시하고 데이터를 로드할 수 있습니다.
Video.getOfficialVideoPost()
getOfficialVideoPost API를 호출합니다.
from vlivepy import Video
video = Video(142851)
video.getOfficialVideoPost(
silent=False # Optional
)
silent
: 연결이나 파싱 오류가 발생했을 시 Exception 대신 None을 리턴합니다.
Video.getLivePlayInfo()
getLivePlayInfo API를 호출합니다.
from vlivepy import Video
video = Video(142851)
video.getLivePlayInfo(
silent=False # Optional
)
silent
: 연결이나 파싱 오류가 발생했을 시 Exception 대신 None을 리턴합니다.
Video.getInkeyData()
getInKeyData API를 호출합니다.
from vlivepy import Video
video = Video(142851)
video.getInkeyData(
silent=False # Optional
)
silent
: 연결이나 파싱 오류가 발생했을 시 Exception 대신 None을 리턴합니다.
Video.getLiveStatus()
getLiveStatus API를 호출합니다.
from vlivepy import Video
video = Video(142851)
video.getLiveStatus(
silent=False # Optional
)
silent
: 연결이나 파싱 오류가 발생했을 시 Exception 대신 None을 리턴합니다.
Video.getUserSession()
from vlivepy import Video
video = Video(142851)
video.getUserSession(email="user@email.id",
pwd="userPassword!",
silent=False) # Optional
email
: 로그인 할 계정의 이메일 아이디입니다.pwd
: 로그인 할 계정의 비밀번호 입니다.silent
: 연결이나 파싱 오류가 발생했을 시 Exception 대신 None을 리턴합니다.
Video.loadSession()
loadSession 유틸을 호출합니다.
from vlivepy import Video
video = Video(142851)
with open("user.pkl", mode="rb") as f:
video.loadSession(fp=f)
Video.getVodPlayInfo()
getVodPlayInfo API를 호출합니다.
from vlivepy import Video
video = Video(142851)
video.getVodPlayInfo(
silent=False # Optional
)
silent
: 연결이나 파싱 오류가 발생했을 시 Exception 대신 None을 리턴합니다.
Upcoming
Upcoming
객체는 getUpcomingList 결과를 캐싱하고 목록 표시 옵션에 따라 목록을 재구성합니다.
일정표는 API가 아닌 웹 파싱으로 읽어오는 방식으로 작동하기 때문에 임시 캐싱을 사용합니다. refresh_rate
변수를 0으로 설정하면 캐시된 정보를 사용하지 않습니다.
from vlivepy import Upcoming
upc = Upcoming(refresh_rate=5, # Optional
show_vod=True, # Optional
show_upcoming_vod=True, # Optional
show_upcoming_live=True, # Optional
show_live=True) # Optional
Upcoming
객체는 새로고침 캐시 수명과 표시 속성에 대한 변수를 받습니다
refresh_rate
: 캐시 수명입니다. 초 단위이며 해당시간이 초과했을 경우 일정표를 다시 로드합니다.show_vod
: 목록에 VOD를 포함합니다.show_upcoming_vod
: 목록에 예약된 VOD를 포함합니다.show_upcoming_live
: 목록에 예약된 LIVE를 포함합니다.show_live
: 목록에 진행중인 LIVE를 포함합니다.
Upcoming.upcoming()
오늘의 일정표를 파싱하여 list(of UpcomingVideo) 타입으로 리턴합니다. 캐시 수명이 만료되지 않았다면 캐시에서 데이터를 제공합니다.
from vlivepy import Upcoming
upc = Upcoming()
print(upc.upcoming(force=False, # Optional
show_vod=None, # Optional
show_upcoming_vod=None, # Optional
show_upcoming_live=None, # Optional
show_live=None)) # Optional
# [UpcomingVideo(seq='232395', time='오전 12:00', cseq='447', cname='CHUNG HA', ctype='BASIC', name="CHUNG HA 청하 'X (걸어온 길에 꽃밭 따윈 없었죠)' MV Teaser 2", type='VOD', product='NONE'), ...]
변수를 통해서 캐시와 목록 포함 옵션을 오버라이드 할 수 있습니다.
from vlivepy import Upcoming
upc = Upcoming()
# 캐시 수명을 무시하고 강제로 새 데이터 로드
upc.upcoming(force=True)
# 객체 속성을 일시적으로 오버라이드
upc.upcoming(show_vod=False, show_upcoming_vod=False)
Upcoming.refresh()
캐시의 수명을 확인하여 캐시가 만료됐다면 데이터를 새로 로드합니다. force
변수를 통해 캐시 수명을 무시하고 데이터를 로드할 수 있습니다.
Upcoming.load()
특정 날짜의 일정표를 로드합니다. 로드된 일정표는 캐시되지 않으며 바로 리턴됩니다.
리턴되는 목록은 객체의 목록 포함 옵션을 따르며, show_*
변수를 통한 오버라이드를 사용할 수 있습니다.
from vlivepy import Upcoming
from datetime import date, timedelta
upc = Upcoming()
tomorrow = date.today() + timedelta(days=1) # 예제) 내일 날짜를 구한다
print(upc.load(date=tomorrow.strftime("%Y%m%d"),
show_vod=None, # Optional
show_upcoming_vod=None, # Optional
show_upcoming_live=None, # Optional
show_live=None, # Optional
silent=False)) # Optional
# [UpcomingVideo(seq='232552', time='오전 10:00', cseq='967', cname='Arirang Radio │아리랑라디오', ctype='BASIC',name='Arirang Radio [#daily K]', type='UPCOMING_LIVE', product='NONE'), ...]
load()
메소드는 다음의 변수를 갖습니다:
date
: 로드 할 날짜를 입력합니다. 포맷은%Y%m%d
입니다.show_vod
,show_upcoming_vod
,show_upcoming_live
,show_live
: 목록 포함 옵션 오버라이드silent
: 연결이나 파싱 오류가 발생했을 시 Exception 대신 None을 리턴합니다.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.