Spaces:
Runtime error
Runtime error
// jQuery | |
// $(document).ready(function() { }); | |
$(function() { | |
chartInit(); | |
}); | |
function handleReturn(output) { | |
return output; | |
} | |
function chartInit() { | |
// Ticker ์ด๋ฆ ๊ฐ์ ธ์ค๊ธฐ | |
// ํด๋น class์ text ๊ฐ์ ธ์ค๊ธฐ | |
let ticker = document.querySelector('.tickerName').textContent; | |
// console.log(ticker.indexOf(' ')); | |
idx = ticker.indexOf(' '); | |
ticker = ticker.substring(0, idx); | |
// Javascript -> Flask (Python) -> Javascript | |
chart_data = sendAjax_async("/chart", {"ticker": ticker}, "json", handleReturn); | |
console.log(chart_data); | |
console.log(Object.keys(chart_data.Close)); | |
// x์ถ๊ณผ data ์ค์ | |
// data: [{'x': date, 'o': open, 'h': high, 'l': low, 'c': close}, { }, { }, ... ] | |
data = []; | |
key_list = Object.keys(chart_data.Close); | |
for (var i=key_list.length-15; i<key_list.length; i++) { | |
key = key_list[i]; | |
const [year, month, day] = key.split("-"); | |
const x = new Date(parseInt(year), parseInt(month), parseInt(day), 9, 0, 0, 0).getTime(); | |
data.push({'x': x, 'o': chart_data.Open[key].toFixed(2), 'h': chart_data.High[key].toFixed(2), 'l': chart_data.Low[key].toFixed(2), 'c': chart_data.Close[key].toFixed(2)}) | |
} | |
console.log("data : ", data); | |
// Javascript chart.js candlestick | |
let mychart = document.getElementById('myChart'); | |
new Chart(mychart, { | |
type: 'candlestick', | |
data: { | |
datasets: [{ | |
label: 'CHRT - '.concat(ticker), | |
data: data | |
}] | |
} | |
}); | |
////////////////////////////////////////////////////////////////// | |
// Javascript๋ฅผ ์ด์ฉํด HTML์ ๋์ ์ผ๋ก ํ๊ทธ ์ถ๊ฐ | |
// a ํ๊ทธ onclick ์ ์ฉ | |
const goTicker = document.querySelector('.goticker'); | |
let goTickerURL = '/'.concat(ticker) | |
goTicker.setAttribute('href', goTickerURL); | |
////////////////////////////////////////////////////////////////// | |
////////////////////////////////////////////////////////////////// | |
// table title ํ์ | |
// ํด๋น class์ text ์ง์ด๋ฃ๊ธฐ | |
const table_title = document.querySelector('.table-title'); | |
$('.table .table-title').text(ticker.concat(' News')); | |
// Javascript -> Flask (Python) -> Javascript | |
news = sendAjax_async(url="/news", data={"ticker": ticker}, dataType="json", handle=handleReturn); | |
news_table = document.querySelector('.table .news-table'); | |
// console.log(news_table.innerHTML); | |
// console.log(news); | |
// console.log(Object.keys(news)); // key ๋ฐฐ์ด ๋ง๋ค๊ธฐ | |
// console.log(typeof Object.keys(news)); | |
/* | |
[ ๋ ์ง ์ ๋ ฌ ] | |
"news"์์ index์ ๋ํด์ ์ ๋ ฌ์ ํ๊ณ reduce() ํจ์๋ฅผ ์ ์ฉ. | |
reduce() : ๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด ์ฃผ์ด์ง reducer ํจ์๋ฅผ ์คํํ๊ณ , ํ๋์ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํ | |
*/ | |
sorted_news = {} | |
sorted_news = Object.keys(news).sort(function (a, b) { | |
if (a < b) { return 1; } | |
else if (a > b) { return -1; } | |
else { return 0; } | |
}).reduce((sorted_news, key) => { | |
sorted_news[key] = news[key]; | |
return sorted_news; | |
}, {}); | |
// console.log(sorted_news); | |
var key_list = Object.keys(chart_data.Open); | |
var open_list = Object.values(chart_data.Open); | |
var close_list = Object.values(chart_data.Close); | |
for (var i=0; i<key_list.length; i++) { | |
const [year, month, day] = key_list[i].split("-"); | |
key_list[i] = year + '.' + month + '.' + day; | |
} | |
console.log(key_list); | |
// List ์์ value๋ฅผ ๋ฝ์ ๋, (Python) => for item in list: | |
Object.keys(sorted_news).forEach(key => { | |
var idx = key_list.indexOf(String(key)); | |
if (idx != -1) { var diff = ((open_list[idx]-close_list[idx-1])/(open_list[idx]) * 100.0).toFixed(2); } | |
else { var diff = '.'; } | |
if (diff == '.') { | |
var diff_html = '<th class="news diff">' + diff + '</th>'; | |
} | |
else if (diff > 0) { | |
var diff_html = '<th class="news diff up">+' + diff + ' %</th>'; | |
} | |
else { | |
var diff_html = '<th class="news diff down">' + diff + ' %</th>'; | |
} | |
var html = '<tr align="center" bgcolor="white"><th>+</th><th>' + key + '</th>' + diff_html + '<td style="text-align: left;">'; | |
for (var i = 0; i < sorted_news[key].length; i++) { | |
var title = sorted_news[key][i].substring(0, sorted_news[key][i].length-4); | |
var sendTitle = title; // Javascript -> Python ๋ณด๋ด๊ธฐ ์ํ title | |
// title์์ & ํ์๊ฐ ์์ ์ ์์. | |
// Title ์์ '&'๋ก ํ์๋์ด ์๋๋ฐ ๋ฐ๋ก ๊ตฌ๋ณํด์ผ ๋๋ค. | |
// andSymbolInTitle ์์ ๊ฐ์ ธ์จ '&' ์์น index๋ฅผ title๊ณผ ํฉ์ณ์ค๋ค. | |
andSymbolInTitle = []; | |
let idx = 0; | |
// title = "asdf&asdf&AS&DF&&"; | |
// sendTitle = title; | |
while (true) { | |
idx = sendTitle.indexOf('&', idx); | |
if (idx == -1) { break; } | |
sendTitle = sendTitle.substring(0, idx) + sendTitle.substring(idx+1, sendTitle.length); | |
// console.log(sendTitle); | |
andSymbolInTitle.push(idx + andSymbolInTitle.length); | |
} | |
var link = String('"/info?ticker='.concat(ticker, '&date=', key, '&title=', sendTitle, '&andSymbolInTitle=', andSymbolInTitle, '"')); | |
// console.log(link); | |
html = html + '<a href=' + link + '>' + title + '</a><br>'; | |
} | |
html = html + '</td>'; | |
news_table.innerHTML = news_table.innerHTML + html; | |
}); | |
} | |
/** | |
* | |
* @param {string} url from javascript to flask(python) with route | |
* @param {dictionary} data from javascript to flask(python) with data | |
* @param {function} handle ํฐ ์๋ฏธ ์์ | |
*/ | |
function sendAjax(url, data, handle) { | |
/* | |
jQuery.getJSON(url, [, data], [, success]) | |
Load JSON-encoded data from the server using a GET HTTP request. | |
*/ | |
$.getJSON(url, data, | |
function(response) { | |
handle(response.result); | |
}); | |
} | |
/** | |
* | |
* @param {string} url from javascript to flask(python) with route | |
* @param {dictionary} data from javascript to flask(python) with data | |
* @param {string} dataType The type of data that you're expecting back from the server. (ex. "json") | |
* @param {function} handle ํฐ ์๋ฏธ ์์ | |
* @returns from flask(python) to javascript with data | |
*/ | |
function sendAjax_async(url, data, dataType, handle) { | |
/* | |
jQuery.ajax(url, [, settings]) | |
jQuery.getJSON => Asynchronous (๋น๋๊ธฐ์) | |
Synchronous => ๋๊ธฐ์ : ์ฝ๋ ์์๋๋ก ์งํ | |
*/ | |
var search_var; | |
console.log("Internal : sendAjax async"); | |
$.ajax(url=url, settings={data: data, dataType: dataType, async: false, | |
success: function(response) { | |
console.log("Success : ", typeof response); | |
search_var = handle(response.result); // handle, ํฐ ์๋ฏธ ์์ | |
} | |
}); | |
return search_var | |
} | |