Как проверить данные фондового рынка
Честно говоря, я не эксперт и сейчас очень смущен тем, как даже заявить о своем problem...so пожалуйста, простите мне недостаток знаний и этот длинный запутанный вопрос.
Сегодня мне поручили проект, в котором клиенты отображают информацию о фондовом рынке на своей странице (изображение прилагается ниже). И когда вы нажимаете на любую из кнопок (например, NASDAQ), во всплывающем окне отображается дополнительная информация.
Они используют onClick()
для отправки всю строку этой третьей стороне для сбора данных. Вот HTML-код ссылки на NASDAQ:
<li>
<a href="#" onClick="open('https://app.quotemedia.com/quotetools/clientForward?symbol=^NASD&targetURL=http://app.quotemedia.com/quotetools/popups/quote.jsp?webmasterId=99944&locale=en_US','miniwin','toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=1,width=550,height=270,top=20,left=0'); return false;">
NASDAQ
<span id="imageNASDAQ"></span>
<span id="valueNASDAQ" class="share_value"></span>
<span id="textNASDAQ"></span>
</a>
<script type="text/javascript" src="/getStockInfo.php?Stocks[NASD]=NASDAQ"></script>
</li>
, А затем в файле getStockInfo.php
они собирают данные в виде строки JSON, а затем анализируют их. Вот как они собирают данные:
<?php
if (array_key_exists("Stocks", $_GET)) {
foreach($_GET['Stocks'] as $symbol=>$stock) {
print file_get_contents("https://app.quotemedia.com/quotetools/jsVarsQuotes.go?webmasterId=99944&symbol=$symbol");
?>
Пока все довольно просто. Но теперь клиент хочет сделать некоторые
- "проверка ввода данных пользователем"
- "Принимаются только 4 символа: SP500, SPX, DOW и NASDAQ"
Вот тут я начинаю путаться. От их код (HTML-часть) выглядит так, как будто все жестко закодировано (open('...symbol=^NASD...');
или open('...symbol=^SPX...');
или open('...symbol=^DJI...');
), и каждая кнопка/ссылка отправляет информацию о конкретном символе акции в getStockInfo.php файл (src="/getStockInfo.php?Stocks[NASD]=NASDAQ"
или src="...Stocks[SPX]=SP500"
или src="...Stocks[DJI]=DOW"
), в котором извлекаются котировки акций. АбсолютноНЕТ способа, которым пользователи моего клиента могут предоставлять любые другие биржевые символы через сайт для изменения отображения, единственный способ манипулировать символами - это изменить сам код.
НО мой клиент хочет реализовать эти во всяком случае, выше 2 условий в коде. И я не уверен, как это сделать.
Не уверен, что смог правильно объяснить свою проблему:(Но мне действительно нужна помощь. Также я прошу прощения за то, что не смог предоставить ссылку на фактическую страницу здесь. Большое вам спасибо за то, что прочитали мой запутанный пост и потратили свое время!!:)
1 answers
Вот доказательство концепции:
if (array_key_exists("Stocks", $_GET)) {
$stocks = array_filter($_GET['Stocks'], 'filterStocks');
foreach ($stocks as $symbol => $stock) {
print file_get_contents(…);
}
}
function filterStocks($symbol) {
return in_array(
$symbol,
array('SP500', 'SPX', 'DOW', 'NASDAQ')
)
}
Теперь getStockInfo.php вернет данные только для четырех символов. Если вам нужно, чтобы это настраивалось индивидуально для каждого пользователя, простым решением было бы изменить функцию filterStocks и обратный вызов на
function filterStocksForLoggedInUser($symbol) {
return in_array($symbol, getAllowedSymbolsForUser());
}
function getAllowedSymbolsForUser()
{
$permissions = include '/path/to/permissions/file.php';
return isset($permissions[$_SESSION['username']])
? $permissions[$_SESSION['username']]
: array();
}
}
А затем в файле разрешений поместите
return array(
'Walahh' => array('SP500', 'SPX', 'DOW', 'NASDAQ'),
'JohnDoe' => array('SP500', 'GOOG')
);
Примечание 1: вышеизложенное предполагает, что у вас есть какой-то способ идентификации пользователей, здесь $_SESSION['username']
. Измените это с помощью того, что вы используете, и измените разрешение подайте соответствующий файл.
Примечание 2: файл разрешений будет считываться каждый раз с диска. Дисковый ввод-вывод обычно выполняется медленно, поэтому вы можете рассмотреть возможность переноса разрешений в более быстрое место.
Примечание 3: это всего лишь доказательство концепции. Это очень прагматично. Вы, конечно, можете улучшить дизайн и структуру, но я думаю, что этого достаточно, чтобы проиллюстрировать, как подойти к проблеме.