Started work on dailymotion implementation. Looks like HLS player will be required for this.
This commit is contained in:
parent
2a3740dece
commit
336c746ba7
|
|
@ -15,7 +15,7 @@ You should have received a copy of the GNU Affero General Public License
|
|||
along with this program. If not, see <https://www.gnu.org/licenses/>.*/
|
||||
|
||||
//NPM Imports
|
||||
const url = require("node:url");
|
||||
//const url = require("node:url");
|
||||
const validator = require('validator');//No express here, so regular validator it is!
|
||||
|
||||
//local import
|
||||
|
|
@ -32,7 +32,11 @@ module.exports.yankMedia = async function(url, title){
|
|||
//return media object list from IA module
|
||||
return await iaUtil.fetchMetadata(pullType.id, title);
|
||||
case "yt":
|
||||
//return mediao object list from the YT-DLP module's youtube function
|
||||
return await ytdlpUtil.fetchYoutubeVideoMetadata(pullType.id, title);
|
||||
case "dm":
|
||||
//return mediao object list from the YT-DLP module's dailymotion function
|
||||
return await ytdlpUtil.fetchDailymotionMetadata(pullType.id, title);
|
||||
default:
|
||||
//return null to signify a bad url
|
||||
return null;
|
||||
|
|
@ -43,8 +47,9 @@ module.exports.refreshRawLink = async function(mediaObj){
|
|||
switch(mediaObj.type){
|
||||
case 'yt':
|
||||
//Scrape expiration from query strings
|
||||
//const expires = mediaObj.rawLink.match(/expire=([0-9]+)/); //Keeping this regex version I wrote at first in-case we need the speed
|
||||
const expires = new URL(mediaObj.rawLink).searchParams.get("expire");
|
||||
const expires = mediaObj.rawLink.match(/expire=([0-9]+)/);
|
||||
//Went with regex for speed, but I figure I'd keep this around in case we want the accuracy of a battle-tested implementation
|
||||
//const expires = new URL(mediaObj.rawLink).searchParams.get("expire");
|
||||
|
||||
//If we have a valid raw file link that will be good by the end of the video
|
||||
if(expires != null && (expires * 1000) > mediaObj.getEndTime()){
|
||||
|
|
@ -96,6 +101,14 @@ module.exports.getMediaType = async function(url){
|
|||
}
|
||||
}
|
||||
|
||||
//If we have a match to a dailymotion video
|
||||
if(match = url.match(/dailymotion\.com\/video\/([a-z0-9]{7})/)){
|
||||
return {
|
||||
type: "dm",
|
||||
id: match[1]
|
||||
}
|
||||
}
|
||||
|
||||
//If we fell through all of our media types without a match
|
||||
return{
|
||||
type: null,
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ const media = require('../../app/channel/media/media.js');
|
|||
const regexUtils = require('../regexUtils.js');
|
||||
const loggerUtils = require('../loggerUtils.js')
|
||||
|
||||
module.exports.fetchYoutubeVideoMetadata = async function(id, title){
|
||||
module.exports.fetchYoutubMetadata = async function(id, title){
|
||||
try{
|
||||
//Try to pull media from youtube id
|
||||
const media = await fetchMetadata(`https://youtu.be/${id}`, title, 'yt');
|
||||
|
|
@ -42,19 +42,31 @@ module.exports.fetchYoutubeVideoMetadata = async function(id, title){
|
|||
if(err.message.match("Sign in to confirm you’re not a bot.")){
|
||||
//Make our own error with blackjack and hookers
|
||||
throw loggerUtils.exceptionSmith("The server's IP address has been banned by youtube. Please contact your server's administrator.", "queue");
|
||||
//Otherwise if we don't have a good way to handle it
|
||||
}else{
|
||||
//toss it back up
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.fetchDailymotionMetadata = async function(id, title){
|
||||
//Pull media from dailymotion link
|
||||
const media = await fetchMetadata(`https://dailymotion.com/video/${id}`, title, 'dm');
|
||||
|
||||
//Return found media;
|
||||
return media;
|
||||
}
|
||||
|
||||
//Generic YTDLP function meant to be used by service-sepecific fetchers which will then be used to fetch video metadata
|
||||
async function fetchMetadata(link, title, type){
|
||||
async function fetchMetadata(link, title, type, format = 'b'){
|
||||
//Create media list
|
||||
const mediaList = [];
|
||||
|
||||
//Pull raw metadata
|
||||
const rawMetadata = await ytdlp(link, {
|
||||
dumpSingleJson: true,
|
||||
format: 'b'
|
||||
format
|
||||
});
|
||||
|
||||
//Pull data from rawMetadata, sanatizing title to prevent XSS
|
||||
|
|
|
|||
|
|
@ -88,7 +88,7 @@ class player{
|
|||
//Otherwise
|
||||
}else{
|
||||
//If we have a raw-file compatible source
|
||||
if(data.media.type == 'ia' || data.media.type == 'raw' || data.media.type == 'yt'){
|
||||
if(data.media.type == 'ia' || data.media.type == 'raw' || data.media.type == 'yt' || data.media.type == 'dm'){
|
||||
//Create a new raw file handler for it
|
||||
this.mediaHandler = new rawFileHandler(client, this, data.media);
|
||||
//Sync to time stamp
|
||||
|
|
|
|||
Loading…
Reference in a new issue