Skip to content

Commit ae87ad8

Browse files
authored
Merge pull request #413 from SoftwareEngineeringDaily/feat/private-feed-megaphone
feat: Private feed pulls data from megaphone.fm url. Cron job is exec…
2 parents 51c2246 + 8008421 commit ae87ad8

File tree

3 files changed

+30
-12
lines changed

3 files changed

+30
-12
lines changed

config/config.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,8 @@ const config = {
7979
},
8080
cron: {
8181
RSS: {
82-
time: '0 15 9,10,11,12,14,16,19,21 * * *',
83-
timeZone: null
82+
time: '30 2 * * *',
83+
timeZone: 'America/Los_Angeles'
8484
}
8585
}
8686
};

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,8 @@
124124
"swagger-jsdoc": "^1.9.7",
125125
"twitter-lite": "^0.13.0",
126126
"validate-commit-msg": "2.14.0",
127-
"winston": "2.3.1"
127+
"winston": "2.3.1",
128+
"xml2js": "^0.4.23"
128129
},
129130
"license": "MIT",
130131
"config": {

server/crons/rssFeed.cron.js

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,35 @@
1+
import axios from 'axios';
12
import { toXML } from 'jstoxml';
3+
import xml2js from 'xml2js';
24
import { cloneDeep } from 'lodash';
35
import moment from 'moment';
46
import config from '../../config/config';
57
import CronItem from '../helpers/cronItem.helper';
6-
import { getAdFreeMp3 } from '../helpers/mp3.helper';
78
import app from '../../config/express';
89
import Post from '../models/post.model';
910

11+
const PRIVATE_RSS_URL = 'https://feeds.megaphone.fm/SED2675996583';
12+
13+
async function getPrivateFeed() {
14+
const builder = new xml2js.Builder({ cdata: true });
15+
const parser = new xml2js.Parser({ explicitArray: false });
16+
let parsedResult = {};
17+
try {
18+
const feedResult = await axios.get(PRIVATE_RSS_URL);
19+
if (feedResult.status === 200) {
20+
parser.parseString(feedResult.data, (err, result) => {
21+
if (err) {
22+
throw err;
23+
}
24+
parsedResult = result;
25+
});
26+
}
27+
} catch (error) {
28+
console.log(error);// eslint-disable-line
29+
}
30+
return builder.buildObject(parsedResult);
31+
}
32+
1033
const itunesImage = toXML({
1134
_name: 'itunes:image',
1235
_attrs: {
@@ -88,7 +111,7 @@ async function callback() {
88111

89112
const publicFeedAllConfig = cloneDeep(rawFeedConfig);
90113
const publicFeedConfig = cloneDeep(rawFeedConfig);
91-
const privateFeedConfig = cloneDeep(rawFeedConfig);
114+
const privateFeedConfig = await getPrivateFeed();
92115
const lastPost = posts[posts.length - 1];
93116

94117
let episode = posts.length + 1;
@@ -138,12 +161,6 @@ async function callback() {
138161

139162
// RSS item for each episode
140163
publicFeedConfig._content.channel.push({ item });
141-
142-
const privateMp3 = post.adFreeMp3 || getAdFreeMp3(post.mp3);
143-
const privateItem = cloneDeep(item);
144-
145-
privateItem[0]._attrs.url = privateMp3;
146-
privateFeedConfig._content.channel.push({ item: privateItem });
147164
});
148165

149166
publicFeedAllConfig._content.channel = publicFeedConfig._content.channel;
@@ -156,7 +173,7 @@ async function callback() {
156173

157174
app.set('rssFeedPublicAll', toXML(publicFeedAllConfig, xmlOptions));
158175
app.set('rssFeedPublic', toXML(publicFeedConfig, xmlOptions));
159-
app.set('rssFeedPrivate', toXML(privateFeedConfig, xmlOptions));
176+
app.set('rssFeedPrivate', privateFeedConfig);
160177
}
161178

162179
const rssFeed = {

0 commit comments

Comments
 (0)