Skip to content

Commit

Permalink
Merge branch 'dev' of https://github.com/bounswe/bounswe2024group2 in…
Browse files Browse the repository at this point in the history
…to dev
  • Loading branch information
furkansenkal committed Dec 16, 2024
2 parents 68a5c36 + fc696c9 commit 331a41a
Show file tree
Hide file tree
Showing 5 changed files with 114 additions and 2 deletions.
3 changes: 2 additions & 1 deletion backend/docker-compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ services:
python3 manage.py migrate --noinput &&
python3 manage.py collectstatic --noinput &&
python3 manage.py update_currencies &&
python3 manage.py update_stocks &&
python3 manage.py update_stocks &&
python3 manage.py update_indices &&
gunicorn backend.wsgi:application --bind 0.0.0.0:8000'
restart: always
environment:
Expand Down
63 changes: 63 additions & 0 deletions backend/marketfeed/management/commands/update_indices.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import requests
from bs4 import BeautifulSoup
from django.core.management.base import BaseCommand
import json
from django.conf import settings
import os
from marketfeed.serializers import *
from marketfeed.models import *

class Command(BaseCommand):
help = 'Update or Insert the supported indices to db'

def handle(self, *args, **kwargs):
url = "https://www.kap.org.tr/en/Endeksler"

file_path = os.path.join(settings.BASE_DIR,'marketfeed', 'management', 'indices.json')
if not os.path.exists(file_path):
self.stdout.write(self.style.ERROR(f'Index data file not found: {file_path}'))
return
with open(file_path, 'r') as file:
indices = json.load(file)
response = requests.get(url)
response.raise_for_status()

soup = BeautifulSoup(response.text, "html.parser")

index_elements = soup.find_all("div", class_="vcell")

for index_element in index_elements:
index_name = index_element.text.strip()

if index_name not in indices:
continue
# Get the index name
next_div = index_element.find_next("div", class_="column-type7 wmargin")
stock_symbols = []
if next_div:
stock_elements = next_div.find_all("div", class_="comp-cell _02 vtable")
for stock_element in stock_elements:
stock_name = stock_element.find("a", class_="vcell").text.strip() if stock_element.find("a", class_="vcell") else None

if stock_name:
stock_symbols.append(stock_name)

stocks_in_index = Stock.objects.filter(symbol__in=stock_symbols)
currency = Currency.objects.get(code='TRY')
symbol = indices[index_name]


try:
index_obj, created = Index.objects.update_or_create(
name = index_name,
symbol = symbol,
currency = currency,
#stocks = stocks_in_index
)

index_obj.stocks.add(*stocks_in_index)
except Exception as e:
print(e)



46 changes: 46 additions & 0 deletions backend/marketfeed/management/indices.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
{
"BIST 100": "XU100",
"BIST 50": "XU050",
"BIST 30": "XU030",
"BIST LIQUID BANKS": "XLBNK",
"BIST LIQUID 10 EX BANKS": "X10XB",
"BIST STARS": "XYLDZ",
"BIST IPO": "XHARZ",
"BIST SME INDUSTRIAL": "XKOBI",
"BIST DIVIDEND 25": "XTM25",
"BIST CORPORATE GOVERNANCE": "XKURY",
"BIST SUSTAINABILITY 25": "XSD25",
"BIST INDUSTRIALS": "XUSIN",
"BIST FOOD, BEVERAGE": "XGIDA",
"BIST CHEM., PETROL, PLASTIC": "XKMYA",
"BIST MINING": "XMADN",
"BIST BASIC METAL": "XMANA",
"BIST METAL PRODUCTS, MACH.": "XMESY",
"BIST WOOD, PAPER, PRINTING": "XKAGT",
"BIST NON-METAL MIN. PRODUCT": "XTAST",
"BIST TEXTILE, LEATHER": "XTEKS",
"BIST SERVICES": "XUHIZ",
"BIST ELECTRICITY": "XELKT",
"BIST TELECOMMUNICATION": "XILTM",
"BIST CONSTRUCTION": "XINSA",
"BIST SPORTS": "XSPOR",
"BIST W. AND RETAIL TRADE": "XTCRT",
"BIST TOURISM": "XTRZM",
"BIST TRANSPORTATION": "XULAS",
"BIST FINANCIALS": "XUMAL",
"BIST BANKS": "XBANK",
"BIST INSURANCE": "XSGRT",
"BIST LEASING FACTORING": "XFINK",
"BIST HOLD. AND INVESTMENT": "XHOLD",
"BIST REAL EST. INV. TRUSTS": "XGMYO",
"BIST BROKERAGE HOUSES": "XAKUR",
"BIST INVESTMENT TRUSTS": "XYORT",
"BIST TECHNOLOGY": "XUTEK",
"BIST INF. TECHNOLOGY": "XBLSM",
"BIST PARTICIPATION ALL SHARES": "XKTUM",
"BIST PARTICIPATION 100": "XK100",
"BIST PARTICIPATION DIVIDEND": "XKTMT",
"BIST SUSTAINABILITY PARTICIPATION": "XSRDK",
"BIST BUYBACK": "XUGRA"
}

3 changes: 2 additions & 1 deletion backend/marketfeed/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -634,8 +634,9 @@ def list(self, request):
)
for index in serializerData
]
if not symbols:
return Response([], status=status.HTTP_200_OK)
data = yf.download(tickers=symbols, period="1d", interval="1d")

prices = {
symbol.split(".")[0]: float(data["Close"][symbol]) for symbol in symbols
}
Expand Down
1 change: 1 addition & 0 deletions docker-compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ services:
python3 manage.py collectstatic --noinput &&
python3 manage.py update_currencies &&
python3 manage.py update_stocks &&
python3 manage.py update_indices &&
gunicorn backend.wsgi:application --bind 0.0.0.0:8000'
restart: always
environment:
Expand Down

0 comments on commit 331a41a

Please sign in to comment.