Added specific Telegram group IDs
This commit is contained in:
@@ -13,5 +13,7 @@ services:
|
||||
- TELEGRAM_TOKEN=${TELEGRAM_TOKEN}
|
||||
- SLEEP_TIME=${SLEEP_TIME}
|
||||
- TELEGRAM_GROUP_ID=${TELEGRAM_GROUP_ID}
|
||||
- MODEL_3_GROUP_ID=${MODEL_3_GROUP_ID}
|
||||
- MODEL_Y_GROUP_ID=${MODEL_Y_GROUP_ID}
|
||||
dns:
|
||||
- 8.8.8.8
|
||||
@@ -3,6 +3,24 @@ import os
|
||||
TELEGRAM_ESCAPE_CHARACTERS = ['_', '*', '[', ']', '(', ')', '~', '>', '+', '-', '=', '|', '{', '}', '.', '!']
|
||||
TELEGRAM_REMOVE_CHARACTERS = ['#']
|
||||
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")
|
||||
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 constants
|
||||
import json
|
||||
#import locale
|
||||
|
||||
from datetime import datetime
|
||||
from telegram.ext import Application
|
||||
from telegram.constants import ParseMode
|
||||
|
||||
@@ -29,7 +31,22 @@ def telegram_escape_characters(text):
|
||||
|
||||
def get_inventory(model="m3"):
|
||||
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"
|
||||
for _ in range(10):
|
||||
try:
|
||||
@@ -64,9 +81,9 @@ def check_inventory(new_inventory, old_inventory):
|
||||
return new_deals
|
||||
|
||||
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'])
|
||||
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']}"
|
||||
|
||||
options = "*Opciones:*"
|
||||
@@ -81,22 +98,55 @@ def send_deal(car, model):
|
||||
for callout in car['OptionCodeSpecs']['C_CALLOUTS']['options']:
|
||||
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)
|
||||
|
||||
referral = "?referral=joan81838"
|
||||
|
||||
keyboard = {'inline_keyboard':[[{'text':'Ir a la web','url':f'https://www.tesla.com/es_ES/{model}/order/{car["VIN"]}'}]]}
|
||||
|
||||
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),
|
||||
'photo': image,
|
||||
'photo': (None, image),
|
||||
'caption': (None, message),
|
||||
'parse_mode': (None, ParseMode.MARKDOWN_V2),
|
||||
'reply_markup': (None, json.dumps(keyboard)),
|
||||
}
|
||||
|
||||
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):
|
||||
files = {
|
||||
|
||||
Reference in New Issue
Block a user