Yahoo Financeのようなサイトからデータを取得するにはどうすればよいですか? [閉まっている
-
27-10-2019 - |
質問
助けが必要なプロジェクトがあります。 ABC123.comなどのWebサイトにアクセスして、Dow Jones Indexを表示できるようにしたいと思います。それでおしまい。 ABC123.com Webサイトに12050のような1つの番号を表示するだけです。
明らかに、Yahoo Financeのようなどこかからデータを取得する必要があります。 .csvファイルなどをダウンロードしたくありません。 Yahooのデータが15分遅れていることを知っているため、リアルタイムデータである必要はありません。自分のサイトにアクセスして、ダウジョーンズインデックスが何であるかを確認できるようにしたいだけです。
この質問をする前に、私はSOについていくつかの同様の質問を調査しましたが、それらの多くは未回答または参照YQL(私がこの時点で検討し、理解しようとしているもの)でした。
これを行う最も簡単な方法に関するガイダンスは大歓迎です!私はHTMLの最初のプログラマーであり、最もわかりやすく、実装されたルートを探しています。
解決
できません。プログラムではなく、合法的に。
それ以外の場合は示されている場合を除き、引用符は遅れます。 Nasdaq、NYSE、AMEXの遅延時間は15分です。他の交換の遅延時間も参照してください。 Yahoo!で特定された独立したプロバイダーが提供する引用やその他の情報ファイナンスパートナーページ。引用符は自動的に更新されますが、25分間の不活動の後にオフになります。引用符は少なくとも15分遅れます。すべての情報は、情報提供のみを目的としており、取引目的やアドバイスを目的としたものではありません。どちらもYahoo!また、独立したプロバイダーのいずれかは、情報のエラー、不完全性、遅延、またはここに含まれる情報に依存して取られたアクションについても責任を負います。 Yahoo!にアクセスすることによってサイト、あなたはそこにある情報を再分配しないことに同意します。
すべての主要な市場データプロバイダーには、そのようなある種の合法的なものがあります。
しかし、とにかくそれをするつもりなら、私はおそらくあなたが探している引用を見つけるためにHTMLをダウンロードして解析するでしょう。
合法的にやりたい場合は、取引所自体または情報を中継する第三者エンティティからデータを取得するために多額のお金を払わなければなりません。その場合、提供するAPIを使用する必要があります。
出典:あなたがしていることを考えようとしている:)
(編集)YQLを使用すると言う人に:
利用規約を見てください。
それはいけません:
販売、リース、共有、転送、またはsublicense yqlまたは Yahoo!と連携してYQLの使用から収入を導き出すAPIまたはその他のWebサービス, 、直接的な商業的または金銭的利益であろうと、その他のために、Yahooなし!
また
Yahoo!が提供する製品またはサービスと競合する製品またはサービスでYQLを使用します
株式の見積もりを共有しているサイトは、Finance.yahoo.comと競合するため、YPLの使用条件に依存します。さらに、このデータでやっていることからお金を稼ぐことはできません。明示的な書面による同意を得ることができます。
「ダークサイド」で読む ここ YQLも「私のコードを所有しているのは誰ですか?技術的には、彼らはすべてを所有しています。」
YQLは、スケーラビリティ、収益性、単純さ、または合法性の点で優れたソリューションではありません。これらのことを気にせず、Webアプリケーションが人気がなくなったり、お金を稼ぐことも、Yahoo!その後、YQLが進む方法です。
(編集#2)
自分のために情報を表示しようとしている場合(他の人と共有しないでください)、HTMLを解析して、PHPではなくC#/Visual BasicおよびASP.NETを使用してWebサイトに表示するのは非常に簡単です。 C#/VBでHTTPリクエストを作成できます。これにより、(最終的に)HTMLファイルを返します。これにより、Dow Jones Indexの見積もりを解析または検索できます。これをすべてC#/VBでASP Webアプリケーションのバックエンドとして実行します。無料のVisual Studio 2010 Expressでこれらを作成できると思います。
他のヒント
これを行うための法的制限があるかどうかはわかりません。 Yahoo Financeからデータを引き出し、長年にわたってうまく機能している商用(有料)アプリがたくさんあります。ここでのトリックは、これらのアプリがユーザーのデバイス(iOS/Android/Windowsデバイス)にインストールされているため、ユーザー自身の個人使用のためにYahoo Financeからデータを取得することだと思います。
たぶん、JavaScriptを介してYahoo Financeからデータを取得し、サーバーに保存しなかった場合、同じケースがプロジェクトに適用されます。実際のところ、私は実際にそう思うでしょう。この場合の唯一の違いは、Webページであるため、ユーザーのデバイスにコードをインストールする必要がないことです。
あなたはあなたのプロジェクトの法的限界について議論するためにYQLまたはYahoo Financeのサポートに連絡しようとしましたか?
Yahoo!から在庫データを取得する機能を書きましたファイナンスAPI;ただし、私のコードは.csvファイルをダウンロードします。私はそれが便利であることを願っています。
完全なソースコードとサンプルの結果がオンになっています 私のブログ.
<?php
/*
Description: Getting Stock Data from Yahoo! Finance
Author URI: http://phpvancouver.ca/
*/
/*
* More about Yahoo! Finance Tag
* http://www.gummy-stuff.org/Yahoo-data.htm
* http://www.canbike.ca/information-technology/2013/08/10/yahoo-finance-url-download-to-a-csv-file.html
*/
$yahoo_finance_tags = array(
"a" => "Ask", "a2" => "Average Daily Volume", "a5" => "Ask Size",
"b" => "Bid", "b2" => "Ask (Real-time)", "b3" => "Bid (Real-time)",
"b4" => "Book Value", "b6" => "Bid Size", "c" => "Change & Percent Change",
"c1" => "Change", "c3" => "Commission", "c6" => "Change (Real-time)",
"c8" => "After Hours Change (Real-time)", "d" => "Dividend/Share", "d1" => "Last Trade Date",
"d2" => "Trade Date", "e" => "Earnings/Share", "e1" => "Error Indication (returned for symbol changed / invalid)",
"e7" => "EPS Estimate Current Year", "e8" => "EPS Estimate Next Year", "e9" => "EPS Estimate Next Quarter",
"f6" => "Float Shares", "g" => "Day's Low", "h" => "Day's High",
"j" => "52-week Low", "k" => "52-week High", "g1" => "Holdings Gain Percent",
"g3" => "Annualized Gain", "g4" => "Holdings Gain", "g5" => "Holdings Gain Percent (Real-time)",
"g6" => "Holdings Gain (Real-time)", "i" => "More Info", "i5" => "Order Book (Real-time)",
"j1" => "Market Capitalization", "j3" => "Market Cap (Real-time)", "j4" => "EBITDA",
"j5" => "Change From 52-week Low", "j6" => "Percent Change From 52-week Low", "k1" => "Last Trade (Real-time) With Time",
"k2" => "Change Percent (Real-time)", "k3" => "Last Trade Size", "k4" => "Change From 52-week High",
"k5" => "Percebt Change From 52-week High", "l" => "Last Trade (With Time)", "l1" => "Last Trade (Price Only)",
"l2" => "High Limit", "l3" => "Low Limit", "m" => "Day's Range",
"m2" => "Day's Range (Real-time)", "m3" => "50-day Moving Average", "m4" => "200-day Moving Average",
"m5" => "Change From 200-day Moving Average", "m6" => "Percent Change From 200-day Moving Average", "m7" => "Change From 50-day Moving Average",
"m8" => "Percent Change From 50-day Moving Average", "n" => "Name", "n4" => "Notes",
"o" => "Open", "p" => "Previous Close", "p1" => "Price Paid",
"p2" => "Change in Percent", "p5" => "Price/Sales", "p6" => "Price/Book",
"q" => "Ex-Dividend Date", "r" => "P/E Ratio", "r1" => "Dividend Pay Date",
"r2" => "P/E Ratio (Real-time)", "r5" => "PEG Ratio", "r6" => "Price/EPS Estimate Current Year",
"r7" => "Price/EPS Estimate Next Year", "s" => "Symbol", "s1" => "Shares Owned",
"s7" => "Short Ratio", "t1" => "Last Trade Time", "t6" => "Trade Links",
"t7" => "Ticker Trend", "t8" => "1 yr Target Price", "v" => "Volume",
"v1" => "Holdings Value", "v7" => "Holdings Value (Real-time)", "w" => "52-week Range",
"w1" => "Day's Value Change", "w4" => "Day's Value Change (Real-time)", "x" => "Stock Exchange",
);
/* This function gets a symbol or an array of symbol as a parameter.
* And it returns an array of the corresponding stock data.
* If an error occurs, the detail of the error is saved in $error_message variable
* which is passed by reference from the parent function
*/
function get_stock_data_from_yahoo_finance_pv($symbol, &$error_message) {
global $yahoo_finance_tags;
$error_message = NULL; // Default value
$f = ""; // The f parameter in Yahoo! Finance URL
foreach($yahoo_finance_tags as $key => $value)
$f = $f . $key;
if ( is_array($symbol) ) { // if the symbol is an array
if ( $symbol == NULL ) { // if the symbol is invalid
$error_message = "The given symbol is invalid.";
return -1; // ERROR
}
$url = "http://finance.yahoo.com/d/quotes.csv?s=" . implode("+", $symbol) . "&f=" . $f;
$fp = @fopen($url, "r");
if ( $fp == FALSE ) { // If the URL can't be opened
$error_message = "Cannot get data from Yahoo! Finance. The following URL is not accessible, $url";
return -1; // ERROR
}
$arr = array();
$symbol = explode("+",implode("+", $symbol)); // Eliminate the keys in the symbol array
$j = 0;
while ( ($array = @fgetcsv($fp , 4096 , ', ')) !== FALSE ) {
$i = 0;
$p = array();
foreach($yahoo_finance_tags as $key => $value) {
$p[$key] = $array[$i];
$i = $i + 1;
}
$arr[$symbol[$j]]= $p;
$j = $j + 1;
}
@fclose($fp);
return $arr;
} else { // if the symbol is not array
if ( strlen($symbol) < 1 || $symbol == NULL ) { // if the symbol is invalid
$error_message = "The given symbol is invalid.";
return -1; // ERROR
}
$url = "http://finance.yahoo.com/d/quotes.csv?s=" . $symbol . "&f=" . $f;
$fp = @fopen($url, "r");
if ( $fp == FALSE ) { // If the URL can't be opened
$error_message = "Cannot get data from Yahoo! Finance. The following URL is not accessible, $url";
return -1; // ERROR
}
$array = @fgetcsv($fp , 4096 , ', ');
$arr = array();
$i = 0;
foreach($yahoo_finance_tags as $key => $value) {
$arr[$key] = $array[$i];
$i = $i + 1;
}
@fclose($fp);
return $arr;
}
return -1;
}
このスレッドで生成されたアイデアが私が答えを見つけて、私が探していたことを正確に行うのに役立つので、貢献したすべての人に感謝します。この男は、約10行のコードでそれを行う方法を説明します:
http://www.seangw.com/wordpress/index.php/2010/01/formatting-stock-from-yahoo-finance/
基本的に私がしたのは、彼のコードをカットして貼り付けて、それを私のサイトのindex.htmlに貼ることだけでした。私のウェブサイトにアクセスするとき、私は興味のあるティッカーの引用を取得します。$ stocklistを変更して、任意のストックを入力することができます。$ stockformatのタグを使用してyahooからの応答を変更できます。もう一度ありがとう!