Major update to bring it inline with the new Strapi CMS.
This commit is contained in:
parent
1ab30f580c
commit
9141c18579
31 changed files with 10334 additions and 211 deletions
|
|
@ -271,4 +271,8 @@
|
|||
h2 {
|
||||
font-size: 2rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.featuredFlickr {
|
||||
padding-top: 30px
|
||||
}
|
||||
|
|
@ -4,7 +4,7 @@ import Link from 'next/link'
|
|||
|
||||
const EpisodePager = ({ episodedata, config, showdata }) => {
|
||||
const router = useRouter()
|
||||
|
||||
console.log(episodedata)
|
||||
const handlePagination = page => {
|
||||
const path = router.pathname
|
||||
const query = router.query
|
||||
|
|
@ -18,16 +18,16 @@ const EpisodePager = ({ episodedata, config, showdata }) => {
|
|||
return (
|
||||
<div className="episode_pages col-xs-12">
|
||||
<div className="show_episodes">
|
||||
{episodedata.episodes.map((episode) => (
|
||||
<div key={episode.slug} className="episode">
|
||||
<div className="episode_title" id ={episode.episode_slug}>
|
||||
<Link href={episode.show_slug + "/" + episode.episode_slug}>{episode.title}</Link>
|
||||
{episodedata.map((episode) => (
|
||||
<div key={episode.attributes.Slug} className="episode">
|
||||
<div className="episode_title" id ={episode.Title}>
|
||||
<Link href={episode.attributes.podcast_sery.data.attributes.Slug + "/" + episode.attributes.Slug}>{episode.attributes.Title}</Link>
|
||||
</div>
|
||||
<div className="content-date">
|
||||
{episode.episode_published}
|
||||
{episode.attributes.publishedAt}
|
||||
</div>
|
||||
|
||||
<div className="episode_body" dangerouslySetInnerHTML={{ __html: episode.episode_lead}}></div>
|
||||
<div className="episode_body" dangerouslySetInnerHTML={{ __html: episode.attributes.Description}}></div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
|
|
@ -37,7 +37,7 @@ const EpisodePager = ({ episodedata, config, showdata }) => {
|
|||
previousLabel={"previous"}
|
||||
nextLabel={"next"}
|
||||
breakLabel={"..."}
|
||||
initialPage={episodedata.curPage - 1}
|
||||
initialPage={1} //{episodedata.curPage - 1}
|
||||
pageCount={2}
|
||||
onPageChange={handlePagination}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ const EpisodeSideBar = (epdata) => (
|
|||
<div className="side_content col-md-3">
|
||||
<h2>Latest Episodes</h2>
|
||||
<hr />
|
||||
{epdata.epdata.episodes.map((episode) => (
|
||||
{epdata.map((episode) => (
|
||||
<div key={episode.episode_slug}>
|
||||
<h2><Link href="/podcasts/shows/[show_slug]/[slug]" as={"/podcasts/shows/" + episode.show_slug + "/" + episode.episode_slug}>{episode.title}</Link></h2>
|
||||
<div dangerouslySetInnerHTML={{__html: episode.episode_lead}} />
|
||||
|
|
|
|||
|
|
@ -1,11 +1,13 @@
|
|||
import Image from 'next/image';
|
||||
|
||||
|
||||
|
||||
const FeatureImage = ({ imagedata, basepath }) => (
|
||||
<div className="featuredimage">
|
||||
<Image
|
||||
src={basepath + imagedata.src}
|
||||
height={imagedata.height}
|
||||
width={imagedata.width}
|
||||
src={"http://localhost:1337"+imagedata.attributes.url}
|
||||
height={imagedata.attributes.height}
|
||||
width={imagedata.attributes.width}
|
||||
priority={true}
|
||||
/>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -12,6 +12,9 @@ const Layout = (props) => (
|
|||
<Head>
|
||||
<title>{props.pagedata.title}</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"></meta>
|
||||
<meta name="description" content="Angry Beanie"></meta>
|
||||
<meta charSet="utf-8" />
|
||||
<meta property="og-title" content={props.pagedata.pageTitle}></meta>
|
||||
</Head>
|
||||
<Header />
|
||||
<div className="container">
|
||||
|
|
|
|||
|
|
@ -17,19 +17,9 @@ const NavBar = (props, sections) => {
|
|||
<Nav className="m-auto">
|
||||
<NavLink href="/">Home</NavLink>
|
||||
</Nav>
|
||||
<Nav className="m-auto">
|
||||
<NavLink href="/podcasts">Podcasts</NavLink>
|
||||
</Nav>
|
||||
<NavItem className="m-auto">
|
||||
<NavLink href="/news">News and such</NavLink>
|
||||
</NavItem>
|
||||
{props.sections.sections.map((section) => (
|
||||
<NavDropdown className="m-auto" title={section.title}>
|
||||
{section.pages.map((page) => (
|
||||
<NavDropdown.Item key={page.page_slug} href={"/sections/" + page.page_slug}>{page.page_title}</NavDropdown.Item>
|
||||
))}
|
||||
</NavDropdown>
|
||||
))}
|
||||
</Navbar.Collapse>
|
||||
</Navbar>
|
||||
|
||||
|
|
|
|||
|
|
@ -4,11 +4,12 @@ import Link from 'next/link'
|
|||
|
||||
const StoryPager = ({ storydata }) => {
|
||||
const router = useRouter()
|
||||
console.log(storydata.meta)
|
||||
|
||||
const handlePagination = page => {
|
||||
const path = router.pathname
|
||||
const query = router.query
|
||||
query.page = page.selected + 1
|
||||
query.page = page.selected + 2
|
||||
router.push({
|
||||
pathname: path,
|
||||
query: query,
|
||||
|
|
@ -18,12 +19,12 @@ const StoryPager = ({ storydata }) => {
|
|||
return (
|
||||
<div className="episode_pages col-sm-12">
|
||||
<div className="show_episodes">
|
||||
{storydata.articles.map((story) => (
|
||||
{storydata.data.map((story) => (
|
||||
<div key={story.slug}>
|
||||
<div className="episode_title">
|
||||
<Link href="/news/[slug]" as={"/news/" + story.slug}>{story.title}</Link>
|
||||
<Link href="/news/[slug]" as={"/news/" + story.attributes.Slug}>{story.attributes.Title}</Link>
|
||||
</div>
|
||||
<div className="article_body" dangerouslySetInnerHTML={{ __html: story.lead }} />
|
||||
<div className="article_body" dangerouslySetInnerHTML={{ __html: story.attributes.Abstract }} />
|
||||
</div>
|
||||
))}
|
||||
<ReactPaginate
|
||||
|
|
@ -32,8 +33,8 @@ const StoryPager = ({ storydata }) => {
|
|||
previousLabel={"previous"}
|
||||
nextLabel={"next"}
|
||||
breakLabel={"..."}
|
||||
initialPage={storydata.page - 1}
|
||||
pageCount={storydata.total / 5}
|
||||
initialPage={storydata.page}
|
||||
pageCount={storydata.meta.pagination.pageCount}
|
||||
onPageChange={handlePagination} />
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
import Link from 'next/link'
|
||||
|
||||
const StorySideBar = (storydata) => (
|
||||
const StorySideBar = ({ stories }) => (
|
||||
<div className="side_content col-md-3">
|
||||
<h2>Latest Stories</h2>
|
||||
<hr />
|
||||
{storydata.stories.articles.map((article) => (
|
||||
<div key={article.slug}>
|
||||
<h2><Link href="/news/[slug]" as={"/news/" + article.slug}>{article.title}</Link></h2>
|
||||
<div dangerouslySetInnerHTML={{__html: article.lead}} />
|
||||
{stories.map((article) => (
|
||||
<div key={article.attributes.Slug}>
|
||||
<h2><Link href="/news/[slug]" as={"/news/" + article.attributes.Slug}>{article.attributes.Title}</Link></h2>
|
||||
<div dangerouslySetInnerHTML={{__html: article.attributes.Lead}} />
|
||||
<hr></hr>
|
||||
</div>
|
||||
))}
|
||||
|
|
|
|||
52
data/external/cms.js
vendored
Executable file
52
data/external/cms.js
vendored
Executable file
|
|
@ -0,0 +1,52 @@
|
|||
import getConfig from 'next/config'
|
||||
|
||||
export const getAllPosts = async (filter) => {
|
||||
|
||||
const { serverRuntimeConfig, publicRuntimeConfig } = getConfig()
|
||||
const qs = require('qs')
|
||||
const qVal = []
|
||||
|
||||
const query = qs.stringify({
|
||||
sort: ['publishedAt:desc'],
|
||||
filters: {
|
||||
tags: {
|
||||
Slug: {
|
||||
$contains: filter
|
||||
}
|
||||
}
|
||||
} }, {
|
||||
encodeValuesOnly: true,
|
||||
})
|
||||
|
||||
const res = await fetch(serverRuntimeConfig.base_path + `articles?${query}`, {
|
||||
headers: new Headers({
|
||||
'Authorization': serverRuntimeConfig.strapi_token,
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
})
|
||||
})
|
||||
|
||||
return await res.json()
|
||||
}
|
||||
|
||||
export const getAllPodcastSeries = async () => {
|
||||
const { serverRuntimeConfig } = getConfig()
|
||||
const qs = require('qs')
|
||||
const query = qs.stringify({
|
||||
populate: {
|
||||
podcast_episodes: {
|
||||
populate:['Audio']
|
||||
}
|
||||
}
|
||||
}, {
|
||||
encodeValuesOnly: true,
|
||||
})
|
||||
|
||||
const res = await fetch(serverRuntimeConfig.base_path + `podcast-series?${query}`, {
|
||||
headers: new Headers({
|
||||
'Authorization': serverRuntimeConfig.strapi_token,
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
})
|
||||
})
|
||||
|
||||
return await res.json()
|
||||
}
|
||||
8
data/internal/config.js
Executable file
8
data/internal/config.js
Executable file
|
|
@ -0,0 +1,8 @@
|
|||
export const config = {
|
||||
siteName: "AngryBeanie",
|
||||
siteDescription: "A place for all my projects, thoughts and ramblings",
|
||||
siteLogo: "",
|
||||
siteURL: "https://www.angrybeanie.com"
|
||||
}
|
||||
|
||||
export default config
|
||||
190
data/internal/feed-generator.js
Executable file
190
data/internal/feed-generator.js
Executable file
|
|
@ -0,0 +1,190 @@
|
|||
import { Feed } from "feed"
|
||||
import { getAllPodcastSeries, getAllPosts } from "../external/cms"
|
||||
import fs from "fs"
|
||||
import config from './config'
|
||||
|
||||
export const generateRssFeed = async (filter) => {
|
||||
|
||||
const posts = await getAllPosts(filter);
|
||||
|
||||
const siteURL = config.siteURL;
|
||||
|
||||
const date = new Date();
|
||||
|
||||
const Title = typeof filter === "undefined" ? "Angry Beanie" : filter
|
||||
|
||||
const feedTitle = typeof filter === "undefined" ? "Angry-Beanie" : filter
|
||||
|
||||
const author = {
|
||||
|
||||
name: "James Purser",
|
||||
|
||||
email: "james@angrybeanie.com",
|
||||
|
||||
link: "https://twitter.com/purserj",
|
||||
|
||||
};
|
||||
|
||||
const feed = new Feed({
|
||||
|
||||
title: Title,
|
||||
|
||||
description: "A place for all my thoughts and projects",
|
||||
|
||||
id: siteURL,
|
||||
|
||||
link: siteURL,
|
||||
|
||||
image: `${siteURL}/public/images/logo.svg`,
|
||||
|
||||
favicon: `${siteURL}/public/images/favicon.png`,
|
||||
|
||||
copyright: `All rights reserved ${date.getFullYear()}, James Purser`,
|
||||
|
||||
updated: date,
|
||||
|
||||
generator: "Feed for Node.js",
|
||||
|
||||
feedLinks: {
|
||||
|
||||
rss2: `${siteURL}/feeds/${feedTitle}-feed.xml`,
|
||||
|
||||
json: `${siteURL}/feeds/${feedTitle}-feed.json`,
|
||||
|
||||
atom: `${siteURL}/feeds/${feedTitle}-atom.xml`,
|
||||
|
||||
},
|
||||
|
||||
author,
|
||||
|
||||
});
|
||||
|
||||
posts.data.forEach((post) => {
|
||||
|
||||
const url = `${siteURL}/news/${post.attributes.Slug}`;
|
||||
|
||||
feed.addItem({
|
||||
|
||||
title: post.attributes.Title,
|
||||
|
||||
id: url,
|
||||
|
||||
link: url,
|
||||
|
||||
description: post.attributes.Abstract,
|
||||
|
||||
content: post.attributes.Abstract,
|
||||
|
||||
author: [author],
|
||||
|
||||
contributor: [author],
|
||||
|
||||
date: new Date(post.attributes.publishedAt),
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
fs.mkdirSync("./public/feeds", { recursive: true });
|
||||
|
||||
fs.writeFileSync(`./public/feeds/${feedTitle}-feed.xml`, feed.rss2());
|
||||
|
||||
fs.writeFileSync(`./public/feeds/${feedTitle}-atom.xml`, feed.atom1());
|
||||
|
||||
fs.writeFileSync(`./public/feeds/${feedTitle}-feed.json`, feed.json1());
|
||||
|
||||
}
|
||||
|
||||
export const generatePodcastFeeds = async () => {
|
||||
const podcastSeries = await getAllPodcastSeries()
|
||||
const siteURL = config.siteURL;
|
||||
|
||||
console.log(config)
|
||||
|
||||
const author = {
|
||||
|
||||
name: "James Purser",
|
||||
|
||||
email: "james@angrybeanie.com",
|
||||
|
||||
link: "https://twitter.com/purserj",
|
||||
|
||||
};
|
||||
|
||||
const date = new Date();
|
||||
|
||||
podcastSeries.data.forEach((series) => {
|
||||
|
||||
const feed = new Feed({
|
||||
|
||||
title: series.attributes.Title,
|
||||
|
||||
description: series.attributes.Description,
|
||||
|
||||
id: siteURL,
|
||||
|
||||
link: siteURL,
|
||||
|
||||
image: `${siteURL}/public/images/logo.svg`,
|
||||
|
||||
favicon: `${siteURL}/public/images/favicon.png`,
|
||||
|
||||
copyright: `All rights reserved ${date.getFullYear()}, James Purser`,
|
||||
|
||||
updated: date,
|
||||
|
||||
generator: "Feed for Node.js",
|
||||
|
||||
feedLinks: {
|
||||
|
||||
rss2: `${siteURL}/feeds/${series.attributes.Slug}.xml`,
|
||||
|
||||
},
|
||||
|
||||
author,
|
||||
|
||||
});
|
||||
|
||||
const episodes = series.attributes.podcast_episodes.data
|
||||
|
||||
episodes.forEach((episode) => {
|
||||
|
||||
const url = `${siteURL}/shows/${series.attributes.Slug}/${episode.attributes.Slug}`;
|
||||
|
||||
const media_url = `${siteURL}${episode.attributes.Audio.data.attributes.url}`
|
||||
|
||||
const media = {
|
||||
url: media_url,
|
||||
type: episode.attributes.Audio.data.attributes.mime,
|
||||
length: 0,
|
||||
title: episode.attributes.Audio.data.attributes.name,
|
||||
duration: 0,
|
||||
}
|
||||
|
||||
feed.addItem({
|
||||
|
||||
title: episode.attributes.Title,
|
||||
|
||||
id: url,
|
||||
|
||||
link: url,
|
||||
|
||||
description: episode.attributes.Description,
|
||||
|
||||
content: episode.attributes.Description,
|
||||
|
||||
author: [author],
|
||||
|
||||
contributor: [author],
|
||||
|
||||
date: new Date(episode.attributes.publishedAt),
|
||||
|
||||
enclosure: media
|
||||
})
|
||||
})
|
||||
|
||||
console.log(feed.rss2())
|
||||
|
||||
fs.writeFileSync(`./public/feeds/${series.attributes.Slug}.xml`, feed.rss2());
|
||||
})
|
||||
}
|
||||
0
data/internal/sitemap-generator.js
Executable file
0
data/internal/sitemap-generator.js
Executable file
|
|
@ -8,8 +8,9 @@ module.exports = withPlugins([withCSS, withFonts, withImages])
|
|||
module.exports = {
|
||||
serverRuntimeConfig: {
|
||||
// Will only be available on the server side
|
||||
base_path: 'http://cms.local.angrybeanie.com:8000',
|
||||
audio_path: 'https://audio.angrybeanie.com/'
|
||||
base_path: 'http://localhost:1337/api/',
|
||||
audio_path: 'https://audio.angrybeanie.com/',
|
||||
strapi_token: 'Bearer e555abdbe49a73a84241acdbe90fb18c9d314987f4752e63ce340a307ff07c40a086edb043ef6b8325b46a1dc2d2f0806c507bdbd99b005438c479223388e6997f49bac856df3b9f1a55e159ee15c6e97030e3ac09ec87f8ff411fe14a9a11ae409b034db64fae121e1eada8db9839765555c0c06b341e986be65bb8b2e91eb9'
|
||||
},
|
||||
images: {
|
||||
domains: ['www.angrybeanie.com', 'localhost', 'cms.local.angrybeanie.com']
|
||||
|
|
|
|||
5319
package-lock.json
generated
5319
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
|
@ -14,6 +14,7 @@
|
|||
"@zeit/next-css": "^1.0.1",
|
||||
"@zeit/next-less": "^1.0.1",
|
||||
"bootstrap": "^4.6.0",
|
||||
"feed": "^4.2.2",
|
||||
"less": "^3.13.1",
|
||||
"mdbreact": "^5.1.0",
|
||||
"next": "^10.2.3",
|
||||
|
|
@ -21,6 +22,7 @@
|
|||
"next-fonts": "^1.5.1",
|
||||
"next-images": "^1.8.1",
|
||||
"postcss": "^8.3.6",
|
||||
"qs": "^6.10.3",
|
||||
"react": "^16.14.0",
|
||||
"react-bootstrap": "^1.6.1",
|
||||
"react-dom": "^16.14.0",
|
||||
|
|
|
|||
122
pages/index.js
122
pages/index.js
|
|
@ -5,15 +5,39 @@ import getConfig from 'next/config'
|
|||
import Head from 'next/head'
|
||||
import Image from 'next/image';
|
||||
import { FEEDS, getFeed } from "../lib/rss"
|
||||
import { generatePodcastFeeds, generateRssFeed } from "../data/internal/feed-generator"
|
||||
|
||||
export async function getServerSideProps(context) {
|
||||
const { serverRuntimeConfig, publicRuntimeConfig } = getConfig()
|
||||
const res = await fetch(serverRuntimeConfig.base_path +`/api/collections/1`)
|
||||
export async function getStaticProps(context) {
|
||||
generateRssFeed()
|
||||
generateRssFeed('tech-and-disability')
|
||||
generatePodcastFeeds()
|
||||
const { serverRuntimeConfig, publicRuntimeConfig, strapiConfig } = getConfig()
|
||||
console.log(serverRuntimeConfig.strapi_token)
|
||||
|
||||
const qs = require('qs')
|
||||
const query = qs.stringify({
|
||||
pagination: {
|
||||
limit: 1
|
||||
},
|
||||
sort: ['publishedAt:desc'],
|
||||
fields: ['Title', 'Slug', 'Abstract']
|
||||
}, {
|
||||
encodeValuesOnly: true,
|
||||
})
|
||||
console.log(query)
|
||||
const res = await fetch(serverRuntimeConfig.base_path +`articles?${query}`, {
|
||||
headers: new Headers({
|
||||
'Authorization': serverRuntimeConfig.strapi_token,
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
})
|
||||
})
|
||||
const artdata = await res.json()
|
||||
const article = artdata.articles[0]
|
||||
|
||||
const epres = await fetch(serverRuntimeConfig.base_path + '/api/podcasts/episodes/latest/0/1')
|
||||
const epdata = await epres.json()
|
||||
const article = artdata.data[0].attributes
|
||||
|
||||
console.log(article)
|
||||
// const epres = await fetch(serverRuntimeConfig.base_path + '/api/podcasts/episodes/latest/0/1')
|
||||
// const epdata = await epres.json()
|
||||
|
||||
const flickr = await fetch('https://www.flickr.com/services/feeds/photos_public.gne?id=25875680@N05&lang=en-us&format=json&nojsoncallback=1')
|
||||
const flickrdata = await flickr.json()
|
||||
|
|
@ -21,12 +45,12 @@ export async function getServerSideProps(context) {
|
|||
|
||||
const pagedata = {'title': 'Angry Beanie'}
|
||||
|
||||
const tadfeed = FEEDS.find((tadfeed) => tadfeed.name === "tad");
|
||||
const tadfullfeed = await getFeed(tadfeed.url)
|
||||
const tadfirstitem = tadfullfeed.items[0]
|
||||
// const tadfeed = FEEDS.find((tadfeed) => tadfeed.name === "tad");
|
||||
// const tadfullfeed = await getFeed(tadfeed.url)
|
||||
// const tadfirstitem = tadfullfeed.items[0]
|
||||
|
||||
return {
|
||||
props: { article, pagedata, episodedata: epdata.episodes, config: serverRuntimeConfig, tadfirstitem, firstimage}, // will be passed to the page component as props
|
||||
props: { article, pagedata, config: serverRuntimeConfig, firstimage}, // will be passed to the page component as props
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -35,38 +59,72 @@ function HomePage (props) {
|
|||
<div>
|
||||
<Head>
|
||||
<title>{props.pagedata.title}</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"></meta>
|
||||
<meta name="description" content="Angry Beanie"></meta>
|
||||
<meta charSet="utf-8" />
|
||||
<meta property="og-title" content="Angry Beanie - Home"></meta>
|
||||
</Head>
|
||||
<div className="container">
|
||||
<div className="frontPageImage">
|
||||
<img className="header_image img-fluid" src="/images/logo.png" alt="Angry Beanie" />
|
||||
</div>
|
||||
<div className="card col-sm-3">
|
||||
<h3>Latest Blog Post</h3>
|
||||
<Link href="/news/[slug]" as={"/news/" + props.article.slug}>{props.article.title}</Link>
|
||||
{props.article.abstract}
|
||||
<div className="row">
|
||||
<div className="col-sm-4">
|
||||
<div className="card">
|
||||
<div className="card-img-top">
|
||||
|
||||
</div>
|
||||
<div className="card-title">
|
||||
<h3>Latest Blog Post</h3>
|
||||
</div>
|
||||
<div className="card-body">
|
||||
<Link href="/news/[slug]" as={"/news/" + props.article.Slug}>{props.article.Title}</Link>
|
||||
<div dangerouslySetInnerHTML={{ __html:props.article.Abstract}}></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{props.episodedata.map((episode) => (
|
||||
<div className="card col-sm-3">
|
||||
<h3>Latest Podcast</h3>
|
||||
<Link href={episode.show_slug + "/" + episode.episode_slug}>{episode.title}</Link>
|
||||
<Image
|
||||
src={props.config.base_path + "/" + episode.logo.src}
|
||||
height={episode.logo.height}
|
||||
width="100%"
|
||||
></Image>
|
||||
<div dangerouslySetInnerHTML={{ __html: episode.episode_lead}}></div>
|
||||
{/* {props.episodedata.map((episode) => (
|
||||
<div className="col-sm-4">
|
||||
<div className="card">
|
||||
<div className="card-img-top">
|
||||
<Image
|
||||
src={props.config.base_path + "/" + episode.logo.src}
|
||||
alt={episode.show}
|
||||
layout="fixed"
|
||||
height={episode.logo.height}
|
||||
width={episode.logo.width}
|
||||
srcSet={episode.logo.srcset}
|
||||
className="card-img-top"
|
||||
></Image>
|
||||
</div>
|
||||
<div className="card-title">
|
||||
<h3>Latest Podcast</h3>
|
||||
</div>
|
||||
<div className="card-body">
|
||||
<Link href={"/podcasts/shows/" + episode.show_slug + "/" + episode.episode_slug}>{episode.title}</Link>
|
||||
<div dangerouslySetInnerHTML={{ __html: episode.episode_lead}}></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
<div className="card col-sm-3">
|
||||
<h3>Latest Tech And Disability Post</h3>
|
||||
<a href={props.tadfirstitem.link} target="_blank">{props.tadfirstitem.title}</a>
|
||||
</div>
|
||||
<div className="card col-sm-3">
|
||||
<h3>Latest Photo</h3>
|
||||
<img src={ props.firstimage.media.m } height="100" width="100"></img>
|
||||
))} */}
|
||||
<div className="col-sm-4">
|
||||
<div className="card">
|
||||
<div className="card-img-top">
|
||||
<a href={props.firstimage.link} target="_blank">
|
||||
<img className="featuredFlickr" src={ props.firstimage.media.m }></img>
|
||||
</a>
|
||||
</div>
|
||||
<div className="card-title">
|
||||
<h3>Latest Photo (clicking on the above will take you to Flickr)</h3>
|
||||
</div>
|
||||
<div className="card-body">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,11 @@ import "../components/main"
|
|||
import getConfig from 'next/config'
|
||||
import Layout from "../components/main"
|
||||
import StoryPager from "../components/storypager"
|
||||
//import { popStoryPager } from "../data/external/cms"
|
||||
|
||||
async function popStoryPager(page) {
|
||||
|
||||
}
|
||||
|
||||
export async function getServerSideProps(context) {
|
||||
if(context.query.page == null || context.query.page == '0') {
|
||||
|
|
@ -11,9 +16,26 @@ export async function getServerSideProps(context) {
|
|||
}
|
||||
|
||||
const { serverRuntimeConfig, publicRuntimeConfig } = getConfig()
|
||||
|
||||
const res = await fetch(serverRuntimeConfig.base_path + `/api/documents/`+ page + `/5`)
|
||||
const articles = await res.json()
|
||||
const qs = require('qs')
|
||||
const query = qs.stringify({
|
||||
pagination: {
|
||||
page: page,
|
||||
pageSize: 5
|
||||
},
|
||||
sort: ['publishedAt:desc']
|
||||
}, {
|
||||
encodeValuesOnly: true,
|
||||
})
|
||||
console.log(query)
|
||||
const res = await fetch(serverRuntimeConfig.base_path + `articles?${query}`, {
|
||||
headers: new Headers({
|
||||
'Authorization': serverRuntimeConfig.strapi_token,
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
})
|
||||
})
|
||||
|
||||
const artdata = await res.json()
|
||||
const articles = artdata
|
||||
|
||||
const secres = await fetch(serverRuntimeConfig.base_path + `/api/sections`)
|
||||
const secdata = await secres.json()
|
||||
|
|
|
|||
|
|
@ -3,41 +3,87 @@ import "../../components/main.js"
|
|||
import Layout from "../../components/main.js"
|
||||
import FeatureImage from "../../components/featureimage.js"
|
||||
import StorySideBar from '../../components/storysidebar.js'
|
||||
import { getAllPosts } from '../../data/external/cms'
|
||||
import * as gtag from "../../lib/gtag"
|
||||
import Image from 'next/image';
|
||||
import Head from 'next/head'
|
||||
|
||||
export async function getServerSideProps(context) {
|
||||
const Article = ({article_obj, sections, pagedata, stories, serverRuntimeConfig}) => {
|
||||
if (!article_obj) return null
|
||||
return ( <Layout sections={sections} pagedata={pagedata}>
|
||||
<Head>
|
||||
<meta name="twitter:card" content="summary" key="twcard" />
|
||||
<meta name="twitter:creator" content="angrybeanie" key="twhandle" />
|
||||
</Head>
|
||||
<div className="main_content col-md-9 col-sm-12">
|
||||
{ article_obj.FeatureImage.data != null &&
|
||||
<FeatureImage imagedata = {article_obj.FeatureImage.data} basepath = {serverRuntimeConfig.base_path} ></FeatureImage>
|
||||
}
|
||||
<h1>{ article_obj.Title }</h1>
|
||||
<div className="article_body" dangerouslySetInnerHTML={{ __html: article_obj.Body }}></div>
|
||||
</div>
|
||||
<StorySideBar stories={stories} />
|
||||
</Layout>
|
||||
)
|
||||
}
|
||||
|
||||
export default Article
|
||||
|
||||
export async function getStaticPaths() {
|
||||
const posts = await getAllPosts()
|
||||
const paths = posts.data.map((post) => ({
|
||||
params: { slug: post.attributes.Slug },
|
||||
}))
|
||||
return {
|
||||
paths,
|
||||
fallback: true // false or 'blocking'
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
export async function getStaticProps({params}) {
|
||||
const { serverRuntimeConfig, publicRuntimeConfig } = getConfig()
|
||||
const slug = context.params.slug
|
||||
const url = serverRuntimeConfig.base_path + '/api/document/' + slug
|
||||
const slug = params.slug
|
||||
const url = serverRuntimeConfig.base_path + 'articles?filters[Slug][$eq]=' + slug + '&populate=*'
|
||||
|
||||
const res = await fetch(url)
|
||||
const article_obj = await res.json()
|
||||
const res = await fetch(url, {
|
||||
headers: new Headers({
|
||||
'Authorization': serverRuntimeConfig.strapi_token,
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
})
|
||||
})
|
||||
const artdata = await res.json()
|
||||
const article_obj = artdata.data[0].attributes
|
||||
|
||||
const stories = await fetch(serverRuntimeConfig.base_path + `/api/documents/0/5`)
|
||||
const storydata = await stories.json()
|
||||
const qs = require('qs')
|
||||
const query = qs.stringify({
|
||||
pagination: {
|
||||
limit: 5
|
||||
},
|
||||
sort: ['publishedAt:desc']
|
||||
}, {
|
||||
encodeValuesOnly: true,
|
||||
})
|
||||
|
||||
const storiesQuery = await fetch(serverRuntimeConfig.base_path + `articles?${query}`, {
|
||||
headers: new Headers({
|
||||
'Authorization': serverRuntimeConfig.strapi_token,
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
})
|
||||
})
|
||||
|
||||
const storydata = await storiesQuery.json()
|
||||
const stories = storydata.data
|
||||
|
||||
const pagedata = {
|
||||
'title': "Angry Beanie - " + article_obj.title
|
||||
'title': "Angry Beanie - " + article_obj.Title
|
||||
}
|
||||
|
||||
const secres = await fetch(serverRuntimeConfig.base_path + '/api/sections')
|
||||
const secdata = await secres.json()
|
||||
|
||||
return {
|
||||
props: { article_obj, sections: secdata, pagedata, storydata, serverRuntimeConfig}, // will be passed to the page component as props
|
||||
props: { article_obj, sections: secdata, pagedata, stories, serverRuntimeConfig }, // will be passed to the page component as props
|
||||
}
|
||||
}
|
||||
|
||||
const Article = ({article_obj, sections, pagedata, storydata, serverRuntimeConfig}) => (
|
||||
<Layout sections={sections} pagedata={pagedata}>
|
||||
<div className="main_content col-md-9 col-sm-12">
|
||||
<FeatureImage imagedata = {article_obj.image} basepath = {serverRuntimeConfig.base_path} ></FeatureImage>
|
||||
<h1>{article_obj.title}</h1>
|
||||
<div className="article_body" dangerouslySetInnerHTML={{ __html: article_obj.body }}></div>
|
||||
</div>
|
||||
<StorySideBar stories={storydata} />
|
||||
</Layout>
|
||||
)
|
||||
|
||||
export default Article
|
||||
|
|
@ -9,44 +9,62 @@ export async function getServerSideProps(context) {
|
|||
const secres = await fetch(serverRuntimeConfig.base_path + `/api/sections`)
|
||||
const secdata = await secres.json()
|
||||
|
||||
const currpodcastres = await fetch(serverRuntimeConfig.base_path + `/api/podcasts/bystatus/1`)
|
||||
const currpodcastres = await fetch(serverRuntimeConfig.base_path + `podcast-series?filters[PodcastSeriesStatus][$eq]=Current`, {
|
||||
headers: new Headers({
|
||||
'Authorization': serverRuntimeConfig.strapi_token,
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
})
|
||||
})
|
||||
const currpodcastdata = await currpodcastres.json()
|
||||
const currpodcastlist = currpodcastdata.data
|
||||
|
||||
const archpodcastres = await fetch(serverRuntimeConfig.base_path + `/api/podcasts/bystatus/0`)
|
||||
console.log(currpodcastlist)
|
||||
|
||||
const archpodcastres = await fetch(serverRuntimeConfig.base_path + `podcast-series?filters[PodcastSeriesStatus][$eq]=Archived`, {
|
||||
headers: new Headers({
|
||||
'Authorization': serverRuntimeConfig.strapi_token,
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
})
|
||||
})
|
||||
const archpodcastdata = await archpodcastres.json()
|
||||
const archpodcastlist = archpodcastdata.data
|
||||
|
||||
const episodedata = "hi there"
|
||||
|
||||
const pagedata = {'title': 'Angry Beanie - Current Podcast Projects'}
|
||||
|
||||
return {
|
||||
props: { sections : secdata, currpodcastdata, archpodcastdata, episodedata, pagedata, serverRuntimeConfig }, // will be passed to the page component as props
|
||||
props: { sections : secdata, currpodcastlist, archpodcastlist, episodedata, pagedata, serverRuntimeConfig }, // will be passed to the page component as props
|
||||
}
|
||||
}
|
||||
|
||||
const Podcasts = ({sections, currpodcastdata, archpodcastdata, episodedata, pagedata, serverRuntimeConfig}) => (
|
||||
const Podcasts = ({sections, currpodcastlist, archpodcastlist, episodedata, pagedata, serverRuntimeConfig}) => (
|
||||
<Layout sections={sections} episodedata={episodedata} pagedata={pagedata} serverRuntimeConfig>
|
||||
<h1>Podcasts</h1>
|
||||
<div className="page_body">Over the years I have made a number of podcasts.</div>
|
||||
<div className="row">
|
||||
<div className="col-sm-6">
|
||||
<h2>Current Podcasts</h2>
|
||||
{currpodcastdata.shows.map((podcast) => (
|
||||
<div><Image
|
||||
{currpodcastlist.map((podcast) => (
|
||||
<div>
|
||||
{/* <Image
|
||||
src={serverRuntimeConfig.base_path + "/" + podcast.logo.src}
|
||||
height={podcast.logo.height}
|
||||
width={podcast.logo.width}
|
||||
></Image><Link href={"/podcasts/shows/" + podcast.slug}>{podcast.title}</Link></div>
|
||||
></Image> */}
|
||||
<Link href={"/podcasts/shows/" + podcast.attributes.Slug}>{podcast.attributes.Title}</Link></div>
|
||||
))}
|
||||
</div>
|
||||
<div className="col-sm-6">
|
||||
<h2>Archived Podcasts</h2>
|
||||
{archpodcastdata.shows.map((podcast) => (
|
||||
<div><Image
|
||||
{archpodcastlist.map((podcast) => (
|
||||
<div>
|
||||
{/* <Image
|
||||
src={serverRuntimeConfig.base_path + "/" + podcast.logo.src}
|
||||
height={podcast.logo.height}
|
||||
width={podcast.logo.width}
|
||||
></Image><Link href={"/podcasts/shows/" + podcast.slug}>{podcast.title}</Link></div>
|
||||
></Image> */}
|
||||
<Link href={"/podcasts/shows/" + podcast.Slug}>{podcast.Title}</Link></div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,36 +0,0 @@
|
|||
import "../../components/main.js"
|
||||
import Layout from "../../components/main.js"
|
||||
import Link from 'next/link'
|
||||
import getConfig from 'next/config'
|
||||
import Image from "next/image"
|
||||
|
||||
export async function getServerSideProps(context) {
|
||||
const { serverRuntimeConfig, publicRuntimeConfig } = getConfig()
|
||||
const secres = await fetch(serverRuntimeConfig.base_path + `/api/sections`)
|
||||
const secdata = await secres.json()
|
||||
|
||||
const podcastres = await fetch(serverRuntimeConfig.base_path + `/api/podcasts/bystatus/0`)
|
||||
const podcastdata = await podcastres.json()
|
||||
|
||||
const pagedata = {'title': 'Angry Beanie - Archived Podcast Projects'}
|
||||
|
||||
return {
|
||||
props: { sections : secdata, podcastdata, pagedata }, // will be passed to the page component as props
|
||||
}
|
||||
}
|
||||
|
||||
const PodcastArchived = ({sections, podcastdata, pagedata}) => (
|
||||
<Layout sections={sections} pagedata={pagedata}>
|
||||
<h1>Archived Podcasts</h1>
|
||||
{podcastdata.shows.map((podcast) => (
|
||||
<h1><Image
|
||||
src="https://www.angrybeanie.com/uploads/media/default/0001/01/thumb_185_default_small.png"
|
||||
height=""
|
||||
width=""
|
||||
></Image><Link href={"/podcasts/shows/" + podcast.slug}>{podcast.title}</Link></h1>
|
||||
))}
|
||||
|
||||
</Layout>
|
||||
)
|
||||
|
||||
export default PodcastArchived
|
||||
|
|
@ -1,38 +0,0 @@
|
|||
import "../../components/main.js"
|
||||
import Layout from "../../components/main.js"
|
||||
import Link from 'next/link'
|
||||
import getConfig from 'next/config'
|
||||
import Image from 'next/image';
|
||||
|
||||
export async function getServerSideProps(context) {
|
||||
const { serverRuntimeConfig, publicRuntimeConfig } = getConfig()
|
||||
const secres = await fetch(serverRuntimeConfig.base_path + `/api/sections`)
|
||||
const secdata = await secres.json()
|
||||
|
||||
const podcastres = await fetch(serverRuntimeConfig.base_path + `/api/podcasts/bystatus/1`)
|
||||
const podcastdata = await podcastres.json()
|
||||
|
||||
const episodedata = "hi there"
|
||||
|
||||
const pagedata = {'title': 'Angry Beanie - Current Podcast Projects'}
|
||||
|
||||
return {
|
||||
props: { sections : secdata, podcastdata, episodedata, pagedata }, // will be passed to the page component as props
|
||||
}
|
||||
}
|
||||
|
||||
const PodcastCurrent = ({sections, podcastdata, episodedata, pagedata}) => (
|
||||
<Layout sections={sections} episodedata={episodedata} pagedata={pagedata}>
|
||||
<h1>Current Podcasts</h1>
|
||||
{podcastdata.shows.map((podcast) => (
|
||||
<h1><Image
|
||||
src={"https://www.angrybeanie.com/uploads/media/default/0001/01/thumb_185_default_small.png"}
|
||||
height=""
|
||||
width=""
|
||||
></Image><Link href={"/podcasts/shows/" + podcast.slug}>{podcast.title}</Link></h1>
|
||||
))}
|
||||
|
||||
</Layout>
|
||||
)
|
||||
|
||||
export default PodcastCurrent
|
||||
|
|
@ -11,28 +11,39 @@ export async function getServerSideProps(context) {
|
|||
const { serverRuntimeConfig, publicRuntimeConfig } = getConfig()
|
||||
const slug = context.params.episode
|
||||
|
||||
console.log(serverRuntimeConfig.base_path)
|
||||
|
||||
const secres = await fetch(serverRuntimeConfig.base_path + '/api/sections')
|
||||
const secdata = await secres.json()
|
||||
|
||||
const epres = await fetch(serverRuntimeConfig.base_path + "/api/podcast/episode/"+slug[1])
|
||||
const epres = await fetch(serverRuntimeConfig.base_path + 'podcast-episodes?filters[Slug][$eq]='+slug[1]+'&populate=*', {
|
||||
headers: new Headers({
|
||||
'Authorization': 'Bearer 77df3f9be0a33ee3e91e4314e99fe649348fe15e66348fa53cc335e936345661bea7eb3c826475bc8605037d9753e334061f579aa864a5c5a7436dc3b6853ee4712c822b462156d445cebe08b3e298967829ceccb4c4aa7c61c674527ddf66514a9879b36b15732fc4f505945fbe9e23e65c0525fce834b3858936ab2ab671b7',
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
})
|
||||
})
|
||||
const epdata = await epres.json()
|
||||
const episode = epdata.data[0]
|
||||
console.log(epdata.data[0].attributes.Audio.data.attributes)
|
||||
|
||||
const sepres = await fetch(serverRuntimeConfig.base_path + "/api/podcasts/episodes/"+epdata.episode_show+"/0/5")
|
||||
const sepres = await fetch(serverRuntimeConfig.base_path + 'podcast-episodes?filters[podcast_sery][slug][$eq]='+slug[0], {
|
||||
headers: new Headers({
|
||||
'Authorization': 'Bearer 77df3f9be0a33ee3e91e4314e99fe649348fe15e66348fa53cc335e936345661bea7eb3c826475bc8605037d9753e334061f579aa864a5c5a7436dc3b6853ee4712c822b462156d445cebe08b3e298967829ceccb4c4aa7c61c674527ddf66514a9879b36b15732fc4f505945fbe9e23e65c0525fce834b3858936ab2ab671b7',
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
})
|
||||
})
|
||||
const sepdata = await sepres.json()
|
||||
const sepisodes = sepdata.data
|
||||
|
||||
const audiodata = {
|
||||
audio_path: serverRuntimeConfig.audio_path,
|
||||
audio_mp3: epdata.audio_mp3
|
||||
audio_mp3: epdata.data[0].attributes.Audio.data.attributes
|
||||
}
|
||||
|
||||
const pagedata = {
|
||||
'title': 'Angry Beanie - ' + epdata.episode_title
|
||||
'title': 'Angry Beanie - ' + episode.attributes.Title
|
||||
}
|
||||
|
||||
return {
|
||||
props: { pagedata, sections: secdata, episode: epdata, audiodata, sepdata }
|
||||
props: { pagedata, sections: secdata, episode, audiodata, sepisodes }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -42,18 +53,18 @@ const Episode = ( props ) => {
|
|||
sections={props.sections}
|
||||
episode={props.episode}
|
||||
audiodata={props.audiodata}
|
||||
sepdata={props.sepdata}>
|
||||
<h1>{props.episode.episode_title}</h1>
|
||||
sepdata={props.sepisodes}>
|
||||
<h1>{props.episode.attributes.Title}</h1>
|
||||
<div className="main_content col-md-9 col-sm-12">
|
||||
<AudioPlayer
|
||||
src={props.audiodata.audio_path + props.audiodata.audio_mp3}
|
||||
src={props.audiodata.audio_path + props.audiodata.audio_mp3.url}
|
||||
onPlay={e => gtag.event({action: "play", category:"audio", label: "audio started", value: props.audiodata.audio_mp3})}
|
||||
onPause={e => gtag.event({action: "pause", category:"audio", label: "audio paused", value: props.audiodata.audio_mp3})}
|
||||
onEnded={e => gtag.event({action: "end", category:"audio", label: "audio ended", value: props.audiodata.audio_mp3})}
|
||||
/>
|
||||
<div className="article_body" dangerouslySetInnerHTML={{ __html: props.episode.episode_body}} />
|
||||
</div>
|
||||
<EpisodeSideBar epdata={props.sepdata}></EpisodeSideBar>
|
||||
{/* <EpisodeSideBar epdata={props.sepisodes}></EpisodeSideBar> */}
|
||||
</Layout>)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -6,8 +6,13 @@ import EpisodePager from "../../../components/episodepager.js"
|
|||
export async function getServerSideProps(context) {
|
||||
const { serverRuntimeConfig, publicRuntimeConfig } = getConfig()
|
||||
const slug = context.params.podcast
|
||||
const url = serverRuntimeConfig.base_path + '/api/podcasts/series/' + slug
|
||||
const showres = await fetch(url)
|
||||
const url = serverRuntimeConfig.base_path + '/api/podcast-serie?filters[Slug][$eq]=' + slug
|
||||
const showres = await fetch(url, {
|
||||
headers: new Headers({
|
||||
'Authorization': 'Bearer 77df3f9be0a33ee3e91e4314e99fe649348fe15e66348fa53cc335e936345661bea7eb3c826475bc8605037d9753e334061f579aa864a5c5a7436dc3b6853ee4712c822b462156d445cebe08b3e298967829ceccb4c4aa7c61c674527ddf66514a9879b36b15732fc4f505945fbe9e23e65c0525fce834b3858936ab2ab671b7',
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
})
|
||||
})
|
||||
const showdata = await showres.json()
|
||||
|
||||
if(context.query.page == null || context.query.page == '0') {
|
||||
|
|
@ -15,8 +20,14 @@ export async function getServerSideProps(context) {
|
|||
} else {
|
||||
var page = Number(context.query.page) - 1
|
||||
}
|
||||
const epres = await fetch(serverRuntimeConfig.base_path + "/api/podcasts/episodes/"+slug+"/"+page+"/10")
|
||||
const epres = await fetch(serverRuntimeConfig.base_path + "podcast-episodes?filters[podcast_sery][slug][$eq]="+slug+"&populate=*", {
|
||||
headers: new Headers({
|
||||
'Authorization': 'Bearer 77df3f9be0a33ee3e91e4314e99fe649348fe15e66348fa53cc335e936345661bea7eb3c826475bc8605037d9753e334061f579aa864a5c5a7436dc3b6853ee4712c822b462156d445cebe08b3e298967829ceccb4c4aa7c61c674527ddf66514a9879b36b15732fc4f505945fbe9e23e65c0525fce834b3858936ab2ab671b7',
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
})
|
||||
})
|
||||
const epdata = await epres.json()
|
||||
console.log(epdata.data)
|
||||
|
||||
const secres = await fetch(serverRuntimeConfig.base_path + '/api/sections')
|
||||
const secdata = await secres.json()
|
||||
|
|
@ -31,7 +42,7 @@ export async function getServerSideProps(context) {
|
|||
const Podcast = (props) => (
|
||||
<Layout pagedata={props.pagedata} sections={props.sections} showdata={props.showdata}>
|
||||
<h1>{props.showdata.title}</h1>
|
||||
<EpisodePager episodedata={props.epdata} config={props.serverRuntimeConfig} showdata={props.showdata}/>
|
||||
<EpisodePager episodedata={props.epdata.data} config={props.serverRuntimeConfig} showdata={props.showdata}/>
|
||||
</Layout>
|
||||
)
|
||||
|
||||
|
|
|
|||
368
public/feeds/Angry-Beanie-atom.xml
Executable file
368
public/feeds/Angry-Beanie-atom.xml
Executable file
|
|
@ -0,0 +1,368 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<feed xmlns="http://www.w3.org/2005/Atom">
|
||||
<id>https://www.angrybeanie.com</id>
|
||||
<title>Angry Beanie</title>
|
||||
<updated>2022-06-12T02:41:56.148Z</updated>
|
||||
<generator>Feed for Node.js</generator>
|
||||
<author>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</author>
|
||||
<link rel="alternate" href="https://www.angrybeanie.com"/>
|
||||
<link rel="self" href="https://www.angrybeanie.com/feeds/Angry-Beanie-atom.xml"/>
|
||||
<subtitle>A place for all my thoughts and projects</subtitle>
|
||||
<logo>https://www.angrybeanie.com/public/images/logo.svg</logo>
|
||||
<icon>https://www.angrybeanie.com/public/images/favicon.png</icon>
|
||||
<rights>All rights reserved 2022, James Purser</rights>
|
||||
<entry>
|
||||
<title type="html"><![CDATA[Tech and Disability test]]></title>
|
||||
<id>https://www.angrybeanie.com/news/tech-and-disability-test</id>
|
||||
<link href="https://www.angrybeanie.com/news/tech-and-disability-test"/>
|
||||
<updated>2022-06-12T02:22:08.447Z</updated>
|
||||
<summary type="html"><![CDATA[<p>sdfasdfasfd</p>]]></summary>
|
||||
<content type="html"><![CDATA[<p>sdfasdfasfd</p>]]></content>
|
||||
<author>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</author>
|
||||
<contributor>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</contributor>
|
||||
</entry>
|
||||
<entry>
|
||||
<title type="html"><![CDATA[A return to Art?]]></title>
|
||||
<id>https://www.angrybeanie.com/news/A-return-to-Art-</id>
|
||||
<link href="https://www.angrybeanie.com/news/A-return-to-Art-"/>
|
||||
<updated>2020-12-04T15:41:10.000Z</updated>
|
||||
<summary type="html"><![CDATA[<p>Three blog posts in one year! This is getting to be a regular thing!</p>]]></summary>
|
||||
<content type="html"><![CDATA[<p>Three blog posts in one year! This is getting to be a regular thing!</p>]]></content>
|
||||
<author>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</author>
|
||||
<contributor>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</contributor>
|
||||
</entry>
|
||||
<entry>
|
||||
<title type="html"><![CDATA[A status update]]></title>
|
||||
<id>https://www.angrybeanie.com/news/A-status-update</id>
|
||||
<link href="https://www.angrybeanie.com/news/A-status-update"/>
|
||||
<updated>2020-02-09T18:59:36.000Z</updated>
|
||||
<summary type="html"><![CDATA[<p>Okay so here's what's been happening for the last four months</p>]]></summary>
|
||||
<content type="html"><![CDATA[<p>Okay so here's what's been happening for the last four months</p>]]></content>
|
||||
<author>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</author>
|
||||
<contributor>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</contributor>
|
||||
</entry>
|
||||
<entry>
|
||||
<title type="html"><![CDATA[A trip to the zoo]]></title>
|
||||
<id>https://www.angrybeanie.com/news/A-trip-to-the-zoo</id>
|
||||
<link href="https://www.angrybeanie.com/news/A-trip-to-the-zoo"/>
|
||||
<updated>2020-01-19T22:29:27.000Z</updated>
|
||||
<summary type="html"><![CDATA[<p>In which I visit Sydney Zoo (the one near Rooty Hill)</p>]]></summary>
|
||||
<content type="html"><![CDATA[<p>In which I visit Sydney Zoo (the one near Rooty Hill)</p>]]></content>
|
||||
<author>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</author>
|
||||
<contributor>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</contributor>
|
||||
</entry>
|
||||
<entry>
|
||||
<title type="html"><![CDATA[So, that happened]]></title>
|
||||
<id>https://www.angrybeanie.com/news/So-that-happened</id>
|
||||
<link href="https://www.angrybeanie.com/news/So-that-happened"/>
|
||||
<updated>2019-07-13T23:36:40.000Z</updated>
|
||||
<summary type="html"><![CDATA[<p>In which i take a weeks leave and return to the office four months later</p>]]></summary>
|
||||
<content type="html"><![CDATA[<p>In which i take a weeks leave and return to the office four months later</p>]]></content>
|
||||
<author>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</author>
|
||||
<contributor>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</contributor>
|
||||
</entry>
|
||||
<entry>
|
||||
<title type="html"><![CDATA[2019 Projects]]></title>
|
||||
<id>https://www.angrybeanie.com/news/2019-Projects</id>
|
||||
<link href="https://www.angrybeanie.com/news/2019-Projects"/>
|
||||
<updated>2019-01-05T16:03:06.000Z</updated>
|
||||
<summary type="html"><![CDATA[<p>Women In STEMM, Interesting People, Exploring the World, How To Media and more</p>]]></summary>
|
||||
<content type="html"><![CDATA[<p>Women In STEMM, Interesting People, Exploring the World, How To Media and more</p>]]></content>
|
||||
<author>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</author>
|
||||
<contributor>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</contributor>
|
||||
</entry>
|
||||
<entry>
|
||||
<title type="html"><![CDATA[That was 2018, let us never speak of it again]]></title>
|
||||
<id>https://www.angrybeanie.com/news/That-was-2018-let-us-never-speak-of-it-again</id>
|
||||
<link href="https://www.angrybeanie.com/news/That-was-2018-let-us-never-speak-of-it-again"/>
|
||||
<updated>2018-12-28T15:48:13.000Z</updated>
|
||||
<summary type="html"><![CDATA[<p>2018 was basically a complete wash when it came to Angry Beanie foo. I'm planning/hoping for 2019 to be better.</p>]]></summary>
|
||||
<content type="html"><![CDATA[<p>2018 was basically a complete wash when it came to Angry Beanie foo. I'm planning/hoping for 2019 to be better.</p>]]></content>
|
||||
<author>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</author>
|
||||
<contributor>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</contributor>
|
||||
</entry>
|
||||
<entry>
|
||||
<title type="html"><![CDATA[A rose by any other name]]></title>
|
||||
<id>https://www.angrybeanie.com/news/A-rose-by-any-other-name</id>
|
||||
<link href="https://www.angrybeanie.com/news/A-rose-by-any-other-name"/>
|
||||
<updated>2018-11-03T13:56:03.000Z</updated>
|
||||
<summary type="html"><![CDATA[<p>Is radio actually radio if there's no radio waves involved?</p>]]></summary>
|
||||
<content type="html"><![CDATA[<p>Is radio actually radio if there's no radio waves involved?</p>]]></content>
|
||||
<author>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</author>
|
||||
<contributor>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</contributor>
|
||||
</entry>
|
||||
<entry>
|
||||
<title type="html"><![CDATA[Snap happy]]></title>
|
||||
<id>https://www.angrybeanie.com/news/Snap-happy</id>
|
||||
<link href="https://www.angrybeanie.com/news/Snap-happy"/>
|
||||
<updated>2018-10-13T14:08:23.000Z</updated>
|
||||
<summary type="html"><![CDATA[<p>A picture tells a thousand words. A thousand pictures tells a life time.</p>]]></summary>
|
||||
<content type="html"><![CDATA[<p>A picture tells a thousand words. A thousand pictures tells a life time.</p>]]></content>
|
||||
<author>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</author>
|
||||
<contributor>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</contributor>
|
||||
</entry>
|
||||
<entry>
|
||||
<title type="html"><![CDATA[Angry Beanie Weekly]]></title>
|
||||
<id>https://www.angrybeanie.com/news/Angry-Beanie-Weekly</id>
|
||||
<link href="https://www.angrybeanie.com/news/Angry-Beanie-Weekly"/>
|
||||
<updated>2018-08-25T19:36:31.000Z</updated>
|
||||
<summary type="html"><![CDATA[<p>Because announcing it means I have to do it!</p>]]></summary>
|
||||
<content type="html"><![CDATA[<p>Because announcing it means I have to do it!</p>]]></content>
|
||||
<author>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</author>
|
||||
<contributor>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</contributor>
|
||||
</entry>
|
||||
<entry>
|
||||
<title type="html"><![CDATA[Piwiking the Mastodon]]></title>
|
||||
<id>https://www.angrybeanie.com/news/Piwiking-the-Mastodon</id>
|
||||
<link href="https://www.angrybeanie.com/news/Piwiking-the-Mastodon"/>
|
||||
<updated>2018-08-18T18:03:10.000Z</updated>
|
||||
<summary type="html"><![CDATA[<p>Got inspired and installed a couple of FOSS projects this weekend. Mastodon and Piwik/Mamoto</p>]]></summary>
|
||||
<content type="html"><![CDATA[<p>Got inspired and installed a couple of FOSS projects this weekend. Mastodon and Piwik/Mamoto</p>]]></content>
|
||||
<author>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</author>
|
||||
<contributor>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</contributor>
|
||||
</entry>
|
||||
<entry>
|
||||
<title type="html"><![CDATA[A quick site update]]></title>
|
||||
<id>https://www.angrybeanie.com/news/A-quick-site-update</id>
|
||||
<link href="https://www.angrybeanie.com/news/A-quick-site-update"/>
|
||||
<updated>2018-08-02T19:17:59.000Z</updated>
|
||||
<summary type="html"><![CDATA[<p>Added AMP support to the blog. Just for myself really.</p>]]></summary>
|
||||
<content type="html"><![CDATA[<p>Added AMP support to the blog. Just for myself really.</p>]]></content>
|
||||
<author>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</author>
|
||||
<contributor>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</contributor>
|
||||
</entry>
|
||||
<entry>
|
||||
<title type="html"><![CDATA[Sooo, blogging? Oh and actual podcast ideas]]></title>
|
||||
<id>https://www.angrybeanie.com/news/Sooo-blogging-Oh-and-actual-podcast-ideas</id>
|
||||
<link href="https://www.angrybeanie.com/news/Sooo-blogging-Oh-and-actual-podcast-ideas"/>
|
||||
<updated>2018-07-20T17:51:32.000Z</updated>
|
||||
<summary type="html"><![CDATA[<p>Yeah of course it didn't happen</p>]]></summary>
|
||||
<content type="html"><![CDATA[<p>Yeah of course it didn't happen</p>]]></content>
|
||||
<author>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</author>
|
||||
<contributor>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</contributor>
|
||||
</entry>
|
||||
<entry>
|
||||
<title type="html"><![CDATA[A return to blogging]]></title>
|
||||
<id>https://www.angrybeanie.com/news/A-return-to-blogging</id>
|
||||
<link href="https://www.angrybeanie.com/news/A-return-to-blogging"/>
|
||||
<updated>2018-04-27T19:05:31.000Z</updated>
|
||||
<summary type="html"><![CDATA[<p>Just when you thought it was safe</p>]]></summary>
|
||||
<content type="html"><![CDATA[<p>Just when you thought it was safe</p>]]></content>
|
||||
<author>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</author>
|
||||
<contributor>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</contributor>
|
||||
</entry>
|
||||
<entry>
|
||||
<title type="html"><![CDATA[Women In STEMM Success!]]></title>
|
||||
<id>https://www.angrybeanie.com/news/Women-In-STEMM-Success-</id>
|
||||
<link href="https://www.angrybeanie.com/news/Women-In-STEMM-Success-"/>
|
||||
<updated>2018-02-09T20:05:52.000Z</updated>
|
||||
<summary type="html"><![CDATA[<p>Yes, that's right!</p>
|
||||
|
||||
<p>Success!</p>
|
||||
|
||||
<p>Last week I finally did an interview for an episode of Women In STEMM.</p>]]></summary>
|
||||
<content type="html"><![CDATA[<p>Yes, that's right!</p>
|
||||
|
||||
<p>Success!</p>
|
||||
|
||||
<p>Last week I finally did an interview for an episode of Women In STEMM.</p>]]></content>
|
||||
<author>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</author>
|
||||
<contributor>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</contributor>
|
||||
</entry>
|
||||
<entry>
|
||||
<title type="html"><![CDATA[First stream, and it was alright]]></title>
|
||||
<id>https://www.angrybeanie.com/news/First-stream-and-it-was-alright</id>
|
||||
<link href="https://www.angrybeanie.com/news/First-stream-and-it-was-alright"/>
|
||||
<updated>2018-01-29T23:25:02.000Z</updated>
|
||||
<summary type="html"><![CDATA[<p>The first Angry Beanie Game Day stream happened on Sunday.</p>]]></summary>
|
||||
<content type="html"><![CDATA[<p>The first Angry Beanie Game Day stream happened on Sunday.</p>]]></content>
|
||||
<author>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</author>
|
||||
<contributor>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</contributor>
|
||||
</entry>
|
||||
<entry>
|
||||
<title type="html"><![CDATA[2018 - The Year Ahead]]></title>
|
||||
<id>https://www.angrybeanie.com/news/2018-The-Year-Ahead</id>
|
||||
<link href="https://www.angrybeanie.com/news/2018-The-Year-Ahead"/>
|
||||
<updated>2018-01-01T10:48:20.000Z</updated>
|
||||
<summary type="html"><![CDATA[<p>What will the new year bring for the Angry Beanie?</p>]]></summary>
|
||||
<content type="html"><![CDATA[<p>What will the new year bring for the Angry Beanie?</p>]]></content>
|
||||
<author>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</author>
|
||||
<contributor>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</contributor>
|
||||
</entry>
|
||||
<entry>
|
||||
<title type="html"><![CDATA[Getting over that hump]]></title>
|
||||
<id>https://www.angrybeanie.com/news/Getting-over-that-hump</id>
|
||||
<link href="https://www.angrybeanie.com/news/Getting-over-that-hump"/>
|
||||
<updated>2017-12-02T13:18:19.000Z</updated>
|
||||
<summary type="html"><![CDATA[<p>One of my biggest problems isn't sourcing ideas, it's convincing myself that I can do them justice.</p>]]></summary>
|
||||
<content type="html"><![CDATA[<p>One of my biggest problems isn't sourcing ideas, it's convincing myself that I can do them justice.</p>]]></content>
|
||||
<author>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</author>
|
||||
<contributor>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</contributor>
|
||||
</entry>
|
||||
<entry>
|
||||
<title type="html"><![CDATA[So, yet another new site?]]></title>
|
||||
<id>https://www.angrybeanie.com/news/So-yet-another-new-site-</id>
|
||||
<link href="https://www.angrybeanie.com/news/So-yet-another-new-site-"/>
|
||||
<updated>2017-10-28T21:54:29.000Z</updated>
|
||||
<summary type="html"><![CDATA[<p>Well yes. Isn't it, minimalist?</p>]]></summary>
|
||||
<content type="html"><![CDATA[<p>Well yes. Isn't it, minimalist?</p>]]></content>
|
||||
<author>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</author>
|
||||
<contributor>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</contributor>
|
||||
</entry>
|
||||
</feed>
|
||||
242
public/feeds/Angry-Beanie-feed.json
Executable file
242
public/feeds/Angry-Beanie-feed.json
Executable file
|
|
@ -0,0 +1,242 @@
|
|||
{
|
||||
"version": "https://jsonfeed.org/version/1",
|
||||
"title": "Angry Beanie",
|
||||
"home_page_url": "https://www.angrybeanie.com",
|
||||
"feed_url": "https://www.angrybeanie.com/feeds/Angry-Beanie-feed.json",
|
||||
"description": "A place for all my thoughts and projects",
|
||||
"icon": "https://www.angrybeanie.com/public/images/logo.svg",
|
||||
"author": {
|
||||
"name": "James Purser",
|
||||
"url": "https://twitter.com/purserj"
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"id": "https://www.angrybeanie.com/news/tech-and-disability-test",
|
||||
"content_html": "<p>sdfasdfasfd</p>",
|
||||
"url": "https://www.angrybeanie.com/news/tech-and-disability-test",
|
||||
"title": "Tech and Disability test",
|
||||
"summary": "<p>sdfasdfasfd</p>",
|
||||
"date_modified": "2022-06-12T02:22:08.447Z",
|
||||
"author": {
|
||||
"name": "James Purser",
|
||||
"url": "https://twitter.com/purserj"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "https://www.angrybeanie.com/news/A-return-to-Art-",
|
||||
"content_html": "<p>Three blog posts in one year! This is getting to be a regular thing!</p>",
|
||||
"url": "https://www.angrybeanie.com/news/A-return-to-Art-",
|
||||
"title": "A return to Art?",
|
||||
"summary": "<p>Three blog posts in one year! This is getting to be a regular thing!</p>",
|
||||
"date_modified": "2020-12-04T15:41:10.000Z",
|
||||
"author": {
|
||||
"name": "James Purser",
|
||||
"url": "https://twitter.com/purserj"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "https://www.angrybeanie.com/news/A-status-update",
|
||||
"content_html": "<p>Okay so here's what's been happening for the last four months</p>",
|
||||
"url": "https://www.angrybeanie.com/news/A-status-update",
|
||||
"title": "A status update",
|
||||
"summary": "<p>Okay so here's what's been happening for the last four months</p>",
|
||||
"date_modified": "2020-02-09T18:59:36.000Z",
|
||||
"author": {
|
||||
"name": "James Purser",
|
||||
"url": "https://twitter.com/purserj"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "https://www.angrybeanie.com/news/A-trip-to-the-zoo",
|
||||
"content_html": "<p>In which I visit Sydney Zoo (the one near Rooty Hill)</p>",
|
||||
"url": "https://www.angrybeanie.com/news/A-trip-to-the-zoo",
|
||||
"title": "A trip to the zoo",
|
||||
"summary": "<p>In which I visit Sydney Zoo (the one near Rooty Hill)</p>",
|
||||
"date_modified": "2020-01-19T22:29:27.000Z",
|
||||
"author": {
|
||||
"name": "James Purser",
|
||||
"url": "https://twitter.com/purserj"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "https://www.angrybeanie.com/news/So-that-happened",
|
||||
"content_html": "<p>In which i take a weeks leave and return to the office four months later</p>",
|
||||
"url": "https://www.angrybeanie.com/news/So-that-happened",
|
||||
"title": "So, that happened",
|
||||
"summary": "<p>In which i take a weeks leave and return to the office four months later</p>",
|
||||
"date_modified": "2019-07-13T23:36:40.000Z",
|
||||
"author": {
|
||||
"name": "James Purser",
|
||||
"url": "https://twitter.com/purserj"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "https://www.angrybeanie.com/news/2019-Projects",
|
||||
"content_html": "<p>Women In STEMM, Interesting People, Exploring the World, How To Media and more</p>",
|
||||
"url": "https://www.angrybeanie.com/news/2019-Projects",
|
||||
"title": "2019 Projects",
|
||||
"summary": "<p>Women In STEMM, Interesting People, Exploring the World, How To Media and more</p>",
|
||||
"date_modified": "2019-01-05T16:03:06.000Z",
|
||||
"author": {
|
||||
"name": "James Purser",
|
||||
"url": "https://twitter.com/purserj"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "https://www.angrybeanie.com/news/That-was-2018-let-us-never-speak-of-it-again",
|
||||
"content_html": "<p>2018 was basically a complete wash when it came to Angry Beanie foo. I'm planning/hoping for 2019 to be better.</p>",
|
||||
"url": "https://www.angrybeanie.com/news/That-was-2018-let-us-never-speak-of-it-again",
|
||||
"title": "That was 2018, let us never speak of it again",
|
||||
"summary": "<p>2018 was basically a complete wash when it came to Angry Beanie foo. I'm planning/hoping for 2019 to be better.</p>",
|
||||
"date_modified": "2018-12-28T15:48:13.000Z",
|
||||
"author": {
|
||||
"name": "James Purser",
|
||||
"url": "https://twitter.com/purserj"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "https://www.angrybeanie.com/news/A-rose-by-any-other-name",
|
||||
"content_html": "<p>Is radio actually radio if there's no radio waves involved?</p>",
|
||||
"url": "https://www.angrybeanie.com/news/A-rose-by-any-other-name",
|
||||
"title": "A rose by any other name",
|
||||
"summary": "<p>Is radio actually radio if there's no radio waves involved?</p>",
|
||||
"date_modified": "2018-11-03T13:56:03.000Z",
|
||||
"author": {
|
||||
"name": "James Purser",
|
||||
"url": "https://twitter.com/purserj"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "https://www.angrybeanie.com/news/Snap-happy",
|
||||
"content_html": "<p>A picture tells a thousand words. A thousand pictures tells a life time.</p>",
|
||||
"url": "https://www.angrybeanie.com/news/Snap-happy",
|
||||
"title": "Snap happy",
|
||||
"summary": "<p>A picture tells a thousand words. A thousand pictures tells a life time.</p>",
|
||||
"date_modified": "2018-10-13T14:08:23.000Z",
|
||||
"author": {
|
||||
"name": "James Purser",
|
||||
"url": "https://twitter.com/purserj"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "https://www.angrybeanie.com/news/Angry-Beanie-Weekly",
|
||||
"content_html": "<p>Because announcing it means I have to do it!</p>",
|
||||
"url": "https://www.angrybeanie.com/news/Angry-Beanie-Weekly",
|
||||
"title": "Angry Beanie Weekly",
|
||||
"summary": "<p>Because announcing it means I have to do it!</p>",
|
||||
"date_modified": "2018-08-25T19:36:31.000Z",
|
||||
"author": {
|
||||
"name": "James Purser",
|
||||
"url": "https://twitter.com/purserj"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "https://www.angrybeanie.com/news/Piwiking-the-Mastodon",
|
||||
"content_html": "<p>Got inspired and installed a couple of FOSS projects this weekend. Mastodon and Piwik/Mamoto</p>",
|
||||
"url": "https://www.angrybeanie.com/news/Piwiking-the-Mastodon",
|
||||
"title": "Piwiking the Mastodon",
|
||||
"summary": "<p>Got inspired and installed a couple of FOSS projects this weekend. Mastodon and Piwik/Mamoto</p>",
|
||||
"date_modified": "2018-08-18T18:03:10.000Z",
|
||||
"author": {
|
||||
"name": "James Purser",
|
||||
"url": "https://twitter.com/purserj"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "https://www.angrybeanie.com/news/A-quick-site-update",
|
||||
"content_html": "<p>Added AMP support to the blog. Just for myself really.</p>",
|
||||
"url": "https://www.angrybeanie.com/news/A-quick-site-update",
|
||||
"title": "A quick site update",
|
||||
"summary": "<p>Added AMP support to the blog. Just for myself really.</p>",
|
||||
"date_modified": "2018-08-02T19:17:59.000Z",
|
||||
"author": {
|
||||
"name": "James Purser",
|
||||
"url": "https://twitter.com/purserj"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "https://www.angrybeanie.com/news/Sooo-blogging-Oh-and-actual-podcast-ideas",
|
||||
"content_html": "<p>Yeah of course it didn't happen</p>",
|
||||
"url": "https://www.angrybeanie.com/news/Sooo-blogging-Oh-and-actual-podcast-ideas",
|
||||
"title": "Sooo, blogging? Oh and actual podcast ideas",
|
||||
"summary": "<p>Yeah of course it didn't happen</p>",
|
||||
"date_modified": "2018-07-20T17:51:32.000Z",
|
||||
"author": {
|
||||
"name": "James Purser",
|
||||
"url": "https://twitter.com/purserj"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "https://www.angrybeanie.com/news/A-return-to-blogging",
|
||||
"content_html": "<p>Just when you thought it was safe</p>",
|
||||
"url": "https://www.angrybeanie.com/news/A-return-to-blogging",
|
||||
"title": "A return to blogging",
|
||||
"summary": "<p>Just when you thought it was safe</p>",
|
||||
"date_modified": "2018-04-27T19:05:31.000Z",
|
||||
"author": {
|
||||
"name": "James Purser",
|
||||
"url": "https://twitter.com/purserj"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "https://www.angrybeanie.com/news/Women-In-STEMM-Success-",
|
||||
"content_html": "<p>Yes, that's right!</p>\r\n\r\n<p>Success!</p>\r\n\r\n<p>Last week I finally did an interview for an episode of Women In STEMM.</p>",
|
||||
"url": "https://www.angrybeanie.com/news/Women-In-STEMM-Success-",
|
||||
"title": "Women In STEMM Success!",
|
||||
"summary": "<p>Yes, that's right!</p>\r\n\r\n<p>Success!</p>\r\n\r\n<p>Last week I finally did an interview for an episode of Women In STEMM.</p>",
|
||||
"date_modified": "2018-02-09T20:05:52.000Z",
|
||||
"author": {
|
||||
"name": "James Purser",
|
||||
"url": "https://twitter.com/purserj"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "https://www.angrybeanie.com/news/First-stream-and-it-was-alright",
|
||||
"content_html": "<p>The first Angry Beanie Game Day stream happened on Sunday.</p>",
|
||||
"url": "https://www.angrybeanie.com/news/First-stream-and-it-was-alright",
|
||||
"title": "First stream, and it was alright",
|
||||
"summary": "<p>The first Angry Beanie Game Day stream happened on Sunday.</p>",
|
||||
"date_modified": "2018-01-29T23:25:02.000Z",
|
||||
"author": {
|
||||
"name": "James Purser",
|
||||
"url": "https://twitter.com/purserj"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "https://www.angrybeanie.com/news/2018-The-Year-Ahead",
|
||||
"content_html": "<p>What will the new year bring for the Angry Beanie?</p>",
|
||||
"url": "https://www.angrybeanie.com/news/2018-The-Year-Ahead",
|
||||
"title": "2018 - The Year Ahead",
|
||||
"summary": "<p>What will the new year bring for the Angry Beanie?</p>",
|
||||
"date_modified": "2018-01-01T10:48:20.000Z",
|
||||
"author": {
|
||||
"name": "James Purser",
|
||||
"url": "https://twitter.com/purserj"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "https://www.angrybeanie.com/news/Getting-over-that-hump",
|
||||
"content_html": "<p>One of my biggest problems isn't sourcing ideas, it's convincing myself that I can do them justice.</p>",
|
||||
"url": "https://www.angrybeanie.com/news/Getting-over-that-hump",
|
||||
"title": "Getting over that hump",
|
||||
"summary": "<p>One of my biggest problems isn't sourcing ideas, it's convincing myself that I can do them justice.</p>",
|
||||
"date_modified": "2017-12-02T13:18:19.000Z",
|
||||
"author": {
|
||||
"name": "James Purser",
|
||||
"url": "https://twitter.com/purserj"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "https://www.angrybeanie.com/news/So-yet-another-new-site-",
|
||||
"content_html": "<p>Well yes. Isn't it, minimalist?</p>",
|
||||
"url": "https://www.angrybeanie.com/news/So-yet-another-new-site-",
|
||||
"title": "So, yet another new site?",
|
||||
"summary": "<p>Well yes. Isn't it, minimalist?</p>",
|
||||
"date_modified": "2017-10-28T21:54:29.000Z",
|
||||
"author": {
|
||||
"name": "James Purser",
|
||||
"url": "https://twitter.com/purserj"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
196
public/feeds/Angry-Beanie-feed.xml
Executable file
196
public/feeds/Angry-Beanie-feed.xml
Executable file
|
|
@ -0,0 +1,196 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
|
||||
<channel>
|
||||
<title>Angry Beanie</title>
|
||||
<link>https://www.angrybeanie.com</link>
|
||||
<description>A place for all my thoughts and projects</description>
|
||||
<lastBuildDate>Sun, 12 Jun 2022 02:41:56 GMT</lastBuildDate>
|
||||
<docs>https://validator.w3.org/feed/docs/rss2.html</docs>
|
||||
<generator>Feed for Node.js</generator>
|
||||
<image>
|
||||
<title>Angry Beanie</title>
|
||||
<url>https://www.angrybeanie.com/public/images/logo.svg</url>
|
||||
<link>https://www.angrybeanie.com</link>
|
||||
</image>
|
||||
<copyright>All rights reserved 2022, James Purser</copyright>
|
||||
<item>
|
||||
<title><![CDATA[Tech and Disability test]]></title>
|
||||
<link>https://www.angrybeanie.com/news/tech-and-disability-test</link>
|
||||
<guid>https://www.angrybeanie.com/news/tech-and-disability-test</guid>
|
||||
<pubDate>Sun, 12 Jun 2022 02:22:08 GMT</pubDate>
|
||||
<description><![CDATA[<p>sdfasdfasfd</p>]]></description>
|
||||
<content:encoded><![CDATA[<p>sdfasdfasfd</p>]]></content:encoded>
|
||||
<author>james@angrybeanie.com (James Purser)</author>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[A return to Art?]]></title>
|
||||
<link>https://www.angrybeanie.com/news/A-return-to-Art-</link>
|
||||
<guid>https://www.angrybeanie.com/news/A-return-to-Art-</guid>
|
||||
<pubDate>Fri, 04 Dec 2020 15:41:10 GMT</pubDate>
|
||||
<description><![CDATA[<p>Three blog posts in one year! This is getting to be a regular thing!</p>]]></description>
|
||||
<content:encoded><![CDATA[<p>Three blog posts in one year! This is getting to be a regular thing!</p>]]></content:encoded>
|
||||
<author>james@angrybeanie.com (James Purser)</author>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[A status update]]></title>
|
||||
<link>https://www.angrybeanie.com/news/A-status-update</link>
|
||||
<guid>https://www.angrybeanie.com/news/A-status-update</guid>
|
||||
<pubDate>Sun, 09 Feb 2020 18:59:36 GMT</pubDate>
|
||||
<description><![CDATA[<p>Okay so here's what's been happening for the last four months</p>]]></description>
|
||||
<content:encoded><![CDATA[<p>Okay so here's what's been happening for the last four months</p>]]></content:encoded>
|
||||
<author>james@angrybeanie.com (James Purser)</author>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[A trip to the zoo]]></title>
|
||||
<link>https://www.angrybeanie.com/news/A-trip-to-the-zoo</link>
|
||||
<guid>https://www.angrybeanie.com/news/A-trip-to-the-zoo</guid>
|
||||
<pubDate>Sun, 19 Jan 2020 22:29:27 GMT</pubDate>
|
||||
<description><![CDATA[<p>In which I visit Sydney Zoo (the one near Rooty Hill)</p>]]></description>
|
||||
<content:encoded><![CDATA[<p>In which I visit Sydney Zoo (the one near Rooty Hill)</p>]]></content:encoded>
|
||||
<author>james@angrybeanie.com (James Purser)</author>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[So, that happened]]></title>
|
||||
<link>https://www.angrybeanie.com/news/So-that-happened</link>
|
||||
<guid>https://www.angrybeanie.com/news/So-that-happened</guid>
|
||||
<pubDate>Sat, 13 Jul 2019 23:36:40 GMT</pubDate>
|
||||
<description><![CDATA[<p>In which i take a weeks leave and return to the office four months later</p>]]></description>
|
||||
<content:encoded><![CDATA[<p>In which i take a weeks leave and return to the office four months later</p>]]></content:encoded>
|
||||
<author>james@angrybeanie.com (James Purser)</author>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[2019 Projects]]></title>
|
||||
<link>https://www.angrybeanie.com/news/2019-Projects</link>
|
||||
<guid>https://www.angrybeanie.com/news/2019-Projects</guid>
|
||||
<pubDate>Sat, 05 Jan 2019 16:03:06 GMT</pubDate>
|
||||
<description><![CDATA[<p>Women In STEMM, Interesting People, Exploring the World, How To Media and more</p>]]></description>
|
||||
<content:encoded><![CDATA[<p>Women In STEMM, Interesting People, Exploring the World, How To Media and more</p>]]></content:encoded>
|
||||
<author>james@angrybeanie.com (James Purser)</author>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[That was 2018, let us never speak of it again]]></title>
|
||||
<link>https://www.angrybeanie.com/news/That-was-2018-let-us-never-speak-of-it-again</link>
|
||||
<guid>https://www.angrybeanie.com/news/That-was-2018-let-us-never-speak-of-it-again</guid>
|
||||
<pubDate>Fri, 28 Dec 2018 15:48:13 GMT</pubDate>
|
||||
<description><![CDATA[<p>2018 was basically a complete wash when it came to Angry Beanie foo. I'm planning/hoping for 2019 to be better.</p>]]></description>
|
||||
<content:encoded><![CDATA[<p>2018 was basically a complete wash when it came to Angry Beanie foo. I'm planning/hoping for 2019 to be better.</p>]]></content:encoded>
|
||||
<author>james@angrybeanie.com (James Purser)</author>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[A rose by any other name]]></title>
|
||||
<link>https://www.angrybeanie.com/news/A-rose-by-any-other-name</link>
|
||||
<guid>https://www.angrybeanie.com/news/A-rose-by-any-other-name</guid>
|
||||
<pubDate>Sat, 03 Nov 2018 13:56:03 GMT</pubDate>
|
||||
<description><![CDATA[<p>Is radio actually radio if there's no radio waves involved?</p>]]></description>
|
||||
<content:encoded><![CDATA[<p>Is radio actually radio if there's no radio waves involved?</p>]]></content:encoded>
|
||||
<author>james@angrybeanie.com (James Purser)</author>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[Snap happy]]></title>
|
||||
<link>https://www.angrybeanie.com/news/Snap-happy</link>
|
||||
<guid>https://www.angrybeanie.com/news/Snap-happy</guid>
|
||||
<pubDate>Sat, 13 Oct 2018 14:08:23 GMT</pubDate>
|
||||
<description><![CDATA[<p>A picture tells a thousand words. A thousand pictures tells a life time.</p>]]></description>
|
||||
<content:encoded><![CDATA[<p>A picture tells a thousand words. A thousand pictures tells a life time.</p>]]></content:encoded>
|
||||
<author>james@angrybeanie.com (James Purser)</author>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[Angry Beanie Weekly]]></title>
|
||||
<link>https://www.angrybeanie.com/news/Angry-Beanie-Weekly</link>
|
||||
<guid>https://www.angrybeanie.com/news/Angry-Beanie-Weekly</guid>
|
||||
<pubDate>Sat, 25 Aug 2018 19:36:31 GMT</pubDate>
|
||||
<description><![CDATA[<p>Because announcing it means I have to do it!</p>]]></description>
|
||||
<content:encoded><![CDATA[<p>Because announcing it means I have to do it!</p>]]></content:encoded>
|
||||
<author>james@angrybeanie.com (James Purser)</author>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[Piwiking the Mastodon]]></title>
|
||||
<link>https://www.angrybeanie.com/news/Piwiking-the-Mastodon</link>
|
||||
<guid>https://www.angrybeanie.com/news/Piwiking-the-Mastodon</guid>
|
||||
<pubDate>Sat, 18 Aug 2018 18:03:10 GMT</pubDate>
|
||||
<description><![CDATA[<p>Got inspired and installed a couple of FOSS projects this weekend. Mastodon and Piwik/Mamoto</p>]]></description>
|
||||
<content:encoded><![CDATA[<p>Got inspired and installed a couple of FOSS projects this weekend. Mastodon and Piwik/Mamoto</p>]]></content:encoded>
|
||||
<author>james@angrybeanie.com (James Purser)</author>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[A quick site update]]></title>
|
||||
<link>https://www.angrybeanie.com/news/A-quick-site-update</link>
|
||||
<guid>https://www.angrybeanie.com/news/A-quick-site-update</guid>
|
||||
<pubDate>Thu, 02 Aug 2018 19:17:59 GMT</pubDate>
|
||||
<description><![CDATA[<p>Added AMP support to the blog. Just for myself really.</p>]]></description>
|
||||
<content:encoded><![CDATA[<p>Added AMP support to the blog. Just for myself really.</p>]]></content:encoded>
|
||||
<author>james@angrybeanie.com (James Purser)</author>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[Sooo, blogging? Oh and actual podcast ideas]]></title>
|
||||
<link>https://www.angrybeanie.com/news/Sooo-blogging-Oh-and-actual-podcast-ideas</link>
|
||||
<guid>https://www.angrybeanie.com/news/Sooo-blogging-Oh-and-actual-podcast-ideas</guid>
|
||||
<pubDate>Fri, 20 Jul 2018 17:51:32 GMT</pubDate>
|
||||
<description><![CDATA[<p>Yeah of course it didn't happen</p>]]></description>
|
||||
<content:encoded><![CDATA[<p>Yeah of course it didn't happen</p>]]></content:encoded>
|
||||
<author>james@angrybeanie.com (James Purser)</author>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[A return to blogging]]></title>
|
||||
<link>https://www.angrybeanie.com/news/A-return-to-blogging</link>
|
||||
<guid>https://www.angrybeanie.com/news/A-return-to-blogging</guid>
|
||||
<pubDate>Fri, 27 Apr 2018 19:05:31 GMT</pubDate>
|
||||
<description><![CDATA[<p>Just when you thought it was safe</p>]]></description>
|
||||
<content:encoded><![CDATA[<p>Just when you thought it was safe</p>]]></content:encoded>
|
||||
<author>james@angrybeanie.com (James Purser)</author>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[Women In STEMM Success!]]></title>
|
||||
<link>https://www.angrybeanie.com/news/Women-In-STEMM-Success-</link>
|
||||
<guid>https://www.angrybeanie.com/news/Women-In-STEMM-Success-</guid>
|
||||
<pubDate>Fri, 09 Feb 2018 20:05:52 GMT</pubDate>
|
||||
<description><![CDATA[<p>Yes, that's right!</p>
|
||||
|
||||
<p>Success!</p>
|
||||
|
||||
<p>Last week I finally did an interview for an episode of Women In STEMM.</p>]]></description>
|
||||
<content:encoded><![CDATA[<p>Yes, that's right!</p>
|
||||
|
||||
<p>Success!</p>
|
||||
|
||||
<p>Last week I finally did an interview for an episode of Women In STEMM.</p>]]></content:encoded>
|
||||
<author>james@angrybeanie.com (James Purser)</author>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[First stream, and it was alright]]></title>
|
||||
<link>https://www.angrybeanie.com/news/First-stream-and-it-was-alright</link>
|
||||
<guid>https://www.angrybeanie.com/news/First-stream-and-it-was-alright</guid>
|
||||
<pubDate>Mon, 29 Jan 2018 23:25:02 GMT</pubDate>
|
||||
<description><![CDATA[<p>The first Angry Beanie Game Day stream happened on Sunday.</p>]]></description>
|
||||
<content:encoded><![CDATA[<p>The first Angry Beanie Game Day stream happened on Sunday.</p>]]></content:encoded>
|
||||
<author>james@angrybeanie.com (James Purser)</author>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[2018 - The Year Ahead]]></title>
|
||||
<link>https://www.angrybeanie.com/news/2018-The-Year-Ahead</link>
|
||||
<guid>https://www.angrybeanie.com/news/2018-The-Year-Ahead</guid>
|
||||
<pubDate>Mon, 01 Jan 2018 10:48:20 GMT</pubDate>
|
||||
<description><![CDATA[<p>What will the new year bring for the Angry Beanie?</p>]]></description>
|
||||
<content:encoded><![CDATA[<p>What will the new year bring for the Angry Beanie?</p>]]></content:encoded>
|
||||
<author>james@angrybeanie.com (James Purser)</author>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[Getting over that hump]]></title>
|
||||
<link>https://www.angrybeanie.com/news/Getting-over-that-hump</link>
|
||||
<guid>https://www.angrybeanie.com/news/Getting-over-that-hump</guid>
|
||||
<pubDate>Sat, 02 Dec 2017 13:18:19 GMT</pubDate>
|
||||
<description><![CDATA[<p>One of my biggest problems isn't sourcing ideas, it's convincing myself that I can do them justice.</p>]]></description>
|
||||
<content:encoded><![CDATA[<p>One of my biggest problems isn't sourcing ideas, it's convincing myself that I can do them justice.</p>]]></content:encoded>
|
||||
<author>james@angrybeanie.com (James Purser)</author>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[So, yet another new site?]]></title>
|
||||
<link>https://www.angrybeanie.com/news/So-yet-another-new-site-</link>
|
||||
<guid>https://www.angrybeanie.com/news/So-yet-another-new-site-</guid>
|
||||
<pubDate>Sat, 28 Oct 2017 21:54:29 GMT</pubDate>
|
||||
<description><![CDATA[<p>Well yes. Isn't it, minimalist?</p>]]></description>
|
||||
<content:encoded><![CDATA[<p>Well yes. Isn't it, minimalist?</p>]]></content:encoded>
|
||||
<author>james@angrybeanie.com (James Purser)</author>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
||||
36
public/feeds/tech-and-disability-atom.xml
Executable file
36
public/feeds/tech-and-disability-atom.xml
Executable file
|
|
@ -0,0 +1,36 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<feed xmlns="http://www.w3.org/2005/Atom">
|
||||
<id>https://www.angrybeanie.com</id>
|
||||
<title>tech-and-disability</title>
|
||||
<updated>2022-06-12T02:41:56.172Z</updated>
|
||||
<generator>Feed for Node.js</generator>
|
||||
<author>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</author>
|
||||
<link rel="alternate" href="https://www.angrybeanie.com"/>
|
||||
<link rel="self" href="https://www.angrybeanie.com/feeds/tech-and-disability-atom.xml"/>
|
||||
<subtitle>A place for all my thoughts and projects</subtitle>
|
||||
<logo>https://www.angrybeanie.com/public/images/logo.svg</logo>
|
||||
<icon>https://www.angrybeanie.com/public/images/favicon.png</icon>
|
||||
<rights>All rights reserved 2022, James Purser</rights>
|
||||
<entry>
|
||||
<title type="html"><![CDATA[Tech and Disability test]]></title>
|
||||
<id>https://www.angrybeanie.com/news/tech-and-disability-test</id>
|
||||
<link href="https://www.angrybeanie.com/news/tech-and-disability-test"/>
|
||||
<updated>2022-06-12T02:22:08.447Z</updated>
|
||||
<summary type="html"><![CDATA[<p>sdfasdfasfd</p>]]></summary>
|
||||
<content type="html"><![CDATA[<p>sdfasdfasfd</p>]]></content>
|
||||
<author>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</author>
|
||||
<contributor>
|
||||
<name>James Purser</name>
|
||||
<email>james@angrybeanie.com</email>
|
||||
<uri>https://twitter.com/purserj</uri>
|
||||
</contributor>
|
||||
</entry>
|
||||
</feed>
|
||||
26
public/feeds/tech-and-disability-feed.json
Executable file
26
public/feeds/tech-and-disability-feed.json
Executable file
|
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"version": "https://jsonfeed.org/version/1",
|
||||
"title": "tech-and-disability",
|
||||
"home_page_url": "https://www.angrybeanie.com",
|
||||
"feed_url": "https://www.angrybeanie.com/feeds/tech-and-disability-feed.json",
|
||||
"description": "A place for all my thoughts and projects",
|
||||
"icon": "https://www.angrybeanie.com/public/images/logo.svg",
|
||||
"author": {
|
||||
"name": "James Purser",
|
||||
"url": "https://twitter.com/purserj"
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"id": "https://www.angrybeanie.com/news/tech-and-disability-test",
|
||||
"content_html": "<p>sdfasdfasfd</p>",
|
||||
"url": "https://www.angrybeanie.com/news/tech-and-disability-test",
|
||||
"title": "Tech and Disability test",
|
||||
"summary": "<p>sdfasdfasfd</p>",
|
||||
"date_modified": "2022-06-12T02:22:08.447Z",
|
||||
"author": {
|
||||
"name": "James Purser",
|
||||
"url": "https://twitter.com/purserj"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
26
public/feeds/tech-and-disability-feed.xml
Executable file
26
public/feeds/tech-and-disability-feed.xml
Executable file
|
|
@ -0,0 +1,26 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
|
||||
<channel>
|
||||
<title>tech-and-disability</title>
|
||||
<link>https://www.angrybeanie.com</link>
|
||||
<description>A place for all my thoughts and projects</description>
|
||||
<lastBuildDate>Sun, 12 Jun 2022 02:41:56 GMT</lastBuildDate>
|
||||
<docs>https://validator.w3.org/feed/docs/rss2.html</docs>
|
||||
<generator>Feed for Node.js</generator>
|
||||
<image>
|
||||
<title>tech-and-disability</title>
|
||||
<url>https://www.angrybeanie.com/public/images/logo.svg</url>
|
||||
<link>https://www.angrybeanie.com</link>
|
||||
</image>
|
||||
<copyright>All rights reserved 2022, James Purser</copyright>
|
||||
<item>
|
||||
<title><![CDATA[Tech and Disability test]]></title>
|
||||
<link>https://www.angrybeanie.com/news/tech-and-disability-test</link>
|
||||
<guid>https://www.angrybeanie.com/news/tech-and-disability-test</guid>
|
||||
<pubDate>Sun, 12 Jun 2022 02:22:08 GMT</pubDate>
|
||||
<description><![CDATA[<p>sdfasdfasfd</p>]]></description>
|
||||
<content:encoded><![CDATA[<p>sdfasdfasfd</p>]]></content:encoded>
|
||||
<author>james@angrybeanie.com (James Purser)</author>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
||||
27
public/feeds/women-in-stemm.xml
Executable file
27
public/feeds/women-in-stemm.xml
Executable file
|
|
@ -0,0 +1,27 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
|
||||
<channel>
|
||||
<title>Women In STEMM</title>
|
||||
<link>https://www.angrybeanie.com</link>
|
||||
<description><p>Women In STEMM</p></description>
|
||||
<lastBuildDate>Sun, 12 Jun 2022 02:41:56 GMT</lastBuildDate>
|
||||
<docs>https://validator.w3.org/feed/docs/rss2.html</docs>
|
||||
<generator>Feed for Node.js</generator>
|
||||
<image>
|
||||
<title>Women In STEMM</title>
|
||||
<url>https://www.angrybeanie.com/public/images/logo.svg</url>
|
||||
<link>https://www.angrybeanie.com</link>
|
||||
</image>
|
||||
<copyright>All rights reserved 2022, James Purser</copyright>
|
||||
<item>
|
||||
<title><![CDATA[Dr Alice Gorman]]></title>
|
||||
<link>https://www.angrybeanie.com/shows/women-in-stemm/dr-alice-gorman</link>
|
||||
<guid>https://www.angrybeanie.com/shows/women-in-stemm/dr-alice-gorman</guid>
|
||||
<pubDate>Sun, 12 Jun 2022 01:30:05 GMT</pubDate>
|
||||
<description><![CDATA[<p>adfadfasdfd</p>]]></description>
|
||||
<content:encoded><![CDATA[<p>adfadfasdfd</p>]]></content:encoded>
|
||||
<author>james@angrybeanie.com (James Purser)</author>
|
||||
<enclosure length="0" type="audio/mpeg" url="https://www.angrybeanie.com/uploads/women_in_stemm_dr_Alice_Gorman_294d9c6c80.mp3" title="women_in_stemm_-_dr_Alice_Gorman.mp3" duration="0"/>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
||||
Loading…
Reference in a new issue