bugfixing
This commit is contained in:
parent
05e387e921
commit
993453d182
@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
const pages = [
|
const N = 100; // Change this value as needed
|
||||||
{ title: "/sitemaps/sitemap1.xml" },
|
const sitemapPages = Array?.from({ length: N }, (_, i) => ({
|
||||||
{ title: "/sitemaps/sitemap2.xml" }
|
title: `/sitemaps/sitemap${i + 1}.xml`
|
||||||
];
|
}));
|
||||||
|
|
||||||
const website = "https://stocknear.com";
|
const website = "https://stocknear.com";
|
||||||
|
|
||||||
@ -24,7 +24,7 @@ export async function GET({ locals }) {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
const body = sitemap(pages);
|
const body = sitemap(sitemapPages);
|
||||||
const response = new Response(body);
|
const response = new Response(body);
|
||||||
response.headers.set("Content-Type", "application/xml");
|
response.headers.set("Content-Type", "application/xml");
|
||||||
return response;
|
return response;
|
||||||
@ -35,7 +35,7 @@ const defaultStaticPageSettings = { changefreq: "daily", priority: "1.0" };
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
const sitemap = (pages) => `<?xml version="1.0" encoding="UTF-8" ?>
|
const sitemap = (sitemapPages) => `<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
<urlset
|
<urlset
|
||||||
xmlns="https://www.sitemaps.org/schemas/sitemap/0.9"
|
xmlns="https://www.sitemaps.org/schemas/sitemap/0.9"
|
||||||
xmlns:news="https://www.google.com/schemas/sitemap-news/0.9"
|
xmlns:news="https://www.google.com/schemas/sitemap-news/0.9"
|
||||||
@ -44,7 +44,7 @@ const sitemap = (pages) => `<?xml version="1.0" encoding="UTF-8" ?>
|
|||||||
xmlns:image="https://www.google.com/schemas/sitemap-image/1.1"
|
xmlns:image="https://www.google.com/schemas/sitemap-image/1.1"
|
||||||
xmlns:video="https://www.google.com/schemas/sitemap-video/1.1"
|
xmlns:video="https://www.google.com/schemas/sitemap-video/1.1"
|
||||||
>
|
>
|
||||||
${pages
|
${sitemapPages
|
||||||
?.map((page) => {
|
?.map((page) => {
|
||||||
const loc = `${website}${page.title}`;
|
const loc = `${website}${page.title}`;
|
||||||
const settings = defaultStaticPageSettings;
|
const settings = defaultStaticPageSettings;
|
||||||
|
|||||||
@ -72,6 +72,11 @@ const pages = [
|
|||||||
{ title: "/dark-pool-flow" },
|
{ title: "/dark-pool-flow" },
|
||||||
];
|
];
|
||||||
|
|
||||||
|
const N = 100; // Change this value as needed
|
||||||
|
const sitemapPages = Array.from({ length: N }, (_, i) => ({
|
||||||
|
title: `/sitemaps/sitemap${i + 1}.xml`
|
||||||
|
}));
|
||||||
|
|
||||||
const website = "https://stocknear.com";
|
const website = "https://stocknear.com";
|
||||||
|
|
||||||
// Helper function to create an XML URL element with optional SEO tags.
|
// Helper function to create an XML URL element with optional SEO tags.
|
||||||
@ -86,58 +91,6 @@ const createUrlElement = (loc, { lastmod, changefreq, priority } = {}) => {
|
|||||||
`;
|
`;
|
||||||
};
|
};
|
||||||
|
|
||||||
/** @type {import('./$types').RequestHandler} */
|
|
||||||
export async function GET({ params, locals }) {
|
|
||||||
const { apiKey, apiURL, pb } = locals;
|
|
||||||
|
|
||||||
const rawData = await fetch(apiURL + "/full-searchbar", {
|
|
||||||
method: "GET",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
"X-API-KEY": apiKey,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const outputStocks = await rawData.json();
|
|
||||||
const stocks = outputStocks?.map((item) => ({
|
|
||||||
id: item?.symbol,
|
|
||||||
type: item?.type,
|
|
||||||
}));
|
|
||||||
|
|
||||||
const articles = await pb.collection("articles").getFullList({
|
|
||||||
sort: "-created",
|
|
||||||
});
|
|
||||||
|
|
||||||
const tutorials = await pb.collection("tutorials").getFullList({
|
|
||||||
sort: "-created",
|
|
||||||
});
|
|
||||||
|
|
||||||
// Split stocks into two halves.
|
|
||||||
const half = Math.ceil(stocks.length / 2);
|
|
||||||
let chosenStocks, chosenArticles, chosenPages, chosenTutorials;
|
|
||||||
|
|
||||||
if (params.slug === 'sitemap1.xml') {
|
|
||||||
// Sitemap1 shows pages, articles, tutorials, and the first half of stocks.
|
|
||||||
chosenPages = pages;
|
|
||||||
chosenArticles = articles;
|
|
||||||
chosenTutorials = tutorials;
|
|
||||||
chosenStocks = stocks.slice(0, half);
|
|
||||||
} else if (params.slug === 'sitemap2.xml') {
|
|
||||||
// Sitemap2 shows only the second half of stocks.
|
|
||||||
chosenPages = [];
|
|
||||||
chosenArticles = [];
|
|
||||||
chosenTutorials = [];
|
|
||||||
chosenStocks = stocks.slice(half);
|
|
||||||
} else {
|
|
||||||
return new Response("Not Found", { status: 404 });
|
|
||||||
}
|
|
||||||
|
|
||||||
const body = sitemap(chosenStocks, chosenArticles, chosenPages, chosenTutorials);
|
|
||||||
const response = new Response(body);
|
|
||||||
response.headers.set("Content-Type", "application/xml");
|
|
||||||
return response;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Default settings for different content types.
|
// Default settings for different content types.
|
||||||
const defaultStaticPageSettings = { changefreq: "weekly", priority: "0.8" };
|
const defaultStaticPageSettings = { changefreq: "weekly", priority: "0.8" };
|
||||||
const homePageSettings = { changefreq: "daily", priority: "1.0" };
|
const homePageSettings = { changefreq: "daily", priority: "1.0" };
|
||||||
@ -146,10 +99,106 @@ const tutorialSettings = { changefreq: "daily", priority: "0.7" };
|
|||||||
const stockSettings = { changefreq: "daily", priority: "0.6" };
|
const stockSettings = { changefreq: "daily", priority: "0.6" };
|
||||||
|
|
||||||
// Define extra subdirectories for stocks.
|
// Define extra subdirectories for stocks.
|
||||||
const stockExtraSubPaths = ["/financials", "/financials/balance-sheet","/financials/cash-flow","/financials/ratios","/statistics","/statistics/market-cap","/statistics/revenue","/statistics/price-reaction","/statistics/fail-to-deliver","/metrics","/forecast","/forecast/analyst","/forecast/ai","/dark-pool","/options","/options/unusual-activity","/options/hottest-contracts","/options/volatility","/options/oi","/insider","/dividends","/history","/profile","/profile/employees"];
|
const stockExtraSubPaths = [
|
||||||
const etfExtraSubPaths = ["/holdings","/dark-pool","/options","/options/unusual-activity","/options/hottest-contracts","/options/volatility","/options/oi","/insider","/dividends","/history"];
|
"/financials",
|
||||||
|
"/financials/balance-sheet",
|
||||||
|
"/financials/cash-flow",
|
||||||
|
"/financials/ratios",
|
||||||
|
"/statistics",
|
||||||
|
"/statistics/market-cap",
|
||||||
|
"/statistics/revenue",
|
||||||
|
"/statistics/price-reaction",
|
||||||
|
"/statistics/fail-to-deliver",
|
||||||
|
"/metrics",
|
||||||
|
"/forecast",
|
||||||
|
"/forecast/analyst",
|
||||||
|
"/forecast/ai",
|
||||||
|
"/dark-pool",
|
||||||
|
"/options",
|
||||||
|
"/options/unusual-activity",
|
||||||
|
"/options/hottest-contracts",
|
||||||
|
"/options/volatility",
|
||||||
|
"/options/oi",
|
||||||
|
"/insider",
|
||||||
|
"/dividends",
|
||||||
|
"/history",
|
||||||
|
"/profile",
|
||||||
|
"/profile/employees"
|
||||||
|
];
|
||||||
|
const etfExtraSubPaths = [
|
||||||
|
"/holdings",
|
||||||
|
"/dark-pool",
|
||||||
|
"/options",
|
||||||
|
"/options/unusual-activity",
|
||||||
|
"/options/hottest-contracts",
|
||||||
|
"/options/volatility",
|
||||||
|
"/options/oi",
|
||||||
|
"/insider",
|
||||||
|
"/dividends",
|
||||||
|
"/history"
|
||||||
|
];
|
||||||
|
|
||||||
|
/** @type {import('./$types').RequestHandler} */
|
||||||
|
export async function GET({ params, locals }) {
|
||||||
|
const { apiKey, apiURL, pb } = locals;
|
||||||
|
|
||||||
|
// Fetch stocks data.
|
||||||
|
const rawData = await fetch(apiURL + "/full-searchbar", {
|
||||||
|
method: "GET",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
"X-API-KEY": apiKey,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const outputStocks = await rawData.json();
|
||||||
|
const stocks = outputStocks?.map((item) => ({
|
||||||
|
id: item?.symbol,
|
||||||
|
type: item?.type,
|
||||||
|
}));
|
||||||
|
|
||||||
|
// Fetch articles and tutorials.
|
||||||
|
const articles = await pb.collection("articles").getFullList({
|
||||||
|
sort: "-created",
|
||||||
|
});
|
||||||
|
const tutorials = await pb.collection("tutorials").getFullList({
|
||||||
|
sort: "-created",
|
||||||
|
});
|
||||||
|
|
||||||
|
// Extract sitemap number from params.slug (e.g. "sitemap1.xml").
|
||||||
|
const sitemapMatch = params.slug.match(/sitemap(\d+)\.xml/);
|
||||||
|
if (!sitemapMatch) {
|
||||||
|
return new Response("Not Found", { status: 404 });
|
||||||
|
}
|
||||||
|
const sitemapIndex = parseInt(sitemapMatch[1], 10) - 1;
|
||||||
|
if (sitemapIndex < 0 || sitemapIndex >= sitemapPages.length) {
|
||||||
|
return new Response("Not Found", { status: 404 });
|
||||||
|
}
|
||||||
|
|
||||||
|
// Split the stocks array into chunks based on the number of sitemaps.
|
||||||
|
const totalSitemaps = sitemapPages.length;
|
||||||
|
const chunkSize = Math.ceil(stocks.length / totalSitemaps);
|
||||||
|
const chosenStocks = stocks.slice(
|
||||||
|
sitemapIndex * chunkSize,
|
||||||
|
(sitemapIndex + 1) * chunkSize
|
||||||
|
);
|
||||||
|
|
||||||
|
// Only include pages, articles, and tutorials in the first sitemap.
|
||||||
|
let chosenPages = [];
|
||||||
|
let chosenArticles = [];
|
||||||
|
let chosenTutorials = [];
|
||||||
|
if (sitemapIndex === 0) {
|
||||||
|
chosenPages = pages;
|
||||||
|
chosenArticles = articles;
|
||||||
|
chosenTutorials = tutorials;
|
||||||
|
}
|
||||||
|
|
||||||
|
const body = sitemap(chosenStocks, chosenArticles, chosenPages, chosenTutorials);
|
||||||
|
const response = new Response(body);
|
||||||
|
response.headers.set("Content-Type", "application/xml");
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sitemap generation function.
|
||||||
const sitemap = (stocks, articles, pages, tutorials) => `<?xml version="1.0" encoding="UTF-8" ?>
|
const sitemap = (stocks, articles, pages, tutorials) => `<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
<urlset
|
<urlset
|
||||||
xmlns="https://www.sitemaps.org/schemas/sitemap/0.9"
|
xmlns="https://www.sitemaps.org/schemas/sitemap/0.9"
|
||||||
@ -195,8 +244,7 @@ const sitemap = (stocks, articles, pages, tutorials) => `<?xml version="1.0" enc
|
|||||||
stockExtraSubPaths?.forEach((subPath) => {
|
stockExtraSubPaths?.forEach((subPath) => {
|
||||||
urlElements += createUrlElement(`${website}${basePath}${ticker.id}${subPath}`, stockSettings);
|
urlElements += createUrlElement(`${website}${basePath}${ticker.id}${subPath}`, stockSettings);
|
||||||
});
|
});
|
||||||
}
|
} else if (ticker.type === "ETF") {
|
||||||
else if (ticker.type === "ETF") {
|
|
||||||
etfExtraSubPaths?.forEach((subPath) => {
|
etfExtraSubPaths?.forEach((subPath) => {
|
||||||
urlElements += createUrlElement(`${website}${basePath}${ticker.id}${subPath}`, stockSettings);
|
urlElements += createUrlElement(`${website}${basePath}${ticker.id}${subPath}`, stockSettings);
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user