incomplete

This commit is contained in:
Alexander Popov 2023-08-04 15:48:48 +03:00
parent 7fbb71a4c1
commit fdcba863c2
13 changed files with 239 additions and 43 deletions

View File

@ -20,6 +20,10 @@ indent_size = 4
indent_style = space indent_style = space
indent_size = 2 indent_size = 2
[{*.cr,shard.yml}]
indent_style = space
indent_size = 2
[humans.txt] [humans.txt]
indent_style = tab indent_style = tab
indent_size = 2 indent_size = 2

View File

@ -3,3 +3,4 @@ app/assets/css/bootstrap*
app/assets/js/bootstrap* app/assets/js/bootstrap*
package.json package.json
package-lock.json package-lock.json
server/

View File

@ -1,8 +1,12 @@
import { routes } from './routes.js'; import { routes } from './routes.js';
let DEBUG = false; let DEBUG = true;
window.DEBUG = DEBUG; window.DEBUG = DEBUG;
let SERVER_URL;
if (DEBUG) SERVER_HOST = 'localhost';
else SERVER_HOST = 'a2s.su';
/* main */ /* main */
window.onload = function () { window.onload = function () {
let app = document.documentElement; let app = document.documentElement;
@ -69,3 +73,21 @@ const location_handler = async () => {
document.querySelector('#autorun').innerHTML = ''; document.querySelector('#autorun').innerHTML = '';
} }
}; };
function get_from_api(callback, api_method = '', params = {}) {
respone = '';
if (api_method == '') {
console.log('wrong method');
} else {
fetch(`http://${SERVER_HOST}:3000/api/v1.0/${api_method}`)
.then((response) => {
return response.json();
})
.then((data) => {
callback(data);
})
.catch((err) => console.warn('Something went wrong.', err));
}
}
window.get_from_api = get_from_api;

3
public/js/rev2.js Normal file
View File

@ -0,0 +1,3 @@
export function update_rev2(data) {
let time_remaining = document.getElementById('rev2_time_remaining')
}

View File

@ -14,26 +14,31 @@
<span class="text-nowrap">«Вторжение огромных тварей»</span> <span class="text-nowrap">«Вторжение огромных тварей»</span>
</h3> </h3>
<img <div class="d-none">
class="img-fluid shadow rounded m-3" <img
src="/content/images/2023/resident_evil_revelations_2_wallpaper_by_brendabirkin.jpg" class="img-fluid shadow rounded m-3"
/> src="/content/images/2023/resident_evil_revelations_2_wallpaper_by_brendabirkin.jpg"
<p class="text-center text-muted"> />
Изображение: <p class="text-center text-muted">
<a Изображение:
class="text-reset" <a
href="https://www.deviantart.com/brendabirkin/art/Resident-Evil-Revelations-2-Wallpaper-521674087" class="text-reset"
target="_blank" href="https://www.deviantart.com/brendabirkin/art/Resident-Evil-Revelations-2-Wallpaper-521674087"
> target="_blank"
Resident Evil Revelations 2 — Wallpaper by BrendaBirkin >
</a> Resident Evil Revelations 2 — Wallpaper by BrendaBirkin
</p> </a>
</p>
</div>
<div class="card mb-3"> <div class="card mb-3">
<div class="card-header"> <div class="card-header">
<div class="d-flex justify-content-between"> <div class="d-flex justify-content-between placeholder-glow">
<span class="fw-bold">Invasion of the Huge Creatures No. 101</span> <span class="fw-bold">Invasion of the Huge Creatures No. 101</span>
<span>Осталось времени: 656:49</span> <span
id="rev2_time_remaining"
class="placeholder col-1 rounded"
></span>
</div> </div>
</div> </div>
<div class="card-body"> <div class="card-body">
@ -56,31 +61,34 @@
/> />
</svg> </svg>
</h5> </h5>
<p class="my-1 fw-bold d-flex justify-content-between">
<span>Aello</span> <div id="rev2_emenies">
<span class="text-danger">[100 00 000 / 999 999 999]</span> <p class="my-1 fw-bold d-flex justify-content-between">
</p> <span>Aello</span>
<div <span class="text-danger">[? / ?]</span>
class="progress" </p>
role="progressbar" <div
aria-valuenow="21" class="progress"
aria-valuemin="0" role="progressbar"
aria-valuemax="100" aria-valuenow="21"
> aria-valuemin="0"
<div class="progress-bar bg-danger" style="width: 21%">21%</div> aria-valuemax="100"
</div> >
<p class="my-1 fw-bold d-flex justify-content-between"> <div class="progress-bar bg-danger" style="width: 21%">21%</div>
<span>Ocypete</span> </div>
<span class="text-danger">[100 00 000 / 999 999 999]</span> <p class="my-1 fw-bold d-flex justify-content-between">
</p> <span>Ocypete</span>
<div <span class="text-danger">[? / ?]</span>
class="progress" </p>
role="progressbar" <div
aria-valuenow="91" class="progress"
aria-valuemin="0" role="progressbar"
aria-valuemax="100" aria-valuenow="91"
> aria-valuemin="0"
<div class="progress-bar bg-danger" style="width: 91%">91%</div> aria-valuemax="100"
>
<div class="progress-bar bg-danger" style="width: 91%">91%</div>
</div>
</div> </div>
</div> </div>
<div class="card-footer text-body-secondary"> <div class="card-footer text-body-secondary">
@ -119,4 +127,19 @@
> >
</p> </p>
<script type="module"></script> <script type="module">
import { update_rev2 } from './js/rev2.js';
function autorun() {
if (true) {
get_from_api((data) => {update_rev2(data);}, 'rev2_monsters')
setInterval(autorun, 120_000); // 2 minutes
} else {
console.log(
'INFO! Включена отладка, данные не загружается!\n' +
'Файл rer2.html',
);
}
}
autorun();
</script>

3
server/.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
bin/
lib/
cache/

0
server/README.md Normal file
View File

22
server/shard.lock Normal file
View File

@ -0,0 +1,22 @@
version: 2.0
shards:
backtracer:
git: https://github.com/sija/backtracer.cr.git
version: 1.2.2
exception_page:
git: https://github.com/crystal-loot/exception_page.git
version: 0.3.1
kemal:
git: https://github.com/kemalcr/kemal.git
version: 1.4.0
lexbor:
git: https://github.com/kostya/lexbor.git
version: 3.1.2
radix:
git: https://github.com/luislavena/radix.git
version: 0.4.1

24
server/shard.yml Normal file
View File

@ -0,0 +1,24 @@
name: api_server
version: 0.1.0
authors:
- Alexander Popov <iiiypuk@fastmail.fm>
# description: |
# Short description of server
targets:
api:
main: src/api.cr
dependencies:
kemal:
github: kemalcr/kemal
lexbor:
github: kostya/lexbor
# development_dependencies:
# webmock:
# github: manastech/webmock.cr
license: WTFPL

11
server/src/api.cr Normal file
View File

@ -0,0 +1,11 @@
require "kemal"
require "./modules/*"
APP = {version: "1.0.0"}
get "/" do
render "#{__DIR__}/layouts/index.ecr"
end
Kemal.config.env = "development"
Kemal.run

View File

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>api</title>
</head>
<body>
<main>
<p>:-p</p>
</main>
</body>
</html>

View File

@ -0,0 +1,16 @@
require "json"
get "/info" do |env|
version = APP["version"]
if env.params.query["json"]?
env.response.content_type = "application/json"
data = {version: version}.to_json
data
else
env.response.content_type = "text/plain"
"Vesrion: #{version}"
end
end

View File

@ -0,0 +1,54 @@
require "http/client"
require "json"
require "lexbor"
# ...
#
# Output:
# ```
# ...
# ```
get "/api/v1.0/rev2_monsters" do |env|
url = "https://game.capcom.com/residentevil/en/onlineevent-4_1108.html"
cache_time = File.read("./cache/rev2/time.txt").to_i
timestamp = Time.local.to_unix
if timestamp > cache_time + 3600 # 1 hour
response = HTTP::Client.get url
time_remaining = ""
enemies = [] of String
Lexbor::Parser.new(response.body).nodes(:dl).each do |node|
if node["class"]?
if node["class"] == "timer big status_1 hard windows"
time_remaining = node.inner_text.split[2]
end
if node["class"] == "status hard windows status_1"
enemies = node.inner_text.split
enemies.delete_at(0, 2)
end
end
end
enemies.each_with_index do |ememy, i|
hp = /\d+%/.match(ememy)
enemies[i] = enemies[i].gsub(/\d+%/, " \\0")
end
response = {time_remaining: time_remaining, enemies: enemies}.to_json
File.write("./cache/rev2/time.txt", timestamp)
File.write("./cache/rev2/data.json", response)
else
response = File.read("./cache/rev2/data.json")
end
env.response.content_type = "application/json"
env.response.headers.add("Access-Control-Allow-Origin", "*")
response
end