Cleanups for scrapers
This commit is contained in:
@@ -3,10 +3,21 @@ Configuration for Pokemon Stock Monitor
|
||||
Update DISCORD_WEBHOOK_URL with your actual webhook URL
|
||||
"""
|
||||
|
||||
import os
|
||||
try:
|
||||
from dotenv import load_dotenv
|
||||
load_dotenv()
|
||||
except ImportError:
|
||||
pass # python-dotenv not installed, fall back to env vars or hardcoded values
|
||||
|
||||
def _env(key, default=""):
|
||||
return os.environ.get(key) or default
|
||||
|
||||
# Discord webhook URL - GET THIS FROM YOUR DISCORD SERVER
|
||||
# Server Settings -> Integrations -> Webhooks -> New Webhook -> Copy Webhook URL
|
||||
# This is the default/fallback webhook for anything not specifically routed below
|
||||
DISCORD_WEBHOOK_URL = "https://discord.com/api/webhooks/1488982276455796756/4HEzQDBF-Hs4a9Iyd7yvj7-SfP0BwrbQGdGBmQ9TL9urWzkTRaHelkvrqX4v9NTf2ZJ_"
|
||||
# Set DISCORD_WEBHOOK_DEFAULT in .env to override
|
||||
DISCORD_WEBHOOK_URL = _env("DISCORD_WEBHOOK_DEFAULT", "https://discord.com/api/webhooks/1488982276455796756/4HEzQDBF-Hs4a9Iyd7yvj7-SfP0BwrbQGdGBmQ9TL9urWzkTRaHelkvrqX4v9NTf2ZJ_")
|
||||
|
||||
# =============================================================================
|
||||
# MULTI-CHANNEL WEBHOOK ROUTING (Optional)
|
||||
@@ -21,24 +32,26 @@ DISCORD_WEBHOOK_URL = "https://discord.com/api/webhooks/1488982276455796756/4HEz
|
||||
# 2. sites (all alerts for a specific store)
|
||||
# 3. types (all alerts of a specific type)
|
||||
# 4. default (DISCORD_WEBHOOK_URL)
|
||||
#
|
||||
# Override any value by setting the corresponding env var in .env
|
||||
|
||||
DISCORD_WEBHOOKS = {
|
||||
# Per-site channels - all alerts from a specific store go here first
|
||||
"sites": {
|
||||
"target": "https://discord.com/api/webhooks/1488982720901025852/O0KkVFHrQ6-k6FmCqQE4QpuWF6YFJ8YyFgojBPKcQu9g0UHzTpnAU9G1gbhOftARS11R",
|
||||
"bestbuy": "https://discord.com/api/webhooks/1488982786781216798/AtG6x7FWzJjOsmosq9oPMuwlPrSwNHZJJTUuB3AApjyT7LIOxmEcYeiMFP7HiA_Ov1pn",
|
||||
"gamestop": "https://discord.com/api/webhooks/1488982854036619355/NWZtydrKEhj-kxKbFi78f1Gpf3h16W_1kAJEcSuIgtjJUoAO8Sk7inOI2T8fb9GXo9xY",
|
||||
"walmart": "https://discord.com/api/webhooks/1488982929450340375/0g16tJXw8f9UtUrRrLd2jDPWWD__LTDYO_X2VT2WL4F5GBYB8ykVxrjV-bCjzKKjSA5C",
|
||||
"pokemoncenter": "https://discord.com/api/webhooks/1488983050090975364/DwY9QQvBZa6V-zz8mIg302sukbISSbkXOhDwe1Q6yDG0zAwvaGQcn8iTzNB4D676e3cA",
|
||||
"target": _env("DISCORD_WEBHOOK_TARGET", "https://discord.com/api/webhooks/1488982720901025852/O0KkVFHrQ6-k6FmCqQE4QpuWF6YFJ8YyFgojBPKcQu9g0UHzTpnAU9G1gbhOftARS11R") or None,
|
||||
"bestbuy": _env("DISCORD_WEBHOOK_BESTBUY", "https://discord.com/api/webhooks/1488982786781216798/AtG6x7FWzJjOsmosq9oPMuwlPrSwNHZJJTUuB3AApjyT7LIOxmEcYeiMFP7HiA_Ov1pn") or None,
|
||||
"gamestop": _env("DISCORD_WEBHOOK_GAMESTOP", "https://discord.com/api/webhooks/1488982854036619355/NWZtydrKEhj-kxKbFi78f1Gpf3h16W_1kAJEcSuIgtjJUoAO8Sk7inOI2T8fb9GXo9xY") or None,
|
||||
"walmart": _env("DISCORD_WEBHOOK_WALMART", "https://discord.com/api/webhooks/1488982929450340375/0g16tJXw8f9UtUrRrLd2jDPWWD__LTDYO_X2VT2WL4F5GBYB8ykVxrjV-bCjzKKjSA5C") or None,
|
||||
"pokemoncenter": _env("DISCORD_WEBHOOK_POKEMONCENTER", "https://discord.com/api/webhooks/1488983050090975364/DwY9QQvBZa6V-zz8mIg302sukbISSbkXOhDwe1Q6yDG0zAwvaGQcn8iTzNB4D676e3cA") or None,
|
||||
},
|
||||
|
||||
# Per-type channels - used when no site-specific webhook is set
|
||||
"types": {
|
||||
"restock": "https://discord.com/api/webhooks/1488982403048542269/s1J_p8R6IMGQGypPh_ZYTHHBD0cMnd_BjLGggVWaL2OcyDQAR42KS-CyuHcVr5s21vl3",
|
||||
"new_drop": "https://discord.com/api/webhooks/1488982511613771898/RLDoHxNjsAx0PfHfT0kZe6-IW3g9PR_ckX_sI-CALcv4Lt0USslvI0rqePqW9gVP7D7v",
|
||||
"price_change": "https://discord.com/api/webhooks/1488982573723025633/J864UL4vk_q9Rmj4i4wtkGfzB3nKAOc0y7jzBFDgUbhwg4XKm1Z7sWduqRc6x_ThWetc",
|
||||
"error": "https://discord.com/api/webhooks/1488983128641900657/RP5FRSWwbVaRAf7RdXPs66ETbY8ziI1ekIx7lrHqxp8n200KpzUiX_EylCxXBH5nJD3B",
|
||||
"captcha": "https://discord.com/api/webhooks/1488983128641900657/RP5FRSWwbVaRAf7RdXPs66ETbY8ziI1ekIx7lrHqxp8n200KpzUiX_EylCxXBH5nJD3B",
|
||||
"restock": _env("DISCORD_WEBHOOK_RESTOCK", "https://discord.com/api/webhooks/1488982403048542269/s1J_p8R6IMGQGypPh_ZYTHHBD0cMnd_BjLGggVWaL2OcyDQAR42KS-CyuHcVr5s21vl3") or None,
|
||||
"new_drop": _env("DISCORD_WEBHOOK_NEW_DROP", "https://discord.com/api/webhooks/1488982511613771898/RLDoHxNjsAx0PfHfT0kZe6-IW3g9PR_ckX_sI-CALcv4Lt0USslvI0rqePqW9gVP7D7v") or None,
|
||||
"price_change": _env("DISCORD_WEBHOOK_PRICE_CHANGE", "https://discord.com/api/webhooks/1488982573723025633/J864UL4vk_q9Rmj4i4wtkGfzB3nKAOc0y7jzBFDgUbhwg4XKm1Z7sWduqRc6x_ThWetc") or None,
|
||||
"error": _env("DISCORD_WEBHOOK_ERROR", "https://discord.com/api/webhooks/1488983128641900657/RP5FRSWwbVaRAf7RdXPs66ETbY8ziI1ekIx7lrHqxp8n200KpzUiX_EylCxXBH5nJD3B") or None,
|
||||
"captcha": _env("DISCORD_WEBHOOK_ERROR", "https://discord.com/api/webhooks/1488983128641900657/RP5FRSWwbVaRAf7RdXPs66ETbY8ziI1ekIx7lrHqxp8n200KpzUiX_EylCxXBH5nJD3B") or None,
|
||||
},
|
||||
|
||||
# Override specific site + type combinations (highest priority)
|
||||
@@ -62,7 +75,8 @@ RESTOCK_COOLDOWN_HOURS = 6 # Minimum hours between restock alerts for same prod
|
||||
# Discord Bot Token (for interactive bot commands)
|
||||
# Create a bot at https://discord.com/developers/applications
|
||||
# Required for !setlocation, !stores, !stock commands
|
||||
DISCORD_BOT_TOKEN = "MTQ4NjQ2ODM2NDkyMTczNzM3OQ.Gxl8pq.wIvK2eVbp1G0SJhW4XTYD3zopR1gohaNv5sxlQ"
|
||||
# Set DISCORD_BOT_TOKEN in .env to override
|
||||
DISCORD_BOT_TOKEN = _env("DISCORD_BOT_TOKEN", "MTQ4NjQ2ODM2NDkyMTczNzM3OQ.Gxl8pq.wIvK2eVbp1G0SJhW4XTYD3zopR1gohaNv5sxlQ")
|
||||
|
||||
# How often to check each site (in seconds)
|
||||
CHECK_INTERVAL_SECONDS = 60
|
||||
@@ -83,7 +97,7 @@ SORT_BY_NEWEST = True
|
||||
# Which sites to monitor
|
||||
# Note: PokemonCenter has strong bot protection (Imperva) - may need manual workarounds
|
||||
# Note: Walmart has aggressive bot protection (PerimeterX) - may need stealth mode
|
||||
SITES_ENABLED = ["target", "bestbuy", "gamestop"] # Options: "pokemoncenter", "target", "gamestop", "bestbuy" (disabled - needs rework), "walmart"
|
||||
SITES_ENABLED = ["target", "gamestop", "bestbuy"] # Options: "pokemoncenter", "target", "gamestop", "bestbuy" (disabled - needs rework), "walmart"
|
||||
|
||||
# PokemonCenter URLs to monitor
|
||||
POKEMON_CENTER_URLS = [
|
||||
@@ -146,6 +160,8 @@ USE_STEALTH_BROWSER = True
|
||||
|
||||
# Stealth browser settings
|
||||
STEALTH_HEADLESS = True # Set True for headless/no-display environments
|
||||
GAMESTOP_HEADLESS = False # GameStop (Cloudflare) hard-blocks headless Chrome - must stay False
|
||||
BESTBUY_HEADLESS = False # BestBuy detects headless and blocks GraphQL product loading - must stay False
|
||||
STEALTH_SESSION_NAME = "pokemoncenter" # Name for cookie/session persistence
|
||||
|
||||
# Human-like behavior settings
|
||||
|
||||
Reference in New Issue
Block a user