Files
gfil-blog/deploy_scripts/promote_site.py
2026-06-28 17:19:47 +00:00

281 lines
12 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
网站推广工具包
- 检查 Google 收录状态
- 生成可直接发布的推广内容
- 提交到可自动提交的目录/平台
- 生成推广报告
"""
import urllib.request, urllib.parse, sys, io, os, json, time
from datetime import datetime
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
OUTPUT_DIR = os.path.join(BASE_DIR, 'output')
SITE = 'https://blog.quant-view.xyz'
BLOG_NAME = 'GFIL Trading Insights'
ARTICLES = [
{'title': 'GFIL BOSS PANEL v7.0 Review: Institutional Trading Terminal', 'url': '/gfil-boss-panel-v70-review.html', 'kw': 'institutional trading terminal'},
{'title': 'Gold XAUUSD Trading in 2026: Why Retail Indicators Fail', 'url': '/gold-xauusd-trading-2026.html', 'kw': 'gold trading XAUUSD'},
{'title': 'TradingView vs GFIL BOSS: Chart Lag Comparison', 'url': '/tradingview-vs-gfil-boss.html', 'kw': 'trading platform comparison'},
{'title': 'Why 87% of Retail Traders Lose Money', 'url': '/why-retail-traders-lose-money.html', 'kw': 'retail trading losses'},
{'title': 'Your Trading Activity Is Being Tracked', 'url': '/trading-activity-tracked.html', 'kw': 'trading privacy'},
{'title': 'Forex Scalping Strategy 2026: 5-Minute System', 'url': '/forex-scalping-2026.html', 'kw': 'forex scalping strategy'},
{'title': 'How Institutions See Market Moves 15 Min Before', 'url': '/institutional-traders-see-market-moves.html', 'kw': 'institutional trading advantage'},
{'title': 'AI Market Intelligence: Human Analysis Is Obsolete', 'url': '/ai-driven-market-intelligence.html', 'kw': 'AI trading analysis'},
{'title': 'WTI Crude Oil 2026: Profit from Energy Volatility', 'url': '/wti-crude-oil-2026.html', 'kw': 'crude oil trading'},
{'title': 'GFIL BOSS PANEL FAQ: Complete Guide', 'url': '/gfil-boss-panel-faq.html', 'kw': 'GFIL BOSS PANEL FAQ'},
]
def check_google_index():
"""用 site: 查询检查是否被收录"""
print('=== Google 收录检查 ===')
query = f'site:{SITE.replace("https://", "")}'
url = f'https://www.google.com/search?q={urllib.parse.quote(query)}'
req = urllib.request.Request(url, headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
})
try:
r = urllib.request.urlopen(req, timeout=15)
html = r.read().decode('utf-8', errors='replace')
# Count results
for line in html.split('\n'):
if 'result-stats' in line or 'About' in line and 'results' in line:
print(f' 收录结果: {line[:200]}')
break
else:
print(f' 页面已返回但无法解析结果数google 可能要求验证)')
# Count mentioned URLs
url_count = sum(1 for a in ARTICLES if a['url'] in html)
print(f' 页面中检测到 {url_count}/{len(ARTICLES)} 篇文章链接')
except Exception as e:
print(f' 检查失败Google 验证拦截): {e}')
def generate_reddit_posts():
"""生成 Reddit 推广帖子(可直接复制发布)"""
posts_dir = os.path.join(BASE_DIR, 'outreach_templates')
os.makedirs(posts_dir, exist_ok=True)
posts = [
{
'subreddit': 'r/Forex',
'title': "I analyzed why 87% of retail forex traders lose money — the data asymmetry is worse than you think",
'body': f"""I spent the last few weeks researching and writing a detailed analysis of the retail trader loss rate, and what I found surprised me.
The common narrative is that traders lose because of poor risk management or lack of discipline. But the real culprit is **structural data asymmetry** between retail and institutional traders.
Key findings:
- Institutions get market-moving data 15-30 minutes before retail platforms show it
- Most retail platforms have 500ms-3s of data delay (vs <50ms for institutional tools)
- The average retail trader is trading on information that's already priced in
- Order flow analysis reveals what institutions are doing before price moves
I wrote a full breakdown here if anyone's interested:
{SITE}/why-retail-traders-lose-money.html
Would love to hear others' experiences with this. Has anyone else noticed the information gap in their own trading?""",
'articles': ['why-retail-traders-lose-money.html']
},
{
'subreddit': 'r/Daytrading',
'title': "TradingView vs institutional terminals — the latency difference is costing you money",
'body': f"""I did a detailed comparison between TradingView and institutional-grade trading terminals, specifically looking at data latency and its impact on day trading.
The numbers are pretty stark:
- TradingView average data latency: 500ms-3s (REST polling)
- Institutional terminal latency: <50ms (WebSocket streaming)
- Over 20 trades/day, the latency difference adds up to 60-160 pips of slippage
Full comparison here:
{SITE}/tradingview-vs-gfil-boss.html
For those of you who've used both retail and institutional platforms — what's your experience been?""",
'articles': ['tradingview-vs-gfil-boss.html']
},
{
'subreddit': 'r/Gold',
'title': "Gold XAUUSD in 2026 — why traditional technical indicators are failing most traders",
'body': f"""Been analyzing gold markets extensively this year and noticing a troubling trend: the classic indicators (RSI, MACD, Bollinger Bands) that most retail traders rely on are becoming increasingly unreliable for gold trading.
The reason? Institutions have moved to:
- Real-time order flow analysis
- Cumulative delta divergence
- Volume profile & market profile
- Intermarket correlation (DXY, yields, gold ETF flows)
While retail traders watch lagging indicators, institutional desks are already positioned based on live order book data.
Wrote a detailed guide here if anyone wants to dig deeper:
{SITE}/gold-xauusd-trading-2026.html
What indicators are you guys using for gold in 2026?""",
'articles': ['gold-xauusd-trading-2026.html']
},
]
# Save each post
for post in posts:
fname = f"reddit_{post['subreddit'].replace('r/','').lower()}.txt"
path = os.path.join(posts_dir, fname)
content = f"Subreddit: {post['subreddit']}\n"
content += f"Title: {post['title']}\n"
content += f"{'='*60}\n"
content += post['body']
content += f"\n{'='*60}\n"
content += f"\nTarget articles: {', '.join(post['articles'])}\n"
with open(path, 'w', encoding='utf-8') as f:
f.write(content)
print(f' ✓ Reddit 帖子: {path}')
return len(posts)
def generate_tradingview_ideas():
"""生成 TradingView 观点帖子"""
ideas_dir = os.path.join(BASE_DIR, 'outreach_templates')
os.makedirs(ideas_dir, exist_ok=True)
ideas = [
{
'title': 'XAUUSD: Institutional Order Flow Shows Bearish Divergence — Technical Analysis',
'content': f"""Gold (XAUUSD) is showing a clear bearish divergence between price and cumulative delta on the 1-hour timeframe.
Price made a higher high, but cumulative delta made a lower high. This divergence suggests institutional distribution is occurring — smart money is selling into strength.
Key levels to watch:
- Resistance: Previous high zone
- Support: Volume-weighted average price (VWAP)
For a complete analysis of how institutional traders read gold markets, check out our detailed guide:
{SITE}/gold-xauusd-trading-2026.html
Trade safe.""",
},
{
'title': 'EUR/USD Scalping Setup: Delta Divergence on M5 — 15 Pip Target',
'content': f"""EUR/USD 5-minute chart showing a textbook delta divergence entry setup:
Price making lower lows, but cumulative delta making higher lows — selling pressure exhausting.
Entry: Bullish close above previous 1m high
Stop: 5 pips below divergence low
Target 1: 10 pips (50% position)
Target 2: 15 pips (remaining)
Full scalping strategy breakdown:
{SITE}/forex-scalping-2026.html
This is the exact setup institutional scalpers use.""",
},
]
for i, idea in enumerate(ideas, 1):
fname = f'tradingview_idea_{i}.txt'
path = os.path.join(ideas_dir, fname)
content = f"Title: {idea['title']}\n"
content += f"{'='*60}\n"
content += idea['content'].strip()
with open(path, 'w', encoding='utf-8') as f:
f.write(content)
print(f' ✓ TradingView 观点: {path}')
def submit_to_directories():
"""尝试提交到公开收录目录"""
print('\n=== 提交到公开目录 ===')
# 1. 提交到 Search.co (免费目录提交)
directories = [
('Google Business Profile', 'https://business.google.com/', False),
('Bing Webmaster Tools', 'https://www.bing.com/webmasters/', False),
]
for name, url, _ in directories:
print(f' 📋 {name}: {url}(需手动提交)')
print('\n ✅ IndexNow: 已提交 11 个 URL')
print(' ✅ Sitemap: 已在 robots.txt 声明')
print(' 📋 手动操作: Google Search Console + Bing Webmaster Tools')
def generate_shareable_content():
"""生成可直接分享的推广内容"""
print('\n=== 社交媒体推广内容 ===')
for art in ARTICLES:
share_texts = [
f"📊 {art['title']}\n\n{art['kw'].title()} — full analysis:\n{SITE}{art['url']}",
f"🔍 Just published: {art['title']}\n\nRead the full analysis 👇\n{SITE}{art['url']}",
]
print(f'\n--- Article: {art["title"][:50]}... ---')
for i, text in enumerate(share_texts, 1):
char_count = len(text)
print(f' Tweet {i} ({char_count} chars):')
print(f' {text[:100]}...')
print()
def generate_report():
"""生成完整的推广报告"""
report_lines = []
report_lines.append('=' * 60)
report_lines.append(f'博客推广报告 - {datetime.now().strftime("%Y-%m-%d %H:%M")}')
report_lines.append('=' * 60)
report_lines.append('')
report_lines.append('✅ 技术 SEO')
report_lines.append(' • 10篇深度文章 ✓')
report_lines.append(' • 结构化数据 (WebSite/Organization/Breadcrumb/Article/FAQPage) ✓')
report_lines.append(' • OG Image (og-default.svg) ✓')
report_lines.append(' • 自定义 404 页面 ✓')
report_lines.append(' • Sitemap.xml / robots.txt ✓')
report_lines.append(' • Nginx Gzip + SSL + HTTP/2 + 缓存 ✓')
report_lines.append('')
report_lines.append('✅ 搜索引擎提交')
report_lines.append(' • IndexNow API: 已提交 11 URLs ✓')
report_lines.append(' • Google Search Console: 待验证(需你在 Cloudflare 加 TXT 记录)')
report_lines.append('')
report_lines.append('📋 待执行的推广任务')
report_lines.append(' 1. Google Search Console 域名验证')
report_lines.append(' 2. Reddit 发帖 (r/Forex / r/Daytrading / r/Gold)')
report_lines.append(' 3. TradingView 发布观点')
report_lines.append(' 4. 设置 GA4 看流量')
report_lines.append(' 5. 写更多文章覆盖新关键词')
report_lines.append('')
report_lines.append('推广帖子已保存到 outreach_templates/ 目录')
report_lines.append('=' * 60)
report = '\n'.join(report_lines)
print(report)
path = os.path.join(OUTPUT_DIR, 'promotion_report.txt')
with open(path, 'w', encoding='utf-8') as f:
f.write(report)
print(f'\n报告已保存: {path}')
if __name__ == '__main__':
action = sys.argv[1] if len(sys.argv) > 1 else 'all'
if action in ('all', 'check'):
check_google_index()
if action in ('all', 'content'):
print()
print('=== 生成推广内容 ===')
n_reddit = generate_reddit_posts()
generate_tradingview_ideas()
generate_shareable_content()
print(f'\n✓ 共生成 {n_reddit} 个 Reddit 帖子 + 2 个 TradingView 观点')
if action in ('all', 'submit'):
submit_to_directories()
if action in ('all', 'report'):
generate_report()