freeCodeCamp/search-indexing/data-sources/news/getAllPosts.js

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();