vegan-prestwich/scripts/opening_times.js

96 lines
5.2 KiB
JavaScript

const fs = require("node:fs").promises;
const path = require("node:path");
const matter = require("gray-matter");
const axios = require("axios");
const cheerio = require("cheerio");
async function updateOpeningTimes() {
const placesDir = "../place";
try {
const files = await fs.readdir(placesDir);
const mdFiles = files.filter((file) => file.endsWith(".md"));
for (const file of mdFiles) {
const filePath = path.join(placesDir, file);
const fileContent = await fs.readFile(filePath, "utf8");
const { data, content } = matter(fileContent);
if (data.opening_times_page_url) {
console.log(`Processing ${file}...`);
try {
const response = await axios.get(data.opening_times_page_url);
const $ = cheerio.load(response.data);
const timeSelector = data.opening_times_page_selector;
if (!timeSelector) {
console.log(`No selector specified for ${file}`);
continue;
}
const times = [];
if (
data.opening_page_times_date_selector &&
data.opening_page_times_value_selector
) {
// Use specific date and time selectors
$(timeSelector).each((i, element) => {
const date = $(element)
.find(data.opening_page_times_date_selector)
.text()
.trim();
const time = $(element)
.find(data.opening_page_times_value_selector)
.text()
.trim();
if (date && time) {
times.push(`${date}: ${time}`);
}
});
} else {
// Handle multiple selectors
const selectors = Array.isArray(timeSelector)
? timeSelector
: [timeSelector];
for (const selector of selectors) {
$(selector).each((i, element) => {
const line = $(element)
.text()
.trim();
if (line) {
const parts = line.split(":");
if (parts.length > 1) {
times.push(`${parts[0].trim()}: ${parts.slice(1).join(":").trim()}`);
} else {
times.push(line);
}
}
});
}
}
if (times.length > 0) {
data.times = times;
data.last_modified_at = new Date().toISOString();
const updatedFileContent = matter.stringify(content, data);
await fs.writeFile(filePath, updatedFileContent);
console.log(`Updated times for ${file}`);
}
} catch (error) {
console.error(`Error processing ${file}: ${error.message}`);
}
}
}
} catch (error) {
console.error("Error:", error);
}
}
updateOpeningTimes();