I'm trying to create a user input where the user can choose a stock Symbol
, a Start Date
, End Date
and Interval
. I would then like for this information to be passed along the javascript function api
to retrieve information about that specific stock such as open
, high
, low
, close
, etc. The javascript function is working and I'm being able to save the data as csv
files as well (not shown in the code), but I keep getting the error:
let symbol = document.getElementById("symbol").value;
^
ReferenceError: document is not defined
at file:///c:/Users/Rafael%20Oliveira/Desktop/teste/tempCodeRunnerFile.js:5:14
at ModuleJob.run (internal/modules/esm/module_job.js:169:25)
at async Loader.import (internal/modules/esm/loader.js:177:24)
at async Object.loadESM (internal/process/esm_loader.js:68:5)
This is the HTML
<!DOCTYPE html><p>API</p>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="yahooAPI.js"></script>
<title>Document</title>
</head>
<body>
<div class="symbol">
<label for="name">Symbol (4 characters):</label>
<input type="text" id="symbol" name="symbol" required
minlength="4" maxlength="4" size="10" placeholder="Exemplo: TSLA">
</div>
<div class="interval">
<label for="name">Interval: (1d, 1wk or 1mo):</label>
<input type="text" id="interval" name="interval" required
minlength="2" maxlength="3" size="10" placeholder="Exemplo: 1d">
</div>
<div class="period1">
<label for="name">Start Date:</label>
<input type="text" id="period1" name="period1" required
minlength="10" maxlength="10" size="20" placeholder="Exemplo: 2021-08-20">
</div>
<div class="period2">
<label for="name">End Date:</label>
<input type="text" id="period2" name="period2" required
minlength="10" maxlength="10" size="20" placeholder="Exemplo: 2021-08-25">
</div>
<div class="button">
<input type="button" name="buttonExecute" value="Execute" onclick="api(document.getElementById('symbol').value,document.getElementById('period1').value,document.getElementById('period2').value,document.getElementById('interval').value)"></input>
</div>
<div class="table">
<table style="width:50%">
<tr>
<th>Date</th>
<th>Open</th>
<th>High</th>
<th>Low</th>
<th>Close</th>
<th>AdjClose</th>
<th>Volume</th>
<th>Symbol</th>
</tr>
</table>
</div>
<script src="yahooAPI.js"></script>
</body>
</html>
Javascript:
import ObjectsToCsv from 'objects-to-csv';
import yahooFinance from 'yahoo-finance2';
let symbol = document.getElementById("symbol").value;
let period1 = document.getElementById("period1").value;
let period2 = document.getElementById("period2").value;
let interval = document.getElementById("interval").value;
async function api(symbol, period1, period2, interval){
const query = symbol;
const queryOptions = { period1: period1, period2: period2, interval: interval };
let result = await yahooFinance.historical(query, queryOptions);
const resultWithSymbol = result.map((item) => ({ ...item, symbol: query }));
console.log(resultWithSymbol);
api();
How could I possibly retrieve the user input data and pass it onto the api
function in javascript? My main goal is to put the output in the table
class, but I'd first like to figure out how I could have access to the data in my HTML file
Thank you in advance, any help is very welcome as I'm a begginner in both HTML and JavaScript (Trying to have a learn by doing approach)