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
|
|
@ -272,3 +272,7 @@
|
||||||
font-size: 2rem;
|
font-size: 2rem;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.featuredFlickr {
|
||||||
|
padding-top: 30px
|
||||||
|
}
|
||||||
|
|
@ -4,7 +4,7 @@ import Link from 'next/link'
|
||||||
|
|
||||||
const EpisodePager = ({ episodedata, config, showdata }) => {
|
const EpisodePager = ({ episodedata, config, showdata }) => {
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
|
console.log(episodedata)
|
||||||
const handlePagination = page => {
|
const handlePagination = page => {
|
||||||
const path = router.pathname
|
const path = router.pathname
|
||||||
const query = router.query
|
const query = router.query
|
||||||
|
|
@ -18,16 +18,16 @@ const EpisodePager = ({ episodedata, config, showdata }) => {
|
||||||
return (
|
return (
|
||||||
<div className="episode_pages col-xs-12">
|
<div className="episode_pages col-xs-12">
|
||||||
<div className="show_episodes">
|
<div className="show_episodes">
|
||||||
{episodedata.episodes.map((episode) => (
|
{episodedata.map((episode) => (
|
||||||
<div key={episode.slug} className="episode">
|
<div key={episode.attributes.Slug} className="episode">
|
||||||
<div className="episode_title" id ={episode.episode_slug}>
|
<div className="episode_title" id ={episode.Title}>
|
||||||
<Link href={episode.show_slug + "/" + episode.episode_slug}>{episode.title}</Link>
|
<Link href={episode.attributes.podcast_sery.data.attributes.Slug + "/" + episode.attributes.Slug}>{episode.attributes.Title}</Link>
|
||||||
</div>
|
</div>
|
||||||
<div className="content-date">
|
<div className="content-date">
|
||||||
{episode.episode_published}
|
{episode.attributes.publishedAt}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="episode_body" dangerouslySetInnerHTML={{ __html: episode.episode_lead}}></div>
|
<div className="episode_body" dangerouslySetInnerHTML={{ __html: episode.attributes.Description}}></div>
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -37,7 +37,7 @@ const EpisodePager = ({ episodedata, config, showdata }) => {
|
||||||
previousLabel={"previous"}
|
previousLabel={"previous"}
|
||||||
nextLabel={"next"}
|
nextLabel={"next"}
|
||||||
breakLabel={"..."}
|
breakLabel={"..."}
|
||||||
initialPage={episodedata.curPage - 1}
|
initialPage={1} //{episodedata.curPage - 1}
|
||||||
pageCount={2}
|
pageCount={2}
|
||||||
onPageChange={handlePagination}
|
onPageChange={handlePagination}
|
||||||
/>
|
/>
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ const EpisodeSideBar = (epdata) => (
|
||||||
<div className="side_content col-md-3">
|
<div className="side_content col-md-3">
|
||||||
<h2>Latest Episodes</h2>
|
<h2>Latest Episodes</h2>
|
||||||
<hr />
|
<hr />
|
||||||
{epdata.epdata.episodes.map((episode) => (
|
{epdata.map((episode) => (
|
||||||
<div key={episode.episode_slug}>
|
<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>
|
<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}} />
|
<div dangerouslySetInnerHTML={{__html: episode.episode_lead}} />
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,13 @@
|
||||||
import Image from 'next/image';
|
import Image from 'next/image';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const FeatureImage = ({ imagedata, basepath }) => (
|
const FeatureImage = ({ imagedata, basepath }) => (
|
||||||
<div className="featuredimage">
|
<div className="featuredimage">
|
||||||
<Image
|
<Image
|
||||||
src={basepath + imagedata.src}
|
src={"http://localhost:1337"+imagedata.attributes.url}
|
||||||
height={imagedata.height}
|
height={imagedata.attributes.height}
|
||||||
width={imagedata.width}
|
width={imagedata.attributes.width}
|
||||||
priority={true}
|
priority={true}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,9 @@ const Layout = (props) => (
|
||||||
<Head>
|
<Head>
|
||||||
<title>{props.pagedata.title}</title>
|
<title>{props.pagedata.title}</title>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"></meta>
|
<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>
|
</Head>
|
||||||
<Header />
|
<Header />
|
||||||
<div className="container">
|
<div className="container">
|
||||||
|
|
|
||||||
|
|
@ -17,19 +17,9 @@ const NavBar = (props, sections) => {
|
||||||
<Nav className="m-auto">
|
<Nav className="m-auto">
|
||||||
<NavLink href="/">Home</NavLink>
|
<NavLink href="/">Home</NavLink>
|
||||||
</Nav>
|
</Nav>
|
||||||
<Nav className="m-auto">
|
|
||||||
<NavLink href="/podcasts">Podcasts</NavLink>
|
|
||||||
</Nav>
|
|
||||||
<NavItem className="m-auto">
|
<NavItem className="m-auto">
|
||||||
<NavLink href="/news">News and such</NavLink>
|
<NavLink href="/news">News and such</NavLink>
|
||||||
</NavItem>
|
</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.Collapse>
|
||||||
</Navbar>
|
</Navbar>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,12 @@ import Link from 'next/link'
|
||||||
|
|
||||||
const StoryPager = ({ storydata }) => {
|
const StoryPager = ({ storydata }) => {
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
|
console.log(storydata.meta)
|
||||||
|
|
||||||
const handlePagination = page => {
|
const handlePagination = page => {
|
||||||
const path = router.pathname
|
const path = router.pathname
|
||||||
const query = router.query
|
const query = router.query
|
||||||
query.page = page.selected + 1
|
query.page = page.selected + 2
|
||||||
router.push({
|
router.push({
|
||||||
pathname: path,
|
pathname: path,
|
||||||
query: query,
|
query: query,
|
||||||
|
|
@ -18,12 +19,12 @@ const StoryPager = ({ storydata }) => {
|
||||||
return (
|
return (
|
||||||
<div className="episode_pages col-sm-12">
|
<div className="episode_pages col-sm-12">
|
||||||
<div className="show_episodes">
|
<div className="show_episodes">
|
||||||
{storydata.articles.map((story) => (
|
{storydata.data.map((story) => (
|
||||||
<div key={story.slug}>
|
<div key={story.slug}>
|
||||||
<div className="episode_title">
|
<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>
|
||||||
<div className="article_body" dangerouslySetInnerHTML={{ __html: story.lead }} />
|
<div className="article_body" dangerouslySetInnerHTML={{ __html: story.attributes.Abstract }} />
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
<ReactPaginate
|
<ReactPaginate
|
||||||
|
|
@ -32,8 +33,8 @@ const StoryPager = ({ storydata }) => {
|
||||||
previousLabel={"previous"}
|
previousLabel={"previous"}
|
||||||
nextLabel={"next"}
|
nextLabel={"next"}
|
||||||
breakLabel={"..."}
|
breakLabel={"..."}
|
||||||
initialPage={storydata.page - 1}
|
initialPage={storydata.page}
|
||||||
pageCount={storydata.total / 5}
|
pageCount={storydata.meta.pagination.pageCount}
|
||||||
onPageChange={handlePagination} />
|
onPageChange={handlePagination} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
import Link from 'next/link'
|
import Link from 'next/link'
|
||||||
|
|
||||||
const StorySideBar = (storydata) => (
|
const StorySideBar = ({ stories }) => (
|
||||||
<div className="side_content col-md-3">
|
<div className="side_content col-md-3">
|
||||||
<h2>Latest Stories</h2>
|
<h2>Latest Stories</h2>
|
||||||
<hr />
|
<hr />
|
||||||
{storydata.stories.articles.map((article) => (
|
{stories.map((article) => (
|
||||||
<div key={article.slug}>
|
<div key={article.attributes.Slug}>
|
||||||
<h2><Link href="/news/[slug]" as={"/news/" + article.slug}>{article.title}</Link></h2>
|
<h2><Link href="/news/[slug]" as={"/news/" + article.attributes.Slug}>{article.attributes.Title}</Link></h2>
|
||||||
<div dangerouslySetInnerHTML={{__html: article.lead}} />
|
<div dangerouslySetInnerHTML={{__html: article.attributes.Lead}} />
|
||||||
<hr></hr>
|
<hr></hr>
|
||||||
</div>
|
</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 = {
|
module.exports = {
|
||||||
serverRuntimeConfig: {
|
serverRuntimeConfig: {
|
||||||
// Will only be available on the server side
|
// Will only be available on the server side
|
||||||
base_path: 'http://cms.local.angrybeanie.com:8000',
|
base_path: 'http://localhost:1337/api/',
|
||||||
audio_path: 'https://audio.angrybeanie.com/'
|
audio_path: 'https://audio.angrybeanie.com/',
|
||||||
|
strapi_token: 'Bearer e555abdbe49a73a84241acdbe90fb18c9d314987f4752e63ce340a307ff07c40a086edb043ef6b8325b46a1dc2d2f0806c507bdbd99b005438c479223388e6997f49bac856df3b9f1a55e159ee15c6e97030e3ac09ec87f8ff411fe14a9a11ae409b034db64fae121e1eada8db9839765555c0c06b341e986be65bb8b2e91eb9'
|
||||||
},
|
},
|
||||||
images: {
|
images: {
|
||||||
domains: ['www.angrybeanie.com', 'localhost', 'cms.local.angrybeanie.com']
|
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-css": "^1.0.1",
|
||||||
"@zeit/next-less": "^1.0.1",
|
"@zeit/next-less": "^1.0.1",
|
||||||
"bootstrap": "^4.6.0",
|
"bootstrap": "^4.6.0",
|
||||||
|
"feed": "^4.2.2",
|
||||||
"less": "^3.13.1",
|
"less": "^3.13.1",
|
||||||
"mdbreact": "^5.1.0",
|
"mdbreact": "^5.1.0",
|
||||||
"next": "^10.2.3",
|
"next": "^10.2.3",
|
||||||
|
|
@ -21,6 +22,7 @@
|
||||||
"next-fonts": "^1.5.1",
|
"next-fonts": "^1.5.1",
|
||||||
"next-images": "^1.8.1",
|
"next-images": "^1.8.1",
|
||||||
"postcss": "^8.3.6",
|
"postcss": "^8.3.6",
|
||||||
|
"qs": "^6.10.3",
|
||||||
"react": "^16.14.0",
|
"react": "^16.14.0",
|
||||||
"react-bootstrap": "^1.6.1",
|
"react-bootstrap": "^1.6.1",
|
||||||
"react-dom": "^16.14.0",
|
"react-dom": "^16.14.0",
|
||||||
|
|
|
||||||
110
pages/index.js
110
pages/index.js
|
|
@ -5,15 +5,39 @@ import getConfig from 'next/config'
|
||||||
import Head from 'next/head'
|
import Head from 'next/head'
|
||||||
import Image from 'next/image';
|
import Image from 'next/image';
|
||||||
import { FEEDS, getFeed } from "../lib/rss"
|
import { FEEDS, getFeed } from "../lib/rss"
|
||||||
|
import { generatePodcastFeeds, generateRssFeed } from "../data/internal/feed-generator"
|
||||||
|
|
||||||
export async function getServerSideProps(context) {
|
export async function getStaticProps(context) {
|
||||||
const { serverRuntimeConfig, publicRuntimeConfig } = getConfig()
|
generateRssFeed()
|
||||||
const res = await fetch(serverRuntimeConfig.base_path +`/api/collections/1`)
|
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 artdata = await res.json()
|
||||||
const article = artdata.articles[0]
|
|
||||||
|
|
||||||
const epres = await fetch(serverRuntimeConfig.base_path + '/api/podcasts/episodes/latest/0/1')
|
const article = artdata.data[0].attributes
|
||||||
const epdata = await epres.json()
|
|
||||||
|
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 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()
|
const flickrdata = await flickr.json()
|
||||||
|
|
@ -21,12 +45,12 @@ export async function getServerSideProps(context) {
|
||||||
|
|
||||||
const pagedata = {'title': 'Angry Beanie'}
|
const pagedata = {'title': 'Angry Beanie'}
|
||||||
|
|
||||||
const tadfeed = FEEDS.find((tadfeed) => tadfeed.name === "tad");
|
// const tadfeed = FEEDS.find((tadfeed) => tadfeed.name === "tad");
|
||||||
const tadfullfeed = await getFeed(tadfeed.url)
|
// const tadfullfeed = await getFeed(tadfeed.url)
|
||||||
const tadfirstitem = tadfullfeed.items[0]
|
// const tadfirstitem = tadfullfeed.items[0]
|
||||||
|
|
||||||
return {
|
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,35 +59,69 @@ function HomePage (props) {
|
||||||
<div>
|
<div>
|
||||||
<Head>
|
<Head>
|
||||||
<title>{props.pagedata.title}</title>
|
<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>
|
</Head>
|
||||||
<div className="container">
|
<div className="container">
|
||||||
<div className="frontPageImage">
|
<div className="frontPageImage">
|
||||||
<img className="header_image img-fluid" src="/images/logo.png" alt="Angry Beanie" />
|
<img className="header_image img-fluid" src="/images/logo.png" alt="Angry Beanie" />
|
||||||
</div>
|
</div>
|
||||||
<div className="card col-sm-3">
|
<div className="row">
|
||||||
<h3>Latest Blog Post</h3>
|
<div className="col-sm-4">
|
||||||
<Link href="/news/[slug]" as={"/news/" + props.article.slug}>{props.article.title}</Link>
|
<div className="card">
|
||||||
{props.article.abstract}
|
<div className="card-img-top">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
{props.episodedata.map((episode) => (
|
<div className="card-title">
|
||||||
<div className="card col-sm-3">
|
<h3>Latest Blog Post</h3>
|
||||||
<h3>Latest Podcast</h3>
|
</div>
|
||||||
<Link href={episode.show_slug + "/" + episode.episode_slug}>{episode.title}</Link>
|
<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="col-sm-4">
|
||||||
|
<div className="card">
|
||||||
|
<div className="card-img-top">
|
||||||
<Image
|
<Image
|
||||||
src={props.config.base_path + "/" + episode.logo.src}
|
src={props.config.base_path + "/" + episode.logo.src}
|
||||||
|
alt={episode.show}
|
||||||
|
layout="fixed"
|
||||||
height={episode.logo.height}
|
height={episode.logo.height}
|
||||||
width="100%"
|
width={episode.logo.width}
|
||||||
|
srcSet={episode.logo.srcset}
|
||||||
|
className="card-img-top"
|
||||||
></Image>
|
></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 dangerouslySetInnerHTML={{ __html: episode.episode_lead}}></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>
|
||||||
<div className="card col-sm-3">
|
</div>
|
||||||
<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>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,11 @@ import "../components/main"
|
||||||
import getConfig from 'next/config'
|
import getConfig from 'next/config'
|
||||||
import Layout from "../components/main"
|
import Layout from "../components/main"
|
||||||
import StoryPager from "../components/storypager"
|
import StoryPager from "../components/storypager"
|
||||||
|
//import { popStoryPager } from "../data/external/cms"
|
||||||
|
|
||||||
|
async function popStoryPager(page) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
export async function getServerSideProps(context) {
|
export async function getServerSideProps(context) {
|
||||||
if(context.query.page == null || context.query.page == '0') {
|
if(context.query.page == null || context.query.page == '0') {
|
||||||
|
|
@ -11,9 +16,26 @@ export async function getServerSideProps(context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const { serverRuntimeConfig, publicRuntimeConfig } = getConfig()
|
const { serverRuntimeConfig, publicRuntimeConfig } = getConfig()
|
||||||
|
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 res = await fetch(serverRuntimeConfig.base_path + `/api/documents/`+ page + `/5`)
|
const artdata = await res.json()
|
||||||
const articles = await res.json()
|
const articles = artdata
|
||||||
|
|
||||||
const secres = await fetch(serverRuntimeConfig.base_path + `/api/sections`)
|
const secres = await fetch(serverRuntimeConfig.base_path + `/api/sections`)
|
||||||
const secdata = await secres.json()
|
const secdata = await secres.json()
|
||||||
|
|
|
||||||
|
|
@ -3,41 +3,87 @@ import "../../components/main.js"
|
||||||
import Layout from "../../components/main.js"
|
import Layout from "../../components/main.js"
|
||||||
import FeatureImage from "../../components/featureimage.js"
|
import FeatureImage from "../../components/featureimage.js"
|
||||||
import StorySideBar from '../../components/storysidebar.js'
|
import StorySideBar from '../../components/storysidebar.js'
|
||||||
|
import { getAllPosts } from '../../data/external/cms'
|
||||||
import * as gtag from "../../lib/gtag"
|
import * as gtag from "../../lib/gtag"
|
||||||
import Image from 'next/image';
|
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 { serverRuntimeConfig, publicRuntimeConfig } = getConfig()
|
||||||
const slug = context.params.slug
|
const slug = params.slug
|
||||||
const url = serverRuntimeConfig.base_path + '/api/document/' + slug
|
const url = serverRuntimeConfig.base_path + 'articles?filters[Slug][$eq]=' + slug + '&populate=*'
|
||||||
|
|
||||||
const res = await fetch(url)
|
const res = await fetch(url, {
|
||||||
const article_obj = await res.json()
|
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 qs = require('qs')
|
||||||
const storydata = await stories.json()
|
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 = {
|
const pagedata = {
|
||||||
'title': "Angry Beanie - " + article_obj.title
|
'title': "Angry Beanie - " + article_obj.Title
|
||||||
}
|
}
|
||||||
|
|
||||||
const secres = await fetch(serverRuntimeConfig.base_path + '/api/sections')
|
const secres = await fetch(serverRuntimeConfig.base_path + '/api/sections')
|
||||||
const secdata = await secres.json()
|
const secdata = await secres.json()
|
||||||
|
|
||||||
return {
|
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 secres = await fetch(serverRuntimeConfig.base_path + `/api/sections`)
|
||||||
const secdata = await secres.json()
|
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 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 archpodcastdata = await archpodcastres.json()
|
||||||
|
const archpodcastlist = archpodcastdata.data
|
||||||
|
|
||||||
const episodedata = "hi there"
|
const episodedata = "hi there"
|
||||||
|
|
||||||
const pagedata = {'title': 'Angry Beanie - Current Podcast Projects'}
|
const pagedata = {'title': 'Angry Beanie - Current Podcast Projects'}
|
||||||
|
|
||||||
return {
|
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>
|
<Layout sections={sections} episodedata={episodedata} pagedata={pagedata} serverRuntimeConfig>
|
||||||
<h1>Podcasts</h1>
|
<h1>Podcasts</h1>
|
||||||
<div className="page_body">Over the years I have made a number of podcasts.</div>
|
<div className="page_body">Over the years I have made a number of podcasts.</div>
|
||||||
<div className="row">
|
<div className="row">
|
||||||
<div className="col-sm-6">
|
<div className="col-sm-6">
|
||||||
<h2>Current Podcasts</h2>
|
<h2>Current Podcasts</h2>
|
||||||
{currpodcastdata.shows.map((podcast) => (
|
{currpodcastlist.map((podcast) => (
|
||||||
<div><Image
|
<div>
|
||||||
|
{/* <Image
|
||||||
src={serverRuntimeConfig.base_path + "/" + podcast.logo.src}
|
src={serverRuntimeConfig.base_path + "/" + podcast.logo.src}
|
||||||
height={podcast.logo.height}
|
height={podcast.logo.height}
|
||||||
width={podcast.logo.width}
|
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>
|
||||||
<div className="col-sm-6">
|
<div className="col-sm-6">
|
||||||
<h2>Archived Podcasts</h2>
|
<h2>Archived Podcasts</h2>
|
||||||
{archpodcastdata.shows.map((podcast) => (
|
{archpodcastlist.map((podcast) => (
|
||||||
<div><Image
|
<div>
|
||||||
|
{/* <Image
|
||||||
src={serverRuntimeConfig.base_path + "/" + podcast.logo.src}
|
src={serverRuntimeConfig.base_path + "/" + podcast.logo.src}
|
||||||
height={podcast.logo.height}
|
height={podcast.logo.height}
|
||||||
width={podcast.logo.width}
|
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>
|
||||||
</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 { serverRuntimeConfig, publicRuntimeConfig } = getConfig()
|
||||||
const slug = context.params.episode
|
const slug = context.params.episode
|
||||||
|
|
||||||
console.log(serverRuntimeConfig.base_path)
|
|
||||||
|
|
||||||
const secres = await fetch(serverRuntimeConfig.base_path + '/api/sections')
|
const secres = await fetch(serverRuntimeConfig.base_path + '/api/sections')
|
||||||
const secdata = await secres.json()
|
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 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 sepdata = await sepres.json()
|
||||||
|
const sepisodes = sepdata.data
|
||||||
|
|
||||||
const audiodata = {
|
const audiodata = {
|
||||||
audio_path: serverRuntimeConfig.audio_path,
|
audio_path: serverRuntimeConfig.audio_path,
|
||||||
audio_mp3: epdata.audio_mp3
|
audio_mp3: epdata.data[0].attributes.Audio.data.attributes
|
||||||
}
|
}
|
||||||
|
|
||||||
const pagedata = {
|
const pagedata = {
|
||||||
'title': 'Angry Beanie - ' + epdata.episode_title
|
'title': 'Angry Beanie - ' + episode.attributes.Title
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
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}
|
sections={props.sections}
|
||||||
episode={props.episode}
|
episode={props.episode}
|
||||||
audiodata={props.audiodata}
|
audiodata={props.audiodata}
|
||||||
sepdata={props.sepdata}>
|
sepdata={props.sepisodes}>
|
||||||
<h1>{props.episode.episode_title}</h1>
|
<h1>{props.episode.attributes.Title}</h1>
|
||||||
<div className="main_content col-md-9 col-sm-12">
|
<div className="main_content col-md-9 col-sm-12">
|
||||||
<AudioPlayer
|
<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})}
|
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})}
|
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})}
|
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 className="article_body" dangerouslySetInnerHTML={{ __html: props.episode.episode_body}} />
|
||||||
</div>
|
</div>
|
||||||
<EpisodeSideBar epdata={props.sepdata}></EpisodeSideBar>
|
{/* <EpisodeSideBar epdata={props.sepisodes}></EpisodeSideBar> */}
|
||||||
</Layout>)
|
</Layout>)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,13 @@ import EpisodePager from "../../../components/episodepager.js"
|
||||||
export async function getServerSideProps(context) {
|
export async function getServerSideProps(context) {
|
||||||
const { serverRuntimeConfig, publicRuntimeConfig } = getConfig()
|
const { serverRuntimeConfig, publicRuntimeConfig } = getConfig()
|
||||||
const slug = context.params.podcast
|
const slug = context.params.podcast
|
||||||
const url = serverRuntimeConfig.base_path + '/api/podcasts/series/' + slug
|
const url = serverRuntimeConfig.base_path + '/api/podcast-serie?filters[Slug][$eq]=' + slug
|
||||||
const showres = await fetch(url)
|
const showres = await fetch(url, {
|
||||||
|
headers: new Headers({
|
||||||
|
'Authorization': 'Bearer 77df3f9be0a33ee3e91e4314e99fe649348fe15e66348fa53cc335e936345661bea7eb3c826475bc8605037d9753e334061f579aa864a5c5a7436dc3b6853ee4712c822b462156d445cebe08b3e298967829ceccb4c4aa7c61c674527ddf66514a9879b36b15732fc4f505945fbe9e23e65c0525fce834b3858936ab2ab671b7',
|
||||||
|
'Content-Type': 'application/x-www-form-urlencoded'
|
||||||
|
})
|
||||||
|
})
|
||||||
const showdata = await showres.json()
|
const showdata = await showres.json()
|
||||||
|
|
||||||
if(context.query.page == null || context.query.page == '0') {
|
if(context.query.page == null || context.query.page == '0') {
|
||||||
|
|
@ -15,8 +20,14 @@ export async function getServerSideProps(context) {
|
||||||
} else {
|
} else {
|
||||||
var page = Number(context.query.page) - 1
|
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()
|
const epdata = await epres.json()
|
||||||
|
console.log(epdata.data)
|
||||||
|
|
||||||
const secres = await fetch(serverRuntimeConfig.base_path + '/api/sections')
|
const secres = await fetch(serverRuntimeConfig.base_path + '/api/sections')
|
||||||
const secdata = await secres.json()
|
const secdata = await secres.json()
|
||||||
|
|
@ -31,7 +42,7 @@ export async function getServerSideProps(context) {
|
||||||
const Podcast = (props) => (
|
const Podcast = (props) => (
|
||||||
<Layout pagedata={props.pagedata} sections={props.sections} showdata={props.showdata}>
|
<Layout pagedata={props.pagedata} sections={props.sections} showdata={props.showdata}>
|
||||||
<h1>{props.showdata.title}</h1>
|
<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>
|
</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