You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

74 lines
1.5 KiB

const express = require('express')
const app = express();
const axios = require('axios');
const querystring = require('querystring');
app.use(express.static('public'))
let tokenExpirationDate = false;
let bearerToken;
const data = {
grant_type:'password',
username:process.env.REDDITUSR,
password:process.env.REDDITPWD
}
const auth = {
username: process.env.APPID,
password: process.env.APPSECRET
}
const getToken = async ()=>{
if(tokenExpirationDate === false || Date.now() > tokenExpirationDate){
const response = await axios({
url:'https://www.reddit.com/api/v1/access_token',
method:'post',
auth:auth,
data:querystring.stringify(data)
})
bearerToken = response.data.access_token
tokenExpirationDate = Date.now()+(response.data.expires_in*1000)
}
const config = {
headers:{
Authorization: 'bearer '+ bearerToken
}
}
return config
}
const generate = async (req, res)=>{
let url = `https://oauth.reddit.com/user/mahuntington/saved?count=100`;
if(req.params.direction){
url += `&${req.params.direction}=${req.params.page}`
}
const config = await getToken()
const response = await axios.get(url, config)
const next = response.data.data.after;
const posts = response.data.data.children.filter(post => {
return post.data.subreddit === 'ProgrammerHumor' && post.data.removed_by_category === null
}).map(post => {
return post.data.permalink
})
res.json({
posts,
next
})
}
getToken();
app.get('/posts/', generate)
app.get('/posts/:direction/:page', generate)
app.listen(3002, ()=>{
console.log('listening');
})