Skip to content

Commit 91669e9

Browse files
authored
fix: missing user agent for medium (#154)
1 parent ec42789 commit 91669e9

File tree

3 files changed

+59
-7
lines changed

3 files changed

+59
-7
lines changed

app/util/feedtojson.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
import { parse } from 'rss-to-json'
2+
import { getRandomUserAgent } from './useragent'
23

34
export const feedToJSON = async (rssUrl: string) => {
45
try {
5-
const feed = await parse(rssUrl)
6+
const feed = await parse(rssUrl, {
7+
headers: {
8+
'User-Agent': getRandomUserAgent(),
9+
}
10+
})
611
return feed
712
} catch (error) {
8-
console.error(error)
13+
console.error('error parsing RSS', error)
914
return null
1015
}
1116
}

app/util/medium.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import axios from 'axios';
22
import moment from 'moment';
33
import { feedToJSON } from './feedtojson';
44
import { JSDOM } from 'jsdom';
5-
5+
import { getRandomUserAgent } from './useragent';
66

77
export const getArticle = async (index: string, username: string) => {
88
const rssUrl = `https://medium.com/feed/${username}`
@@ -24,12 +24,14 @@ export const getArticle = async (index: string, username: string) => {
2424
];
2525

2626
const description = content || desc;
27-
28-
29-
const responseThumbnail = await axios(thumbnail.src, { responseType: 'arraybuffer' });
27+
const responseThumbnail = await axios(thumbnail.src, {
28+
responseType: 'arraybuffer',
29+
headers: {
30+
'User-Agent': getRandomUserAgent(),
31+
}
32+
});
3033
const base64Img = Buffer.from(responseThumbnail.data, 'binary').toString('base64');
3134

32-
3335
const imgTypeArr = thumbnail.src.split('.');
3436
const imgType = imgTypeArr[imgTypeArr.length - 1];
3537

app/util/useragent.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
const userAgents = [
2+
// Chrome on Windows
3+
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",
4+
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36",
5+
6+
// Chrome on macOS
7+
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",
8+
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36",
9+
10+
// Firefox on Windows
11+
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:123.0) Gecko/20100101 Firefox/123.0",
12+
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0",
13+
14+
// Firefox on macOS
15+
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:123.0) Gecko/20100101 Firefox/123.0",
16+
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0",
17+
18+
// Safari on macOS
19+
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.3 Safari/605.1.15",
20+
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Safari/605.1.15",
21+
22+
// Edge on Windows
23+
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0",
24+
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0",
25+
26+
// Mobile - Chrome on Android
27+
"Mozilla/5.0 (Linux; Android 13; SM-S908B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.90 Mobile Safari/537.36",
28+
"Mozilla/5.0 (Linux; Android 13; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.90 Mobile Safari/537.36",
29+
30+
// Mobile - Safari on iOS
31+
"Mozilla/5.0 (iPhone; CPU iPhone OS 17_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.3 Mobile/15E148 Safari/604.1",
32+
"Mozilla/5.0 (iPhone; CPU iPhone OS 17_2_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1",
33+
34+
// Common RSS readers and feed fetchers
35+
"Feedly/1.0 (+http://www.feedly.com/fetcher.html)",
36+
"Feedbin/latest (https://feedbin.com)",
37+
"FeedParser/5.2.1 +https://github.com/kurtmckee/feedparser/",
38+
"NewsBlur/4.0 (https://www.newsblur.com)",
39+
"Tiny Tiny RSS/22.10 (http://tt-rss.org/)"
40+
];
41+
42+
export function getRandomUserAgent() {
43+
const randomIndex = Math.floor(Math.random() * userAgents.length);
44+
return userAgents[randomIndex];
45+
}

0 commit comments

Comments
 (0)