'use strict'; const config = require('config'); const fetch = require('node-fetch'); const mime = require('mime-types'); async function imgurAlbumApi(post) { return fetch(`https://api.imgur.com/3/album/${post.host.id}`, { headers: { Authorization: `Client-ID ${config.methods.imgur.clientId}`, }, }).then(res => res.json()).then((res) => { if (res.status !== 200) { throw new Error(`Could not fetch info for imgur album '${post.host.id}': ${res.data.error}`); } const extract = config.library.album.extractSingleItem && res.data.images.length === 1; if (extract) { console.log('\x1b[36m%s\x1b[0m', `Extracting single item from album '${post.title}' - ${res.data.link}`); } return { album: extract ? null : { id: res.data.id, url: res.data.link, title: res.data.title, description: res.data.description, datetime: new Date(res.data.datetime * 1000), original: res.data, }, items: res.data.images.map(item => ({ extracted: extract, id: item.id, url: item.animated ? item.mp4 : item.link, title: item.title || (extract ? res.data.title : null), description: item.description || (extract ? res.data.description : null), type: item.animated ? 'video/mp4' : item.type, datetime: item.datetime * 1000, original: item, })), }; }); } async function imgurAlbum(post) { return imgurAlbumApi(post); /* * as of late 2019, imgur requires log in to view albums and gallery images const res = await fetch(`https://imgur.com/a/${post.host.id}`); const html = await res.text(); if (res.status !== 200) { if (config.methods.imgur.clientId) { console.log('\x1b[31m%s\x1b[0m', `Could not fetch info for direct imgur album '${post.host.id}' (${res.statusText}), trying API fallback (${post.permalink})`); return imgurAlbumApi(post); } throw new Error(`Could not fetch info for imgur album '${post.host.id}' (${res.statusText}) no API fallback configured`); } const dataString = html.replace(/\s+/g, ' ').match(/}}, item:(.*)}; var PREBID_TIMEOUT/)[1]; const data = JSON.parse(dataString); const extract = config.library.album.extractSingleItem && data.album_images.images.length === 1; return { album: extract ? null : { id: data.id, url: `https://imgur.com/a/${post.host.id}`, title: data.title, description: data.description, datetime: new Date(data.datetime), }, items: data.album_images.images.map(item => ({ extracted: extract, id: item.hash, url: data.animated ? `https://i.imgur.com/${item.hash}.mp4` : `https://i.imgur.com/${item.hash}${item.ext}`, title: item.title || (extract ? data.title : null), description: item.description || (extract ? data.description : null), type: item.animated ? 'video/mp4' : mime.lookup(item.ext.split('?')[0]), datetime: new Date(item.datetime), })), }; */ } module.exports = imgurAlbum;