cs2tracker 2.1.1__py3-none-any.whl → 2.1.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of cs2tracker might be problematic. Click here for more details.
- cs2tracker/__main__.py +6 -1
- cs2tracker/_version.py +2 -2
- cs2tracker/application.py +52 -57
- cs2tracker/constants.py +173 -172
- cs2tracker/data/config.ini +12 -12
- cs2tracker/main.py +11 -4
- cs2tracker/scraper.py +333 -282
- {cs2tracker-2.1.1.dist-info → cs2tracker-2.1.3.dist-info}/METADATA +12 -5
- cs2tracker-2.1.3.dist-info/RECORD +14 -0
- cs2tracker-2.1.1.dist-info/RECORD +0 -14
- {cs2tracker-2.1.1.dist-info → cs2tracker-2.1.3.dist-info}/WHEEL +0 -0
- {cs2tracker-2.1.1.dist-info → cs2tracker-2.1.3.dist-info}/entry_points.txt +0 -0
- {cs2tracker-2.1.1.dist-info → cs2tracker-2.1.3.dist-info}/licenses/LICENSE.md +0 -0
- {cs2tracker-2.1.1.dist-info → cs2tracker-2.1.3.dist-info}/top_level.txt +0 -0
cs2tracker/__main__.py
CHANGED
cs2tracker/_version.py
CHANGED
cs2tracker/application.py
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import csv
|
|
2
|
-
import datetime
|
|
3
1
|
import os
|
|
4
2
|
import subprocess
|
|
5
3
|
import tkinter as tk
|
|
4
|
+
from typing import cast
|
|
6
5
|
|
|
7
6
|
import matplotlib.pyplot as plt
|
|
7
|
+
from matplotlib.axes import Axes
|
|
8
8
|
from matplotlib.dates import DateFormatter
|
|
9
9
|
|
|
10
|
-
from .constants import CONFIG_FILE, OUTPUT_FILE, TEXT_EDITOR
|
|
11
|
-
from .scraper import Scraper
|
|
10
|
+
from cs2tracker.constants import CONFIG_FILE, OUTPUT_FILE, TEXT_EDITOR
|
|
11
|
+
from cs2tracker.scraper import Scraper
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
class Application:
|
|
@@ -16,99 +16,94 @@ class Application:
|
|
|
16
16
|
self.scraper = Scraper()
|
|
17
17
|
|
|
18
18
|
def run(self):
|
|
19
|
+
"""Run the main application window with buttons for scraping prices, editing the
|
|
20
|
+
configuration, showing history in a chart, and editing the log file.
|
|
21
|
+
"""
|
|
22
|
+
application_window = self._configure_window()
|
|
23
|
+
application_window.mainloop()
|
|
24
|
+
|
|
25
|
+
def _configure_window(self):
|
|
26
|
+
"""Configure the main application window layout with buttons for the various
|
|
27
|
+
actions.
|
|
28
|
+
"""
|
|
19
29
|
window = tk.Tk()
|
|
20
30
|
window.title("CS2Tracker")
|
|
21
|
-
window.geometry("
|
|
31
|
+
window.geometry("450x450")
|
|
22
32
|
|
|
23
33
|
label = tk.Label(window, text="Welcome to CS2Tracker!")
|
|
24
|
-
label.grid(column=0, row=0, pady=50, sticky="NSEW")
|
|
25
|
-
|
|
26
34
|
run_button = tk.Button(window, text="Run!", command=self._scrape_prices)
|
|
27
35
|
edit_button = tk.Button(window, text="Edit Config", command=self._edit_config)
|
|
28
|
-
plot_button = tk.Button(
|
|
29
|
-
|
|
36
|
+
plot_button = tk.Button(window, text="Show History (Chart)", command=self._draw_plot)
|
|
37
|
+
plot_file_button = tk.Button(
|
|
38
|
+
window, text="Show History (File)", command=self._edit_log_file
|
|
30
39
|
)
|
|
31
|
-
|
|
32
|
-
|
|
40
|
+
background_checkbox_value = tk.BooleanVar(value=self.scraper.identify_background_task())
|
|
41
|
+
background_checkbox = tk.Checkbutton(
|
|
42
|
+
window,
|
|
43
|
+
text="Daily Background Calculation",
|
|
44
|
+
command=lambda: self._toggle_background_task(background_checkbox_value.get()),
|
|
45
|
+
variable=background_checkbox_value,
|
|
33
46
|
)
|
|
34
47
|
|
|
48
|
+
label.grid(row=0, column=0, pady=50, sticky="NSEW")
|
|
35
49
|
run_button.grid(row=1, column=0, pady=10, sticky="NSEW")
|
|
36
50
|
edit_button.grid(row=2, column=0, pady=10, sticky="NSEW")
|
|
37
51
|
plot_button.grid(row=3, column=0, pady=10, sticky="NSEW")
|
|
38
|
-
|
|
52
|
+
plot_file_button.grid(row=4, column=0, pady=10, sticky="NSEW")
|
|
53
|
+
background_checkbox.grid(row=5, column=0, pady=10, sticky="NS")
|
|
39
54
|
|
|
40
55
|
window.grid_columnconfigure(0, weight=1)
|
|
41
56
|
window.grid_rowconfigure(1, weight=1)
|
|
42
57
|
window.grid_rowconfigure(2, weight=1)
|
|
43
58
|
window.grid_rowconfigure(3, weight=1)
|
|
44
59
|
window.grid_rowconfigure(4, weight=1)
|
|
60
|
+
window.grid_rowconfigure(5, weight=1)
|
|
61
|
+
|
|
45
62
|
label.grid_configure(sticky="NSEW")
|
|
46
63
|
run_button.grid_configure(sticky="NSEW")
|
|
47
64
|
edit_button.grid_configure(sticky="NSEW")
|
|
48
65
|
plot_button.grid_configure(sticky="NSEW")
|
|
49
|
-
|
|
66
|
+
plot_file_button.grid_configure(sticky="NSEW")
|
|
67
|
+
background_checkbox.grid_configure(sticky="NSEW")
|
|
50
68
|
|
|
51
|
-
window
|
|
69
|
+
return window
|
|
52
70
|
|
|
53
71
|
def _scrape_prices(self):
|
|
72
|
+
"""Scrape prices from the configured sources, print the total, and save the
|
|
73
|
+
results to a file.
|
|
74
|
+
"""
|
|
54
75
|
self.scraper.scrape_prices()
|
|
55
|
-
self.scraper.print_total()
|
|
56
|
-
self.scraper.save_to_file()
|
|
57
76
|
|
|
58
77
|
def _edit_config(self):
|
|
78
|
+
"""Edit the configuration file using the specified text editor."""
|
|
59
79
|
subprocess.call([TEXT_EDITOR, CONFIG_FILE])
|
|
60
|
-
|
|
61
|
-
self.scraper.set_config(config)
|
|
80
|
+
self.scraper.parse_config()
|
|
62
81
|
|
|
63
82
|
def _draw_plot(self):
|
|
64
|
-
|
|
83
|
+
"""Draw a plot of the scraped prices over time."""
|
|
84
|
+
dates, dollars, euros = self.scraper.read_price_log()
|
|
85
|
+
|
|
86
|
+
fig, ax_raw = plt.subplots()
|
|
87
|
+
ax = cast(Axes, ax_raw)
|
|
65
88
|
|
|
66
|
-
|
|
67
|
-
ax.plot(
|
|
68
|
-
ax.plot(datesp, euros, label="Euros")
|
|
89
|
+
ax.plot(dates, dollars, label="Dollars")
|
|
90
|
+
ax.plot(dates, euros, label="Euros")
|
|
69
91
|
ax.set_xlabel("Date")
|
|
70
92
|
ax.set_ylabel("Price")
|
|
71
93
|
ax.legend()
|
|
72
94
|
|
|
73
|
-
|
|
74
|
-
ax.xaxis.set_major_formatter(
|
|
95
|
+
date_formatter = DateFormatter("%d-%m-%Y")
|
|
96
|
+
ax.xaxis.set_major_formatter(date_formatter)
|
|
75
97
|
fig.autofmt_xdate()
|
|
76
98
|
|
|
77
99
|
plt.show()
|
|
78
100
|
|
|
79
|
-
def
|
|
80
|
-
|
|
81
|
-
date_str, price_str = row
|
|
82
|
-
price = float(price_str[:-1])
|
|
83
|
-
return date_str, price
|
|
84
|
-
|
|
85
|
-
dates = []
|
|
86
|
-
dollars = []
|
|
87
|
-
euros = []
|
|
88
|
-
row_num = 0
|
|
89
|
-
|
|
90
|
-
if not os.path.isfile(OUTPUT_FILE):
|
|
91
|
-
open(OUTPUT_FILE, "w", encoding="utf-8").close()
|
|
92
|
-
|
|
93
|
-
with open(OUTPUT_FILE, "r", newline="", encoding="utf-8") as csvfile:
|
|
94
|
-
reader = csv.reader(csvfile)
|
|
95
|
-
for row in reader:
|
|
96
|
-
row_num += 1
|
|
97
|
-
date, price = parse_row(row)
|
|
98
|
-
if row_num % 2 == 0:
|
|
99
|
-
euros.append(price)
|
|
100
|
-
else:
|
|
101
|
-
dollars.append(price)
|
|
102
|
-
dates.append(date)
|
|
103
|
-
|
|
104
|
-
datesp = []
|
|
105
|
-
for date_str in dates:
|
|
106
|
-
date = datetime.datetime.strptime(date_str[:-9], "%Y-%m-%d")
|
|
107
|
-
datesp.append(date)
|
|
108
|
-
|
|
109
|
-
return datesp, dollars, euros
|
|
110
|
-
|
|
111
|
-
def _plot_file(self):
|
|
101
|
+
def _edit_log_file(self):
|
|
102
|
+
"""Opens the file containing past price calculations."""
|
|
112
103
|
if not os.path.isfile(OUTPUT_FILE):
|
|
113
104
|
open(OUTPUT_FILE, "w", encoding="utf-8").close()
|
|
114
105
|
subprocess.call([TEXT_EDITOR, OUTPUT_FILE])
|
|
106
|
+
|
|
107
|
+
def _toggle_background_task(self, enabled: bool):
|
|
108
|
+
"""Toggle whether a daily price calculation should run in the background."""
|
|
109
|
+
self.scraper.toggle_background_task(enabled)
|
cs2tracker/constants.py
CHANGED
|
@@ -1,184 +1,185 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import sys
|
|
3
3
|
|
|
4
|
-
TEXT_EDITOR = "notepad" if sys.platform
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
TEXT_EDITOR = "notepad" if sys.platform.startswith("win") else "nano"
|
|
5
|
+
PYTHON_EXECUTABLE = sys.executable
|
|
6
|
+
MODULE_DIR = os.path.dirname(os.path.abspath(__file__))
|
|
7
|
+
PROJECT_DIR = os.path.dirname(MODULE_DIR)
|
|
8
|
+
OUTPUT_FILE = os.path.join(MODULE_DIR, "data", "output.csv")
|
|
9
|
+
CONFIG_FILE = os.path.join(MODULE_DIR, "data", "config.ini")
|
|
10
|
+
BATCH_FILE = os.path.join(MODULE_DIR, "data", "cs2tracker_scraper.bat")
|
|
8
11
|
|
|
9
12
|
|
|
10
|
-
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
"
|
|
18
|
-
|
|
19
|
-
"Antwerp Legends",
|
|
20
|
-
"Antwerp Challengers",
|
|
21
|
-
"Antwerp Contenders",
|
|
22
|
-
"Antwerp Champions Autographs",
|
|
23
|
-
"Antwerp Challengers Autographs",
|
|
24
|
-
"Antwerp Legends Autographs",
|
|
25
|
-
"Antwerp Contenders Autographs",
|
|
26
|
-
"Rio Legends",
|
|
27
|
-
"Rio Challengers",
|
|
28
|
-
"Rio Contenders",
|
|
29
|
-
"Rio Champions Autographs",
|
|
30
|
-
"Rio Challengers Autographs",
|
|
31
|
-
"Rio Legends Autographs",
|
|
32
|
-
"Rio Contenders Autographs",
|
|
33
|
-
"Paris Legends",
|
|
34
|
-
"Paris Challengers",
|
|
35
|
-
"Paris Contenders",
|
|
36
|
-
"Paris Champions Autographs",
|
|
37
|
-
"Paris Challengers Autographs",
|
|
38
|
-
"Paris Legends Autographs",
|
|
39
|
-
"Paris Contenders Autographs",
|
|
40
|
-
"Copenhagen Legends",
|
|
41
|
-
"Copenhagen Challengers",
|
|
42
|
-
"Copenhagen Contenders",
|
|
43
|
-
"Copenhagen Champions Autographs",
|
|
44
|
-
"Copenhagen Challengers Autographs",
|
|
45
|
-
"Copenhagen Legends Autographs",
|
|
46
|
-
"Copenhagen Contenders Autographs",
|
|
47
|
-
"Shanghai Legends",
|
|
48
|
-
"Shanghai Challengers",
|
|
49
|
-
"Shanghai Contenders",
|
|
50
|
-
"Shanghai Champions Autographs",
|
|
51
|
-
"Shanghai Challengers Autographs",
|
|
52
|
-
"Shanghai Legends Autographs",
|
|
53
|
-
"Shanghai Contenders Autographs",
|
|
54
|
-
"Austin Legends",
|
|
55
|
-
"Austin Challengers",
|
|
56
|
-
"Austin Contenders",
|
|
57
|
-
"Austin Champions Autographs",
|
|
58
|
-
"Austin Challengers Autographs",
|
|
59
|
-
"Austin Legends Autographs",
|
|
60
|
-
"Austin Contenders Autographs",
|
|
61
|
-
]
|
|
13
|
+
RMR_CAPSULES = {
|
|
14
|
+
"page": "https://steamcommunity.com/market/search?q=2020+rmr",
|
|
15
|
+
"items": [
|
|
16
|
+
"https://steamcommunity.com/market/listings/730/2020%20RMR%20Legends",
|
|
17
|
+
"https://steamcommunity.com/market/listings/730/2020%20RMR%20Challengers",
|
|
18
|
+
"https://steamcommunity.com/market/listings/730/2020%20RMR%20Contenders",
|
|
19
|
+
],
|
|
20
|
+
"names": ["RMR Legends", "RMR Challengers", "RMR Contenders"],
|
|
21
|
+
}
|
|
62
22
|
|
|
63
|
-
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
23
|
+
STOCKHOLM_CAPSULES = {
|
|
24
|
+
"page": "https://steamcommunity.com/market/search?q=stockholm+capsule",
|
|
25
|
+
"items": [
|
|
26
|
+
"https://steamcommunity.com/market/listings/730/Stockholm%202021%20Legends%20Sticker%20Capsule",
|
|
27
|
+
"https://steamcommunity.com/market/listings/730/Stockholm%202021%20Challengers%20Sticker%20Capsule",
|
|
28
|
+
"https://steamcommunity.com/market/listings/730/Stockholm%202021%20Contenders%20Sticker%20Capsule",
|
|
29
|
+
"https://steamcommunity.com/market/listings/730/Stockholm%202021%20Champions%20Autograph%20Capsule",
|
|
30
|
+
"https://steamcommunity.com/market/listings/730/Stockholm%202021%20Finalists%20Autograph%20Capsule",
|
|
31
|
+
],
|
|
32
|
+
"names": [
|
|
33
|
+
"Stockholm Legends",
|
|
34
|
+
"Stockholm Challengers",
|
|
35
|
+
"Stockholm Contenders",
|
|
36
|
+
"Stockholm Champions Autographs",
|
|
37
|
+
"Stockholm Finalists Autographs",
|
|
38
|
+
],
|
|
39
|
+
}
|
|
73
40
|
|
|
74
|
-
|
|
75
|
-
"https://steamcommunity.com/market/search?q=
|
|
76
|
-
"
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
41
|
+
ANTWERP_CAPSULES = {
|
|
42
|
+
"page": "https://steamcommunity.com/market/search?q=antwerp+capsule",
|
|
43
|
+
"items": [
|
|
44
|
+
"https://steamcommunity.com/market/listings/730/Antwerp%202022%20Legends%20Sticker%20Capsule",
|
|
45
|
+
"https://steamcommunity.com/market/listings/730/Antwerp%202022%20Challengers%20Sticker%20Capsule",
|
|
46
|
+
"https://steamcommunity.com/market/listings/730/Antwerp%202022%20Contenders%20Sticker%20Capsule",
|
|
47
|
+
"https://steamcommunity.com/market/listings/730/Antwerp%202022%20Champions%20Autograph%20Capsule",
|
|
48
|
+
"https://steamcommunity.com/market/listings/730/Antwerp%202022%20Challengers%20Autograph%20Capsule",
|
|
49
|
+
"https://steamcommunity.com/market/listings/730/Antwerp%202022%20Legends%20Autograph%20Capsule",
|
|
50
|
+
"https://steamcommunity.com/market/listings/730/Antwerp%202022%20Contenders%20Autograph%20Capsule",
|
|
51
|
+
],
|
|
52
|
+
"names": [
|
|
53
|
+
"Antwerp Legends",
|
|
54
|
+
"Antwerp Challengers",
|
|
55
|
+
"Antwerp Contenders",
|
|
56
|
+
"Antwerp Champions Autographs",
|
|
57
|
+
"Antwerp Challengers Autographs",
|
|
58
|
+
"Antwerp Legends Autographs",
|
|
59
|
+
"Antwerp Contenders Autographs",
|
|
60
|
+
],
|
|
61
|
+
}
|
|
84
62
|
|
|
85
|
-
|
|
86
|
-
"https://steamcommunity.com/market/
|
|
87
|
-
"
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
"
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
"https://steamcommunity.com/market/listings/730/Rio%202022%20Legends%20Autograph%20Capsule",
|
|
107
|
-
"https://steamcommunity.com/market/listings/730/Rio%202022%20Contenders%20Autograph%20Capsule",
|
|
108
|
-
"https://steamcommunity.com/market/listings/730/Paris%202023%20Legends%20Sticker%20Capsule",
|
|
109
|
-
"https://steamcommunity.com/market/listings/730/Paris%202023%20Challengers%20Sticker%20Capsule",
|
|
110
|
-
"https://steamcommunity.com/market/listings/730/Paris%202023%20Contenders%20Sticker%20Capsule",
|
|
111
|
-
"https://steamcommunity.com/market/listings/730/Paris%202023%20Champions%20Autograph%20Capsule",
|
|
112
|
-
"https://steamcommunity.com/market/listings/730/Paris%202023%20Challengers%20Autograph%20Capsule",
|
|
113
|
-
"https://steamcommunity.com/market/listings/730/Paris%202023%20Legends%20Autograph%20Capsule",
|
|
114
|
-
"https://steamcommunity.com/market/listings/730/Paris%202023%20Contenders%20Autograph%20Capsule",
|
|
115
|
-
"https://steamcommunity.com/market/listings/730/Copenhagen%202024%20Legends%20Sticker%20Capsule",
|
|
116
|
-
"https://steamcommunity.com/market/listings/730/Copenhagen%202024%20Challengers%20Sticker%20Capsule",
|
|
117
|
-
"https://steamcommunity.com/market/listings/730/Copenhagen%202024%20Contenders%20Sticker%20Capsule",
|
|
118
|
-
"https://steamcommunity.com/market/listings/730/Copenhagen%202024%20Champions%20Autograph%20Capsule",
|
|
119
|
-
"https://steamcommunity.com/market/listings/730/Copenhagen%202024%20Challengers%20Autograph%20Capsule",
|
|
120
|
-
"https://steamcommunity.com/market/listings/730/Copenhagen%202024%20Legends%20Autograph%20Capsule",
|
|
121
|
-
"https://steamcommunity.com/market/listings/730/Copenhagen%202024%20Contenders%20Autograph%20Capsule",
|
|
122
|
-
"https://steamcommunity.com/market/listings/730/Shanghai%202024%20Legends%20Sticker%20Capsule",
|
|
123
|
-
"https://steamcommunity.com/market/listings/730/Shanghai%202024%20Challengers%20Sticker%20Capsule",
|
|
124
|
-
"https://steamcommunity.com/market/listings/730/Shanghai%202024%20Contenders%20Sticker%20Capsule",
|
|
125
|
-
"https://steamcommunity.com/market/listings/730/Shanghai%202024%20Champions%20Autograph%20Capsule",
|
|
126
|
-
"https://steamcommunity.com/market/listings/730/Shanghai%202024%20Challengers%20Autograph%20Capsule",
|
|
127
|
-
"https://steamcommunity.com/market/listings/730/Shanghai%202024%20Legends%20Autograph%20Capsule",
|
|
128
|
-
"https://steamcommunity.com/market/listings/730/Shanghai%202024%20Contenders%20Autograph%20Capsule",
|
|
129
|
-
"https://steamcommunity.com/market/listings/730/Austin%202025%20Legends%20Sticker%20Capsule",
|
|
130
|
-
"https://steamcommunity.com/market/listings/730/Austin%202025%20Challengers%20Sticker%20Capsule",
|
|
131
|
-
"https://steamcommunity.com/market/listings/730/Austin%202025%20Contenders%20Sticker%20Capsule",
|
|
132
|
-
"https://steamcommunity.com/market/listings/730/Austin%202025%20Champions%20Autograph%20Capsule",
|
|
133
|
-
"https://steamcommunity.com/market/listings/730/Austin%202025%20Challengers%20Autograph%20Capsule",
|
|
134
|
-
"https://steamcommunity.com/market/listings/730/Austin%202025%20Legends%20Autograph%20Capsule",
|
|
135
|
-
"https://steamcommunity.com/market/listings/730/Austin%202025%20Contenders%20Autograph%20Capsule",
|
|
136
|
-
]
|
|
63
|
+
RIO_CAPSULES = {
|
|
64
|
+
"page": "https://steamcommunity.com/market/search?q=rio+capsule",
|
|
65
|
+
"items": [
|
|
66
|
+
"https://steamcommunity.com/market/listings/730/Rio%202022%20Legends%20Sticker%20Capsule",
|
|
67
|
+
"https://steamcommunity.com/market/listings/730/Rio%202022%20Challengers%20Sticker%20Capsule",
|
|
68
|
+
"https://steamcommunity.com/market/listings/730/Rio%202022%20Contenders%20Sticker%20Capsule",
|
|
69
|
+
"https://steamcommunity.com/market/listings/730/Rio%202022%20Champions%20Autograph%20Capsule",
|
|
70
|
+
"https://steamcommunity.com/market/listings/730/Rio%202022%20Challengers%20Autograph%20Capsule",
|
|
71
|
+
"https://steamcommunity.com/market/listings/730/Rio%202022%20Legends%20Autograph%20Capsule",
|
|
72
|
+
"https://steamcommunity.com/market/listings/730/Rio%202022%20Contenders%20Autograph%20Capsule",
|
|
73
|
+
],
|
|
74
|
+
"names": [
|
|
75
|
+
"Rio Legends",
|
|
76
|
+
"Rio Challengers",
|
|
77
|
+
"Rio Contenders",
|
|
78
|
+
"Rio Champions Autographs",
|
|
79
|
+
"Rio Challengers Autographs",
|
|
80
|
+
"Rio Legends Autographs",
|
|
81
|
+
"Rio Contenders Autographs",
|
|
82
|
+
],
|
|
83
|
+
}
|
|
137
84
|
|
|
138
|
-
|
|
139
|
-
"
|
|
140
|
-
"
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
"
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
"
|
|
162
|
-
"
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
"
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
85
|
+
PARIS_CAPSULES = {
|
|
86
|
+
"page": "https://steamcommunity.com/market/search?q=paris+capsule",
|
|
87
|
+
"items": [
|
|
88
|
+
"https://steamcommunity.com/market/listings/730/Paris%202023%20Legends%20Sticker%20Capsule",
|
|
89
|
+
"https://steamcommunity.com/market/listings/730/Paris%202023%20Challengers%20Sticker%20Capsule",
|
|
90
|
+
"https://steamcommunity.com/market/listings/730/Paris%202023%20Contenders%20Sticker%20Capsule",
|
|
91
|
+
"https://steamcommunity.com/market/listings/730/Paris%202023%20Champions%20Autograph%20Capsule",
|
|
92
|
+
"https://steamcommunity.com/market/listings/730/Paris%202023%20Challengers%20Autograph%20Capsule",
|
|
93
|
+
"https://steamcommunity.com/market/listings/730/Paris%202023%20Legends%20Autograph%20Capsule",
|
|
94
|
+
"https://steamcommunity.com/market/listings/730/Paris%202023%20Contenders%20Autograph%20Capsule",
|
|
95
|
+
],
|
|
96
|
+
"names": [
|
|
97
|
+
"Paris Legends",
|
|
98
|
+
"Paris Challengers",
|
|
99
|
+
"Paris Contenders",
|
|
100
|
+
"Paris Champions Autographs",
|
|
101
|
+
"Paris Challengers Autographs",
|
|
102
|
+
"Paris Legends Autographs",
|
|
103
|
+
"Paris Contenders Autographs",
|
|
104
|
+
],
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
COPENHAGEN_CAPSULES = {
|
|
108
|
+
"page": "https://steamcommunity.com/market/search?q=copenhagen+capsule",
|
|
109
|
+
"items": [
|
|
110
|
+
"https://steamcommunity.com/market/listings/730/Copenhagen%202024%20Legends%20Sticker%20Capsule",
|
|
111
|
+
"https://steamcommunity.com/market/listings/730/Copenhagen%202024%20Challengers%20Sticker%20Capsule",
|
|
112
|
+
"https://steamcommunity.com/market/listings/730/Copenhagen%202024%20Contenders%20Sticker%20Capsule",
|
|
113
|
+
"https://steamcommunity.com/market/listings/730/Copenhagen%202024%20Champions%20Autograph%20Capsule",
|
|
114
|
+
"https://steamcommunity.com/market/listings/730/Copenhagen%202024%20Challengers%20Autograph%20Capsule",
|
|
115
|
+
"https://steamcommunity.com/market/listings/730/Copenhagen%202024%20Legends%20Autograph%20Capsule",
|
|
116
|
+
"https://steamcommunity.com/market/listings/730/Copenhagen%202024%20Contenders%20Autograph%20Capsule",
|
|
117
|
+
],
|
|
118
|
+
"names": [
|
|
119
|
+
"Copenhagen Legends",
|
|
120
|
+
"Copenhagen Challengers",
|
|
121
|
+
"Copenhagen Contenders",
|
|
122
|
+
"Copenhagen Champions Autographs",
|
|
123
|
+
"Copenhagen Challengers Autographs",
|
|
124
|
+
"Copenhagen Legends Autographs",
|
|
125
|
+
"Copenhagen Contenders Autographs",
|
|
126
|
+
],
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
SHANGHAI_CAPSULES = {
|
|
130
|
+
"page": "https://steamcommunity.com/market/search?q=shanghai+capsule",
|
|
131
|
+
"items": [
|
|
132
|
+
"https://steamcommunity.com/market/listings/730/Shanghai%202024%20Legends%20Sticker%20Capsule",
|
|
133
|
+
"https://steamcommunity.com/market/listings/730/Shanghai%202024%20Challengers%20Sticker%20Capsule",
|
|
134
|
+
"https://steamcommunity.com/market/listings/730/Shanghai%202024%20Contenders%20Sticker%20Capsule",
|
|
135
|
+
"https://steamcommunity.com/market/listings/730/Shanghai%202024%20Champions%20Autograph%20Capsule",
|
|
136
|
+
"https://steamcommunity.com/market/listings/730/Shanghai%202024%20Challengers%20Autograph%20Capsule",
|
|
137
|
+
"https://steamcommunity.com/market/listings/730/Shanghai%202024%20Legends%20Autograph%20Capsule",
|
|
138
|
+
"https://steamcommunity.com/market/listings/730/Shanghai%202024%20Contenders%20Autograph%20Capsule",
|
|
139
|
+
],
|
|
140
|
+
"names": [
|
|
141
|
+
"Shanghai Legends",
|
|
142
|
+
"Shanghai Challengers",
|
|
143
|
+
"Shanghai Contenders",
|
|
144
|
+
"Shanghai Champions Autographs",
|
|
145
|
+
"Shanghai Challengers Autographs",
|
|
146
|
+
"Shanghai Legends Autographs",
|
|
147
|
+
"Shanghai Contenders Autographs",
|
|
148
|
+
],
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
AUSTIN_CAPSULES = {
|
|
152
|
+
"page": "https://steamcommunity.com/market/search?q=austin+capsule",
|
|
153
|
+
"items": [
|
|
154
|
+
"https://steamcommunity.com/market/listings/730/Austin%202025%20Legends%20Sticker%20Capsule",
|
|
155
|
+
"https://steamcommunity.com/market/listings/730/Austin%202025%20Challengers%20Sticker%20Capsule",
|
|
156
|
+
"https://steamcommunity.com/market/listings/730/Austin%202025%20Contenders%20Sticker%20Capsule",
|
|
157
|
+
"https://steamcommunity.com/market/listings/730/Austin%202025%20Champions%20Autograph%20Capsule",
|
|
158
|
+
"https://steamcommunity.com/market/listings/730/Austin%202025%20Challengers%20Autograph%20Capsule",
|
|
159
|
+
"https://steamcommunity.com/market/listings/730/Austin%202025%20Legends%20Autograph%20Capsule",
|
|
160
|
+
"https://steamcommunity.com/market/listings/730/Austin%202025%20Contenders%20Autograph%20Capsule",
|
|
161
|
+
],
|
|
162
|
+
"names": [
|
|
163
|
+
"Austin Legends",
|
|
164
|
+
"Austin Challengers",
|
|
165
|
+
"Austin Contenders",
|
|
166
|
+
"Austin Champions Autographs",
|
|
167
|
+
"Austin Challengers Autographs",
|
|
168
|
+
"Austin Legends Autographs",
|
|
169
|
+
"Austin Contenders Autographs",
|
|
170
|
+
],
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
CAPSULE_INFO = {
|
|
174
|
+
"2020 RMR Sticker Capsule": RMR_CAPSULES,
|
|
175
|
+
"Stockholm Sticker Capsule": STOCKHOLM_CAPSULES,
|
|
176
|
+
"Antwerp Sticker Capsule": ANTWERP_CAPSULES,
|
|
177
|
+
"Rio Sticker Capsule": RIO_CAPSULES,
|
|
178
|
+
"Paris Sticker Capsule": PARIS_CAPSULES,
|
|
179
|
+
"Copenhagen Sticker Capsule": COPENHAGEN_CAPSULES,
|
|
180
|
+
"Shanghai Sticker Capsule": SHANGHAI_CAPSULES,
|
|
181
|
+
"Austin Sticker Capsule": AUSTIN_CAPSULES,
|
|
182
|
+
}
|
|
182
183
|
|
|
183
184
|
|
|
184
185
|
CASE_PAGES = [
|
cs2tracker/data/config.ini
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
|
-
[
|
|
1
|
+
[Settings]
|
|
2
|
+
Use_Proxy = False
|
|
3
|
+
API_Key = None
|
|
4
|
+
|
|
5
|
+
[2020 RMR Sticker Capsule]
|
|
2
6
|
RMR_Challengers = 0
|
|
3
7
|
RMR_Legends = 0
|
|
4
8
|
RMR_Contenders = 0
|
|
5
9
|
|
|
6
|
-
[Stockholm]
|
|
10
|
+
[Stockholm Sticker Capsule]
|
|
7
11
|
Stockholm_Challengers = 0
|
|
8
12
|
Stockholm_Legends = 0
|
|
9
13
|
Stockholm_Contenders = 0
|
|
10
14
|
Stockholm_Champions_Autographs = 0
|
|
11
15
|
Stockholm_Finalists_Autographs = 0
|
|
12
16
|
|
|
13
|
-
[Antwerp]
|
|
17
|
+
[Antwerp Sticker Capsule]
|
|
14
18
|
Antwerp_Challengers = 0
|
|
15
19
|
Antwerp_Legends = 0
|
|
16
20
|
Antwerp_Contenders = 0
|
|
@@ -19,7 +23,7 @@ Antwerp_Contenders_Autographs = 0
|
|
|
19
23
|
Antwerp_Challengers_Autographs = 0
|
|
20
24
|
Antwerp_Legends_Autographs = 0
|
|
21
25
|
|
|
22
|
-
[Rio]
|
|
26
|
+
[Rio Sticker Capsule]
|
|
23
27
|
Rio_Challengers = 0
|
|
24
28
|
Rio_Legends = 0
|
|
25
29
|
Rio_Contenders = 0
|
|
@@ -28,7 +32,7 @@ Rio_Contenders_Autographs = 0
|
|
|
28
32
|
Rio_Challengers_Autographs = 0
|
|
29
33
|
Rio_Legends_Autographs = 0
|
|
30
34
|
|
|
31
|
-
[Paris]
|
|
35
|
+
[Paris Sticker Capsule]
|
|
32
36
|
Paris_Challengers = 0
|
|
33
37
|
Paris_Legends = 0
|
|
34
38
|
Paris_Contenders = 0
|
|
@@ -37,7 +41,7 @@ Paris_Contenders_Autographs = 0
|
|
|
37
41
|
Paris_Challengers_Autographs = 0
|
|
38
42
|
Paris_Legends_Autographs = 0
|
|
39
43
|
|
|
40
|
-
[Copenhagen]
|
|
44
|
+
[Copenhagen Sticker Capsule]
|
|
41
45
|
Copenhagen_Challengers = 0
|
|
42
46
|
Copenhagen_Legends = 0
|
|
43
47
|
Copenhagen_Contenders = 0
|
|
@@ -46,7 +50,7 @@ Copenhagen_Contenders_Autographs = 0
|
|
|
46
50
|
Copenhagen_Challengers_Autographs = 0
|
|
47
51
|
Copenhagen_Legends_Autographs = 0
|
|
48
52
|
|
|
49
|
-
[Shanghai]
|
|
53
|
+
[Shanghai Sticker Capsule]
|
|
50
54
|
Shanghai_Challengers = 0
|
|
51
55
|
Shanghai_Legends = 0
|
|
52
56
|
Shanghai_Contenders = 0
|
|
@@ -55,7 +59,7 @@ Shanghai_Contenders_Autographs = 0
|
|
|
55
59
|
Shanghai_Challengers_Autographs = 0
|
|
56
60
|
Shanghai_Legends_Autographs = 0
|
|
57
61
|
|
|
58
|
-
[Austin]
|
|
62
|
+
[Austin Sticker Capsule]
|
|
59
63
|
Austin_Challengers = 0
|
|
60
64
|
Austin_Legends = 0
|
|
61
65
|
Austin_Contenders = 0
|
|
@@ -107,7 +111,3 @@ Winter_Offensive_Case = 0
|
|
|
107
111
|
Kilowatt_Case = 0
|
|
108
112
|
Gallery_Case = 0
|
|
109
113
|
Fever_Case = 0
|
|
110
|
-
|
|
111
|
-
[Proxy API Key]
|
|
112
|
-
Use_Proxy = False
|
|
113
|
-
API_Key = None
|