开放API 接入方式
开放API介绍
开放API是提供给开发者访问虎牙后台数据的API接口,通常由开发者的后台服务发起调用。开放API的通信方式包括 Websocket和HTTPS两种,分别对应不同的接口。
**注:**
- **开放API相关的能力,目前只对企业认证的开发者开放。**
- **如开发者需要使用开放API相关功能,请提供企业名称、盖章版的企业营业执照、授权书、联系人信息、数据用途和订阅的数据,然后邮件联系平台(hy-ext@huya.com)提交权限申请审核,审核通过后才能成功订阅开放数据。**
Websocket 方式
一、域名
正式环境域名:ws-apiext.huya.com
二、例子
(1)、生成签名
按照统一鉴权说明生成对应的鉴权sToken(即JWT token)
(2)、调用方式:
- 1.建立webSocket连接
var socket = new WebSocket("ws://ws-apiext.huya.com/index.html?do=comm&roomId=201314&appId=xxxxxxxxxxxx&iat=1556265172&exp=1556265772&sToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1NTYyNjUxNzIsImV4cCI6MTU1NjI2NTc3MiwiYXBwSWQiOiJ4eHh4eHh4eHh4eHgifQ.1dOIN4nYNxnWawvM5TtOR6tN0Wmb8CvNfwGngpxcRcI");
- 2.在成功建立连接后,用于向服务器发送订阅通知消息以及取消订阅通知消息两种命令,同时保持与服务器的心跳,同一个websocket连接可以同时订阅多个消息
socket.onopen=function(event)
{
//发送subscribeNotice command
socket.send('{"command":"subscribeNotice","data":["getMessageNotice","getVipEnterBannerNotice","getSendItemNotice","getOnTVAwardNotice", "getOpenNobleNotice", "getOpenGuardianNotice", "getUserMutedNotice"],"reqId":"123456789"}');
//设置定时器以文本数据发送ping,保持与服务器的心跳
setInterval(function(){
socket.send('ping');
},15000);
};
- 3.处理到来的信令
socket.onmessage = function(event){
console.log('onmessage: ',event.data);
var json = JSON.parse(event.data);
if (json.statusCode == 200)
{
//TODO处理数据json.data
if(json.notice == 'getMessageNotice')//弹幕通知数据
{
document.write('<font size="2" color="red"><strong>[<em>'+json.data.sendNick+'</em>]:</strong>'+json.data.content+'</font><br/>');
}
else if(json.notice == 'getSendItemNotice')//送礼通知数据
{
document.write('<font size="2" color="red"><strong>[<em>'+json.data.sendNick+'</em>]:</strong>'+json.data.itemName+'</font><br/>');
}
else if(json.notice == 'getVipEnterBannerNotice')//高级用户进场通知数据
{
document.write('<font size="2" color="red"><strong>[<em>'+json.data.userNick+'</em>]:</strong>'+json.data.nobleName+'</font><br/>');
}
else if(json.notice == 'getOnTVAwardNotice')//上电视弹幕中奖
{
document.write('<font size="2" color="red"><strong>[<em>'+json.data.title+'</em>]:</strong>'+json.data.awardName+'</font><br/>');
}
else if(json.notice == 'getOpenNobleNotice')//开通续费贵族
{
document.write('<font size="2" color="red"><strong>[<em>'+json.data.userNick+'</em>]:</strong> '+ '开通续费贵族' +'</font><br/>');
}
else if(json.notice == 'getOpenGuardianNotice')//开通续费守护
{
document.write('<font size="2" color="red"><strong>[<em>'+json.data.userNick+'</em>]:</strong> '+ '开通续费守护' +'</font><br/>');
}
else if(json.notice == 'getUserMutedNotice')//房管禁言事件
{
document.write('<font size="2" color="red"><strong>[<em>'+'房管'+json.data.auditorNick+'</em>]:</strong> ' + json.data.mutedUserNick +'</font><br/>');
}
else if(json.notice == 'command')//发送command的回包数据
{
//TODO自己的逻辑
}
else
{
//TODO 错误notice处理
}
}
else
{
//TODO 错误处理
}
};
HTTPS 方式
一、域名
正式环境域名:https://open-apiext.huya.com
二、例子
(1)、生成签名
按照统一鉴权说明生成对应的鉴权sToken(即JWT token)
(2)、调用接口时加上appId、sToken、iat、exp等必要参数字段
curl "https://open-apiext.huya.com/channel/index?do=getChannelInfoByRoom&roomId=518512&appId=xxxxxxxxxxxx&iat=1556265172&exp=1556265772&sToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1NTYyNjUxNzIsImV4cCI6MTU1NjI2NTc3MiwiYXBwSWQiOiJ4eHh4eHh4eHh4eHgifQ.1dOIN4nYNxnWawvM5TtOR6tN0Wmb8CvNfwGngpxcRcI"
(3)、返回json数据
{
"code": 200,//200:成功,407:鉴权失败,其他失败
"message": "",//消息提示
"data": {//具体返回数据
}
}