Skip to content

Commit 2c35db9

Browse files
authored
Merge pull request #713 from hwakabh/feat/blog-integrations
feat: Tumblr integrations
2 parents 4c5e168 + 95a5920 commit 2c35db9

File tree

5 files changed

+79
-61
lines changed

5 files changed

+79
-61
lines changed

.github/workflows/backend.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ on:
1111

1212
env:
1313
MAIL_API_KEY: ${{ secrets.MAIL_API_KEY }}
14-
RAPID_API_KEY: ${{ secrets.RAPID_API_KEY }}
14+
TUMBLR_CONSUMER_KEY: ${{ secrets.TUMBLR_CONSUMER_KEY }}
1515

1616
jobs:
1717
build-and-ship:
@@ -67,3 +67,4 @@ jobs:
6767
flags: '--service-min-instances=3'
6868
env_vars: |
6969
MAIL_API_KEY=${{ env.MAIL_API_KEY }}
70+
TUMBLR_CONSUMER_KEY=${{ env.TUMBLR_CONSUMER_KEY }}

api-server/routes/api.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@ const aboutRouter = require('./about');
55
const cvRouter = require('./cv');
66
const worksRouter = require('./works');
77
const contactRouter = require('./contact');
8+
const postsRouter = require('./logues');
89

910
const URL_PREFIX = '/api/v1';
1011

1112
router.use(URL_PREFIX + '/about', aboutRouter);
1213
router.use(URL_PREFIX + '/cv', cvRouter);
1314
router.use(URL_PREFIX + '/works', worksRouter);
1415
router.use(URL_PREFIX + '/contact', contactRouter);
16+
router.use(URL_PREFIX + '/posts', postsRouter);
1517

1618
module.exports = router;

api-server/routes/logues.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
const express = require('express');
2+
const router = express.Router();
3+
const axios = require('axios');
4+
5+
router.get('/', async (req, res, next) => {
6+
// #swagger.tags = ['Logues']
7+
// #swagger.summary = 'returns dynamic content for the blog page'
8+
// #swagger.description = '/api/v1/logues'
9+
10+
const CONSUMER_KEY = process.env.TUMBLR_CONSUMER_KEY;
11+
const url = 'https://api.tumblr.com/v2/blog/hwakabh.tumblr.com/posts?api_key=' + CONSUMER_KEY;
12+
const respPosts = await axios.get(url)
13+
.then(response => {
14+
return response.data.response.posts
15+
})
16+
.catch(error => {
17+
console.log(error);
18+
})
19+
20+
const posts = [];
21+
respPosts.forEach(p => {
22+
posts.push({
23+
date: p.date,
24+
body: p.body
25+
})
26+
});
27+
28+
console.log(posts);
29+
30+
res.header('Content-Type', 'application/json; charset=utf-8');
31+
res.json({
32+
"path": req.originalUrl,
33+
"content": posts
34+
});
35+
36+
});
37+
38+
module.exports = router;

schemas/swagger.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,20 @@
226226
}
227227
}
228228
}
229+
},
230+
"/api/v1/posts/": {
231+
"get": {
232+
"tags": [
233+
"Logues"
234+
],
235+
"summary": "returns dynamic content for the blog page",
236+
"description": "/api/v1/logues",
237+
"responses": {
238+
"200": {
239+
"description": "OK"
240+
}
241+
}
242+
}
229243
}
230244
}
231245
}

web-frontend/src/pages/Blog.vue

Lines changed: 23 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,30 @@
1-
<template>
2-
<section class="wrapper fullscreen">
3-
<div class="inner">
4-
<h1 class="major">Elements</h1>
5-
<section>
6-
<h2>Text</h2>
7-
<p>This is <b>bold</b> and this is <strong>strong</strong>. This is <i>italic</i> and this is <em>emphasized</em>.
8-
This is <sup>superscript</sup> text and this is <sub>subscript</sub> text.
9-
This is <u>underlined</u> and this is code: <code>for (;;) { ... }</code>. Finally, <a href="#">this is a link</a>.</p>
10-
<hr />
11-
<p>Nunc lacinia ante nunc ac lobortis. Interdum adipiscing gravida odio porttitor sem non mi integer non faucibus ornare mi ut ante amet placerat aliquet. Volutpat eu sed ante lacinia sapien lorem accumsan varius montes viverra nibh in adipiscing blandit tempus accumsan.</p>
12-
<hr />
13-
<h2>Heading Level 2</h2>
14-
<h3>Heading Level 3</h3>
15-
<h4>Heading Level 4</h4>
16-
<hr />
17-
<h3>Blockquote</h3>
18-
<blockquote>Fringilla nisl. Donec accumsan interdum nisi, quis tincidunt felis sagittis eget tempus euismod. Vestibulum ante ipsum primis in faucibus vestibulum. Blandit adipiscing eu felis iaculis volutpat ac adipiscing accumsan faucibus. Vestibulum ante ipsum primis in faucibus lorem ipsum dolor sit amet nullam adipiscing eu felis.</blockquote>
19-
<h3>Preformatted</h3>
20-
<pre><code>i = 0;
1+
<script setup>
2+
import axios from "axios";
3+
import { ref } from "vue";
214
22-
while (!deck.isInOrder()) {
23-
print 'Iteration ' + i;
24-
deck.shuffle();
25-
i++;
26-
}
5+
const postData = ref([]);
6+
axios.get('/api/v1/posts')
7+
.then((resp) => {
8+
postData.value = resp.data.content;
9+
})
10+
.catch((err) => {
11+
console.log(err);
12+
})
2713
28-
print 'It took ' + i + ' iterations to sort the deck.';</code></pre>
29-
</section>
14+
</script>
3015

31-
<!-- Lists -->
32-
<section>
33-
<h2>Lists</h2>
34-
<div class="row">
35-
<div class="col-4 col-12-medium">
36-
<h3>Unordered</h3>
37-
<ul>
38-
<li>Dolor pulvinar etiam.</li>
39-
<li>Sagittis adipiscing.</li>
40-
<li>Felis enim feugiat.</li>
41-
</ul>
42-
</div>
43-
<div class="col-4 col-12-medium">
44-
<h3>Alternate</h3>
45-
<ul class="alt">
46-
<li>Dolor pulvinar etiam.</li>
47-
<li>Sagittis adipiscing.</li>
48-
<li>Felis enim feugiat.</li>
49-
</ul>
50-
</div>
51-
<div class="col-4 col-12-medium">
52-
<h3>Ordered</h3>
53-
<ol>
54-
<li>Dolor pulvinar etiam.</li>
55-
<li>Etiam vel felis viverra.</li>
56-
<li>Felis enim feugiat.</li>
57-
<li>Dolor pulvinar etiam.</li>
58-
<li>Etiam vel felis lorem.</li>
59-
<li>Felis enim et feugiat.</li>
60-
</ol>
61-
</div>
16+
<template>
17+
<section class="wrapper fullscreen">
18+
<div class="inner">
19+
<h1 class="major">Blogs</h1>
20+
<div v-for="(p, idx) in postData"
21+
:key="idx"
22+
class="post-detail"
23+
>
24+
<div v-html="p.date"></div>
25+
<div v-html="p.body"></div>
26+
<hr />
6227
</div>
63-
</section>
64-
6528
</div>
6629
</section>
6730
</template>

0 commit comments

Comments
 (0)