From 9ce07a09bda3a97074c4f937470aa109721c8fc5 Mon Sep 17 00:00:00 2001 From: Alex55 Date: Thu, 19 Mar 2026 09:49:21 +0200 Subject: [PATCH] 123 --- API/__pycache__/rok.cpython-313.pyc | Bin 0 -> 4345 bytes nginx/conf.d/nginx.conf | 16 ++ services/gg.py | 258 ++++++++++++++++++++++++++++ 3 files changed, 274 insertions(+) create mode 100644 API/__pycache__/rok.cpython-313.pyc create mode 100644 nginx/conf.d/nginx.conf create mode 100644 services/gg.py diff --git a/API/__pycache__/rok.cpython-313.pyc b/API/__pycache__/rok.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..84770e93465cdf65d001ae5b38931f9bfeb4a2c8 GIT binary patch literal 4345 zcmeHKU2GKB6~6Pc^Rxf9*IWRi#ROofSseOi~FcdEw2*mLmD7=ggmt<3Re- zr{2|^y>ri*duQ(X&N<&*j>WT0r7t4&tRC9|q)xr>IbO{XVJvu3=Q%XyPzseb9wRJN>N&XsD_ z+?xZoa8|uARI6rq$~#+$LI7chjIv%+%g_xPj&pD=Pl9-toC_4AY|srl@V(4AoYQIN z@L8uR>|stLc`_>dBWwS@_cbQZC>%mYWAp4DlHo_D_de}Ya;APs)r?!LEl#MVib@Te z$4#&!rE*y{jMq_}3E2`=uhdn;1a(a}ObSRPwv3j=O35tIINWDAG&5?tW~erg!*ZM@owY_<5U%kUg2 zohK)A8&rk#>S5-HGNhPFgfzKAWr4Nf!zba8nq8v;#~GTpk>ajc&nb z!mvcqeRZ0Ffn8`-1OYycbzVC)H*SS@G>(HSdvGByj%<+(1fY(Af$*$Z5>eLNm|!?!W*W^^>zRtt))DfrA70Ba9Atz+s8T<+;s* z80K@zz`Dtx>#ye|c1ZdDJTN~7pwpBf6(dM?k$vP@Pg8;K9%IvFCrQI^r28nhlZ-JL zVPti`pBBm$t>4RX#=11;4fR7-EKTa;MsB*ZSfhHSUN(&^27PvXI;(2s>7HzEtU3v? zyP4KzuU@F<;AO1$tlQ0>S+}jfSsz({N?U(#HlXw8=FhFWF#M7A$8__j)?KjqHQ0QZ z1+*b9X&;K+AZ#9zs%D3-(yFQ2V%bgKbPuR9ye(sjFKUoN=w5sR5oj}G28JjA&_iHb zMZc;!HNt;YItT`M8D$U+(uy9r^W!_GtrG<+e7A|6p_6 z9Pn@hxobb-=D>Y6U4Fiz@X%1-)j zcWP0wT5(;E$&_N+bjufh3}z0exdkj*rfSJl-5N$;27?i}3?0NbDq%^|wY}A|r`5Z6 zN#tYkMNViBFUHCC=a<@KtZ^$_u&4pInOE+J&BV)(XPgI-4wv9qeo5nCVZQ}vn1_)~ z(C|NDG{9q?hymISFPB;Gw;;Vcexu(4{a1*CLlzt{hU)VmzR`C7H;mz{n+tU_Xc%_5 z*~|X~v2k-f?!aq6yw}3XA&5KZ)!n;x9K*wno3M};JCww!FHVYazS-F#hwI!T&MUYHNjh>F_}HZS9g2wv zU&r`8h((TJn17QUpAz{K68S~!bCPIKE5nbUE%=SlnB6t%qFTAHAenLWx@n6QB G&-f1kn2o9c literal 0 HcmV?d00001 diff --git a/nginx/conf.d/nginx.conf b/nginx/conf.d/nginx.conf new file mode 100644 index 0000000..e85d2ed --- /dev/null +++ b/nginx/conf.d/nginx.conf @@ -0,0 +1,16 @@ +server { + listen 80; + server_name dest2.com www.dest2.com; + + location /.well-known/acme-challenge/ { + root /var/www/certbot; + } + + location / { + proxy_pass http://flask:5205; + + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } +} \ No newline at end of file diff --git a/services/gg.py b/services/gg.py new file mode 100644 index 0000000..f5bbca2 --- /dev/null +++ b/services/gg.py @@ -0,0 +1,258 @@ +import requests +import time +import json +import hashlib +from dotenv import load_dotenv +import os +load_dotenv() + +TOKEN = os.getenv('GGTOKEN') +SELLER_ID = os.getenv('SELLER_ID') +API_KEY = os.getenv('GGTOKEN') + + + + +TOKEN_FILE = "./files/ggsel_token.json" + + +def save_token(token): + with open(TOKEN_FILE, "w") as f: + json.dump({"token": token}, f) + + +def load_token(): + if not os.path.exists(TOKEN_FILE): + return None + + with open(TOKEN_FILE) as f: + try: + data = json.load(f) + return data.get("token") + except json.JSONDecodeError: + return None + + +def safe_json(response): + if not response.text: + raise Exception("Empty response from API") + + try: + return response.json() + except json.JSONDecodeError: + print("Invalid JSON response:") + print(response.text) + raise + + +def get_token(): + timestamp = str(int(time.time())) + sign_string = API_KEY + timestamp + sign = hashlib.sha256(sign_string.encode()).hexdigest() + + url = "https://seller.ggsel.com/api_sellers/api/apilogin" + + payload = { + "seller_id": SELLER_ID, + "timestamp": timestamp, + "sign": sign + } + + headers = { + "Content-Type": "application/json", + "Accept": "application/json" + } + + response = requests.post(url, json=payload, headers=headers) + + print(response.status_code) + res = response.json() + token = res['token'] + + save_token(token) + print(token) + return token + + +def balans(): + token = load_token() + + if not token: + token = get_token() + + url = "https://seller.ggsel.com/api_sellers/api/sellers/account/balance/info" + + headers = {"Accept": "application/json"} + params = {"token": token} + + r = requests.get(url, params=params, headers=headers) + print(r.status_code) + + # если токен умер + if r.status_code in (401, 403): + token = get_token() + params["token"] = token + r = requests.get(url, params=params, headers=headers) + + return r.json() + +def last_sales(top=10, group=False): + token = load_token() + + if not token: + token = get_token() + + url = "https://seller.ggsel.com/api_sellers/api/seller-last-sales" + + headers = { + "Accept": "application/json", + "locale": "ru" + } + + params = { + "token": token, + "seller_id": SELLER_ID, + "top": top, + "group": str(group).lower() + } + + r = requests.get(url, params=params, headers=headers) + print(r.status_code) + + # если токен умер + if r.status_code in (401, 403): + token = get_token() + params["token"] = token + r = requests.get(url, params=params, headers=headers) + + return r.json() + + +# print(last_sales()) + +def get_messages(id_i, id_from=None, id_to=None, newer=None, count=50): + token = load_token() + + if not token: + token = get_token() + + url = "https://seller.ggsel.com/api_sellers/api/debates/v2" + + headers = { + "Accept": "application/json" + } + + params = { + "token": token, + "id_i": id_i, + "count": min(count, 100) + } + + if id_from: + params["id_from"] = id_from + + if id_to: + params["id_to"] = id_to + + if newer: + params["newer"] = newer + + r = requests.get(url, params=params, headers=headers) + print(r.status_code) + + # если токен умер + if r.status_code in (401, 403): + token = get_token() + params["token"] = token + r = requests.get(url, params=params, headers=headers) + + return r.json() + + +# пример +print(get_messages(id_i=18840912)) + + +def get_chats(page=1, pagesize=20, filter_new=None, email=None, id_ds=None): + token = load_token() + + if not token: + token = get_token() + + url = "https://seller.ggsel.com/api_sellers/api/debates/v2/chats" + + headers = { + "Accept": "application/json" + } + + params = { + "token": token, + "page": page, + "pagesize": pagesize + } + + if filter_new is not None: + params["filter_new"] = filter_new + + if email: + params["email"] = email + + if id_ds: + params["id_ds"] = id_ds + + r = requests.get(url, params=params, headers=headers) + print(r.status_code) + + # если токен умер + if r.status_code in (401, 403): + token = get_token() + params["token"] = token + r = requests.get(url, params=params, headers=headers) + + return r.json() + + +# пример +# print(get_chats()) +# def tokens(): + +# timestamp = str(int(time.time())) +# sign_string = API_KEY + timestamp +# sign = hashlib.sha256(sign_string.encode()).hexdigest() + +# url = "https://seller.ggsel.com/api_sellers/api/apilogin" + +# payload = { +# "seller_id": SELLER_ID, +# "timestamp": timestamp, +# "sign": sign +# } + +# headers = { +# "Content-Type": "application/json", +# "Accept": "application/json" +# } + +# response = requests.post(url, json=payload, headers=headers) + +# print(response.status_code) +# res = response.json() +# token = res['token'] +# return token + + +# def balans(): +# url = "https://seller.ggsel.com/api_sellers/api/sellers/account/balance/info" + +# params = { +# "token": tokens() +# } + +# headers = { +# "Accept": "application/json" +# } + +# response = requests.get(url, params=params, headers=headers) + +# print(response.status_code) +# print(response.json()) \ No newline at end of file