Add files via upload
This commit is contained in:
parent
1192bfbc30
commit
0345367371
308
JN/dr_py/js/emby.js
Normal file
308
JN/dr_py/js/emby.js
Normal file
@ -0,0 +1,308 @@
|
|||||||
|
export default {
|
||||||
|
deviceid: 'TVBox_TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xOyBXa',
|
||||||
|
serverurl: '',
|
||||||
|
userid: '',
|
||||||
|
accesstoken: '',
|
||||||
|
self: this,
|
||||||
|
|
||||||
|
init: function (exten) {
|
||||||
|
var ext = JSON.parse(exten);
|
||||||
|
this.serverurl = ext.server;
|
||||||
|
var data = {"Username": ext.username, "Pw": ext.password};
|
||||||
|
var url = this.serverurl + '/Users/authenticatebyname';
|
||||||
|
var opt = {
|
||||||
|
'method': 'post',
|
||||||
|
'headers': { "X-Emby-Authorization": this.getXEmbyAuthorizationWithoutToken() },
|
||||||
|
'data': data,
|
||||||
|
'redirect': 0
|
||||||
|
}
|
||||||
|
|
||||||
|
var rsp = req(url, opt);
|
||||||
|
var rspheader = rsp.headers;
|
||||||
|
var rspcontent = rsp.content;
|
||||||
|
rspcontent = JSON.parse(rspcontent);
|
||||||
|
this.accesstoken = rspcontent.AccessToken;
|
||||||
|
this.userid = rspcontent.User.Id;
|
||||||
|
console.log('accesstoken', this.accesstoken);
|
||||||
|
console.log('userid', this.userid);
|
||||||
|
},
|
||||||
|
|
||||||
|
home: function (filter) {
|
||||||
|
var result = { "class": [] };
|
||||||
|
var url = "/Users/" + this.userid + "/Views";
|
||||||
|
var views = this.get(url);
|
||||||
|
views = views['Items'] || [];
|
||||||
|
views.forEach(function (element) {
|
||||||
|
result["class"].push({ "type_id": element["Id"], "type_name": element["Name"] });
|
||||||
|
});
|
||||||
|
result = JSON.stringify(result);
|
||||||
|
return result
|
||||||
|
},
|
||||||
|
|
||||||
|
homeVod: function () {
|
||||||
|
let result = {"list":[]};
|
||||||
|
let homerec = this.GetLatest('');
|
||||||
|
if(homerec){
|
||||||
|
for(var i=0;i<homerec.length;i++){
|
||||||
|
let v = homerec[i];
|
||||||
|
result["list"].push({
|
||||||
|
"vod_id": v["Id"],
|
||||||
|
"vod_name": v["Name"],
|
||||||
|
"vod_pic": this.getPrimaryImgUrl(v),
|
||||||
|
"vod_remarks": ""
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result = JSON.stringify(result);
|
||||||
|
return result;
|
||||||
|
},
|
||||||
|
|
||||||
|
category: function (tid, pg, filter, obj) {
|
||||||
|
var result = {};
|
||||||
|
var limit = 100;
|
||||||
|
var pageCount = 1;
|
||||||
|
var page = pg;
|
||||||
|
var totalCount = 0;
|
||||||
|
|
||||||
|
if (page == 0) page = 1;
|
||||||
|
var url = "/Users/" + this.userid + "/Items/" + tid;
|
||||||
|
var Collection = this.get(url);
|
||||||
|
if (!Collection) return "{}"
|
||||||
|
|
||||||
|
var Type = Collection["CollectionType"] || '';
|
||||||
|
var ItemsUrl = "/Users/" + this.userid + "/Items?ParentId=" + tid + "&Limit=" + limit;
|
||||||
|
ItemsUrl += "&Recursive=true&Fields=PrimaryImageAspectRatio,BasicSyncInfo,Seasons,Episodes&ImageTypeLimit=1";
|
||||||
|
ItemsUrl += "&EnableImageTypes=Primary,Backdrop,Banner,Thumb";
|
||||||
|
ItemsUrl += "&SortBy=DateCreated,SortName,ProductionYear&SortOrder=Descending";
|
||||||
|
|
||||||
|
if (Type === "tvshows") {
|
||||||
|
ItemsUrl += "&IncludeItemTypes=Series";
|
||||||
|
} else if (Type === "movies") {
|
||||||
|
ItemsUrl += "&IncludeItemTypes=Movie";
|
||||||
|
} else {
|
||||||
|
ItemsUrl += "&IncludeItemTypes=Movie,Series";
|
||||||
|
}
|
||||||
|
var startIndex = page * limit - limit;
|
||||||
|
ItemsUrl += "&StartIndex=" + startIndex;
|
||||||
|
|
||||||
|
var Items = this.get(ItemsUrl);
|
||||||
|
var totalCount = Items["TotalRecordCount"];
|
||||||
|
Items = Items['Items'] || [];
|
||||||
|
var videos = [];
|
||||||
|
var superServerurl = this.serverurl;
|
||||||
|
Items.forEach(function (ele) {
|
||||||
|
var itemid = ele["Id"];
|
||||||
|
var imgurl = ele["ImageTags"]["Primary"];
|
||||||
|
imgurl = superServerurl + "/Items/" + itemid + "/Images/Primary?fillHeight=286&fillWidth=200&quality=96&tag=" + imgurl;
|
||||||
|
videos.push({
|
||||||
|
"vod_id": itemid,
|
||||||
|
"vod_name": ele["Name"],
|
||||||
|
"vod_pic": imgurl,
|
||||||
|
"vod_remarks": ""
|
||||||
|
});
|
||||||
|
});
|
||||||
|
result["page"] = pg;
|
||||||
|
result["pagecount"] = Math.ceil(totalCount / limit);
|
||||||
|
result["limit"] = limit;
|
||||||
|
result["total"] = totalCount;
|
||||||
|
result["list"] = videos;
|
||||||
|
result = JSON.stringify(result);
|
||||||
|
return result;
|
||||||
|
},
|
||||||
|
|
||||||
|
detail: function (ids) {
|
||||||
|
var detailUrl = "/Users/" + this.userid + "/Items/" + ids;
|
||||||
|
|
||||||
|
var detail = this.get(detailUrl);
|
||||||
|
if (!detail) return "{}"
|
||||||
|
|
||||||
|
let vodid = detail["Id"];
|
||||||
|
let vodname = detail['Name'];
|
||||||
|
let People = detail['People'];
|
||||||
|
let actor = [];
|
||||||
|
let director = [];
|
||||||
|
let PartCount = detail['PartCount'] || 0;
|
||||||
|
if (People) {
|
||||||
|
People.forEach((ele) => {
|
||||||
|
let Name = ele['Name'];
|
||||||
|
let Type = ele['Type'];
|
||||||
|
if (Type === 'Director') director.push(Name);
|
||||||
|
else actor.push(Name);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
let vod_play_url = detail["Type"] === "Series" ? this.getEpisodes(vodid) : (vodname + "$" + vodid);
|
||||||
|
|
||||||
|
if(PartCount > 0){
|
||||||
|
let addPart = this.GetAddPart(vodid);
|
||||||
|
addPart = addPart["Items"] || [];
|
||||||
|
addPart.forEach((ele)=>{
|
||||||
|
let apurl = ele["Name"] + "$" + ele["Id"];
|
||||||
|
vod_play_url += "#" + apurl;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
let vod = {
|
||||||
|
"vod_id": vodid,
|
||||||
|
"vod_name": vodname,
|
||||||
|
"vod_pic": this.getPrimaryImgUrl(detail),
|
||||||
|
"type_name": detail["Genres"] ? detail["Genres"].join(',') : '',
|
||||||
|
"vod_year": detail["ProductionYear"] || '',
|
||||||
|
"vod_area": detail['ProductionLocations'] ? detail['ProductionLocations'].join(',') : '',
|
||||||
|
"vod_remarks": detail["CommunityRating"] || '',
|
||||||
|
"vod_actor": actor.join(','), //演员
|
||||||
|
"vod_director": director.join(','), //导演
|
||||||
|
"vod_content": detail["Overview"] || '',
|
||||||
|
"vod_play_from": "Emby",
|
||||||
|
"vod_play_url": vod_play_url
|
||||||
|
}
|
||||||
|
|
||||||
|
let result = {
|
||||||
|
"list": [vod]
|
||||||
|
};
|
||||||
|
|
||||||
|
result = JSON.stringify(result);
|
||||||
|
return result;
|
||||||
|
},
|
||||||
|
|
||||||
|
getEpisodes: function (SeriesId) {
|
||||||
|
let SeasonsUrl = "/Shows/" + SeriesId + "/Seasons?userId=" + this.userid;
|
||||||
|
SeasonsUrl += "&Fields=ItemCounts,PrimaryImageAspectRatio,BasicSyncInfo,MediaSourceCount";
|
||||||
|
|
||||||
|
let Seasons = this.get(SeasonsUrl);
|
||||||
|
if (!Seasons) return "";
|
||||||
|
|
||||||
|
Seasons = Seasons["Items"] || [];
|
||||||
|
var superServerurl = this.serverurl;
|
||||||
|
var superUserid = this.userid;
|
||||||
|
var self = this;
|
||||||
|
let result = [];
|
||||||
|
Seasons.forEach((ele) => {
|
||||||
|
let seasonName = ele["Name"];
|
||||||
|
let seasonId = ele["Id"];
|
||||||
|
let EpisodesUrl = "/Shows/" + SeriesId + "/Episodes?seasonId=" + seasonId;
|
||||||
|
EpisodesUrl += "&userId=" + superUserid;
|
||||||
|
EpisodesUrl += "&Fields=ItemCounts,PrimaryImageAspectRatio,BasicSyncInfo,CanDelete,MediaSourceCount,Overview";
|
||||||
|
let Episodes = self.get(EpisodesUrl);
|
||||||
|
if (!Episodes) return;
|
||||||
|
Episodes = Episodes["Items"];
|
||||||
|
for (var j = 0; j < Episodes.length; j++) {
|
||||||
|
let Episode = Episodes[j];
|
||||||
|
let EpisodeId = Episode["Id"];
|
||||||
|
let EpisodeName = Episode["Name"];
|
||||||
|
let PlayUrl = EpisodeId;
|
||||||
|
result.push(seasonName + "_第" + (j + 1) + "集_" + EpisodeName + "$" + PlayUrl);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
result = result.join("#")
|
||||||
|
return result;
|
||||||
|
},
|
||||||
|
|
||||||
|
search: function (key, quick) {
|
||||||
|
let searchUrl = "/Users/" + this.userid + "/Items?searchTerm=" + encodeURI(key);
|
||||||
|
searchUrl += "&Limit=24&Fields=PrimaryImageAspectRatio,CanDelete,BasicSyncInfo,MediaSourceCount";
|
||||||
|
searchUrl += "&Recursive=true&EnableTotalRecordCount=false&ImageTypeLimit=1&IncludePeople=false";
|
||||||
|
searchUrl += "&IncludeMedia=true&IncludeGenres=false&IncludeStudios=false&IncludeArtists=false";
|
||||||
|
searchUrl += "&IncludeItemTypes=Movie,Series" //,Episode";
|
||||||
|
|
||||||
|
let searchResult = this.get(searchUrl);
|
||||||
|
let result = { "list": [] }
|
||||||
|
if (!searchResult) return JSON.stringify(result);
|
||||||
|
searchResult = searchResult["Items"] || [];
|
||||||
|
for (var i = 0; i < searchResult.length; i++) {
|
||||||
|
let v = searchResult[i];
|
||||||
|
result["list"].push({
|
||||||
|
"vod_id": v["Id"],
|
||||||
|
"vod_name": v["Name"],
|
||||||
|
"vod_pic": this.getPrimaryImgUrl(v),
|
||||||
|
"vod_remarks": ""
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
result = JSON.stringify(result);
|
||||||
|
return result;
|
||||||
|
},
|
||||||
|
|
||||||
|
play: function (flag, id, vipFlags) {
|
||||||
|
let playUrl = this.serverurl + "/videos/" + id + "/stream.mp4?static=true&deviceId=" + this.deviceid;
|
||||||
|
playUrl += "&api_key=" + this.accesstoken //+ "&Tag=" + ETag
|
||||||
|
let result = {
|
||||||
|
"parse": 0,
|
||||||
|
"playUrl": "",
|
||||||
|
"url": playUrl
|
||||||
|
}
|
||||||
|
|
||||||
|
result = JSON.stringify(result);
|
||||||
|
return result;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取最新项目
|
||||||
|
*
|
||||||
|
* @param parentId
|
||||||
|
* @param cb
|
||||||
|
*/
|
||||||
|
GetLatest: function(parentId) {
|
||||||
|
let lastestUrl = "/Users/" + this.userid + "/Items/Latest?";
|
||||||
|
lastestUrl += "Limit=16&Fields=PrimaryImageAspectRatio%2CBasicSyncInfo%2CPath";
|
||||||
|
lastestUrl += "&ImageTypeLimit=1&EnableImageTypes=Primary,Backdrop,Thumb";
|
||||||
|
lastestUrl += "&IncludeItemTypes=Movie,Series";
|
||||||
|
|
||||||
|
//lastestUrl += "&ParentId=" + parentId;
|
||||||
|
let latest = this.get(lastestUrl) || [];
|
||||||
|
return latest
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取项目附加部分
|
||||||
|
*/
|
||||||
|
GetAddPart:function(itemid) {
|
||||||
|
let AddPartUrl = "/Videos/" + itemid + "/AdditionalParts?userId=" + this.userid;
|
||||||
|
let addPart = this.get(AddPartUrl);
|
||||||
|
return addPart;
|
||||||
|
},
|
||||||
|
|
||||||
|
getPrimaryImgUrl: function (item) {
|
||||||
|
let PrimaryUrl = item["ImageTags"]["Primary"] || "";
|
||||||
|
let url = this.serverurl + "/Items/" + item["Id"] + "/Images/Primary";
|
||||||
|
url += "?fillHeight=286&fillWidth=200&quality=96&tag=" + PrimaryUrl;
|
||||||
|
return url;
|
||||||
|
},
|
||||||
|
|
||||||
|
getXEmbyAuthorization: function () {
|
||||||
|
var XEmbyAuthorization = 'MediaBrowser Client="TVBox", Device="TVBox", DeviceId="' + this.deviceid + '", Version="1.0.0"';
|
||||||
|
XEmbyAuthorization += ', Token="' + this.accesstoken + '"';
|
||||||
|
return XEmbyAuthorization;
|
||||||
|
},
|
||||||
|
|
||||||
|
getXEmbyAuthorizationWithoutToken: function () {
|
||||||
|
var XEmbyAuthorization = 'MediaBrowser Client="TVBox", Device="TVBox", DeviceId="' + this.deviceid + '", Version="1.0.0"';
|
||||||
|
return XEmbyAuthorization;
|
||||||
|
},
|
||||||
|
|
||||||
|
send: function (url, data, method) {
|
||||||
|
url = this.serverurl + url;
|
||||||
|
var opt = {
|
||||||
|
'method': method,
|
||||||
|
'headers': { "X-Emby-Authorization": this.getXEmbyAuthorization() },
|
||||||
|
'data': data,
|
||||||
|
'redirect': 0
|
||||||
|
}
|
||||||
|
|
||||||
|
var rsp = req(url, opt);
|
||||||
|
var rspheader = rsp.headers;
|
||||||
|
var rspcontent = rsp.content;
|
||||||
|
rspcontent = JSON.parse(rspcontent);
|
||||||
|
return rspcontent;
|
||||||
|
},
|
||||||
|
|
||||||
|
get: function (url) {
|
||||||
|
return this.send(url, null, 'get');
|
||||||
|
},
|
||||||
|
|
||||||
|
post: function (url, data) {
|
||||||
|
return this.send(url, data, 'post');
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
Loading…
x
Reference in New Issue
Block a user