From f1dd5fb810518cce8d50a6f19a5a19659e4e82a0 Mon Sep 17 00:00:00 2001 From: Alex55 Date: Mon, 23 Mar 2026 15:12:27 +0200 Subject: [PATCH] 231312 --- API/ggprice.py | 129 +++++++++++++++++++++++ API/ww | 1 + app/__pycache__/routes.cpython-313.pyc | Bin 5573 -> 6208 bytes app/routes.py | 11 +- images/1.jpg | Bin 0 -> 51533 bytes main.py | 3 + services/__pycache__/tim.cpython-313.pyc | Bin 560 -> 636 bytes services/gg.py | 24 ++++- services/mailer.py | 55 ++++++++++ services/send_mai.py | 66 ++++++++++++ services/template_engine.py | 28 +++++ services/tim.py | 2 + services/utils.py | 28 +++++ templates/welcome.html | 54 ++++++++++ 14 files changed, 398 insertions(+), 3 deletions(-) create mode 100644 API/ggprice.py create mode 100644 images/1.jpg create mode 100644 services/mailer.py create mode 100644 services/send_mai.py create mode 100644 services/template_engine.py create mode 100644 services/utils.py create mode 100644 templates/welcome.html diff --git a/API/ggprice.py b/API/ggprice.py new file mode 100644 index 0000000..6fbe344 --- /dev/null +++ b/API/ggprice.py @@ -0,0 +1,129 @@ +import sqlite3 +import requests +import time + +# ====================== +# CONFIG +# ====================== + +DB_PATH = "rokky.db" + +API_URL = "https://seller.ggsel.com/api_sellers/api/product/edit/prices" +TOKEN = "YOUR_TOKEN" + +BATCH_SIZE = 200 # сколько товаров за раз отправлять +SLEEP_BETWEEN = 1 # задержка между батчами (сек) + +# ====================== +# DB +# ====================== + +def get_products_for_update(conn): + cursor = conn.cursor() + + cursor.execute(""" + SELECT product_id, price + FROM products + WHERE product_id IS NOT NULL + AND price IS NOT NULL + """) + + return cursor.fetchall() + + +# ====================== +# BUILD PAYLOAD +# ====================== + +def build_payload(rows): + payload = [] + + for product_id, price in rows: + payload.append({ + "product_id": int(product_id), + "price": float(price) + }) + + return payload + + +# ====================== +# CHUNKING +# ====================== + +def chunked(data, size): + for i in range(0, len(data), size): + yield data[i:i + size] + + +# ====================== +# SEND REQUEST +# ====================== + +def send_prices(payload): + try: + response = requests.post( + f"{API_URL}?token={TOKEN}", + json=payload, + timeout=30 + ) + + print("STATUS:", response.status_code) + + if response.status_code != 200: + print("ERROR:", response.text) + return None + + data = response.json() + print("RESPONSE:", data) + + return data + + except Exception as e: + print("REQUEST ERROR:", e) + return None + + +# ====================== +# SYNC +# ====================== + +def sync_prices(): + conn = sqlite3.connect(DB_PATH) + + rows = get_products_for_update(conn) + payload = build_payload(rows) + + total = len(payload) + print(f"Всего товаров: {total}") + + if total == 0: + print("Нет данных для обновления") + return + + sent = 0 + + for batch in chunked(payload, BATCH_SIZE): + print(f"\nОтправка: {sent} → {sent + len(batch)}") + + result = send_prices(batch) + + if result is None: + print("Ошибка при отправке, стоп") + break + + sent += len(batch) + + time.sleep(SLEEP_BETWEEN) + + print(f"\nГотово. Отправлено: {sent}/{total}") + + conn.close() + + +# ====================== +# RUN +# ====================== + +if __name__ == "__main__": + sync_prices() \ No newline at end of file diff --git a/API/ww b/API/ww index e69de29..9ec6946 100644 --- a/API/ww +++ b/API/ww @@ -0,0 +1 @@ +5110eb4a7aa7c60d66f9648db40027f241c52673a6a7c9a136e2a02fd1711fb&amount=1.0¤cy=RUB&date=2026-03-20T10=43=09+03=00&email=rusinowdima2@yandex.ru&id_d=102180432&id_i=21327450&ip=188.32.208.151&is_my_product=true \ No newline at end of file diff --git a/app/__pycache__/routes.cpython-313.pyc b/app/__pycache__/routes.cpython-313.pyc index b807e078cae125d5e5f01814d70055832cffac0c..7933f18f211dc585b749b8649c146bc38aaef1e3 100644 GIT binary patch delta 1847 zcma)6&u<$=6rNezyLQ$;5+_cILy}GU1Duq&O`94@6k|6|8ixj&rJ|x1D`RhxZ4+;J zYc~)gIj9H7rIA=wvqcyf^#p!2M(8U7xRsu=aA#H`?C;LVm-KS`+pryVp5FZV;Ksbc&=Y&@=~J+5wKV z6Pyy-xhWU8?2!lF9t9BC=$LY+J>ao5&Z(xf2%gYGl$F_uC?R2sds7a`Kiu*vR@8FIl1{IPHt&f@a#VBgAMxD27T8) z`Zn1grMCBSs6pPnkG#Du?`Tl>?4v$VKkG9MYH5y(g#W^Oia0G#a-pOyfmSFUu>?@x zEvZJ)5-uBhL7RQwYBkhCUYP}bQORqd=88I)KhcRMUR%u0sfIY; zF1IkRt*jd^25aQ8*afV@$x1L#9bXtOOv`rvjTHq|gGy?;ZB2}*zPNEgz zZF9%}fbDZX@D>-Am|-P&PBU1%bJ9{4Sjvkk7?3be24~B?wMB4&%_3gF0)T@Ecuv6b zfqsMmgrf+U0~ln$Qmhtp^Ljyr<7mSlN5oYP1l_@D1UqF8(3kCdwsTg^gMSHvdcKq^ zDy5}-mIZZ@$*-CNt-tb^tVpjJXzM83#l`7HHHzmMVF`)XCkKHgM8Gc|zuuUzGhhV_ z6|QPI)flv|-2l6SFfW!{QLx?>1@NzLAH{MmWsCEcz}^&6mXLkNuq{lB)vG90*_}+t zDP?SO#&TZPwF2O)vRt5-Sitzo>^inf&MqiB(bX%!<2+e=?vX`yQxGefMV(YPu_2(Cyf**zNeO_?@A9vAeN* z@w@S_U#tv_RXS4@aeU4FbD(8od3||fb$#{b*)QfRf#{m|F?D?u{xJOUnQJ{e9Hrg6 j4#Kr;<7}HJ9FN>XuT-JE$i|TELpD}p&5qEQPE5%^hs$V* delta 1249 zcmZ`&O-vI(6rR~_x7%N6X{jk7l_*+}g2oyIM9}!xCQ4Wn&@^e9c990?lDDl8F7@Z2 zF`nEIZyvmPGr_Bg#z;&|OuX&^O+0xpsp(BGzPE)^j7+lMy!qZY^WK{``*!FE|PjBk#_LM8>2KV+J4|vkNr@|B|?M(>vK;Tmx(318|AKJ-acUI&CCP71SMp&Y5 zGVt%Cb}4SfGbkwDGlJr4(g*hHE8FKVrKM>@Ytx3dy&D>Ozv3R`*71QRb#NbbTSFae zQisyR|F1RFsI|RG-hNw%g?~^6G0}J@bQv|_k})X`bC0nmCW0;Kzz#B<+IE+Hb9aGv zL$if!l8gjM#$#FIVdJ-ayzeLyCRcSg&e7cgwB3{n#k{(D0#4&1xH08?#)mv;f(2f( znq((o7@1N08ezLJY}mcYdBoWA%m;$#GbO#0EtPds&=#Q6nDzF}Qj1MjK`#{1Rm`cT zSSXgjfh=?rL=j#JrY)Z>WldRwyb75@UZu;EWtRzIfOO&+Qk`tp*#|W3F0ORItk7bTtR3K3vprzW{l0& z&lqRje@nn(t8EAPsNoFGRXTPQa2>6f2W&)i5m4Dc4T8f2M+kZes3mX=!IbCJQf^)= zs?bkd3?XK(N2TN76oJ)25wsQS+N~DWFU7YE0WDw7l``dJygL=9QLa4=ZB?jsv9M{M zTg>VUAkryTUc1@!AZI!zr>@2U`y|myqScMdR%6T-U4=V^oT|sITi3yQSkx|4&SZ+& zB{h=)Cml>BnRd|1m;k*?d`x(c)?2Z9RWFB9`}bMNV@sI+qB;&Y(M!L){s*Bda?Zc9 pfiG;p_}Sju!R-$t_acujJm~%M> diff --git a/app/routes.py b/app/routes.py index 828bfa2..f0651e9 100644 --- a/app/routes.py +++ b/app/routes.py @@ -1,4 +1,6 @@ -from flask import Blueprint, request, jsonify +# from flask import Blueprint, request, jsonify +from flask import Blueprint, request, jsonify, send_from_directory +import os import sqlite3 import json # from services.rokky import ones @@ -11,11 +13,16 @@ import logging main = Blueprint("main", __name__) DB_PATH = "./files/rokky.db" +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +IMAGE_FOLDER = os.path.join(BASE_DIR, 'images') + @main.route("/") def index(): return "Hello wstkeys!!!" - +@main.route("/images/") +def get_image(filename): + return send_from_directory(IMAGE_FOLDER, filename) @main.route("/orders/api_payments", methods=["POST", "GET"]) def index1(): diff --git a/images/1.jpg b/images/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8eb248ce5119a6e669679b07fff087baa9b699f3 GIT binary patch literal 51533 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 literal 0 HcmV?d00001 diff --git a/main.py b/main.py index 1974654..fb6400a 100644 --- a/main.py +++ b/main.py @@ -15,6 +15,9 @@ logging.basicConfig( app = create_app() + + + start_scheduler() if __name__ == "__main__": diff --git a/services/__pycache__/tim.cpython-313.pyc b/services/__pycache__/tim.cpython-313.pyc index 77c483058795e8f1639df1c48a1357396c8d71b9..ae28a50016192f3deefbfeef8e1fc914919aff04 100644 GIT binary patch delta 161 zcmdnM@`r`@GcPX}0}!;-@69Zq$Xn0YGqKlg;z|W(mSEP2XVf*={BCh%=9Q!tl_lo9 z1gX?yyv3fInO9npTKtj`!e>cItenipn90QtBvBTs>Ms=aWHa^HWN5QtgUFCi62%a&Rz;fn@<1#4ADo delta 100 zcmeyvvVn#7GcPX}0}xC!-uRER*FJr6;>FW^nNWrP+YESbOpg tM)k>G7` str: + print(prompt) + print("(finish with ';')") + + lines = [] + while True: + line = input() + if line == ';': + break + lines.append(line) + + return '\n'.join(lines) + + +def send_text_flow(): + to_addr = input("Receiver email: ").strip() + subject = input("Subject: ").strip() or "(No subject)" + body = read_multiline("Message:") + + send_plain_email(to_addr, subject, body) + + +def send_html_flow(): + to_addr = input("Receiver email: ").strip() + + data = { + "company_name": "wstkeys", + "order_id": "123", + "customer_name": "4321", + "currency": "USD", + "items": [ + {"name": "Game 1333", "quantity": 1, "price": 1330}, + + ], + "date": "23.03.2026 14:02", + "product_name": "Railroads Online - Pioneer DLC", + "product_image": "https://s3.ggsel.com/gsellers-imgs-prod/e05c8d1f28e18f56334bf8e7e9f7b547.jpeg", + "total_price": 20, + "key": 'XXXX-XXXX-YYY23', + "support_email": "wstkeys@gmail.com", + "year": 2026 + } + + send_html_email(to_addr, data) + + +def main(): + print("1 - Send plain email") + print("2 - Send HTML email") + + choice = input("Choose: ").strip() + + if choice == "1": + send_text_flow() + elif choice == "2": + send_html_flow() + else: + print("Invalid choice") + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/services/template_engine.py b/services/template_engine.py new file mode 100644 index 0000000..b77754a --- /dev/null +++ b/services/template_engine.py @@ -0,0 +1,28 @@ +def build_items_html(items): + rows = "" + for item in items: + rows += f""" + + {item['name']} + {item['quantity']} + {item['price']} + + """ + return rows + + +def build_keys_html(keys): + if not keys: + return "" + + rows = "

Your Keys:

    " + for key in keys: + rows += f"
  • {key}
  • " + rows += "
" + return rows + + +def render_template(template_str, data): + for key, value in data.items(): + template_str = template_str.replace(f"{{{{{key}}}}}", str(value)) + return template_str \ No newline at end of file diff --git a/services/tim.py b/services/tim.py index 17afbc0..d767e7c 100644 --- a/services/tim.py +++ b/services/tim.py @@ -8,5 +8,7 @@ def start_scheduler(): # каждые 10 секунд scheduler.add_job(run_task, 'interval', minutes=10) + # Раз в сутки (24 часа) + scheduler.add_job(run_task, 'interval', days=1) scheduler.start() \ No newline at end of file diff --git a/services/utils.py b/services/utils.py new file mode 100644 index 0000000..13f4354 --- /dev/null +++ b/services/utils.py @@ -0,0 +1,28 @@ +def build_items_html(items): + rows = "" + for item in items: + rows += f""" + + {item['name']} + {item['quantity']} + {item['price']} + + """ + return rows + + +def build_keys_html(keys): + if not keys: + return "" + + rows = "

Keys:

    " + for key in keys: + rows += f"
  • {key}
  • " + rows += "
" + return rows + + +def render_template(template_str, data): + for key, value in data.items(): + template_str = template_str.replace(f"{{{{{key}}}}}", str(value)) + return template_str \ No newline at end of file diff --git a/templates/welcome.html b/templates/welcome.html new file mode 100644 index 0000000..c03fce4 --- /dev/null +++ b/templates/welcome.html @@ -0,0 +1,54 @@ + + + + + + + + +
+ + +
+ logo +
+ +

Спасибо за покупку в WST Keys (West Store Trusted Keys)

+ +
+ + +

Дата покупки: {{date}}

+

Номер заказа: {{order_id}}

+ +

{{product_name}}

+ + + + +

Сумма: {{total_price}} {{currency}}

+ +
+ + +

Цифровой ключ

+
+ {{key}} +
+ +
+ + +

+ +

+ +

+Если у вас возникнут вопросы, напишите в личные сообщения или свяжитесь с нами по электронной почте
{{support_email}} +

+ +
+ + + \ No newline at end of file