2016-02-12 8 views
-1

Я извлекаю данные о рынке как из Google Finance, так и из Yahoo Finance, но борюсь с проблемой.Использование file_get_contents()/cURL или API для получения финансовых данных?

Google Finance

http://www.google.com/finance/info?q=NASDAQ:GOOG

Yahoo Finance

http://query.yahooapis.com/v1/public/yql?q=select%20LastTradePriceOnly%20from%20yahoo.finance.quotes%20where%20symbol%20in%20%28%22GOOG%22%29%0A%09%09&env=http%3A%2F%2Fdatatables.org%2Falltables.env&format=json

Я испытываю Yahoo Finance как ненадежный. Если я проверю акции прямо на веб-сайте Yahoo Finance, я получу правильную цену, но как только я воспользуюсь ссылкой выше, я получу другую цену. Я составил данные JSON для Google и Yahoo Finance. Google Finance гораздо точнее, но я хочу использовать Yahoo Finance, поскольку у них есть намного больше акций для извлечения. Я проверил акции Google (GOOG) через «API» Yahoo Finance, как за 30 минут до отмеченного закрытия. Он показывал неправильную цену, как 2 доллара. Сайт показал правильную цену, но не «API». Но и мой сценарий Google Finance, и веб-сайт показывали правильную цену. Кто-нибудь знает, как это можно решить? Если кто-то работал с Yahoo Finance «API» раньше?

Сейчас я пользуюсь file_get_contents() с RegEx, чтобы получить <span> с обоих сайтов. Этот метод работает очень хорошо и быстро, но я хочу перейти на использование cURL, поскольку он быстрее. Я создал веб-сайт, который извлекает данные, и занимает всего 1 секунду.

Вот часть моего текущего кода:

$data = file_get_contents('http://www.google.com/finance?q=NASDAQ:GOOG'); 
$stock = '/\<span id\=\"ref_4420283_l\"\>(.*?)\<\/span\>/'; 
$price = htmlspecialchars(strip_tags($stock [0])); 

Если я придерживаться приведенного выше кода, есть ли шанс, что Google или Yahoo блокирует соединение? Поскольку этот код загружает весь сайт, а не только данные JSON. Мне просто нужно исправить цену.

Резюме

настоящее время я использую file_get_contents(), но нужно перенести свернуться, если мне нужно придерживаться этого метода. Я собираюсь использовать данные JSON от Yahoo Finance в соответствии со ссылкой выше, но данные JSON не кажутся точными. Данные JSON от Google Finance совершенно точны, но у Google нет всех акций, таких как Yahoo Finance.

У кого-нибудь была такая же проблема с Yahoo Finance? Есть ли вероятность, что Google или Yahoo заблокируют мое соединение, если я захочу придерживаться file_get_contents() или cURL. Это связано с тем, что данные веб-сайта являются точными как для Google, так и для Yahoo Finance, но не для данных JSON от Yahoo.

Я благодарен за любую помощь, которую я могу получить.

+0

Для получения этого типа финансовых данных существует множество API-интерфейсов; большинство из них являются коммерческими. Рекомендация для этого сайта недоступна; вам нужно будет провести собственное исследование. – duskwuff

+0

Я нашел Google «API» и Yahoo «API», но Yahoo не кажется точным. Я также задал вопрос, могу ли я быть заблокирован, если вы используете file_get_contents() для получения данных вместо использования JSON. Извините за длинный текст, просто подумал, что мне нужно быть конкретным, чтобы получить конкретный ответ. – Treps

ответ

1
<?PHP 
$url = "http://www.google.com/finance?q=NASDAQ:GOOG"; 
    $input = @file_get_contents($url) or die("Could not access file: $url"); 
    $regexp = '<span id=\"ref_(.*)\">(.*)<\/span>'; 
    if(preg_match_all("/$regexp/siU", $input, $matches, PREG_SET_ORDER)) { 
     foreach($matches as $match) { 

echo $match[2].","."<br />"; 


     } 
} 

?> 
+0

Ох, хороший пример.Вы также можете использовать echo '$ matches [0] [0];', чтобы получить цену. Но я не совсем понимаю, почему он работает. Как может 'ref _ (. *)' Get "304466804484872_l" в этом случае? Если вы проверите исходный код, это похоже на 63 совпадения для «ref_», но только 2 совпадения для «ref_304466804484872_l» (оба одинаковые). Поэтому я бы понял, был ли RegEx вместо 'ref _ (. *) _ L'. Или это потому, что код не будет извлекать ничего в теге '