Add hashnode support for posts plugin and additional options (#165)

This commit is contained in:
Simon Lecoq
2021-03-02 10:17:00 +01:00
committed by GitHub
parent 4452fa36b5
commit df6638fc9e
8 changed files with 122 additions and 19 deletions

View File

@@ -1,5 +1,5 @@
//Setup
export default async function({login, data, imports, q, account}, {enabled = false} = {}) {
export default async function({login, data, imports, q, queries, account}, {enabled = false} = {}) {
//Plugin execution
try {
//Check if plugin is enabled and requirements are met
@@ -7,7 +7,7 @@
return null
//Load inputs
let {source, limit, user} = imports.metadata.plugins.posts.inputs({data, account, q})
let {source, descriptions, covers, limit, user} = imports.metadata.plugins.posts.inputs({data, account, q})
//Retrieve posts
console.debug(`metrics/compute/${login}/plugins > posts > processing with source ${source}`)
@@ -16,7 +16,12 @@
//Dev.to
case "dev.to":{
console.debug(`metrics/compute/${login}/plugins > posts > querying api`)
posts = (await imports.axios.get(`https://dev.to/api/articles?username=${user}&state=fresh`)).data.map(({title, readable_publish_date:date}) => ({title, date}))
posts = (await imports.axios.get(`https://dev.to/api/articles?username=${user}&state=fresh`)).data.map(({title, description, published_at:date, cover_image:image}) => ({title, description, date, image}))
break
}
//Hashnode
case "hashnode":{
posts = (await imports.axios.post("https://api.hashnode.com", {query:queries.posts.hashnode({user})}, {headers:{"Content-type":"application/json"}})).data.data.user.publication.posts.map(({title, brief:description, dateAdded:date, coverImage:image}) => ({title, description, date, image}))
break
}
//Unsupported
@@ -26,13 +31,18 @@
//Format posts
if (Array.isArray(posts)) {
//Limit tracklist
//Limit posts
if (limit > 0) {
console.debug(`metrics/compute/${login}/plugins > posts > keeping only ${limit} posts`)
posts.splice(limit)
}
//Cover images
if (covers) {
console.debug(`metrics/compute/${login}/plugins > posts > formatting cover images`)
posts = await Promise.all(posts.map(async({image, ...post}) => ({image:await imports.imgb64(image, {width:144, height:-1}), ...post})))
}
//Results
return {source, list:posts}
return {source, descriptions, covers, list:posts}
}
//Unhandled error