63 lines
1.5 KiB
JavaScript
63 lines
1.5 KiB
JavaScript
|
const path = require('path');
|
||
|
|
||
|
const envPath = path.resolve(__dirname, '../../../.env');
|
||
|
require('dotenv').config({ path: envPath });
|
||
|
|
||
|
const { GHOST_CLIENT_KEY } = process.env;
|
||
|
|
||
|
const axios = require('axios');
|
||
|
const fs = require('fs');
|
||
|
|
||
|
const getJson = async url => {
|
||
|
return axios
|
||
|
.get(url)
|
||
|
.then(res => res.data)
|
||
|
.catch(err => console.log(err));
|
||
|
};
|
||
|
|
||
|
const constructIndex = async () => {
|
||
|
let currPage = 1;
|
||
|
let lastPage = 5;
|
||
|
const delay = m => new Promise(resolve => setTimeout(resolve, m));
|
||
|
const posts = [];
|
||
|
|
||
|
while (currPage && currPage <= lastPage) {
|
||
|
const data = await getJson(
|
||
|
`https://www.freecodecamp.org/news/ghost/api/v2/content/posts/?key=${GHOST_CLIENT_KEY}&include=tags,authors&page=${currPage}`
|
||
|
);
|
||
|
|
||
|
data.posts.forEach(post => {
|
||
|
const thisPost = {
|
||
|
title: post.title,
|
||
|
author: {
|
||
|
name: post.primary_author.name,
|
||
|
url: post.primary_author.url,
|
||
|
profileImage: post.primary_author.profile_image
|
||
|
},
|
||
|
tags: post.tags.map(obj => {
|
||
|
return {
|
||
|
name: obj.name,
|
||
|
url: obj.url
|
||
|
};
|
||
|
}),
|
||
|
url: post.url,
|
||
|
featureImage: post.feature_image,
|
||
|
ghostId: post.id,
|
||
|
publishedAt: post.published_at
|
||
|
};
|
||
|
|
||
|
posts.push(thisPost);
|
||
|
});
|
||
|
|
||
|
currPage = data.meta.pagination.next;
|
||
|
lastPage = data.meta.pagination.pages;
|
||
|
|
||
|
console.log(posts);
|
||
|
|
||
|
fs.writeFileSync('posts.json', JSON.stringify(posts, null, 2));
|
||
|
await delay(1000);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
constructIndex();
|