mirror of
https://github.com/JonasunderscoreJones/rss.jonasjones.dev.git
synced 2025-10-22 19:49:18 +02:00
Added project files
This commit is contained in:
parent
6e645ce02a
commit
40c8e77367
4 changed files with 125 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
/node_modules/
|
12
package.json
Normal file
12
package.json
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"name": "api-worker",
|
||||||
|
"version": "0.0.1+alpha-build01",
|
||||||
|
"private": true,
|
||||||
|
"scripts": {
|
||||||
|
"deploy": "wrangler deploy",
|
||||||
|
"start": "wrangler dev"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"wrangler": "^3.28.0"
|
||||||
|
}
|
||||||
|
}
|
61
src/index.js
Normal file
61
src/index.js
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
addEventListener('fetch', event => {
|
||||||
|
event.respondWith(handleRequest(event.request));
|
||||||
|
});
|
||||||
|
|
||||||
|
async function handleRequest(request) {
|
||||||
|
const url = new URL(request.url);
|
||||||
|
|
||||||
|
// Check if the path is /blog
|
||||||
|
if (url.pathname === '/blog') {
|
||||||
|
// Fetch the index.json file from your CDN
|
||||||
|
const response = await fetch('https://cdn.jonasjones.dev/blog/index.json');
|
||||||
|
const data = await response.json();
|
||||||
|
|
||||||
|
// Process the JSON data to create the RSS feed
|
||||||
|
const rssFeed = createRSSFeed(data);
|
||||||
|
|
||||||
|
// Return the RSS feed as the response
|
||||||
|
return new Response(rssFeed, {
|
||||||
|
headers: { 'Content-Type': 'application/rss+xml' },
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// Handle other routes or return a 404 response
|
||||||
|
return new Response('Not Found', { status: 404 });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function createRSSFeed(data) {
|
||||||
|
const DOMAIN = 'https://blog.jonasjones.dev';
|
||||||
|
const items = data.slice(-50).reverse().map(item => `
|
||||||
|
<item>
|
||||||
|
<title><![CDATA[${item.title}]]></title>
|
||||||
|
<link>${DOMAIN}/#/post/${formatDateForLink(item.date)}/${item.id}</link>
|
||||||
|
<guid isPermaLink="true">${DOMAIN}/#/post/${formatDateForLink(item.date)}/${item.id}</guid>
|
||||||
|
<author><![CDATA[${item.author}]]></author>
|
||||||
|
<pubDate>${new Date(item.date).toUTCString()}</pubDate>
|
||||||
|
<description><![CDATA[${item.description}]]></description>
|
||||||
|
</item>
|
||||||
|
`).join('');
|
||||||
|
|
||||||
|
return `<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<rss version="2.0">
|
||||||
|
<channel>
|
||||||
|
<title>Your Blog Title</title>
|
||||||
|
<link>${DOMAIN}</link>
|
||||||
|
<description>Your blog description</description>
|
||||||
|
<language>en-us</language>
|
||||||
|
<pubDate>${new Date().toUTCString()}</pubDate>
|
||||||
|
<lastBuildDate>${new Date().toUTCString()}</lastBuildDate>
|
||||||
|
<generator>Cloudflare Worker</generator>
|
||||||
|
${items}
|
||||||
|
</channel>
|
||||||
|
</rss>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function formatDateForLink(dateString) {
|
||||||
|
const date = new Date(dateString);
|
||||||
|
const year = date.getUTCFullYear();
|
||||||
|
const month = String(date.getUTCMonth() + 1).padStart(2, '0');
|
||||||
|
const day = String(date.getUTCDate()).padStart(2, '0');
|
||||||
|
return `${year}/${month}/${day}`;
|
||||||
|
}
|
51
wrangler.toml
Normal file
51
wrangler.toml
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
name = "rss-worker"
|
||||||
|
main = "src/index.js"
|
||||||
|
compatibility_date = "2023-09-04"
|
||||||
|
|
||||||
|
# Variable bindings. These are arbitrary, plaintext strings (similar to environment variables)
|
||||||
|
# Note: Use secrets to store sensitive data.
|
||||||
|
# Docs: https://developers.cloudflare.com/workers/platform/environment-variables
|
||||||
|
# [vars]
|
||||||
|
# MY_VARIABLE = "production_value"
|
||||||
|
|
||||||
|
# Bind a KV Namespace. Use KV as persistent storage for small key-value pairs.
|
||||||
|
# Docs: https://developers.cloudflare.com/workers/runtime-apis/kv
|
||||||
|
# [[kv_namespaces]]
|
||||||
|
# binding = "MY_KV_NAMESPACE"
|
||||||
|
# id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
|
|
||||||
|
# Bind an R2 Bucket. Use R2 to store arbitrarily large blobs of data, such as files.
|
||||||
|
# Docs: https://developers.cloudflare.com/r2/api/workers/workers-api-usage/
|
||||||
|
# [[r2_buckets]]
|
||||||
|
# binding = "MY_BUCKET"
|
||||||
|
# bucket_name = "my-bucket"
|
||||||
|
|
||||||
|
# Bind a Queue producer. Use this binding to schedule an arbitrary task that may be processed later by a Queue consumer.
|
||||||
|
# Docs: https://developers.cloudflare.com/queues/get-started
|
||||||
|
# [[queues.producers]]
|
||||||
|
# binding = "MY_QUEUE"
|
||||||
|
# queue = "my-queue"
|
||||||
|
|
||||||
|
# Bind a Queue consumer. Queue Consumers can retrieve tasks scheduled by Producers to act on them.
|
||||||
|
# Docs: https://developers.cloudflare.com/queues/get-started
|
||||||
|
# [[queues.consumers]]
|
||||||
|
# queue = "my-queue"
|
||||||
|
|
||||||
|
# Bind another Worker service. Use this binding to call another Worker without network overhead.
|
||||||
|
# Docs: https://developers.cloudflare.com/workers/platform/services
|
||||||
|
# [[services]]
|
||||||
|
# binding = "MY_SERVICE"
|
||||||
|
# service = "/api/*"
|
||||||
|
|
||||||
|
# Bind a Durable Object. Durable objects are a scale-to-zero compute primitive based on the actor model.
|
||||||
|
# Durable Objects can live for as long as needed. Use these when you need a long-running "server", such as in realtime apps.
|
||||||
|
# Docs: https://developers.cloudflare.com/workers/runtime-apis/durable-objects
|
||||||
|
# [[durable_objects.bindings]]
|
||||||
|
# name = "MY_DURABLE_OBJECT"
|
||||||
|
# class_name = "MyDurableObject"
|
||||||
|
|
||||||
|
# Durable Object migrations.
|
||||||
|
# Docs: https://developers.cloudflare.com/workers/learning/using-durable-objects#configure-durable-object-classes-with-migrations
|
||||||
|
# [[migrations]]
|
||||||
|
# tag = "v1"
|
||||||
|
# new_classes = ["MyDurableObject"]
|
Loading…
Add table
Add a link
Reference in a new issue