-
Notifications
You must be signed in to change notification settings - Fork 0
/
gridsome.server.js
65 lines (55 loc) · 2.22 KB
/
gridsome.server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// Server API makes it possible to hook into various parts of Gridsome
// on server-side and add custom data to the GraphQL data layer.
// Learn more: https://gridsome.org/docs/server-api
// Changes here require a server restart.
// To restart press CTRL + C in terminal and run `gridsome develop`
const axios = require('axios');
module.exports = function (api) {
api.loadSource(async ({ addCollection }) => {
const collection = addCollection({
typeName: 'Tweets',
});
const tweets = require('./src/assets/tweets.json')
.results
.map(tweet => {
const entities = tweet.extended_tweet ? tweet.extended_tweet.entities : tweet.entities;
let text = tweet.extended_tweet ? tweet.extended_tweet.full_text : tweet.text;
if (entities.media) {
entities.media
.map(media => media.url)
.forEach(mediaUrl => text = text.replace(mediaUrl, '').trim());
}
if (entities.urls) {
entities.urls.forEach(({ url, expanded_url, display_url }) =>
text = text.replace(
url,
`<a href="${expanded_url}" target="_blank" rel="noopener">${display_url}</a>`
).trim()
);
}
if (entities.hashtags) {
entities.hashtags
.forEach(hashtag => text = text.replace(
`#${hashtag.text}`,
`<a href="https://twitter.com/hashtag/${hashtag.text}" target="_blank" rel="noopener">#${hashtag.text}</a>`
));
}
return {
idStr: tweet.id_str,
createdAt: Date.parse(tweet.created_at),
text,
user: {
name: tweet.user.name,
screenName: tweet.user.screen_name,
profileImage: tweet.user.profile_image_url_https.replace('_normal.jpg', '_bigger.jpg')
},
photoUrls: entities.media ? entities.media.filter(media => media.type === 'photo').map(media => media.media_url_https) : [],
hashtags: entities.hashtags ? entities.hashtags.map(hashtag => hashtag.text) : [],
};
});
tweets.forEach(collection.addNode);
})
api.createPages(({ createPage }) => {
// Use the Pages API here: https://gridsome.org/docs/pages-api
})
}