-1

.html に配置できる JavaScript 関数を作成しようとしています。

関数に銘柄記号、開始日、終了日を送信したいと考えています。

各行が要求された在庫の EOD または OHLC データの日である 2 次元配列を関数が返すようにしたいと思います。

グーグルの株価データが廃止されるのでヤフーを利用したいです。

私は他の言語でこれを行ったことがありますが、Javaスクリプトは初めてで、ほとんど迷っています。

次のコードはスタックで見つかり、私が見つけることができる最も近いものですが、使用方法がわかりません。

<script type="text/javascript" src="jquery-1.5.1.js"></script>
<script type="text/javascript">
    $(document).ready(function() {
            var symbol='goog';
            var callback = function(data) {
                    var price=data.query.results.span[0].content;
                    alert('Stock Price: ' + price);
            };

        var url = 'http://query.yahooapis.com/v1/public/yql';
        // this is the lovely YQL query (html encoded) which lets us get the stock price:
        // select * from html where url="http://finance.yahoo.com/q?s=goog" and xpath='//span[@id="yfs_l10_goog"]'
        var data = "q=select%20*%20from%20html%20where%20url%3D%22http%3A%2F%2Ffinance.yahoo.com%2Fq%3Fs%3D" + symbol + "%22%20and%20xpath%3D'%2F%2Fspan%5B%40id%3D%22yfs_l10_" + symbol + "%22%5D'&format=json";
        $.getJSON(url, data, callback);
});

以下は私がjavascriptで欲しいものですが、それはpythonにあります

def get_historical_prices(symbol, start_date, end_date):
"""
Get historical prices for the given ticker symbol.
Date format is 'YYYYMMDD'

Returns a nested list.
"""
url = 'http://ichart.yahoo.com/table.csv?s=%s&' % symbol + \
      'd=%s&' % str(int(end_date[4:6]) - 1) + \
      'e=%s&' % str(int(end_date[6:8])) + \
      'f=%s&' % str(int(end_date[0:4])) + \
      'g=d&' + \
      'a=%s&' % str(int(start_date[4:6]) - 1) + \
      'b=%s&' % str(int(start_date[6:8])) + \
      'c=%s&' % str(int(start_date[0:4])) + \
      'ignore=.csv'
days = urllib.urlopen(url).readlines()
data = [day[:-2].split(',') for day in days]
return data

質問しすぎたらごめんなさい。私はJavaScriptを初めて使用しますが、できる限り多くのことを学びたいと思っています.

4

1 に答える 1

1

まず、javascript について少し説明します。

$(document).ready(function() {
        //... lines
});

これは jquery ($(document) を参照) イベント ハンドラです (ドキュメントの準備ができたときに呼び出されます)。その根性:

        var symbol='goog';
        var callback = function(data) {
                var price=data.query.results.span[0].content;
                alert('Stock Price: ' + price);
        };

callback引数を 1 つ取るクロージャになりました。クロージャーであるため、そのコンテキストを使用するため、呼び出されると、そのスコープ内のすべてにアクセスできます。ここでは、そのスコープ外では何も使用しないため、通常の関数と同じように動作します。それが行っているのは、与えられたデータオブジェクトの一部でダイアログを表示することだけです。

    var url = 'http://query.yahooapis.com/v1/public/yql';
    var data = /* stuff */;

getJSONこれらは、jqueryメソッドに渡されるリクエストをセットアップするだけです。

    $.getJSON(url, data, callback);

内部的には、jquery は にdataリクエストを送信しurl、レスポンスを受信するとcallback、次の疑似コードのようにレスポンスを呼び出しています。

 response = queryURL(url,data);
 callback(response);

そのため、クエリ オブジェクトを作成し、それをターゲット URL と共に jquery に渡して、面倒な作業を行うという構造になっています。また、単一の引数を期待する関数を作成し、それを jquery が応答を受け取ったときに呼び出すように渡します。これらはコールバックと呼ばれます。

Python を実装するには、クエリ文字列から URL ( ) を分割しhttp://ichart.yahoo.com/table.csv(その後すべて)、同じ構造を使用します。何を更新するか (ページのビューなど) のロジックをcallback関数内に配置するか、それを使用して更新メカニズムをトリガーすることをお勧めします。

yahoo から返された json オブジェクトの内容を確認する最も簡単な方法は、Firebug または Chrome のデバッグ ツールを使用して内部にブレークポイントを設定し、callbackその構造を調べることです。その構造から、yahoo が返すオブジェクトから個々の値にアクセスする方法を確認できるはずです。

于 2012-06-20T08:10:41.150 に答える