1
0
mirror of https://gitlab.com/simple-stock-bots/simple-stock-bot.git synced 2026-06-03 21:00:26 +00:00

Compare commits

..

18 Commits

Author SHA1 Message Date
Anson 5baf7e42c0 update reqs 2024-05-12 21:48:24 -06:00
Anson 1bde1fbf19 just need ci to pass so I can update the site and shut things down 2024-05-12 21:42:08 -06:00
Anson d60b14c9de update site with archive notice 2024-05-13 03:40:32 +00:00
Anson ec516db22f formatting 2023-11-30 21:53:06 -07:00
Anson 1fe7fe8c9c formatting 2023-11-30 21:50:25 -07:00
Anson 0c71193194 weirdo bug 2023-11-30 21:50:17 -07:00
Anson d3b75984a6 full on ruff 2023-11-30 21:49:56 -07:00
Anson b3769b24d8 dont need black anymore 2023-11-30 21:06:35 -07:00
Anson d45ce7c250 Merge branch 'site-upload-fix' into 'master'
fix site upload rule

See merge request simple-stock-bots/simple-stock-bot!64
2023-11-29 03:27:58 +00:00
Anson dcff9f3537 fix site upload rule 2023-11-29 03:26:50 +00:00
Anson 66ff51f021 Merge branch 'sec-gov-permission-issue' into 'master'
Fix sec.gov permissions issue

See merge request simple-stock-bots/simple-stock-bot!63
2023-11-29 03:25:34 +00:00
Anson fbad8a20cf Fix sec.gov permissions issue 2023-11-29 03:25:34 +00:00
Anson 6229a5d4b6 Merge branch '114-fix-coingecko-too-many-requests-error' into 'master'
Resolve "Fix coingecko too many requests error"

Closes #114

See merge request simple-stock-bots/simple-stock-bot!62
2023-10-17 06:05:30 +00:00
Anson ef9cd7e85c Resolve "Fix coingecko too many requests error" 2023-10-17 06:05:30 +00:00
Anson 2758c45432 Merge branch '113-make-announcement-for-milestone-completion-2' into 'master'
Resolve "Make announcement for Milestone completion"

Closes #113

See merge request simple-stock-bots/simple-stock-bot!61
2023-10-17 05:43:32 +00:00
Anson c717739b75 Resolve "Make announcement for Milestone completion" 2023-10-17 05:43:32 +00:00
Anson 8a78ab5f55 Merge branch '113-make-announcement-for-milestone-completion' into 'master'
Resolve "Make announcement for Milestone completion"

Closes #113

See merge request simple-stock-bots/simple-stock-bot!60
2023-10-17 05:14:24 +00:00
Anson a54653bbc7 Resolve "Make announcement for Milestone completion" 2023-10-17 05:14:24 +00:00
36 changed files with 2947 additions and 2903 deletions
+1 -1
View File
@@ -27,7 +27,7 @@
]
}
},
"postCreateCommand": "pip3 install --user -r dev-reqs.txt && apt-get update && apt-get install -y nodejs npm && npm install"
"postCreateCommand": "pip3 install --user -r dev-reqs.txt && apt-get update && apt-get install -y nodejs npm --fix-missing && npm install"
// Features to add to the dev container. More info: https://containers.dev/features.
// "features": {},
// Use 'forwardPorts' to make a list of ports inside the container available locally.
+12 -20
View File
@@ -1,29 +1,21 @@
stages:
- lint
- build
- build_site
- deploy
- deploy_site
black:
stage: lint
image: registry.gitlab.com/pipeline-components/black:latest
script:
- black --check --verbose -- .
# ruff:
# stage: lint
# image: python:3.11-slim
# script:
# - pip3 install ruff
# - ruff . --output-format gitlab; ruff format . --diff
ruff:
stage: lint
image: python:3.11-slim
script:
- pip3 install ruff
- ruff --output-format gitlab .
prettier:
stage: lint
image: node:16-slim # Use Node.js image since prettier is a Node.js tool
script:
- npm install prettier
- npx prettier --check . # Adjust the path as needed
# prettier:
# stage: lint
# image: node:16-slim # Use Node.js image since prettier is a Node.js tool
# script:
# - npm install prettier
# - npx prettier --check . # Adjust the path as needed
include:
- local: /site/.gitlab-ci.yml
+1 -1
View File
@@ -3,7 +3,7 @@
"editor.formatOnPaste": true,
"editor.formatOnSaveMode": "modificationsIfAvailable",
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter",
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.formatOnSave": true,
"editor.formatOnSaveMode": "file"
}
+26 -4
View File
@@ -10,6 +10,7 @@ import pytz
import requests as r
import schedule
from common.Symbol import Stock
log = logging.getLogger(__name__)
@@ -54,9 +55,12 @@ class MarketData:
self.get_symbol_list()
schedule.every().day.do(self.get_symbol_list)
def get(self, endpoint, params: dict = {}, timeout=10) -> dict:
def get(self, endpoint, params=None, timeout=10, headers=None) -> dict:
url = "https://api.marketdata.app/v1/" + endpoint
if params is None:
params = {}
# set token param if it wasn't passed.
params["token"] = self.MARKETDATA_TOKEN
@@ -64,7 +68,13 @@ class MarketData:
# monitored even if someone doesn't make it through an affiliate link.
params["application"] = "simplestockbot"
resp = r.get(url, params=params, timeout=timeout)
if headers is None:
headers = {}
headers = {"User-Agent": "Simple Stock Bot anson@ansonbiggs.com"} | headers
resp = r.get(url, params=params, timeout=timeout, headers=headers)
logging.error(resp.headers.items())
# Make sure API returned a proper status code
try:
@@ -95,7 +105,15 @@ class MarketData:
return self.symbol_list.get(symbol.upper(), None)
def get_symbol_list(self):
sec_resp = r.get("https://www.sec.gov/files/company_tickers.json")
# Doesn't use `self.get()` since needs are much different
sec_resp = r.get(
"https://www.sec.gov/files/company_tickers.json",
headers={
"User-Agent": "Simple Stock Bot anson@ansonbiggs.com",
"Accept-Encoding": "gzip, deflate",
"Host": "www.sec.gov",
},
)
sec_resp.raise_for_status()
sec_data = sec_resp.json()
@@ -212,7 +230,11 @@ class MarketData:
if data := self.get(
f"stocks/candles/{resolution}/{symbol}",
params={"from": startTime.timestamp(), "to": now.timestamp(), "extended": True},
params={
"from": startTime.timestamp(),
"to": now.timestamp(),
"extended": True,
},
):
data.pop("s")
df = pd.DataFrame(data)
+3
View File
@@ -26,6 +26,9 @@ class Symbol:
def __str__(self) -> str:
return self.id
def __hash__(self):
return hash(self.id)
class Stock(Symbol):
"""Stock Market Object. Gets data from MarketData"""
+8 -1
View File
@@ -5,10 +5,11 @@ import pandas as pd
import requests as r
import schedule
from markdownify import markdownify
from common.Symbol import Coin
from common.utilities import rate_limited
import time
log = logging.getLogger(__name__)
@@ -34,6 +35,12 @@ class cg_Crypto:
url = "https://api.coingecko.com/api/v3" + endpoint
resp = r.get(url, params=params, timeout=timeout)
# Make sure API returned a proper status code
if resp.status_code == 429:
log.warning(f"CoinGecko returned 429 - Too Many Requests for endpoint: {endpoint}. Sleeping and trying again.")
time.sleep(10)
return self.get(endpoint=endpoint, params=params, timeout=timeout)
try:
resp.raise_for_status()
except r.exceptions.HTTPError as e:
+1 -3
View File
@@ -1,6 +1,5 @@
-r common/requirements.txt
-r site/requirements.txt
black==23.9.1
ipython==8.16.1
jupyter_client==8.4.0
jupyter_core==5.4.0
@@ -8,5 +7,4 @@ pylama==8.4.1
mypy==1.5.1
types-cachetools==5.3.0.6
types-pytz==2023.3.1.1
ruff==0.0.292
isort==5.12.0
ruff==0.1.6
-9
View File
@@ -1,11 +1,2 @@
[tool.black]
line-length = 130
[tool.flake8]
max-line-length = 130
[tool.pycodestyle]
max_line_length = 130
[tool.ruff]
line-length = 130
+4 -4
View File
@@ -1,7 +1,7 @@
image: python:3.11
build_site:
stage: build
build_mkdocs:
stage: build_site
script:
- cd ./site
- pip install -r requirements.txt
@@ -10,12 +10,12 @@ build_site:
paths:
- public
deploy_site:
pages:
stage: deploy
script:
- echo "Publishing site..."
dependencies:
- build_site
- build_mkdocs
artifacts:
paths:
- public
+14
View File
@@ -0,0 +1,14 @@
---
title: "Simple Bot End-of-Life"
date: 2024-05-12
tags: [Simple Stock Bot, Introduction, Telegram, Discord, Financial Insights]
authors: [Anson]
description: >
Simple Stock Bot is being sunset.
---
## What is Simple Stock Bot?
For full details see my full blog post: https://notes.ansonbiggs.com/simple-stock-bot-end-of-life/
I am shutting down Simple Stock Bot, a popular Telegram and Discord bot that provided live stock and cryptocurrency market data. The bot was created in 2018 after my group chat lost access to the Google Allo, which had integrated market data. The bot grew to 15,000 monthly active users, but maintaining the service has become challenging due to increasing data costs and changes to the Discord API. I really appreciate the community and everyone that has donated along the way, this has been a seriously great ride. The bot will soon no longer function on Telegram and Discord.
+4 -3
View File
@@ -11,12 +11,13 @@ nav:
- Home: index.md
- Commands: commands.md
- Self-Host: host.md
- Donate: donate.md
# - Donate: donate.md
- Contact: contact.md
- Blog: blog/index.md
theme:
name: material
custom_dir: overrides
language: en
features:
- navigation.instant
@@ -65,8 +66,8 @@ plugins:
markdown_extensions:
- attr_list
- pymdownx.emoji:
emoji_index: !!python/name:materialx.emoji.twemoji
emoji_generator: !!python/name:materialx.emoji.to_svg
emoji_index: !!python/name:material.extensions.emoji.twemoji
emoji_generator: !!python/name:material.extensions.emoji.to_svg
- admonition
- pymdownx.details
- pymdownx.superfences
+17
View File
@@ -0,0 +1,17 @@
{% extends "base.html" %}
<!-- Announcement bar -->
{% block announce %}
<div class="admonition danger" style="min-height: 20vh;">
<p class="admonition-title">This project is now archived!</p>
<p>
Please
<a href="/blog/2024/05/12/simple-bot-end-of-life/"
>click here for more information.</a
>
</p>
</div>
<div class="" admoniton></div>
{% endblock %}
+2 -1
View File
@@ -1,4 +1,5 @@
mkdocs-material==9.4.4
mkdocs-material==9.5.22
mkdocs-material-extensions==1.3.1
# Required for Social Cards
Pillow==10.0.1
+1 -3
View File
@@ -9,9 +9,7 @@ $tsla
/chart $tsla
/chart $$btc
/help
/trending""".split(
"\n"
)
/trending""".split("\n")
print("press enter to start")
keyboard.wait("enter")