98 lines
2.4 KiB
JavaScript
98 lines
2.4 KiB
JavaScript
const API_URL = 'https://api.giphy.com/v1'
|
|
|
|
exports.search = async function (params = {}, config = {}){
|
|
const {keyword, page = 1, pageSize} = params
|
|
const {apiKey} = config
|
|
|
|
if (!apiKey) {
|
|
throw new Error('Giphy provider is not enabled')
|
|
}
|
|
|
|
if (pageSize > 50) {
|
|
throw new Error('pageSize should not be greater than 50')
|
|
}
|
|
|
|
const url = `${API_URL}/gifs/search?api_key=${apiKey}`
|
|
const res = await uniCloud.request({
|
|
url,
|
|
data: {
|
|
q: keyword,
|
|
offset: (page - 1) * pageSize,
|
|
limit: pageSize
|
|
}
|
|
})
|
|
|
|
const {statusCode, data} = res
|
|
|
|
if (statusCode !== 200) {
|
|
console.error(statusCode, res.data)
|
|
throw new Error(`statusCode: ${statusCode}`)
|
|
}
|
|
|
|
if (data.meta && data.meta.status !== 200) {
|
|
console.error(data.meta.status, data.meta.msg)
|
|
throw new Error(`status: ${data.meta.status}, errMsg: ${data.meta.msg}`)
|
|
}
|
|
|
|
if (!data.data) return []
|
|
|
|
return data.data.map(item => {
|
|
return {
|
|
id: item.id,
|
|
url: item.images.original.webp,
|
|
thumbUrl: item.images.preview_gif.url,
|
|
width: Number(item.images.original.width),
|
|
height: Number(item.images.original.height),
|
|
size: Number(item.images.original.webp_size),
|
|
description: item.title,
|
|
alt: item.alt_text,
|
|
originalName: item.slug || item.id || "'",
|
|
}
|
|
})
|
|
}
|
|
|
|
exports.detail = async function (params = {}, config = {}) {
|
|
const {id} = params
|
|
const {apiKey} = config
|
|
|
|
if (!apiKey) {
|
|
throw new Error('Giphy provider is not enabled')
|
|
}
|
|
|
|
if (!id) {
|
|
throw new Error('Giphy id is required')
|
|
}
|
|
|
|
const url = `${API_URL}/gifs/${id}?api_key=${apiKey}`
|
|
const res = await uniCloud.request({
|
|
url
|
|
})
|
|
|
|
const {statusCode, data} = res
|
|
|
|
if (statusCode !== 200) {
|
|
console.error(statusCode, data)
|
|
throw new Error(`statusCode: ${statusCode}`)
|
|
}
|
|
|
|
if (data.meta && data.meta.status !== 200) {
|
|
console.error(data.meta.status, data.meta.msg)
|
|
throw new Error(`status: ${data.meta.status}, errMsg: ${data.meta.msg}`)
|
|
}
|
|
|
|
const result = data.data
|
|
|
|
return {
|
|
id: result.id,
|
|
url: result.images.original.webp,
|
|
thumbUrl: result.images.preview_gif.url,
|
|
width: Number(result.images.original.width),
|
|
height: Number(result.images.original.height),
|
|
size: Number(result.images.original.webp_size),
|
|
description: result.title,
|
|
alt: result.alt_text,
|
|
originalName: result.slug || result.id || "",
|
|
fileType: 'webp'
|
|
}
|
|
}
|