Как проверить данные фондового рынка


Честно говоря, я не эксперт и сейчас очень смущен тем, как даже заявить о своем problem...so пожалуйста, простите мне недостаток знаний и этот длинный запутанный вопрос.

Сегодня мне поручили проект, в котором клиенты отображают информацию о фондовом рынке на своей странице (изображение прилагается ниже). И когда вы нажимаете на любую из кнопок (например, NASDAQ), во всплывающем окне отображается дополнительная информация.

screen shot

Они используют 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 условий в коде. И я не уверен, как это сделать.

Не уверен, что смог правильно объяснить свою проблему:(Но мне действительно нужна помощь. Также я прошу прощения за то, что не смог предоставить ссылку на фактическую страницу здесь. Большое вам спасибо за то, что прочитали мой запутанный пост и потратили свое время!!:)

Author: AlwaysANovice, 2014-02-14

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: это всего лишь доказательство концепции. Это очень прагматично. Вы, конечно, можете улучшить дизайн и структуру, но я думаю, что этого достаточно, чтобы проиллюстрировать, как подойти к проблеме.

 1
Author: Gordon, 2014-02-14 08:49:17