55 lines
2.5 KiB
Python
55 lines
2.5 KiB
Python
import urllib.request, json, sys, io, base64, os
|
|
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
|
|
|
|
TOKEN = os.environ.get('GITHUB_TOKEN', '')
|
|
HEADERS = {'Authorization': f'Bearer {TOKEN}', 'User-Agent': 'GFIL-Bot', 'Accept': 'application/vnd.github+json'}
|
|
OWNER = 'liudecai-one'
|
|
REPO = 'awesome-stock-trading'
|
|
|
|
# 1. Get README from FORK
|
|
print('=== 1. Get README from fork ===')
|
|
req = urllib.request.Request(f'https://api.github.com/repos/{OWNER}/{REPO}/readme', headers=HEADERS)
|
|
r = urllib.request.urlopen(req, timeout=30)
|
|
data = json.loads(r.read())
|
|
sha = data['sha']
|
|
raw = base64.b64decode(data['content']).decode('utf-8')
|
|
|
|
# 2. Insert GFIL BOSS entry
|
|
gfil_entry = '- [GFIL BOSS PANEL](https://gold-node.xyz/) - Institutional-grade trading terminal with real-time WebSocket data (sub-50ms latency) across 30+ assets including forex, gold, oil, indices, and crypto. Blog with trading strategies: [blog.quant-view.xyz](https://blog.quant-view.xyz)\n'
|
|
|
|
if 'Fear & Greed Index' in raw:
|
|
raw = raw.replace(
|
|
'- [Fear & Greed Index](https://edition.cnn.com/markets/fear-and-greed) -',
|
|
f'{gfil_entry}- [Fear & Greed Index](https://edition.cnn.com/markets/fear-and-greed) -'
|
|
)
|
|
print('Inserted GFIL BOSS before Fear & Greed Index')
|
|
else:
|
|
print('Could not find insertion point!')
|
|
|
|
# 3. Update README on fork
|
|
print('\n=== 2. Update fork README ===')
|
|
new_b64 = base64.b64encode(raw.encode()).decode()
|
|
data = json.dumps({'message': 'Add GFIL BOSS PANEL to Market Analysis', 'content': new_b64, 'sha': sha}).encode()
|
|
req = urllib.request.Request(f'https://api.github.com/repos/{OWNER}/{REPO}/contents/README.md',
|
|
data=data, headers=HEADERS, method='PUT')
|
|
r = urllib.request.urlopen(req, timeout=30)
|
|
print('Update OK')
|
|
|
|
# 4. Create Pull Request
|
|
print('\n=== 3. Create PR ===')
|
|
pr_data = json.dumps({
|
|
'title': 'Add GFIL BOSS PANEL to Market Analysis section',
|
|
'head': f'{OWNER}:main',
|
|
'base': 'main',
|
|
'body': 'GFIL BOSS PANEL v7.0 is an institutional-grade trading terminal with WebSocket real-time data (sub-50ms latency) across 30+ assets. It has a comprehensive blog with trading strategies at blog.quant-view.xyz.'
|
|
}).encode()
|
|
req = urllib.request.Request('https://api.github.com/repos/shi-rudo/awesome-stock-trading/pulls',
|
|
data=pr_data, headers=HEADERS, method='POST')
|
|
try:
|
|
r = urllib.request.urlopen(req, timeout=30)
|
|
pr = json.loads(r.read())
|
|
print(f'PR created: {pr["html_url"]}')
|
|
except urllib.error.HTTPError as e:
|
|
body = e.read().decode()
|
|
print(f'PR failed: {e.code} {body[:200]}')
|