- Add base template (baseof.html) for consistent layout - Create home page (index.html) and content (_index.md) - Update Hugo configuration (hugo.toml) for local development - Improve list template with proper block definition - Update .gitignore to exclude WordPress content - Add .gitkeep to maintain posts directory structure - Update package.json and dependencies - Refactor fetch-wordpress.js to use dynamic import - Update yarn.lock with latest dependencies
59 lines
1.9 KiB
JavaScript
59 lines
1.9 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
const fetch = (...args) => import('node-fetch').then(({default: fetch}) => fetch(...args));
|
|
|
|
const WORDPRESS_API = 'https://www.mistergeek.net/wp-json/wp/v2';
|
|
const OUTPUT_DIR = path.join(__dirname, '..', 'data', 'wordpress');
|
|
|
|
async function fetchPosts(page = 1, perPage = 100) {
|
|
const response = await fetch(`${WORDPRESS_API}/posts?page=${page}&per_page=${perPage}&_embed`);
|
|
const posts = await response.json();
|
|
|
|
if (response.headers.get('x-wp-totalpages') > page) {
|
|
const nextPosts = await fetchPosts(page + 1, perPage);
|
|
return [...posts, ...nextPosts];
|
|
}
|
|
|
|
return posts;
|
|
}
|
|
|
|
async function fetchCategories() {
|
|
const response = await fetch(`${WORDPRESS_API}/categories?per_page=100`);
|
|
return response.json();
|
|
}
|
|
|
|
async function fetchTags() {
|
|
const response = await fetch(`${WORDPRESS_API}/tags?per_page=100`);
|
|
return response.json();
|
|
}
|
|
|
|
async function fetchAuthors() {
|
|
const response = await fetch(`${WORDPRESS_API}/users?per_page=100`);
|
|
return response.json();
|
|
}
|
|
|
|
async function generateData() {
|
|
// Ensure output directory exists
|
|
if (!fs.existsSync(OUTPUT_DIR)) {
|
|
fs.mkdirSync(OUTPUT_DIR, { recursive: true });
|
|
}
|
|
|
|
console.log('Fetching WordPress data...');
|
|
|
|
const [posts, categories, tags, authors] = await Promise.all([
|
|
fetchPosts(),
|
|
fetchCategories(),
|
|
fetchTags(),
|
|
fetchAuthors()
|
|
]);
|
|
|
|
// Save data as JSON files
|
|
fs.writeFileSync(path.join(OUTPUT_DIR, 'posts.json'), JSON.stringify(posts, null, 2));
|
|
fs.writeFileSync(path.join(OUTPUT_DIR, 'categories.json'), JSON.stringify(categories, null, 2));
|
|
fs.writeFileSync(path.join(OUTPUT_DIR, 'tags.json'), JSON.stringify(tags, null, 2));
|
|
fs.writeFileSync(path.join(OUTPUT_DIR, 'authors.json'), JSON.stringify(authors, null, 2));
|
|
|
|
console.log(`✅ Fetched ${posts.length} posts, ${categories.length} categories, ${tags.length} tags, ${authors.length} authors`);
|
|
}
|
|
|
|
generateData().catch(console.error); |