43 lines
1.2 KiB
JavaScript
43 lines
1.2 KiB
JavaScript
'use strict';
|
|
|
|
const bhttp = require('bhttp');
|
|
const redgifs = require('./redgifs');
|
|
|
|
async function gfycat(host) {
|
|
const res = await bhttp.get(`https://api.gfycat.com/v1/gfycats/${host.id}`);
|
|
const data = await res.body;
|
|
|
|
if (data.errorMessage) {
|
|
const redirectRes = await bhttp.head(host.url, {
|
|
followRedirects: false,
|
|
});
|
|
|
|
if (redirectRes.statusCode === 301) {
|
|
// Gfycat redirects all NSFW gifs to RedGifs, likely the case
|
|
return redgifs({
|
|
...host,
|
|
url: `https://www.redgifs.com/watch/${host.id}`,
|
|
method: 'redgifs',
|
|
label: 'redgifs',
|
|
});
|
|
}
|
|
|
|
throw new Error(`Gfycat API returned error for source '${host.url}' (${res.status}): ${data.errorMessage}`);
|
|
}
|
|
|
|
return {
|
|
album: null,
|
|
items: [{
|
|
id: data.gfyItem.gfyName,
|
|
url: data.gfyItem.webmUrl,
|
|
title: data.gfyItem.title,
|
|
description: data.gfyItem.description,
|
|
type: 'video/webm',
|
|
datetime: new Date(data.gfyItem.createDate * 1000),
|
|
original: data.gfyItem,
|
|
}],
|
|
};
|
|
}
|
|
|
|
module.exports = gfycat;
|