UNPKG

webradio-metadata

Version:

API scraping recipes to get metadata of radio streams

59 lines (48 loc) 1.67 kB
// This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at http://mozilla.org/MPL/2.0/. // Copyright (c) 2018 Alexandre Storelli "use strict"; const axios = require("axios"); module.exports = async function(exturl) { try { const req = await axios.get(exturl); const result = req.data; var b0 = "program__grid__line expanded"; var i0 = result.indexOf(b0); var r1 = result.slice(i0+b0.length); var b1 = "program__grid__line "; var i1 = r1.indexOf(b1); var r2 = r1.slice(0, i1); //log.debug(r2); var b2 = "<span class=\"program__grid__line__right__title\">"; var b3 = "</span>"; var i2 = r1.indexOf(b2); var i3 = r1.indexOf(b3); var meta1 = r2.slice(i2+b2.length, i3).trim(); // title of the large program window if (meta1.length == 0) { return { error: "empty line title" }; } var bs = "class=\"program__grid__subline "; var r2s = r1.split(bs); var currentBlock = -1; for (var i=1; i<r2s.length; i++) { if (r2s[i].indexOf("is-available") < 0) break; currentBlock = i; } if (currentBlock < 0) { log.warn("France_France Info: warning, could not get subline title"); return { title: meta1 }; } //log.debug(r2s[currentBlock]); var b4 = "class=\"program__grid__line__right__title\">"; var b5 = "</a>"; var i4 = r2s[currentBlock].indexOf(b4); var r3 = r2s[currentBlock].slice(i4+b4.length); var i5 = r3.indexOf(b5); var meta2 = r3.slice(0, i5).trim(); // title of the precise current program return { artist: meta1, title: meta2 }; } catch (err) { return { error: err }; } }