'use strict'; const config = require('config'); const fetch = require('node-fetch'); const cheerio = require('cheerio'); const logger = require('../logger')(__filename); const base = 'https://www.erome.com/'; async function erome(host, post) { const url = `${base}a/${host.id}`; const res = await fetch(url); if (!res.ok) { throw new Error(`Unable to retrieve info for Erome album '${host.id}' :(`); } const html = await res.text(); const $ = cheerio.load(html); const title = $('meta[property="og:title"]').attr('content') || $('meta[property="twitter:title"]').attr('content'); const items = $('.media-group').toArray().map((mediaItem) => { const mediaElement = $(mediaItem); const videoElement = mediaElement.find('.video video'); const id = mediaElement.attr('id'); const itemTitle = mediaElement.find('h2.media-title').text(); if (videoElement.length) { const sourceHd = videoElement.find('source[label="HD"]'); const sourceSd = videoElement.find('source[label="SD"]'); return { id, title: itemTitle, url: sourceHd.length ? sourceHd.attr('src') : sourceSd.attr('src'), type: (sourceHd.length ? sourceHd.attr('type') : sourceSd.attr('type')) || 'video/mp4', }; } const img = mediaElement.find('.img-front').attr('data-src'); return { id, title: itemTitle, url: img, }; }); const extract = config.library.extractSingleAlbumItem && (items.length === 1); if (extract) { logger.verbose(`Extracting single item from album '${url}' (${post ? post.url : 'no post'})`); } return { album: extract ? null : { id: host.id, url, title, description: null, datetime: null, }, items: items.map(item => ({ extracted: extract, id: item.id, url: item.url, title: item.title || title || null, description: null, type: item.type || 'image/jpeg', datetime: null, })), }; } module.exports = erome;