Update README
This commit is contained in:
67
deploy_scripts/n8n_bridge.py
Normal file
67
deploy_scripts/n8n_bridge.py
Normal file
@ -0,0 +1,67 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
N8N 桥接脚本 — 把 BLOG SEO 内容推送到 TG + Discord
|
||||
由 daily_auto.py 统一管线调用
|
||||
|
||||
不在 RackNerd 上跑,本地直接调 TG Bot API + Discord Webhook
|
||||
"""
|
||||
import urllib.request, json, time, random, sys, io, os
|
||||
from datetime import datetime
|
||||
|
||||
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
|
||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
from config import TG_BOT_TOKEN as TG_BOT, DISCORD_WEBHOOK as DC_WEBHOOK, BLOG_URL as BLOG
|
||||
|
||||
TG_CHANNEL = "@GFIL_Trading"
|
||||
|
||||
def post_tg(msg):
|
||||
try:
|
||||
data = json.dumps({"chat_id": TG_CHANNEL, "text": msg, "disable_web_page_preview": False}).encode()
|
||||
req = urllib.request.Request(f"https://api.telegram.org/bot{TG_BOT}/sendMessage",
|
||||
data=data, headers={"Content-Type": "application/json"}, method="POST")
|
||||
r = urllib.request.urlopen(req, timeout=15)
|
||||
return r.status == 200
|
||||
except:
|
||||
return False
|
||||
|
||||
def post_discord(msg):
|
||||
try:
|
||||
data = json.dumps({"content": msg}).encode()
|
||||
req = urllib.request.Request(DC_WEBHOOK, data=data,
|
||||
headers={"Content-Type": "application/json", "User-Agent": "Mozilla/5.0 GFIL-Bridge"}, method="POST")
|
||||
urllib.request.urlopen(req, timeout=15)
|
||||
return True
|
||||
except:
|
||||
return False
|
||||
|
||||
# ===== 推广消息池 =====
|
||||
PROMOS = [
|
||||
f"🛠 Free Position Size Calculator — (Account x Risk%) / (Stop x Pip Value) = exact lots.\n\nNo signup. No email. Just math.\n\n👉 {BLOG}/tools/position-size-calculator.html\n\n🔗 More free tools: {BLOG}/tools/",
|
||||
f"📊 16 Free Trading Calculators — no signup, no ads.\n\nPosition Size · Pip Value · Fibonacci · ATR · Kelly · Margin · R:R · Drawdown\n\nAll free → {BLOG}/tools/\n\n📱 Join: https://t.me/GFIL_Trading",
|
||||
f"🥇 Gold XAUUSD traders — stop using 50-year-old indicators.\n\nRead order flow: cumulative delta, volume profile, absorption.\n\nFull guide → {BLOG}/gold-xauusd-trading-2026.html\n\nFree tools: {BLOG}/tools/",
|
||||
f"⚡ TradingView latency: 500ms-3s. WebSocket: <50ms.\n\nDuring NFP, that's 60-100 pips/day difference for scalpers.\n\nFull data → {BLOG}/tradingview-vs-gfil-boss.html\n\nTry WebSocket speed: https://gold-node.xyz",
|
||||
f"📈 5-Minute Forex Scalping Setup:\n\nLondon open + delta divergence + 5 pip stop + 12-15 target.\n\nFull breakdown → {BLOG}/forex-scalping-2026.html\n\nFree tools: {BLOG}/tools/",
|
||||
f"🔐 Anonymous trading in 2026:\n\nBrokers see every trade. Market makers detect flow. Protect your strategy.\n\nGuide → {BLOG}/trading-activity-tracked.html\n\nPrivate terminal: https://gold-node.xyz",
|
||||
f"🧮 Kelly Criterion Calculator — the mathematically optimal bet size.\n\n40% win rate + 1:3 R:R = 20% Kelly.\n\nUse half-Kelly for safety → {BLOG}/tools/kelly-calculator.html\n\nAll tools: {BLOG}/tools/",
|
||||
f"📉 Why 87% of retail traders lose: data asymmetry.\n\nInstitutions get data 15 min before you see it.\n\nFull analysis → {BLOG}/why-retail-traders-lose-money.html\n\nClose the gap: https://gold-node.xyz",
|
||||
]
|
||||
|
||||
if __name__ == "__main__":
|
||||
ts = datetime.now().strftime("%Y-%m-%d %H:%M")
|
||||
print(f"N8N Bridge [{ts}]")
|
||||
|
||||
# Pick 2 random promos
|
||||
picks = random.sample(PROMOS, min(3, len(PROMOS)))
|
||||
tg_ok = 0
|
||||
dc_ok = 0
|
||||
|
||||
for i, msg in enumerate(picks, 1):
|
||||
print(f" [{i}/{len(picks)}] {msg[:60]}...")
|
||||
if post_tg(msg):
|
||||
tg_ok += 1
|
||||
if post_discord(msg):
|
||||
dc_ok += 1
|
||||
time.sleep(1.5)
|
||||
|
||||
print(f" Sent: TG={tg_ok}/DC={dc_ok}/{len(picks)}")
|
||||
Reference in New Issue
Block a user