76 lines
1.7 KiB
TypeScript
76 lines
1.7 KiB
TypeScript
import * as plugins from './smartfeed.plugins';
|
|
|
|
export interface IFeedOptions {
|
|
domain: string;
|
|
title: string;
|
|
description: string;
|
|
category: string;
|
|
company: string;
|
|
companyEmail: string;
|
|
companyDomain: string;
|
|
}
|
|
|
|
export interface IFeedItem {
|
|
title: string;
|
|
timestamp: number;
|
|
url: string;
|
|
authorName: string;
|
|
imageUrl: string;
|
|
content: string;
|
|
}
|
|
|
|
export class Feed {
|
|
options: IFeedOptions;
|
|
items: IFeedItem[] = [];
|
|
constructor(optionsArg: IFeedOptions) {
|
|
this.options = optionsArg;
|
|
}
|
|
|
|
public addItem(itemArg: IFeedItem) {
|
|
this.items.push(itemArg);
|
|
}
|
|
|
|
private getFeedObject() {
|
|
const feed = new plugins.feed.Feed({
|
|
copyright: `All rights reserved, ${this.options.company}`,
|
|
id: `https://${this.options.domain}`,
|
|
link: `https://${this.options.domain}`,
|
|
title: this.options.title,
|
|
author: {
|
|
name: this.options.company,
|
|
email: this.options.companyEmail,
|
|
link: this.options.companyEmail
|
|
},
|
|
description: this.options.description,
|
|
generator: '@pushrocks/smartfeed',
|
|
language: "en"
|
|
});
|
|
|
|
feed.addCategory(this.options.category);
|
|
for (const itemArg of this.items) {
|
|
feed.addItem({
|
|
title: itemArg.title,
|
|
date: new Date(itemArg.timestamp),
|
|
link: itemArg.url.replace(/&/gm, '&'),
|
|
image: itemArg.imageUrl.replace(/&/gm, '&'),
|
|
content: itemArg.content,
|
|
author: [{
|
|
name: itemArg.authorName
|
|
}]
|
|
});
|
|
}
|
|
return feed;
|
|
}
|
|
|
|
public exportRssFeedString(): string {
|
|
return this.getFeedObject().rss2();
|
|
}
|
|
|
|
public exportAtomFeed(): string {
|
|
return this.getFeedObject().atom1();
|
|
}
|
|
|
|
public exportJsonFeed(): string {
|
|
return this.getFeedObject().json1();
|
|
}
|
|
} |