Added script to generate "all in one" playlist

This commit is contained in:
freearhey 2019-04-23 21:49:09 +03:00
parent f2ce3682f5
commit 097d66bf21
3 changed files with 85 additions and 1 deletions

View File

@ -10,7 +10,8 @@
], ],
"main": "index.m3u", "main": "index.m3u",
"scripts": { "scripts": {
"test": "node test/index.js" "test": "node test/index.js",
"generate": "node src/generate.js"
}, },
"repository": { "repository": {
"type": "git", "type": "git",

71
src/generate.js Normal file
View File

@ -0,0 +1,71 @@
const parsers = require('playlist-parser')
const M3U = parsers.M3U
const fs = require("fs")
const path = require('path')
const helper = require('./helper')
let outputPath = path.resolve(__dirname) + '/../index.all.m3u'
let channels = 0
let duplicates = 0
let cache = {}
fs.writeFileSync(outputPath, '#EXTM3U\n')
function init() {
let countries = loadPlaylist('index.m3u')
// countries = countries.slice(0, 2)
for(let country of countries) {
const playlist = loadPlaylist(country.file)
for(let item of playlist) {
let title = (item.artist) ? item.length + ',' + item.artist + '-' + item.title : item.title
let url = item.file
if(checkCache(url)) {
duplicates++
} else {
writeToFile(title, url)
addToCache(url)
}
channels++
}
}
}
init()
console.log(`Total: ${channels}. Duplicates: ${duplicates}.`)
function loadPlaylist(filename) {
return M3U.parse(fs.readFileSync(path.resolve(__dirname) + `/../${filename}`, { encoding: "utf8" }))
}
function writeToFile(title, file) {
fs.appendFileSync(outputPath, '#EXTINF:' + title + '\n' + file + '\n')
}
function addToCache(url) {
let id = helper.getUrlPath(url)
cache[id] = true
}
function checkCache(url) {
let id = helper.getUrlPath(url)
return cache.hasOwnProperty(id)
}

12
src/helper.js Normal file
View File

@ -0,0 +1,12 @@
const parser = require('url')
function getUrlPath(u) {
let parsedUrl = parser.parse(u)
let searchQuery = parsedUrl.search || ''
return parsedUrl.host + parsedUrl.pathname + searchQuery
}
module.exports = {
getUrlPath
}