moved api from monorepo
This commit is contained in:
49
scripts/adminUser.js
Normal file
49
scripts/adminUser.js
Normal file
@@ -0,0 +1,49 @@
|
||||
// noinspection SpellCheckingInspection
|
||||
|
||||
import UserModel from '../models/User.js'
|
||||
// import Bun.password from 'argon2'
|
||||
import gravatar from 'gravatar'
|
||||
|
||||
const createAdmin = async () => {
|
||||
try {
|
||||
const hash = await Bun.password.hash('game$databaseadmin1')
|
||||
|
||||
const oldUser = await UserModel.findOne({
|
||||
email: 'admin@gamesdatabase.com',
|
||||
})
|
||||
|
||||
if (oldUser) {
|
||||
return
|
||||
}
|
||||
|
||||
const avatar = gravatar.url('admin@gamesdatabase.com', {
|
||||
s: '200',
|
||||
r: 'pg',
|
||||
d: 'retro',
|
||||
})
|
||||
|
||||
const user = new UserModel({
|
||||
name: 'Admin',
|
||||
email: 'admin@gamesdatabase.com',
|
||||
password: hash,
|
||||
displayName: 'Administrator',
|
||||
avatar,
|
||||
role: 'admin',
|
||||
gamesCreated: [],
|
||||
gamesToAccess: [],
|
||||
})
|
||||
|
||||
await user.save((err) => {
|
||||
console.log('Admin user successfully created')
|
||||
if (err) {
|
||||
return console.error('Could not save admin user')
|
||||
}
|
||||
})
|
||||
} catch (err) {
|
||||
return console.error(
|
||||
'Server Error: Could not create admin user' + err.message
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
export default createAdmin
|
175
scripts/scraper.js
Normal file
175
scripts/scraper.js
Normal file
@@ -0,0 +1,175 @@
|
||||
import {parse} from "node-html-parser";
|
||||
|
||||
const steamScraper = async (resData) => {
|
||||
const {_id, steamId, series, wine, intel} = resData
|
||||
const {playStatus, soundtrack} = resData.accessedBy[0]
|
||||
if (steamId === null || steamId === '') {
|
||||
return 'Please enter a valid Steam Id'
|
||||
}
|
||||
const steamApiUrl = `https://store.steampowered.com/api/appdetails/?appids=${steamId}`
|
||||
const steamRatingApiUrl = `https://store.steampowered.com/appreviews/${steamId}?json=1`
|
||||
const steamWebUrl = `https://store.steampowered.com/app/${steamId}`
|
||||
try {
|
||||
const apiResponse = await fetch(steamApiUrl, {
|
||||
headers: {
|
||||
Accept:
|
||||
'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
|
||||
'Accept-Encoding': 'gzip, deflate, br',
|
||||
'Accept-Language': 'en-US',
|
||||
Connection: 'keep-alive',
|
||||
Host:
|
||||
'store.steampowered.com',
|
||||
'Upgrade-Insecure-Requests': '1',
|
||||
'User-Agent':
|
||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0',
|
||||
},
|
||||
}),
|
||||
steamRatingApiResponse = await fetch(steamRatingApiUrl, {
|
||||
headers: {
|
||||
Accept:
|
||||
'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
|
||||
'Accept-Encoding': 'gzip, deflate, br',
|
||||
'Accept-Language': 'en-US',
|
||||
Connection: 'keep-alive',
|
||||
Cookie: 'birthtime=470682001;path=/;domain=store.steampowered.com',
|
||||
Host:
|
||||
'store.steampowered.com',
|
||||
'Upgrade-Insecure-Requests': '1',
|
||||
'User-Agent':
|
||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0',
|
||||
},
|
||||
}),
|
||||
webResponse = await fetch(steamWebUrl, {
|
||||
headers: {
|
||||
Accept:
|
||||
'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
|
||||
'Accept-Encoding': 'gzip, deflate, br',
|
||||
'Accept-Language': 'en-US',
|
||||
Connection: 'keep-alive',
|
||||
Cookie: 'birthtime=470682001;path=/;domain=store.steampowered.com',
|
||||
Host:
|
||||
'store.steampowered.com',
|
||||
'Upgrade-Insecure-Requests': '1',
|
||||
'User-Agent':
|
||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0',
|
||||
},
|
||||
}),
|
||||
apiAnswer = await apiResponse.json(),
|
||||
steamRatingApiAnswer = await steamRatingApiResponse.json(),
|
||||
webAnswer = await webResponse.text(),
|
||||
success = apiAnswer[steamId]['success']
|
||||
if (success === true) {
|
||||
const data = apiAnswer[steamId]['data']
|
||||
const steamRating = steamRatingApiAnswer['success'] === 1 ?
|
||||
steamRatingApiAnswer['query_summary']['review_score'] :
|
||||
0
|
||||
const webData = parse(webAnswer)
|
||||
|
||||
const screenshots = data.screenshots?.map((screenshot) => ({
|
||||
id: screenshot.id,
|
||||
full: screenshot.path_full,
|
||||
thumbnail: screenshot.path_thumbnail,
|
||||
})) || [],
|
||||
steamGenres = data.genres?.map((genre) => genre.description) || [],
|
||||
tags = webData.querySelectorAll('.app_tag').map(x => {
|
||||
let tag = x.rawText.trim() !== '+' && x.rawText.trim()
|
||||
if (typeof tag == 'string' && tag.includes("&")) tag = tag.replace("&", "&")
|
||||
return tag
|
||||
}),
|
||||
manualGenres = resData.genre || [],
|
||||
genre = [...new Set([...steamGenres, ...manualGenres, ...tags])].filter(x => x !== "" & x !== false),
|
||||
filterController = data.categories
|
||||
? data.categories.filter((x) => {
|
||||
if (x.id === 28 || x.id === 18) {
|
||||
return x
|
||||
}
|
||||
})
|
||||
: [],
|
||||
controller =
|
||||
filterController.length === 1
|
||||
? filterController[0].description
|
||||
.split(' ')
|
||||
.map(word => word[0].toUpperCase() + word.substring(1).toLowerCase())
|
||||
.join(' ')
|
||||
: 'No Controller Support',
|
||||
store = resData.accessedBy[0].store.length > 0 ? resData.accessedBy[0].store : ['Steam'],
|
||||
createdBy = resData.createdBy || '',
|
||||
lastModifiedBy = resData.lastModifiedBy || '',
|
||||
user = resData.accessedBy[0].user || '',
|
||||
reviews = resData.reviews || '',
|
||||
rating = resData.rating || 0,
|
||||
json = {
|
||||
_id,
|
||||
steamId,
|
||||
title: data.name,
|
||||
series,
|
||||
frontImage: data.header_image,
|
||||
screenshots,
|
||||
genre,
|
||||
os: data.platforms,
|
||||
wine,
|
||||
controller,
|
||||
developer: data.developers,
|
||||
publisher: data.publishers,
|
||||
releaseDate: data.release_date.date,
|
||||
shortDesc: data.short_description,
|
||||
reviews,
|
||||
summary: data.about_the_game,
|
||||
steamRating,
|
||||
intel,
|
||||
systemRequirements: {
|
||||
windows: {
|
||||
minimum: '',
|
||||
recommended: '',
|
||||
},
|
||||
mac: {
|
||||
minimum: '',
|
||||
recommended: '',
|
||||
},
|
||||
linux: {
|
||||
minimum: '',
|
||||
recommended: '',
|
||||
},
|
||||
},
|
||||
createdBy,
|
||||
lastModifiedBy,
|
||||
accessedBy: [
|
||||
{
|
||||
user,
|
||||
store,
|
||||
playStatus,
|
||||
soundtrack,
|
||||
},
|
||||
],
|
||||
rating,
|
||||
}
|
||||
|
||||
if (data.platforms.windows) {
|
||||
json.systemRequirements.windows.minimum =
|
||||
data.pc_requirements.minimum || ''
|
||||
json.systemRequirements.windows.recommended =
|
||||
data.pc_requirements.recommended || ''
|
||||
}
|
||||
if (data.platforms.mac) {
|
||||
json.systemRequirements.mac.minimum =
|
||||
data.mac_requirements.minimum || ''
|
||||
json.systemRequirements.mac.recommended =
|
||||
data.mac_requirements.recommended || ''
|
||||
}
|
||||
if (data.platforms.linux) {
|
||||
json.systemRequirements.linux.minimum =
|
||||
data.linux_requirements.minimum || ''
|
||||
json.systemRequirements.linux.recommended =
|
||||
data.linux_requirements.recommended || ''
|
||||
}
|
||||
return json
|
||||
} else {
|
||||
return success
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
return error
|
||||
}
|
||||
}
|
||||
|
||||
export default steamScraper
|
Reference in New Issue
Block a user