Skip to content
Snippets Groups Projects
Unverified Commit 9b098212 authored by Andreas Hubel's avatar Andreas Hubel
Browse files

chore: cleanup & format

parent 3ff05281
No related branches found
No related tags found
No related merge requests found
......@@ -7,55 +7,13 @@ import { transformEpisode, transformEpisodeList } from './mappings';
const app = express();
const PORT = 3000;
const root = "https://social.audiothek.de/@blaue-couch"
const root = 'https://social.audiothek.de/@blaue-couch';
const audiothekApi = new Client({
url: 'https://api.ardaudiothek.de/graphql',
exchanges: [cacheExchange, fetchExchange],
});
const query = gql`
query Item {
item(id: "14278953") {
show {
coreId
externalId
title
url
publisher: publicationService {
coreId
dvbServiceId
title
url
organizationName
organization {
name
url
}
}
coreDocument
}
assetId
url: sharingUrl
title
description
published: publishDate
updated: core(key: "modified")
imagesList {
url
title
}
coreDocument
audioList {
title
audioCodec
href
}
}
}
`;
async function fetchData<R>(query: any, variables: any) {
const result = await audiothekApi.query<R>(query, variables).toPromise();
if (result.error) {
......@@ -65,52 +23,71 @@ async function fetchData<R>(query: any, variables: any) {
return result.data;
}
async function main() {
const response = await fetchData<EpisodeResponse>(query, { id: '14278953' });
if (response) {
const activityPubEpisode = transformEpisode(response);
console.log(JSON.stringify(activityPubEpisode, null, 2));
}
}
// main();
app.get('/:actor/episodes/:id', async (req, res) => {
try {
const data = await fetchData<EpisodeResponse>(query, { id: req.params.id });
if (!data) {
res.status(404).json({ error: 'Episode not found' });
return;
const query = gql`
query Item($id: String!) {
item(id: $id) {
show {
coreId
externalId
title
url
publisher: publicationService {
coreId
dvbServiceId
title
url
organizationName
organization {
name
url
}
}
}
assetId
url: sharingUrl
title
description
published: publishDate
updated: core(key: "modified")
imagesList {
url
title
}
#coreDocument
audioList {
title
audioCodec
href
}
}
}
`;
// TODO: verifiy that the actor is the same as the attributedTo field
const activityPubDocument = transformEpisode(data);
res.json(activityPubDocument);
} catch (error) {
res.status(500).json({ error: 'Failed to fetch episode data' });
const data = await fetchData<EpisodeResponse>(query, { id: req.params.id });
if (!data) {
res.status(404).json({ error: 'Episode not found' });
return;
}
// TODO: verifiy that the actor is the same as the attributedTo field
const activityPubDocument = transformEpisode(data);
res.json(activityPubDocument);
});
app.get('/:actor/episodes', async (req, res) => {
const offset = 10 * ((+req.query.page! || 1) - 1);
const query = gql`
query ShowWithEpisodes($showId: ID!, $first: Int = 10, $offset: Int) {
show(id: $showId) {
coreId
query ShowWithEpisodes($showId: ID!, $first: Int = 10, $offset: Int) {
show(id: $showId) {
coreId
externalId
title
url
items(first: $first, orderBy: PUBLISH_DATE_DESC, offset: $offset, condition: {
isPublished: true
}) {
items(first: $first, orderBy: PUBLISH_DATE_DESC, offset: $offset, condition: { isPublished: true }) {
nodes {
assetId
title
......@@ -132,19 +109,15 @@ app.get('/:actor/episodes', async (req, res) => {
}
`;
try {
// TODO: verifiy that the actor is the same as the attributedTo field
const data = await fetchData<any>(query, { showId: "urn:ard:show:a42d1ea0b4a07053", offset });
const data = await fetchData<any>(query, { showId: 'urn:ard:show:a42d1ea0b4a07053', offset });
if (!data) {
res.status(404).json({ error: 'Episode not found' });
return;
}
const activityPubDocument = transformEpisodeList(data);
res.json(activityPubDocument);
} catch (error) {
......@@ -154,21 +127,21 @@ app.get('/:actor/episodes', async (req, res) => {
app.get('/:actor/outbox', async (req, res) => {
const query = gql`
query ShowEpisodeTotal($showId: ID!) {
show(id: $showId) {
coreId
externalId
title
url
items(condition: { isPublished: true }) {
totalCount
}
}
}`;
query ShowEpisodeTotal($showId: ID!) {
show(id: $showId) {
coreId
externalId
title
url
items(condition: { isPublished: true }) {
totalCount
}
}
}
`;
const data = await fetchData<any>(query, { showId: "urn:ard:show:a42d1ea0b4a07053" });
const data = await fetchData<any>(query, { showId: 'urn:ard:show:a42d1ea0b4a07053' });
if (!data) {
res.status(404).json({ error: 'Show not found' });
return;
......@@ -177,37 +150,35 @@ app.get('/:actor/outbox', async (req, res) => {
const { totalCount } = data.show.items;
res.json({
"@context": "https://www.w3.org/ns/activitystreams",
"id": `${root}/outbox`,
"type": "OrderedCollection",
"to": [
"https://www.w3.org/ns/activitystreams#Public"
],
"totalItems": totalCount,
"first": `${root}/episodes?page=1`,
"current": `${root}/outbox`,
"last": `${root}/episodes?page=${Math.floor(totalCount/10)}`
'@context': 'https://www.w3.org/ns/activitystreams',
id: `${root}/outbox`,
type: 'OrderedCollection',
to: ['https://www.w3.org/ns/activitystreams#Public'],
totalItems: totalCount,
first: `${root}/episodes?page=1`,
current: `${root}/outbox`,
last: `${root}/episodes?page=${Math.floor(totalCount / 10)}`,
});
});
app.get('/:actor', async (req, res) => {
res.json({
"@context": "https://www.w3.org/ns/activitystreams",
"id": "urn:ard:show:a42d1ea0b4a07053",
"type": "Service",
"name": "Blaue Couch",
"externalId": "https://feeds.br.de/blaue-couch/feed.xml",
"attributedTo": "urn:ard:publisher:c4a9cee041835529",
"publisher": {
"type": "BroadcastService",
"name": "BAYERN 1",
"url": "https://www.ardaudiothek.de/radio/br/bayern-1/",
"organization": {
"type": "Organization",
"name": "BR",
"url": "https://www.ardaudiothek.de/radio/br/"
}
}
'@context': 'https://www.w3.org/ns/activitystreams',
id: 'urn:ard:show:a42d1ea0b4a07053',
type: 'Service',
name: 'Blaue Couch',
externalId: 'https://feeds.br.de/blaue-couch/feed.xml',
attributedTo: 'urn:ard:publisher:c4a9cee041835529',
publisher: {
type: 'BroadcastService',
name: 'BAYERN 1',
url: 'https://www.ardaudiothek.de/radio/br/bayern-1/',
organization: {
type: 'Organization',
name: 'BR',
url: 'https://www.ardaudiothek.de/radio/br/',
},
},
});
});
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment