auth/code
인증 코드 발급 (POST)
유저 인증 과정은 ‘1) 인증요청 > 2) 인증 코드 발급 > 3) 토큰 발급 > 4) 인증 완료’의 프로세스로 진행됩니다.
인증 코드 발급은 GET/POST의 2가지 방법으로 요청 가능합니다.(GET은 하단 참고)
POST로 요청 시에는 client_id, auth_type, certification_number(SOOP 모바일 앱 > 내 정보 > 인증 번호)의 요청 인자가 필요합니다.
리턴 시에는 json 형태의 code 변수로 인증 코드를 발급합니다.
Requires authentication
Example request:
curl -X POST \
"https://openapi.sooplive.co.kr/auth/code" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: */*" \
-d 'client_id=ae1d3e4XXXXXXX&auth_type=api&certification_number=111111'
import requests
import json
url = 'https://openapi.sooplive.co.kr/auth/code'
data = {
"client_id": "ae1d3e4XXXXXXX",
"auth_type": "api",
"certification_number": 111111
}
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': '*/*'
}
response = requests.request('POST', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://openapi.sooplive.co.kr/auth/code',
[
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded',
'Accept' => '*/*',
],
'json' => [
'client_id' => 'ae1d3e4XXXXXXX',
'auth_type' => 'api',
'certification_number' => 111111,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://openapi.sooplive.co.kr/auth/code"
);
let headers = {
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "*/*",
};
let body = {
"client_id": "ae1d3e4XXXXXXX",
"auth_type": "api",
"certification_number": 111111
}
let formBody = [];
for (var property in details) {
let encodedKey = encodeURIComponent(property);
let encodedValue = encodeURIComponent(details[property]);
formBody.push(encodedKey + "=" + encodedValue);
}
formBody = formBody.join("&");
fetch(url, {
method: "POST",
headers: headers,
body: formBody
}).then(response => response.json()).then(json => console.log(json));
Example response (200):
{
"code": "34197c7e4XXXXXXXX"
}
HTTP Request
POST auth/code
Body Parameters
Parameter | Type | Status | Description |
---|---|---|---|
client_id |
string | required | 클라이언트 아이디입니다.(Developers > 내 계정 메뉴에서 확인 가능합니다.) |
auth_type |
string | optional | POST로 호출 시 필요한 타입입니다.(“api”로 고정입니다.) |
certification_number |
integer | optional | POST로 호출 시 로그인을 대체할 6자리의 인증 번호입니다. (모바일 앱에서 확인 가능합니다.) |
Response Parameters
Parameter | Type | Description |
---|---|---|
code |
string | 토큰 발급에 필요한 인증 코드입니다. |
인증 코드 발급 (GET)
유저 인증 과정은 ‘1) 인증요청 > 2) 인증 코드 발급 > 3) 토큰 발급 > 4) 인증 완료’의 프로세스로 진행됩니다.
인증 코드 발급은 GET/POST의 2가지 방법으로 요청 가능합니다.
GET으로 요청 시에는 미리 설정한 Redirect URI가 필요합니다.(Developers > 내 계정 관리 페이지에서 확인/수정 가능)
요청 인자는 client_id입니다.
비로그인 시에는 로그인 페이지로 리다이렉트합니다. 로그인 완료 후, Redirect URI에 code 변수로 인증 코드를 발급합니다.
Requires authentication
Example request:
curl -X GET \
-G "https://openapi.sooplive.co.kr/auth/code?client_id=ae1d3e4XXXXXXX" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: */*"
import requests
url = 'https://openapi.sooplive.co.kr/auth/code'
params = {
'client_id': 'ae1d3e4XXXXXXX'
}
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': '*/*'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://openapi.sooplive.co.kr/auth/code',
[
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded',
'Accept' => '*/*',
],
'query' => [
'client_id' => 'ae1d3e4XXXXXXX',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://openapi.sooplive.co.kr/auth/code"
);
let params = {
"client_id": "ae1d3e4XXXXXXX",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));
let headers = {
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "*/*",
};
fetch(url, {
method: "GET",
headers: headers,
}).then(response => response.json()).then(json => console.log(json));
Example response (200):
https://sooplive.co.kr?code=34197c7e4XXXXXXXX
HTTP Request
GET auth/code
Query Parameters
Parameter | Status | Description |
---|---|---|
client_id |
required | 클라이언트 아이디입니다.(Developers > 내 계정 메뉴에서 확인 가능합니다.) |
Response Parameters
Parameter | Type | Description |
---|---|---|
code |
string | 토큰 발급에 필요한 인증 코드입니다. |
auth/token
토큰 발급/재발급
인증 코드 발급 후의 리턴값 code를 인자값으로 하여 토큰(유저 정보를 암호화한 고윳값)을 발급/재발급합니다.
토큰이 만료된 후, 재발급 시에는 이전 토큰 발급시의 리턴값 중 refresh_token(재인증 토큰값)을 요청 인자로 호출합니다.
토큰 발급에 사용된 code는 일회용이며, 재사용할 수 없습니다.
Example request:
curl -X POST \
"https://openapi.sooplive.co.kr/auth/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: */*" \
-d 'grant_type=authorization_code&client_id=ae1d3e4XXXXXXX&client_secret=dafgc12fvXXXXXXX&redirect_uri=https://sooplive.co.kr&code=cfacf4bXXXXXXX&refresh_token=78d3acb626dXXXXXXX'
import requests
import json
url = 'https://openapi.sooplive.co.kr/auth/token'
data = {
"grant_type": "authorization_code",
"client_id": "ae1d3e4XXXXXXX",
"client_secret": "dafgc12fvXXXXXXX",
"redirect_uri": "https://sooplive.co.kr",
"code": "cfacf4bXXXXXXX",
"refresh_token": "78d3acb626dXXXXXXX"
}
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': '*/*'
}
response = requests.request('POST', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://openapi.sooplive.co.kr/auth/token',
[
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded',
'Accept' => '*/*',
],
'json' => [
'grant_type' => 'authorization_code',
'client_id' => 'ae1d3e4XXXXXXX',
'client_secret' => 'dafgc12fvXXXXXXX',
'redirect_uri' => 'https://sooplive.co.kr',
'code' => 'cfacf4bXXXXXXX',
'refresh_token' => '78d3acb626dXXXXXXX',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://openapi.sooplive.co.kr/auth/token"
);
let headers = {
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "*/*",
};
let body = {
"grant_type": "authorization_code",
"client_id": "ae1d3e4XXXXXXX",
"client_secret": "dafgc12fvXXXXXXX",
"redirect_uri": "https://sooplive.co.kr",
"code": "cfacf4bXXXXXXX",
"refresh_token": "78d3acb626dXXXXXXX"
}
let formBody = [];
for (var property in details) {
let encodedKey = encodeURIComponent(property);
let encodedValue = encodeURIComponent(details[property]);
formBody.push(encodedKey + "=" + encodedValue);
}
formBody = formBody.join("&");
fetch(url, {
method: "POST",
headers: headers,
body: formBody
}).then(response => response.json()).then(json => console.log(json));
Example response (200):
{
"access_token": "a3b2d88XXXXXXXX",
"expires_in": 28800,
"token_type": "Bearer",
"scope": null,
"refresh_token": "a924bfXXXXXXXX"
}
HTTP Request
POST auth/token
Body Parameters
Parameter | Type | Status | Description |
---|---|---|---|
grant_type |
string | required | 코드 발급 타입입니다. *토큰 발급 시에는 grant_type을 authorization_code, 토큰 재발급 시에는 refresh_token으로 요청합니다. |
client_id |
string | required | 클라이언트 아이디입니다.(Developers > 내 계정 메뉴에서 확인 가능합니다.) |
client_secret |
string | required | 클라이언트 비밀 키입니다.(Developers > 내 계정 메뉴에서 확인 가능합니다.) |
redirect_uri |
string | optional | 콜백 주소입니다.(Developers > 내 계정 메뉴에서 확인 가능합니다.) urlencoding된 값이어야 합니다. |
code |
string | required | auth/code의 인증 코드이며, 발급 시에만 사용합니다. |
refresh_token |
string | required | 토큰 발급 시 갖고 있던 재발급 토큰(토큰 발급 시의 refresh_token)입니다. 재발급 시에만 사용합니다. |
Response Parameters
Parameter | Type | Description |
---|---|---|
access_token |
string | 토큰(유저 정보를 암호화한 고윳값입니다.) |
expires_in |
integer | 토큰의 만료 시간입니다.(단위:초) |
token_type |
string | 토큰의 타입입니다.(“Bearer” 고정) |
scope |
string | 토큰으로 사용할 수 있는 open api 범위입니다. 클라이언트 애플리케이션마다 권한이 다르게 설정됩니다. |
refresh_token |
string | 토큰 재발급 시 필요한 재인증 토큰값입니다. |
broad/rtmp
방송 송출 기본 구성
방송 송출을 하기 위해서는 사용자 지정 RTMP(외부장치) 연결이 필요합니다.
방송 송출을 위한 SOOP의 RTMP url과 스트림 키를 제공합니다.
Example request:
curl -X POST \
"https://openapi.sooplive.co.kr/broad/rtmp" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: */*" \
-d 'platform_type=SOOP&access_token=ae1d3e4XXXXXXX'
import requests
import json
url = 'https://openapi.sooplive.co.kr/broad/rtmp'
data = {
"platform_type": "SOOP",
"access_token": "ae1d3e4XXXXXXX"
}
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': '*/*'
}
response = requests.request('POST', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://openapi.sooplive.co.kr/broad/rtmp',
[
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded',
'Accept' => '*/*',
],
'json' => [
'platform_type' => 'SOOP',
'access_token' => 'ae1d3e4XXXXXXX',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://openapi.sooplive.co.kr/broad/rtmp"
);
let headers = {
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "*/*",
};
let body = {
"platform_type": "SOOP",
"access_token": "ae1d3e4XXXXXXX"
}
let formBody = [];
for (var property in details) {
let encodedKey = encodeURIComponent(property);
let encodedValue = encodeURIComponent(details[property]);
formBody.push(encodedKey + "=" + encodedValue);
}
formBody = formBody.join("&");
fetch(url, {
method: "POST",
headers: headers,
body: formBody
}).then(response => response.json()).then(json => console.log(json));
Example response (200):
{
"result": 1,
"msg": "성공",
"data": {
"rtmp": "rtmp://stream.sooplive.co.kr/app/",
"key": "afid-1234567",
"data": {
"title": "xxxxx님의 SOOP 방송",
"category": "00000000",
"allowed_view_cnt": 100000,
"is_password": 0,
"broad_hidden": 0,
"broad_grade": 0,
"hashtags": "",
"broad_ending_msg": "",
"is_wait": 0,
"waiting_time": 10,
"water_mark": 1,
"broad_tune_out": 1,
"paid_promotion": 0
}
}
}
HTTP Request
POST broad/rtmp
Body Parameters
Parameter | Type | Status | Description |
---|---|---|---|
platform_type |
string | required | 제휴 업체명입니다. |
access_token |
string | required | 토큰값입니다. |
Response Parameters
Parameter | Type | Description |
---|---|---|
result |
integer | 결과 코드입니다.(1:성공, 음수:에러) |
msg |
string | 결과 메시지입니다. |
data |
array | RTMP 정보를 담고 있는 배열입니다. |
rtmp |
string | RTMP url입니다. |
key |
string | 스트림 키입니다. |
info |
array | RTMP 유저 등록 정보를 담고 있는 배열입니다. |
title |
string | 방송 제목입니다 |
category |
string | 방송 카테고리 번호입니다. |
allowed_view_cnt |
integer | 방송 시, 시청 가능한 최대 시청자 수 설정입니다. |
is_password |
integer | 방송의 비밀번호 설정 여부입니다.(0:미설정, 1:설정) |
broad_hidden |
integer | 방송 시, 리스트에서 숨김 설정 여부입니다.(0:노출, 1:숨김) |
broad_grade |
integer | 방송 시, 시청 등급입니다.(19:연령 제한 방송, 0:일반 방송) |
hashtags |
string | 방송 시, 제공하는 해시태그입니다. |
broad_ending_msg |
string | 방송 종료 시, 노출되는 자동 인사말입니다. |
is_wait |
string | 방송 대기 설정 여부입니다.(0:해제, 1:설정) |
waiting_time |
integer | 방송 대기 시간입니다. |
water_mark |
integer | 19/잠금표시 위치입니다. (1:좌측 상단, 2:중앙 상단, 3:우측 상단, 4:좌측 하단, 5:중앙 하단, 6:우측 하단) |
broad_tune_out |
integer | 방송 시, 탐방사절 안내 표시 여부입니다.(0:탐방허용, 1:탐방사절) |
paid_promotion |
integer | 방송 시, 유료 광고 포함 표시 여부입니다.(0:미포함, 1:포함) |
broad/info/update
방송 송출 정보 변경
방송에 대한 제목, 카테고리, 속성 설정(비밀번호 여부/리스트 숨김/시청 등급 등), 시청 허용 인원, 해시태그, 종료 후 자동 인 사말 등 관련된 정보를 변경할 수 있습니다.
Example request:
curl -X POST \
"https://openapi.sooplive.co.kr/broad/info/update" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: */*" \
-d 'access_token=ae1d3e4XXXXXXX&title=꿀잼님의 SOOP 방송&category=40066&allowed_view_cnt=100000&broad_pwd_chk=1&broad_pwd=pass12&broad_hidden=0&broad_tune_out=0&paid_promotion=0&broad_grade=0&hashtags=게 임, 배틀그라운드, 배그&broad_ending_msg=다음에 또 만나요~!&is_wait=1&waiting_time=10&water_mark=1'
import requests
import json
url = 'https://openapi.sooplive.co.kr/broad/info/update'
data = {
"access_token": "ae1d3e4XXXXXXX",
"title": "꿀잼님의 SOOP 방송",
"category": 40066,
"allowed_view_cnt": 100000,
"broad_pwd_chk": 1,
"broad_pwd": "pass12",
"broad_hidden": 0,
"broad_tune_out": 0,
"paid_promotion": 0,
"broad_grade": 0,
"hashtags": "게임, 배틀그라운드, 배그",
"broad_ending_msg": "다음에 또 만나요~!",
"is_wait": "1",
"waiting_time": 10,
"water_mark": "1"
}
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': '*/*'
}
response = requests.request('POST', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://openapi.sooplive.co.kr/broad/info/update',
[
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded',
'Accept' => '*/*',
],
'json' => [
'access_token' => 'ae1d3e4XXXXXXX',
'title' => '꿀잼님의 SOOP 방송',
'category' => 40066,
'allowed_view_cnt' => 100000,
'broad_pwd_chk' => 1,
'broad_pwd' => 'pass12',
'broad_hidden' => 0,
'broad_tune_out' => 0,
'paid_promotion' => 0,
'broad_grade' => 0,
'hashtags' => '게임, 배틀그라운드, 배그',
'broad_ending_msg' => '다음에 또 만나요~!',
'is_wait' => '1',
'waiting_time' => 10,
'water_mark' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://openapi.sooplive.co.kr/broad/info/update"
);
let headers = {
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "*/*",
};
let body = {
"access_token": "ae1d3e4XXXXXXX",
"title": "꿀잼님의 SOOP 방송",
"category": 40066,
"allowed_view_cnt": 100000,
"broad_pwd_chk": 1,
"broad_pwd": "pass12",
"broad_hidden": 0,
"broad_tune_out": 0,
"paid_promotion": 0,
"broad_grade": 0,
"hashtags": "게임, 배틀그라운드, 배그",
"broad_ending_msg": "다음에 또 만나요~!",
"is_wait": "1",
"waiting_time": 10,
"water_mark": "1"
}
let formBody = [];
for (var property in details) {
let encodedKey = encodeURIComponent(property);
let encodedValue = encodeURIComponent(details[property]);
formBody.push(encodedKey + "=" + encodedValue);
}
formBody = formBody.join("&");
fetch(url, {
method: "POST",
headers: headers,
body: formBody
}).then(response => response.json()).then(json => console.log(json));
Example response (200):
{
"result": 1,
"msg": "방송정보 변경이 정상적으로 처리 되었습니다."
}
Example response (200):
{
"result": -1320,
"msg": "방송대기 설정 시간이 올바르지 않습니다.(515)"
}
HTTP Request
POST broad/info/update
Body Parameters
Parameter | Type | Status | Description |
---|---|---|---|
access_token |
string | required | 토큰값입니다. |
title |
string | optional | 방송 제목입니다. *최대 75자까지 입력 가능합니다. |
category |
integer | optional | 방송 카테고리 번호입니다. *카테고리 리스트는 본 개발 가이드 항목의 최하단 ‘카테고리 리스트’를 참고 부 탁 드립니다. |
allowed_view_cnt |
integer | optional | 방송 시, 시청 가능한 최대 시청자 수 설정입니다. *기본으로 최대 시청자 수는 100,000명이며, 계정 등급 상향 또는 아이템 사용으로 시청자 수를 추가할 수 있습니다. |
broad_pwd_chk |
integer | optional | 비밀번호 방송 설정 여부입니다.(0:해제, 1:설정) |
broad_pwd |
string | optional | 방송의 비밀번호입니다. *비밀번호는 영문+숫자의 조합이며, 6자이상으로 설정해야 합니다. |
broad_hidden |
integer | optional | 방송 시, 리스트에서 숨김 설정 여부입니다.(0:노출, 1:숨김) |
broad_tune_out |
integer | optional | 방송 시, 탐방사절 안내 표시 여부입니다.(0:탐방허용, 1:탐방사절) *탐방사절이란, 방송이 사전 동의 없이 무단으로 재송출됨을 거절하는 의사 표현 UI입니다. |
paid_promotion |
integer | optional | 방송 시, 유료 광고 포함 표시 여부입니다.(0:미포함, 1:포함) *유료 광고 포함 표시란, 스트리머와 브랜드는 유료광고 또는 협찬이 포함되는 콘텐츠의 경우 대가 관계를 표시할 법적 의무가 있습니다.시청 환경 및 다시보기 영상 내 '유료광고 포함' 메시지가 노출됩니다. |
broad_grade |
integer | optional | 방송 시, 시청 등급입니다.(19:연령 제한 방송, 0:일반 방송) *연령 제한 방송은 19세 미만 시청 불가입니다. |
hashtags |
string | optional | 방송 시, 제공하는 해시태그입니다. *최대 5개까지 입력 가능하며, 특수문자는 입력할 수 없습니다. 다중 입 력 시, 다중 입력 시, ‘띄어쓰기’와 ‘,’로 구분됩니다. |
broad_ending_msg |
string | optional | 방송 종료 시, 노출되는 자동 인사말입니다. *최대 40자까지 입력 가능합니다. |
is_wait |
string | optional | 방송 대기 설정 여부입니다.(0:해제, 1:설정) *방송 대기 설정이란, 방송이 예기치 못하게 비정상 종료가 되 었을 때, 대기 상태로 전환하는 기능입니다. |
waiting_time |
integer | optional | 방송 대기 시간입니다. *최소 1분부터 1분 간격으로 최대 10분까지 설정할 수 있습니다. |
water_mark |
string | optional | 19/잠금표시 위치입니다. (1:좌측 상단, 2:중앙 상단, 3:우측 상단, 4:좌측 하단, 5:중앙 하단, 6:우측 하단) |
Response Parameters
Parameter | Type | Description |
---|---|---|
result |
integer | 결과 코드입니다.(1:성공, 음수:에러) |
msg |
string | 결과 메시지입니다. |
broad/rtmp/reset
방송 송출 스트림 키 변경
방송 중 스트림 키를 변경하면, 기존 진행중인 방송은 종료되고 새로운 스트림 키가 발급됩니다.
다만, 방송 대기 상태에서 스트림 키를 변경할 경우 즉시 신규 스트림 키가 발급되지만, 방송 대기 시간이 모두 경과한 뒤 방송을 진행할 수 있습니다.
스트림 키는 방송 송출에서 패스워드와 같은 역할을 합니다. 노출이 될 경우 해당 스트림 키를 이용해 타인이 방송을 진행할 수 있기에 주의가 필요합니다.
Example request:
curl -X POST \
"https://openapi.sooplive.co.kr/broad/rtmp/reset" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: */*" \
-d 'access_token=ae1d3e4XXXXXXX'
import requests
import json
url = 'https://openapi.sooplive.co.kr/broad/rtmp/reset'
data = {
"access_token": "ae1d3e4XXXXXXX"
}
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': '*/*'
}
response = requests.request('POST', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://openapi.sooplive.co.kr/broad/rtmp/reset',
[
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded',
'Accept' => '*/*',
],
'json' => [
'access_token' => 'ae1d3e4XXXXXXX',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://openapi.sooplive.co.kr/broad/rtmp/reset"
);
let headers = {
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "*/*",
};
let body = {
"access_token": "ae1d3e4XXXXXXX"
}
let formBody = [];
for (var property in details) {
let encodedKey = encodeURIComponent(property);
let encodedValue = encodeURIComponent(details[property]);
formBody.push(encodedKey + "=" + encodedValue);
}
formBody = formBody.join("&");
fetch(url, {
method: "POST",
headers: headers,
body: formBody
}).then(response => response.json()).then(json => console.log(json));
Example response (200):
{
"result": 1,
"msg": "성공",
"stream_key": "afid-1234567"
}
HTTP Request
POST broad/rtmp/reset
Body Parameters
Parameter | Type | Status | Description |
---|---|---|---|
access_token |
string | required | 토큰값입니다. |
Response Parameters
Parameter | Type | Description |
---|---|---|
result |
integer | 결과 코드입니다.(1:성공, 음수:에러) |
msg |
string | 결과 메시지입니다. |
stream_key |
string | 재발급한 스트림 키입니다. |
broad/list
방송 리스트 구성
호출 타입에 따라 현재 방송 중인 리스트 정보를 json 타입으로 전달합니다. 전체 또는 카테고리별 방송 리스트 정보를 얻을 수 있습니다.
카테고리별 방송 리스트를 얻고 싶다면 select_key: "cate", select_value: 카테고리 리스트 api의 "cate_no"를 이용합니다.
select_value가 빈값일 경우 전체 방송 리스트 정보를 제공합니다.
page별 방송 리스트에서 제공하는 갯수는 60개입니다.
해당 방송 리스트의 정보로 SOOP 시청 페이지(http://play.sooplive.co.kr/{user_id}/{broad_no}
)로 이동을 하거나,
임베디드 플레이어(http://play.sooplive.co.kr/{user_id}/{broad_no}/embed
)로 연결이 가능합니다.
*임베디드 플레이어 연결이란 애플리케이션에 SOOP 플레이어를 삽입하는 방식을 뜻합니다.
Example request:
curl -X GET \
-G "https://openapi.sooplive.co.kr/broad/list?client_id=ae1d3e4XXXXXXX&select_key=cate&select_value=00130000&order_type=view_cnt&page_no=1&callback=callback" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: */*"
import requests
url = 'https://openapi.sooplive.co.kr/broad/list'
params = {
'client_id': 'ae1d3e4XXXXXXX',
'select_key': 'cate',
'select_value': '00130000',
'order_type': 'view_cnt',
'page_no': '1',
'callback': 'callback'
}
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': '*/*'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://openapi.sooplive.co.kr/broad/list',
[
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded',
'Accept' => '*/*',
],
'query' => [
'client_id' => 'ae1d3e4XXXXXXX',
'select_key' => 'cate',
'select_value' => '00130000',
'order_type' => 'view_cnt',
'page_no' => '1',
'callback' => 'callback',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://openapi.sooplive.co.kr/broad/list"
);
let params = {
"client_id": "ae1d3e4XXXXXXX",
"select_key": "cate",
"select_value": "00130000",
"order_type": "view_cnt",
"page_no": "1",
"callback": "callback",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));
let headers = {
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "*/*",
};
fetch(url, {
method: "GET",
headers: headers,
}).then(response => response.json()).then(json => console.log(json));
Example response (200):
callback({
"total_cnt": 6,
"page_no" : 1,
"page_block" : 60,
"broad":
[
{
"broad_title": "[생]꿀잼님의 SOOP 방송",
"visit_broad_type": "1",
"is_password": "1",
"broad_cate_no": "00130000",
"broad_no": "2232",
"user_id": "soop1234",
"user_nick": "꿀잼",
"profile_img": "//profile.img.sooplive.co.kr/LOGO/af/soop1234/soop1234.jpg?dummy=123456789",
"broad_thumb": "//liveimg.sooplive.co.kr/m/2232",
"broad_start": "2020-01-15 15:26:31",
"broad_grade": "0",
"broad_bps": "2000",
"broad_resolution": "1280x720",
"paid_promotion : 0,
"total_view_cnt": "2232"
},
{
"broad_title": "[생]꿀잼님의 SOOP 방송",
"visit_broad_type": "1",
"is_password": "0",
"broad_cate_no": "00130000",
"broad_no": "2232",
"user_id": "soop123",
"user_nick": "꿀잼",
"profile_img": "//profile.img.sooplive.co.kr/LOGO/af/soop123/soop123.jpg?dummy=123456789",
"broad_thumb": "//liveimg.sooplive.co.kr/m/2232",
"broad_start": "2020-01-15 15:26:31",
"broad_grade": "19",
"broad_bps": "2000",
"broad_resolution": "1280x720",
"paid_promotion: 1
"total_view_cnt": "2456"
}
],
"time": 1586326329
});
HTTP Request
GET broad/list
Query Parameters
Parameter | Status | Description |
---|---|---|
client_id |
required | 클라이언트 아이디입니다.(Developers > 내 계정 메뉴에서 확인 가능합니다.) |
select_key |
optional | 리스트 호출 타입입니다.(cate:카테고리 호출, 기본값) |
select_value |
optional | select_key:"cate"일 경우, 방송 카테고리 번호입니다. 빈 값일 경우 전체 방송 리스트를 제공합니다. *대카 테고리 번호를 넣을 경우 자식 카테고리 방송 리스트까지 포함합니다. |
order_type |
optional | 리스트 정렬 순서입니다. * view_cnt:시청자순(기본값) * broad_start:최신방송순 |
page_no |
optional | 페이지 번호입니다. |
callback |
optional | 콜백입니다. jsonp로 호출할 경우 사용 가능합니다. |
Response Parameters
Parameter | Type | Description |
---|---|---|
total_cnt |
integer | 전체 방송 개수입니다. |
page_no |
integer | 현재 페이지 번호입니다. |
page_block |
integer | 페이지당 제공하는 방송 갯수입니다. |
broad |
array | 방송 정보 리스트입니다. |
time |
integer | 방송 리스트 생성된 시간입니다.(유닉스 타임 스탬프) |
broad_title |
string | 방송 제목입니다. |
visit_broad_type |
string | 방송 시, 탐방사절 안내 표시 여부입니다.(0:탐방허용, 1:탐방사절) *탐방사절이란, 방송이 사전 동의 없이 무단으로 재송출됨을 거절하는 의사 표현 UI입니다. |
is_password |
string | 비밀번호 방송 여부입니다.(1:비밀번호 설정 방송, 0:미설정 방송) *비밀번호는 영문+숫자의 조합이며, 6자이상으로 설정해야 합니다. |
broad_cate_no |
string | 방송 카테고리 번호입니다. *카테고리 리스트는 본 개발 가이드 항목의 최하단 ‘카테고리 리스트’를 참고 부 탁 드립니다. |
broad_no |
string | 방송 번호입니다. |
user_id |
string | 스트리머 아이디입니다. |
user_nick |
string | 스트리머 닉네임입니다. |
profile_img |
string | 스트리머 프로필 이미지입니다. |
broad_thumb |
string | 방송 썸네일입니다. *방송 썸네일은 480x270 사이즈이며, 확장자는 jpg입니다. 썸네일이 포함되는 UI 구성 시 함께 고려되어야 합니다. |
broad_start |
string | 방송 시작 시간입니다. |
broad_grade |
string | 방송 등급입니다.(19:연령 제한 방송, 0:일반 방송) *연령 제한 방송은 19세 미만 시청 불가입니다. |
broad_bps |
string | 방송 화질입니다. *단위는 kbps이며, 최대 8000kbps까지 설정 가능합니다. |
broad_resolution |
string | 방송 해상도입니다. *1280x720/1920x1080등의 해상도가 있습니다. |
total_view_cnt |
string | 총 시청자 수입니다. |
paid_promotion |
integer | 방송 시, 유료 광고 포함 표시 여부입니다.(0:미포함, 1:포함) *유료 광고 포함 표시란, 스트리머와 브랜드는 유료광고 또는 협찬이 포함되는 콘텐츠의 경우 대가 관계를 표시할 법적 의무가 있습니다.시청 환경 및 다시보기 영상 내 '유료광고 포함' 메시지가 노출됩니다. |
aqua/component/get
전자비서, 컴포넌트
전자비서 component를 연동하기 위한 링크입니다. 전자비서의 component를 연동 할 수 있습니다. 전자비서 스타일 및 설정을 변경하려면 ‘https://aqua.sooplive.co.kr’ 페이지에서 변경 후 저장해 주세요.
Example request:
curl -X POST \
"https://openapi.sooplive.co.kr/aqua/component/get" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: */*" \
-d 'access_token=ae1d3e4XXXXXXX&platform_type=pc&component_type=chat'
import requests
import json
url = 'https://openapi.sooplive.co.kr/aqua/component/get'
data = {
"access_token": "ae1d3e4XXXXXXX",
"platform_type": "pc",
"component_type": "chat"
}
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': '*/*'
}
response = requests.request('POST', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://openapi.sooplive.co.kr/aqua/component/get',
[
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded',
'Accept' => '*/*',
],
'json' => [
'access_token' => 'ae1d3e4XXXXXXX',
'platform_type' => 'pc',
'component_type' => 'chat',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://openapi.sooplive.co.kr/aqua/component/get"
);
let headers = {
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "*/*",
};
let body = {
"access_token": "ae1d3e4XXXXXXX",
"platform_type": "pc",
"component_type": "chat"
}
let formBody = [];
for (var property in details) {
let encodedKey = encodeURIComponent(property);
let encodedValue = encodeURIComponent(details[property]);
formBody.push(encodedKey + "=" + encodedValue);
}
formBody = formBody.join("&");
fetch(url, {
method: "POST",
headers: headers,
body: formBody
}).then(response => response.json()).then(json => console.log(json));
Example response (200):
{
"result": 1,
"msg": "성공",
"data": {
"component_url": "https://aqua.sooplive.co.kr/component.php?szKey=.A32.7bbT56vyHMxxxxxxx"
}
}
HTTP Request
POST aqua/component/get
Body Parameters
Parameter | Type | Status | Description |
---|---|---|---|
access_token |
string | required | 토큰값입니다. |
platform_type |
string | optional | 전자비서 플랫폼 타입입니다.(pc/mobile) |
component_type |
string | optional | 전자비서 component 타입입니다.(chat:채팅/notice:알림/goal:목표그래프) |
Response Parameters
Parameter | Type | Description |
---|---|---|
result |
integer | 결과 코드입니다.(1:성공, 음수:에러) |
msg |
string | 결과 메시지입니다. |
data |
array | component 정보를 담고 있는 배열입니다. |
component_url |
string | 전자비서 component url입니다. |
filter/{type}
방송 필터링 등록/수정(POST)
방송 리스트에서 필터링 하고자 하는 스트리머/카테고리/키워드를 등록합니다. 또한, 기존에 등록한 데이터를 호출하여 수정할 수 있습니다.
예시) filter/streamer, filter/category, filter/keyword
Example request:
curl -X POST \
"https://openapi.sooplive.co.kr/filter/streamer" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: */*" \
-d 'client_id=ae1d3e4XXXXXXX&client_secret=dafgc12fvXXXXXXX&black_id=soop&cate_no=00300000&keyword=사설&reason=저작권 관련 필터링'
import requests
import json
url = 'https://openapi.sooplive.co.kr/filter/streamer'
data = {
"client_id": "ae1d3e4XXXXXXX",
"client_secret": "dafgc12fvXXXXXXX",
"black_id": "soop",
"cate_no": "00300000",
"keyword": "사설",
"reason": "저작권 관련 필터링"
}
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': '*/*'
}
response = requests.request('POST', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://openapi.sooplive.co.kr/filter/streamer',
[
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded',
'Accept' => '*/*',
],
'json' => [
'client_id' => 'ae1d3e4XXXXXXX',
'client_secret' => 'dafgc12fvXXXXXXX',
'black_id' => 'soop',
'cate_no' => '00300000',
'keyword' => '사설',
'reason' => '저작권 관련 필터링',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://openapi.sooplive.co.kr/filter/streamer"
);
let headers = {
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "*/*",
};
let body = {
"client_id": "ae1d3e4XXXXXXX",
"client_secret": "dafgc12fvXXXXXXX",
"black_id": "soop",
"cate_no": "00300000",
"keyword": "사설",
"reason": "저작권 관련 필터링"
}
let formBody = [];
for (var property in details) {
let encodedKey = encodeURIComponent(property);
let encodedValue = encodeURIComponent(details[property]);
formBody.push(encodedKey + "=" + encodedValue);
}
formBody = formBody.join("&");
fetch(url, {
method: "POST",
headers: headers,
body: formBody
}).then(response => response.json()).then(json => console.log(json));
Example response (200):
{
"result": 1,
"msg": "등록 완료"
}
HTTP Request
POST filter/{type}
URL Parameters
Parameter | Status | Description |
---|---|---|
type |
required | 필터링 타입입니다. (streamer: 스트리머(기본값), category: 카테고리, keyword: 키워드) |
Body Parameters
Parameter | Type | Status | Description |
---|---|---|---|
client_id |
string | required | 클라이언트 아이디입니다.(Developers > 내 계정 메뉴에서 확인 가능합니다.) |
client_secret |
string | required | 클라이언트 비밀 키입니다.(Developers > 내 계정 메뉴에서 확인 가능합니다.) |
black_id |
string | required | 필터링 대상 스트리머 아이디입니다. (type이 streamer일 경우) |
cate_no |
string | required | 필터링 카테고리 번호입니다. (type이 category일 경우) |
keyword |
string | required | 필터링 키워드입니다. *한글,영어,숫자,특수문자 총 20자 입력 가능하며 이모지는 불가능합니다. (type 이 keyword일 경우) |
reason |
string | required | 등록 사유입니다. |
Response Parameters
Parameter | Type | Description |
---|---|---|
result |
integer | 결과 코드입니다.(1:성공, 음수:에러) |
msg |
string | 결과 메시지입니다. |
방송 필터링 삭제(DELETE)
방송 리스트에서 필터링하는 스트리머/카테고리/키워드를 삭제합니다. SOOP 자체에서 필터링하는 스트리머/카테고리/키워드는 삭 제가 불가능합니다.
예시) filter/streamer, filter/category, filter/keyword
Example request:
curl -X DELETE \
"https://openapi.sooplive.co.kr/filter/streamer" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: */*" \
-d 'client_id=ae1d3e4XXXXXXX&client_secret=dafgc12fvXXXXXXX&black_id=soop&cate_no=00300000&keyword=사설'
import requests
url = 'https://openapi.sooplive.co.kr/filter/streamer'
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': '*/*'
}
response = requests.request('DELETE', url, headers=headers)
response.json()
$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://openapi.sooplive.co.kr/filter/streamer',
[
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded',
'Accept' => '*/*',
],
'json' => [
'client_id' => 'ae1d3e4XXXXXXX',
'client_secret' => 'dafgc12fvXXXXXXX',
'black_id' => 'soop',
'cate_no' => '00300000',
'keyword' => '사설',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://openapi.sooplive.co.kr/filter/streamer"
);
let headers = {
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "*/*",
};
let body = {
"client_id": "ae1d3e4XXXXXXX",
"client_secret": "dafgc12fvXXXXXXX",
"black_id": "soop",
"cate_no": "00300000",
"keyword": "사설"
}
let formBody = [];
for (var property in details) {
let encodedKey = encodeURIComponent(property);
let encodedValue = encodeURIComponent(details[property]);
formBody.push(encodedKey + "=" + encodedValue);
}
formBody = formBody.join("&");
fetch(url, {
method: "DELETE",
headers: headers,
body: formBody
}).then(response => response.json()).then(json => console.log(json));
Example response (200):
{
"result": 1,
"msg": "삭제 완료"
}
HTTP Request
DELETE filter/{type}
URL Parameters
Parameter | Status | Description |
---|---|---|
type |
required | 필터링 타입입니다. (streamer: 스트리머(기본값), category: 카테고리, keyword: 키워드) |
Body Parameters
Parameter | Type | Status | Description |
---|---|---|---|
client_id |
string | required | 클라이언트 아이디입니다.(Developers > 내 계정 메뉴에서 확인 가능합니다.) |
client_secret |
string | required | 클라이언트 비밀 키입니다.(Developers > 내 계정 메뉴에서 확인 가능합니다.) |
black_id |
string | required | 필터링 대상 스트리머 아이디입니다. (type이 streamer일 경우) |
cate_no |
string | required | 필터링 카테고리 번호입니다. (type이 category일 경우) |
keyword |
string | required | 필터링 키워드입니다. (글자수 제한: 20자 내외) (type이 keyword일 경우) |
Response Parameters
Parameter | Type | Description |
---|---|---|
result |
integer | 결과 코드입니다.(1:성공, 음수:에러) |
msg |
string | 결과 메시지입니다. |
방송 필터링 리스트(GET)
방송 리스트에서 필터링 대상으로 등록한 스트리머/카테고리/키워드 리스트입니다. SOOP 자체에서 등록한 스트리머/카테고리/키워드도 포함될 수 있습니다.
예시) filter/streamer, filter/category, filter/keyword
Example request:
curl -X GET \
-G "https://openapi.sooplive.co.kr/filter/streamer?client_id=ae1d3e4XXXXXXX&client_secret=dafgc12fvXXXXXXX" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: */*"
import requests
url = 'https://openapi.sooplive.co.kr/filter/streamer'
params = {
'client_id': 'ae1d3e4XXXXXXX',
'client_secret': 'dafgc12fvXXXXXXX'
}
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': '*/*'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://openapi.sooplive.co.kr/filter/streamer',
[
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded',
'Accept' => '*/*',
],
'query' => [
'client_id' => 'ae1d3e4XXXXXXX',
'client_secret' => 'dafgc12fvXXXXXXX',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://openapi.sooplive.co.kr/filter/streamer"
);
let params = {
"client_id": "ae1d3e4XXXXXXX",
"client_secret": "dafgc12fvXXXXXXX",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));
let headers = {
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "*/*",
};
fetch(url, {
method: "GET",
headers: headers,
}).then(response => response.json()).then(json => console.log(json));
Example response (200):
{
"filter_list": [
{
"black_id": "soop1",
"reason": "토토 방송 근절",
"type": 2
},
{
"black_id": "soop2",
"reason": "불법 방송 근절",
"type": 1
}
]
}
Example response (200):
{
"filter_list": [
{
"cate_name": "LOL",
"cate_no": "00040019",
"reason": "저작권 관련 보호 요청",
"type": 2
},
{
"cate_name": "배틀그라운드",
"cate_no": "00040066",
"reason": "게임사 요청",
"type": 1
}
]
}
Example response (200):
{
"filter_list": [
{
"keyword": "토토",
"reason": "토토 방송 근절",
"type": 2
},
{
"keyword": "도박",
"reason": "사설 도박 방송 근절",
"type": 1
}
]
}
HTTP Request
GET filter/{type}
URL Parameters
Parameter | Status | Description |
---|---|---|
type |
required | 필터링 타입입니다. (streamer: 스트리머(기본값), category: 카테고리, keyword: 키워드) |
Query Parameters
Parameter | Status | Description |
---|---|---|
client_id |
required | 클라이언트 아이디입니다.(Developers > 내 계정 메뉴에서 확인 가능합니다.) |
client_secret |
required | 클라이언트 비밀 키입니다.(Developers > 내 계정 메뉴에서 확인 가능합니다.) |
Response Parameters
Parameter | Type | Description |
---|---|---|
filter_list |
array | 필터링 리스트입니다. |
black_id |
string | 필터링 스트리머 아이디입니다. (type이 streamer일 경우) |
cate_name |
string | 필터링 카테고리 명입니다. (type이 category일 경우) |
cate_no |
string | 필터링 카테고리 번호입니다. (type이 category일 경우) |
keyword |
string | 필터링 키워드입니다. (type이 keyword일 경우) |
reason |
string | 등록 사유입니다. |
type |
integer | 등록 타입입니다.(1: 본인이 등록, 2: SOOP에서 등록) |
broad/category/list
카테고리 리스트
생방송 진행 시 선택 가능한 카테고리 리스트를 json 타입으로 제공합니다. locale 값을 설정할 경우, 언어별 카테고리 리스트를 요청할 수 있습니다.
locale 값을 넣지 않을 경우엔 기본으로 한국어 카테고리 리스트를 제공합니다.
자식 카테고리가 있는 경우 child 배열을 포함하고 있습니다.
Example request:
curl -X GET \
-G "https://openapi.sooplive.co.kr/broad/category/list?client_id=ae1d3e4XXXXXXX&locale=ko_KR" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: */*"
import requests
url = 'https://openapi.sooplive.co.kr/broad/category/list'
params = {
'client_id': 'ae1d3e4XXXXXXX',
'locale': 'ko_KR'
}
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': '*/*'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://openapi.sooplive.co.kr/broad/category/list',
[
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded',
'Accept' => '*/*',
],
'query' => [
'client_id' => 'ae1d3e4XXXXXXX',
'locale' => 'ko_KR',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://openapi.sooplive.co.kr/broad/category/list"
);
let params = {
"client_id": "ae1d3e4XXXXXXX",
"locale": "ko_KR",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));
let headers = {
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "*/*",
};
fetch(url, {
method: "GET",
headers: headers,
}).then(response => response.json()).then(json => console.log(json));
Example response (200):
{
"broad_category": [
{
"cate_name": "토크/캠방",
"cate_no": "00130000",
"child": []
},
{
"cate_name": "먹방/쿡방",
"cate_no": "00330000",
"child": []
},
{
"cate_name": "게임",
"cate_no": "00040000",
"child": [
{
"cate_name": "LOL",
"cate_no": "00040019"
},
{
"cate_name": "TFT",
"cate_no": "00040075"
},
{
"cate_name": "레전드 오브 룬테라",
"cate_no": "00040103"
},
{
"cate_name": "배틀그라운드",
"cate_no": "00040066"
}
]
}
]
}
HTTP Request
GET broad/category/list
Query Parameters
Parameter | Status | Description |
---|---|---|
client_id |
required | 클라이언트 아이디입니다.(Developers > 내 계정 메뉴에서 확인 가능합니다.) |
locale |
optional | 로드할 카테고리 언어 타입 입니다. ko_KR : 한국어 en_US : 영어 zh_CN : 중국어 간체 zh_TW : 중국어 번체 ja_JP : 일본어 th_TH : 태국어 vi_VN : 베트남어 |
Response Parameters
Parameter | Type | Description |
---|---|---|
broad_category |
array | 카테고리 정보 리스트입니다. |
cate_name |
string | 카테고리 명입니다. |
cate_no |
string | 카테고리 번호입니다. |
child |
array | 자식 카테고리입니다. |
oembed/embedinfo
게시판 VOD 영상 첨부
VOD URL을 외부 게시글에 작성할 수 있도록 임베디드 태그로 변환된 데이터를 json 타입으로 제공합니다.
width, height 값 설정을 통해 게시글에 추가될 임베디드 플레이어 크기를 지정할 수 있습니다.(width에 맞춰서 비율은 16:9로 자동 셋팅됩니다.)
Width, height 값을 설정하지 않을 경우 기본 크기(640x360)으로 제공됩니다
Example request:
curl -X GET \
-G "https://openapi.sooplive.co.kr/oembed/embedinfo" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: */*" \
-d 'vod_url=https://vod.sooplive.co.kr/player/71021072&width=640&height=360'
curl -X POST \
"https://openapi.sooplive.co.kr/oembed/embedinfo" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: */*" \
-d 'vod_url=https://vod.sooplive.co.kr/player/71021072&width=640&height=360'
import requests
url = 'https://openapi.sooplive.co.kr/oembed/embedinfo'
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': '*/*'
}
response = requests.request('GET', url, headers=headers)
response.json()
import requests
import json
url = 'https://openapi.sooplive.co.kr/oembed/embedinfo'
data = {
"vod_url": "https://vod.sooplive.co.kr/player/71021072",
"width": 640,
"height": 360
}
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': '*/*'
}
response = requests.request('POST', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://openapi.sooplive.co.kr/oembed/embedinfo',
[
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded',
'Accept' => '*/*',
],
'json' => [
'vod_url' => 'https://vod.sooplive.co.kr/player/71021072',
'width' => 640,
'height' => 360,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://openapi.sooplive.co.kr/oembed/embedinfo"
);
let headers = {
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "*/*",
};
let body = {
"vod_url": "https://vod.sooplive.co.kr/player/71021072",
"width": 640,
"height": 360
}
let formBody = [];
for (var property in details) {
let encodedKey = encodeURIComponent(property);
let encodedValue = encodeURIComponent(details[property]);
formBody.push(encodedKey + "=" + encodedValue);
}
formBody = formBody.join("&");
fetch(url, {
method: "GET",
headers: headers,
body: formBody
}).then(response => response.json()).then(json => console.log(json));
Example response (200):
{
"version": "1.0",
"type": "video",
"provider_name": "SOOP",
"provider_url": "https://www.sooplive.co.kr",
"width": 720,
"height": 480,
"title": "[DK vs GEN] 4세트 / 2021 LCK 스프링 결승전",
"author_name": "LoL_공식",
"author_url": "https://ch.sooplive.co.kr/aflol",
"html": "<iframe width='720' height='480' src='//vod.sooplive.co.kr/player/71021072/embed?type=station&isAfreeca=false&autoPlay=false&showChat=true&mutePlay=false&szBjId=aflol&nStationNo=9691678&nBbsNo=18532080&nTitleNo=71021072&szCategory=00010000&szVodCategory=00040019&szPart=REVIEW&szVodType=STATION&nPlaylistIdx=0&isEmbedautoPlay=false&szSysType=html5' frameborder='0' allow='accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture' allowfullscreen=''></iframe>"
}
HTTP Request
GET oembed/embedinfo
POST oembed/embedinfo
Body Parameters
Parameter | Type | Status | Description |
---|---|---|---|
vod_url |
string | required | VOD URL입니다. 예시) https://vod.sooplive.co.kr/player/71021072 https://vod.sooplive.co.kr/ST/71021072 https://v.afree.ca/ST/71021072 |
width |
integer | optional | 설정할 임베디드 플레이어의 width 값입니다. |
height |
integer | optional | 설정할 임베디드 플레이어의 height 값입니다. |
Response Parameters
Parameter | Type | Description |
---|---|---|
version |
integer | SOOP의 API 버전입니다. |
type |
string | 임베디드 영상 타입입니다. |
provider_name |
string | API 제공사입니다. *제공사는 SOOP입니다. |
provider_url |
string | API 제공사의 메인 URL입니다. *SOOP의 메인 URL입니다. |
width |
integer | 임베디드 플레이어 width값 입니다. |
height |
integer | 임베디드 플레이어 height값 입니다. |
title |
string | 해당 VOD의 타이틀입니다. |
author_name |
string | 해당 VOD 업로드 사용자의 닉네임입니다. |
author_url |
string | 해당 VOD 업로드 사용자의 채널 주소입니다. * 채널이란 SOOP의 사용자가 본인의 VOD, 게시글, LIVE 방송 등을 관리할 수 있는 사용자 홈 개념의 공간입니다. |
html |
string(iframe_tag) | 임베디드 태그로 변환한 데이터입니다. |
member/stationinfo
채널 정보 조회
유저의 채널 기본 정보를 조회 합니다.
Example request:
curl -X POST \
"https://openapi.sooplive.co.kr/user/stationinfo" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: */*" \
-d 'access_token=ae1d3e4XXXXXXX'
import requests
import json
url = 'https://openapi.sooplive.co.kr/user/stationinfo'
data = {
"access_token": "ae1d3e4XXXXXXX"
}
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': '*/*'
}
response = requests.request('POST', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://openapi.sooplive.co.kr/user/stationinfo',
[
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded',
'Accept' => '*/*',
],
'json' => [
'access_token' => 'ae1d3e4XXXXXXX',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://openapi.sooplive.co.kr/user/stationinfo"
);
let headers = {
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "*/*",
};
let body = {
"access_token": "ae1d3e4XXXXXXX"
}
let formBody = [];
for (var property in details) {
let encodedKey = encodeURIComponent(property);
let encodedValue = encodeURIComponent(details[property]);
formBody.push(encodedKey + "=" + encodedValue);
}
formBody = formBody.join("&");
fetch(url, {
method: "POST",
headers: headers,
body: formBody
}).then(response => response.json()).then(json => console.log(json));
Example response (200):
{
"result": 1,
"msg": "성공",
"data": {
"user_nick": "xxxxxxxx",
"station_name": "xxxxxxxxx",
"profile_image": "xxxxxxxxxxxx.jpg",
"lately_broad_date": "2024-01-01 00:00",
"favorite_cnt": 100
}
}
HTTP Request
POST user/stationinfo
Body Parameters
Parameter | Type | Status | Description |
---|---|---|---|
access_token |
string | required | 토큰값입니다. |
Response Parameters
Parameter | Type | Description |
---|---|---|
result |
integer | 결과 코드입니다.(1:성공, 음수:에러) |
msg |
string | 결과 메시지입니다. |
data |
array | 채널 정보를 담고 있는 배열입니다. |
user_nick |
string | 유저 닉네임입니다. |
station_name |
string | 채널 이름입니다. |
profile_image |
string | 프로필 이미지 경로입니다. |
lately_broad_date |
datetime | 최근 방송일입니다. |
favorite_cnt |
integer | 애청자 수입니다. |