Added specific Telegram group IDs
This commit is contained in:
@@ -13,5 +13,7 @@ services:
|
|||||||
- TELEGRAM_TOKEN=${TELEGRAM_TOKEN}
|
- TELEGRAM_TOKEN=${TELEGRAM_TOKEN}
|
||||||
- SLEEP_TIME=${SLEEP_TIME}
|
- SLEEP_TIME=${SLEEP_TIME}
|
||||||
- TELEGRAM_GROUP_ID=${TELEGRAM_GROUP_ID}
|
- TELEGRAM_GROUP_ID=${TELEGRAM_GROUP_ID}
|
||||||
|
- MODEL_3_GROUP_ID=${MODEL_3_GROUP_ID}
|
||||||
|
- MODEL_Y_GROUP_ID=${MODEL_Y_GROUP_ID}
|
||||||
dns:
|
dns:
|
||||||
- 8.8.8.8
|
- 8.8.8.8
|
||||||
@@ -3,6 +3,24 @@ import os
|
|||||||
TELEGRAM_ESCAPE_CHARACTERS = ['_', '*', '[', ']', '(', ')', '~', '>', '+', '-', '=', '|', '{', '}', '.', '!']
|
TELEGRAM_ESCAPE_CHARACTERS = ['_', '*', '[', ']', '(', ')', '~', '>', '+', '-', '=', '|', '{', '}', '.', '!']
|
||||||
TELEGRAM_REMOVE_CHARACTERS = ['#']
|
TELEGRAM_REMOVE_CHARACTERS = ['#']
|
||||||
TELEGRAM_GROUP_ID = os.getenv("TELEGRAM_GROUP_ID")
|
TELEGRAM_GROUP_ID = os.getenv("TELEGRAM_GROUP_ID")
|
||||||
|
MODEL_3_GROUP_ID = os.getenv("MODEL_3_GROUP_ID")
|
||||||
|
MODEL_Y_GROUP_ID = os.getenv("MODEL_Y_GROUP_ID")
|
||||||
TELEGRAM_TOKEN = os.getenv("TELEGRAM_TOKEN")
|
TELEGRAM_TOKEN = os.getenv("TELEGRAM_TOKEN")
|
||||||
SLEEP_TIME = int(os.getenv("SLEEP_TIME"))
|
SLEEP_TIME = int(os.getenv("SLEEP_TIME"))
|
||||||
MODELS = ["m3", "my"]
|
MODELS = ["m3", "my"]
|
||||||
|
|
||||||
|
CHAT_IDS = {"m3": MODEL_3_GROUP_ID,
|
||||||
|
"my": MODEL_Y_GROUP_ID}
|
||||||
|
|
||||||
|
MONTHS = {'January': 'enero',
|
||||||
|
'February': 'febrero',
|
||||||
|
'March': 'marzo',
|
||||||
|
'April': 'abril',
|
||||||
|
'May': 'mayo',
|
||||||
|
'June': 'junio',
|
||||||
|
'July': 'julio',
|
||||||
|
'August': 'agosto',
|
||||||
|
'September': 'septiembre',
|
||||||
|
'October': 'octubre',
|
||||||
|
'November': 'noviembre',
|
||||||
|
'December': 'diciembre'}
|
||||||
@@ -3,7 +3,9 @@ import requests
|
|||||||
import logging
|
import logging
|
||||||
import constants
|
import constants
|
||||||
import json
|
import json
|
||||||
|
#import locale
|
||||||
|
|
||||||
|
from datetime import datetime
|
||||||
from telegram.ext import Application
|
from telegram.ext import Application
|
||||||
from telegram.constants import ParseMode
|
from telegram.constants import ParseMode
|
||||||
|
|
||||||
@@ -29,7 +31,22 @@ def telegram_escape_characters(text):
|
|||||||
|
|
||||||
def get_inventory(model="m3"):
|
def get_inventory(model="m3"):
|
||||||
ret_json = False
|
ret_json = False
|
||||||
headers = {'authority': 'www.tesla.com'}
|
#headers = {'authority': 'www.tesla.com'}
|
||||||
|
headers = {
|
||||||
|
'authority': 'www.tesla.com',
|
||||||
|
'accept': '*/*',
|
||||||
|
'accept-language': 'en-US,en;q=0.9,es;q=0.8',
|
||||||
|
# 'cookie': 'ip_info={"ip":"79.154.216.12","location":{"latitude":28.1,"longitude":-15.4113},"region":{"longName":"Canary Islands","regionCode":"CN"},"city":"Las Palmas de Gran Canaria","country":"Spain","countryCode":"ES","postalCode":"35003"}; has_js=1; BIGipServer~DMZ_WWW_PRD~ORIGIN-DMZ-WWW-HTTP=!ZigEBW47EdewyoGd8dJnK9m9hdilyCUpRew4zyCnC1DWDlH4X3psLdtPL6wDwbJe58ZOkPzPOjddxw==; q_mail=lgray.foxl%40gmail.com; q_first_name=Joan; q_last_name=Cano; TeslaUser=%7B%22username%22%3A%22lgray.foxl%40gmail.com%22%2C%22email%22%3A%22lgray.foxl%40gmail.com%22%2C%22first_name%22%3A%22%22%2C%22last_name%22%3A%22%22%7D; oxpOriUrl=https%3A%2F%2Fwww.tesla.com%2Fes_es%2Fteslaaccount; _csrf=h9KC31yYX_w53xKDvtqxbPXd; iterableEndUserId=lgray.foxl%40gmail.com; q_mail=lgray.foxl%40gmail.com; q_first_name=Joan; q_last_name=Cano; _pk_id.1.3c49=c455bf03b76fc0eb.1685021236.; _abck=A4DF1A0C23E8EC90A8DD97FF4B8F7BFD~0~YAAQVdXdWL4EvL6JAQAAGsS7vwqsfX09zM4oSMmXoR7DKmbAt+uRcTMpRYw/QwGuBMCAvHePNw02knUgkvz38ZL9qQIxCSo6DjpQ9aUAG/fOSbATj6WsZcIw6Ltt8ayS+RKxaf0G0/4IIN4TfKokeW4QLVa2C8FZRJBIW9TSsVMYRTTAenPnO/xlQgYCoIGVVmFl3YDY1UaJ22rd1kWAqwdDPh97hu4vkkKg8kT2Qo/0VrT/oVGvzSoGfPwAEgGSdlTdMQcEa957sDqhyQPriRYqcGuyl3BDRKTAUv3hZE1jyvGAozclQoCeZA6tEby16W9yCluuiYGhsRer6iaBzk4CD1ovHh5n4o4Avj/oGDSTrSIIqNrMS4iVW29/zPo4i8VFVWDgXlS66Bz1JWSu3nLMp8l9fyw=~-1~||-1||~-1; ak_bmsc=FC9970F2D20FD1B2CB45D53628A3C000~000000000000000000000000000000~YAAQ321lX3S4SR+KAQAAWAXzIRSIXagxMslNKx6cMX3R9K3lY5kuKzASGKWf05BGHZIyB4pXQDB0P7u9C7XotlnlQMxHKgfwUevjuwj+qD44hoDr705ioFWYOJAaj6T2bL2oX+nF9N+3MW35WMKkRCKooYT3H+ovz/NMPXo6w72o2t/rX4r11Tv+JnyjT7DEVvKF6rNDywh3kvOJYqiDVD2oGoyS6xGpApfKLzuf7pWKSMnMz9HjdQCm/QqCqSb3lvCjj/5do1wfTb5QvDkGi40/nDLY6llHufuATMT6u1/Ad8cc5EgIXmW1JdQefoTwiiwHiOCHrbnDzt655wQ7ewRhfmyCBxGYaQ1LWRUmRqb0g3riKH86Q5ZspNRY0HfUYyOxWNEB/D7K; _pk_ref.1.3c49=%5B%22%22%2C%22%22%2C1692786691%2C%22https%3A%2F%2Fwww.google.com%2F%22%5D; _pk_ses.1.3c49=1; cua_sess=1765a8ac2341c78da7d8c57b3bb2fd7a; bm_mi=95CBC2038AB4706E13666EB9E9FAE657~YAAQ321lX8MCSx+KAQAAf0T1IRTaq3hnJQcl7cVYBRNOrsOUHxBfmn8AQ5cUNQtQhbjpbOCiiTBqR9RBQOEENTXPz968raeT0NKPC93Ii5o9O10WkBX4HuVSdG8UEhsKN6PnqMEsaosHTrM6XYEYH2S0xnOWPXwttnv1kBleDG71/XYykMOAKn/Mc/uthG7RzPgcuQKxl/xCLKzZTPonPmhGwUYO2cnwuq95AmH+WRUKcHNAnjbFhH3+Qr8yuKHetMhZqCdW1PCrHkiekgSUGF6wCDoOX05mSc886IB+LaMTzXQyO0ZsXarCepU10/xHLZGFcluqI3sN61524poQQ6dI~1; bm_sv=BBFFD0295B2555FE081C8E00B8A125F0~YAAQ321lX8MESx+KAQAAvUf1IRRU/qRFXARdEdc9bSIHbrqOMQBRpsHWzNs9eBnmCfELoByxU0yFb8FMIV/z1ZRlWQj8Lzh4XQA0cospNb67SUvbJjGwr2JQ/oNjeAVmN7SefYSi+Kw62O6u5vIPCvp160F5XKHXFs3tpg+EOyIN1BbtYSilorkoHWm4OTvoO5Rs/QLzqZDFSZkb/QC+YGmx9prO7COmoefVF/Dp+zsvlMERsZc2Zqs2i4ummhmS~1',
|
||||||
|
'referer': 'https://www.tesla.com/es_ES/inventory/new/m3?arrangeby=plh&zip=08290&range=0',
|
||||||
|
'sec-ch-ua': '"Not/A)Brand";v="99", "Google Chrome";v="115", "Chromium";v="115"',
|
||||||
|
'sec-ch-ua-mobile': '?0',
|
||||||
|
'sec-ch-ua-platform': '"macOS"',
|
||||||
|
'sec-fetch-dest': 'empty',
|
||||||
|
'sec-fetch-mode': 'cors',
|
||||||
|
'sec-fetch-site': 'same-origin',
|
||||||
|
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
|
||||||
|
}
|
||||||
|
|
||||||
url = f"https://www.tesla.com/inventory/api/v1/inventory-results?query=%7B%22query%22%3A%7B%22model%22%3A%22{model}%22%2C%22condition%22%3A%22new%22%2C%22options%22%3A%7B%7D%2C%22arrangeby%22%3A%22Price%22%2C%22order%22%3A%22asc%22%2C%22market%22%3A%22ES%22%2C%22language%22%3A%22es%22%2C%22super_region%22%3A%22north%20america%22%2C%22lng%22%3A2.1449%2C%22lat%22%3A41.4888%2C%22zip%22%3A%2208290%22%2C%22range%22%3A0%2C%22region%22%3A%22ES%22%7D%2C%22offset%22%3A0%2C%22count%22%3A50%2C%22outsideOffset%22%3A0%2C%22outsideSearch%22%3Afalse%7D"
|
url = f"https://www.tesla.com/inventory/api/v1/inventory-results?query=%7B%22query%22%3A%7B%22model%22%3A%22{model}%22%2C%22condition%22%3A%22new%22%2C%22options%22%3A%7B%7D%2C%22arrangeby%22%3A%22Price%22%2C%22order%22%3A%22asc%22%2C%22market%22%3A%22ES%22%2C%22language%22%3A%22es%22%2C%22super_region%22%3A%22north%20america%22%2C%22lng%22%3A2.1449%2C%22lat%22%3A41.4888%2C%22zip%22%3A%2208290%22%2C%22range%22%3A0%2C%22region%22%3A%22ES%22%7D%2C%22offset%22%3A0%2C%22count%22%3A50%2C%22outsideOffset%22%3A0%2C%22outsideSearch%22%3Afalse%7D"
|
||||||
for _ in range(10):
|
for _ in range(10):
|
||||||
try:
|
try:
|
||||||
@@ -64,9 +81,9 @@ def check_inventory(new_inventory, old_inventory):
|
|||||||
return new_deals
|
return new_deals
|
||||||
|
|
||||||
def send_deal(car, model):
|
def send_deal(car, model):
|
||||||
application = Application.builder().get_updates_http_version('1.1').http_version('1.1').token(constants.TELEGRAM_TOKEN).build()
|
#application = Application.builder().get_updates_http_version('1.1').http_version('1.1').token(constants.TELEGRAM_TOKEN).build()
|
||||||
title = telegram_escape_characters(car['TrimName'])
|
title = telegram_escape_characters(car['TrimName'])
|
||||||
price = f"*💰 Precio:* {telegram_escape_characters(car['Price'])}€"
|
price = f"*💰 Precio de inventario:* {car['Price']}€\n*💰 Precio de compra:* {car['PurchasePrice']}€"
|
||||||
odometer = f"*Cuentakilómetros:* {car['Odometer']}{car['OdometerType']}"
|
odometer = f"*Cuentakilómetros:* {car['Odometer']}{car['OdometerType']}"
|
||||||
|
|
||||||
options = "*Opciones:*"
|
options = "*Opciones:*"
|
||||||
@@ -81,22 +98,55 @@ def send_deal(car, model):
|
|||||||
for callout in car['OptionCodeSpecs']['C_CALLOUTS']['options']:
|
for callout in car['OptionCodeSpecs']['C_CALLOUTS']['options']:
|
||||||
callouts = f"{callouts}\n• {telegram_escape_characters(callout['name'])}"
|
callouts = f"{callouts}\n• {telegram_escape_characters(callout['name'])}"
|
||||||
|
|
||||||
message = f"{title}\n\n{odometer}\n\n{options}\n\n{specs}\n\n{callouts}\n\n{price}"
|
if car['IsDemo']:
|
||||||
|
demo = "*Vehículo de demostración*"
|
||||||
|
else:
|
||||||
|
demo = "*Vehículo nuevo*"
|
||||||
|
|
||||||
|
#locale.setlocale(locale.LC_TIME, 'es_ES')
|
||||||
|
|
||||||
|
warranty_drive_unit_batt = car['WarrantyData']['WarrantyDriveUnitExpDate']
|
||||||
|
date_warranty_drive_unit_batt = datetime.strptime(warranty_drive_unit_batt, '%Y-%m-%dT%H:%M:%SZ').strftime('%d de %B del %Y')
|
||||||
|
warranty_general = car['WarrantyData']['WarrantyVehicleExpDate']
|
||||||
|
date_warranty_general = datetime.strptime(warranty_general, '%Y-%m-%dT%H:%M:%SZ').strftime('%d de %B del %Y')
|
||||||
|
|
||||||
|
for month in constants.MONTHS:
|
||||||
|
date_warranty_drive_unit_batt = date_warranty_drive_unit_batt.replace(month, constants.MONTHS[month])
|
||||||
|
date_warranty_general = date_warranty_general.replace(month, constants.MONTHS[month])
|
||||||
|
|
||||||
|
if 'enero del 1' in date_warranty_drive_unit_batt:
|
||||||
|
date_warranty_drive_unit_batt = 'Sin información'
|
||||||
|
date_warranty_general = date_warranty_drive_unit_batt
|
||||||
|
|
||||||
|
warranty = f"*Garantía de la unidad de tracción y batería:* {date_warranty_drive_unit_batt}\n*Garantía general del vehículo:* {date_warranty_general}"
|
||||||
|
|
||||||
|
message = f"{title}\n\n{odometer}\n{demo}\n\n{warranty}\n\n{options}\n\n{specs}\n\n{callouts}\n\n{price}"
|
||||||
|
|
||||||
image = get_image(car['OptionCodeList'], model)
|
image = get_image(car['OptionCodeList'], model)
|
||||||
|
|
||||||
|
referral = "?referral=joan81838"
|
||||||
|
|
||||||
keyboard = {'inline_keyboard':[[{'text':'Ir a la web','url':f'https://www.tesla.com/es_ES/{model}/order/{car["VIN"]}'}]]}
|
keyboard = {'inline_keyboard':[[{'text':'Ir a la web','url':f'https://www.tesla.com/es_ES/{model}/order/{car["VIN"]}'}]]}
|
||||||
|
|
||||||
files = {
|
files = {
|
||||||
|
'chat_id': (None, constants.CHAT_IDS[model]),
|
||||||
|
'photo': (None, image),
|
||||||
|
'caption': (None, message),
|
||||||
|
'parse_mode': (None, ParseMode.MARKDOWN_V2),
|
||||||
|
'reply_markup': (None, json.dumps(keyboard)),
|
||||||
|
}
|
||||||
|
|
||||||
|
files_seguimientos = {
|
||||||
'chat_id': (None, constants.TELEGRAM_GROUP_ID),
|
'chat_id': (None, constants.TELEGRAM_GROUP_ID),
|
||||||
'photo': image,
|
'photo': (None, image),
|
||||||
'caption': (None, message),
|
'caption': (None, message),
|
||||||
'parse_mode': (None, ParseMode.MARKDOWN_V2),
|
'parse_mode': (None, ParseMode.MARKDOWN_V2),
|
||||||
'reply_markup': (None, json.dumps(keyboard)),
|
'reply_markup': (None, json.dumps(keyboard)),
|
||||||
}
|
}
|
||||||
|
|
||||||
response = requests.post(f'https://api.telegram.org/bot{constants.TELEGRAM_TOKEN}/sendPhoto', files=files)
|
response = requests.post(f'https://api.telegram.org/bot{constants.TELEGRAM_TOKEN}/sendPhoto', files=files)
|
||||||
logging.info(response)
|
requests.post(f'https://api.telegram.org/bot{constants.TELEGRAM_TOKEN}/sendPhoto', files=files_seguimientos)
|
||||||
|
logging.info(response.content)
|
||||||
|
|
||||||
def send_message(telegram_user_id, message):
|
def send_message(telegram_user_id, message):
|
||||||
files = {
|
files = {
|
||||||
|
|||||||
Reference in New Issue
Block a user