-
Notifications
You must be signed in to change notification settings - Fork 0
/
deviantArt.js
112 lines (102 loc) · 3.14 KB
/
deviantArt.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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
const url = require('url')
const axios = require('axios');
const { recordUserSearch } = require('./utils/mongodbFuncs.js');
const devArt = {
grant_type: process.env.DEVART_GRANT_TYPE,
client_id: process.env.DEVART_CLIENT_ID,
client_secret: process.env.DEVART_CLIENT_SECRET
};
let accessToken;
axios.interceptors.response.use((response) => {
return response
}, (error) => {
if (error.response.status === 401) {
accessToken = null
}
})
const devArtInit = async () => {
//Init shit
console.log("Initing DevArt");
if(accessToken) {
console.log('returning existing token')
return accessToken
}
const params = new url.URLSearchParams({...devArt});
await axios.post('https://www.deviantart.com/oauth2/token', params.toString())
.then((resp) => {
accessToken = resp.data.access_token;
return accessToken
})
.catch((err) => {
console.error(err)
});
}
const oEmbed = async (url) => {
let returnUrl;
await axios.get(`https://backend.deviantart.com/oembed?url=${url}&format=json`)
.then((resp) => {
returnUrl = resp.data.url;
})
.catch((err) => {
console.err(err);
})
return returnUrl;
}
const searchTags = async (tagName) => {
let returnTag;
await devArtInit();
await axios.get(`https://www.deviantart.com/api/v1/oauth2/browse/tags/search?tag_name=${tagName}&access_token=${accessToken}&mature_content=true`)
.then((resp) => {
// console.log("Tags you got: " + resp.data.results);
returnTag = resp.data.results;
})
.catch((err) => {
if(err.response){
console.error(err.response);
}else if(err.request){
console.error(err.request);
}else{
console.error(err);
}
});
return returnTag;
}
const searchWithTag = async (userId, tagName) => {
console.log("User ID: " + userId);
console.log("Tag Searched for: " + tagName);
await recordUserSearch(userId, tagName);
const randTags = await searchTags(tagName);
randTags.map((tag) => console.log(Object.values(tag)));
const randTag = randTags[Math.floor(Math.random() * (randTags.length - 1))];
let returnUrl;
console.log('Searching for tag: ' + randTag.tag_name);
await axios.get(`https://www.deviantart.com/api/v1/oauth2/browse/tags?tag=${randTag.tag_name}&limit=50&access_token=${accessToken}&mature_content=true`)
.then((resp) => {
// console.log(resp.data.results);
returnUrl = oEmbed(getRandUrlFromResults(resp.data.results));
})
.catch((err) => {
console.log(err);
})
return returnUrl;
};
const searchWithAllTags = async (tagName) => {
const randTags = await searchTags(tagName);
for (const tag of randTags){
console.log('Searching for tag: ' + tag.tag_name);
await axios.get(`https://www.deviantart.com/api/v1/oauth2/browse/tags?tag=${tag.tag_name}&limit=2&access_token=${accessToken}&mature_content=true`)
.then((resp) => {
console.log(resp.data);
})
.catch((err) => {
console.log(err);
})
}
};
const getRandUrlFromResults = (results) => {
const element = results[Math.floor(Math.random() * (results.length-1))];
return element.url;
}
exports.init = devArtInit;
exports.search = searchTags;
exports.searchWithTag = searchWithTag;