2016-07-16 3 views
0

私はAlamofireにはまったく新しく、yahoo financesのすべての株式の代わりに検索キューにIPOを表示する方法を見つけようとしていますデータベース。日時スタンプで表示される結果を制限する方法がありますか?参考までに、私はたくさんの迅速な株式コード/例を使用していたので、誰かが助けてくれることを願っています。ありがとう。私はヤフーのAPIからいくつかのコードを入れました。私は特定の価格の株式のみを表示したり、比較的新しい日付の株式を表示したいと考えています。ありがとうございました。私はyahooファイナンスのapiからIPO株式を引き出す方法を見つけるのに苦労しています

import UIKit 

インポートAlamofire

構造体StockSearchResult { VARシンボル:文字列? var name:String? var exchange:String? var assetType:String? }

構造体ストック{

var ask: String? 
var averageDailyVolume: String? 
var bid: String? 
var bookValue: String? 
var changeNumeric: String? 
var changePercent: String? 
var dayHigh: String? 
var dayLow: String? 
var dividendShare: String? 
var dividendYield: String? 
var ebitda: String? 
var epsEstimateCurrentYear: String? 
var epsEstimateNextQtr: String? 
var epsEstimateNextYr: String? 
var eps: String? 
var fiftydayMovingAverage: String? 
var lastTradeDate: String? 
var last: String? 
var lastTradeTime: String? 
var marketCap: String? 
var companyName: String? 
var oneYearTarget: String? 
var open: String? 
var pegRatio: String? 
var peRatio: String? 
var previousClose: String? 
var priceBook: String? 
var priceSales: String? 
var shortRatio: String? 
var stockExchange: String? 
var symbol: String? 
var twoHundreddayMovingAverage: String? 
var volume: String? 
var yearHigh: String? 
var yearLow: String? 

var dataFields: [[String : String]] 

}

構造体ChartPoint { するvar日:NSDate? varボリューム:Int? var open:CGFloat? var close:CGFloat? var low:CGFloat? var high:CGFloat?

}

列挙ChartTimeRange { ケースOneDay、FiveDays、TenDays、OneMonth、ThreeMonths、OneYear、FiveYears }

クラスSwiftStockKit {

class func fetchStocksFromSearchTerm(term term: String, completion:(stockInfoArray: [StockSearchResult]) ->()) { 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { 

     let searchURL = "http://autoc.finance.yahoo.com/autoc" 

     Alamofire.request(.GET, searchURL, parameters: ["query": term, "region": 2, "lang": "en"]).responseJSON { response in 

      if let resultJSON = response.result.value as? [String : AnyObject] { 

       if let jsonArray = (resultJSON["ResultSet"] as! [String : AnyObject])["Result"] as? [[String : String]] { 

        var stockInfoArray = [StockSearchResult]() 
        for dictionary in jsonArray { 
         stockInfoArray.append(StockSearchResult(symbol: dictionary["symbol"], name: dictionary["name"], exchange: dictionary["exchDisp"], assetType: dictionary["typeDisp"])) 
        } 

        dispatch_async(dispatch_get_main_queue()) { 
         completion(stockInfoArray: stockInfoArray) 
        } 
       } 
      } 
     } 
    } 
} 

class func fetchStockForSymbol(symbol symbol: String, completion:(stock: Stock) ->()) { 

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { 

     let stockURL = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22\(symbol)%22)&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&format=json" 

     Alamofire.request(.GET, stockURL).responseJSON { response in 

      if let resultJSON = response.result.value as? [String : AnyObject] { 

       if let stockData = ((resultJSON["query"] as! [String : AnyObject])["results"] as! [String : AnyObject])["quote"] as? [String : AnyObject] { 

        // lengthy creation, yeah 
        var dataFields = [[String : String]]() 

        dataFields.append(["Ask" : stockData["Ask"] as? String ?? "N/A"]) 
        dataFields.append(["Average Daily Volume" : stockData["AverageDailyVolume"] as? String ?? "N/A"]) 
        dataFields.append(["Bid" : stockData["Bid"] as? String ?? "N/A"]) 
        dataFields.append(["Book Value" : stockData["BookValue"] as? String ?? "N/A"]) 
        dataFields.append(["Change" : stockData["Change"] as? String ?? "N/A"]) 
        dataFields.append(["Percent Change" : stockData["ChangeinPercent"] as? String ?? "N/A"]) 
        dataFields.append(["Day High" : stockData["DaysHigh"] as? String ?? "N/A"]) 
        dataFields.append(["Day Low" : stockData["DaysLow"] as? String ?? "N/A"]) 
        dataFields.append(["Div/Share" : stockData["DividendShare"] as? String ?? "N/A"]) 
        dataFields.append(["Div Yield" : stockData["DividendYield"] as? String ?? "N/A"]) 
        dataFields.append(["EBITDA" : stockData["EBITDA"] as? String ?? "N/A"]) 
        dataFields.append(["Current Yr EPS Estimate" : stockData["EPSEstimateCurrentYear"] as? String ?? "N/A"]) 
        dataFields.append(["Next Qtr EPS Estimate" : stockData["EPSEstimateNextQuarter"] as? String ?? "N/A"]) 
        dataFields.append(["Next Yr EPS Estimate" : stockData["EPSEstimateNextYear"] as? String ?? "N/A"]) 
        dataFields.append(["Earnings/Share" : stockData["EarningsShare"] as? String ?? "N/A"]) 
        dataFields.append(["50D MA" : stockData["FiftydayMovingAverage"] as? String ?? "N/A"]) 
        dataFields.append(["Last Trade Date" : stockData["LastTradeDate"] as? String ?? "N/A"]) 
        dataFields.append(["Last" : stockData["LastTradePriceOnly"] as? String ?? "N/A"]) 
        dataFields.append(["Last Trade Time" : stockData["LastTradeTime"] as? String ?? "N/A"]) 
        dataFields.append(["Market Cap" : stockData["MarketCapitalization"] as? String ?? "N/A"]) 
        dataFields.append(["Company" : stockData["Name"] as? String ?? "N/A"]) 
        dataFields.append(["One Yr Target" : stockData["OneyrTargetPrice"] as? String ?? "N/A"]) 
        dataFields.append(["Open" : stockData["Open"] as? String ?? "N/A"]) 
        dataFields.append(["PEG Ratio" : stockData["PEGRatio"] as? String ?? "N/A"]) 
        dataFields.append(["PE Ratio" : stockData["PERatio"] as? String ?? "N/A"]) 
        dataFields.append(["Previous Close" : stockData["PreviousClose"] as? String ?? "N/A"]) 
        dataFields.append(["Price-Book" : stockData["PriceBook"] as? String ?? "N/A"]) 
        dataFields.append(["Price-Sales" : stockData["PriceSales"] as? String ?? "N/A"]) 
        dataFields.append(["Short Ratio" : stockData["ShortRatio"] as? String ?? "N/A"]) 
        dataFields.append(["Stock Exchange" : stockData["StockExchange"] as? String ?? "N/A"]) 
        dataFields.append(["Symbol" : stockData["Symbol"] as? String ?? "N/A"]) 
        dataFields.append(["200D MA" : stockData["TwoHundreddayMovingAverage"] as? String ?? "N/A"]) 
        dataFields.append(["Volume" : stockData["Volume"] as? String ?? "N/A"]) 
        dataFields.append(["52w High" : stockData["YearHigh"] as? String ?? "N/A"]) 
        dataFields.append(["52w Low" : stockData["YearLow"] as? String ?? "N/A"]) 

        let stock = Stock(
         ask: dataFields[0].values.first, 
         averageDailyVolume: dataFields[1].values.first, 
         bid: dataFields[2].values.first, 
         bookValue: dataFields[3].values.first, 
         changeNumeric: dataFields[4].values.first, 
         changePercent: dataFields[5].values.first, 
         dayHigh: dataFields[6].values.first, 
         dayLow: dataFields[7].values.first, 
         dividendShare: dataFields[8].values.first, 
         dividendYield: dataFields[9].values.first, 
         ebitda: dataFields[10].values.first, 
         epsEstimateCurrentYear: dataFields[11].values.first, 
         epsEstimateNextQtr: dataFields[12].values.first, 
         epsEstimateNextYr: dataFields[13].values.first, 
         eps: dataFields[14].values.first, 
         fiftydayMovingAverage: dataFields[15].values.first, 
         lastTradeDate: dataFields[16].values.first, 
         last: dataFields[17].values.first, 
         lastTradeTime: dataFields[18].values.first, 
         marketCap: dataFields[19].values.first, 
         companyName: dataFields[20].values.first, 
         oneYearTarget: dataFields[21].values.first, 
         open: dataFields[22].values.first, 
         pegRatio: dataFields[23].values.first, 
         peRatio: dataFields[24].values.first, 
         previousClose: dataFields[25].values.first, 
         priceBook: dataFields[26].values.first, 
         priceSales: dataFields[27].values.first, 
         shortRatio: dataFields[28].values.first, 
         stockExchange: dataFields[29].values.first, 
         symbol: dataFields[30].values.first, 
         twoHundreddayMovingAverage: dataFields[31].values.first, 
         volume: dataFields[32].values.first, 
         yearHigh: dataFields[33].values.first, 
         yearLow: dataFields[34].values.first, 
         dataFields: dataFields 
        ) 
        dispatch_async(dispatch_get_main_queue()) { 
         completion(stock: stock) 
        } 
       } 
      } 
     } 
    } 
} 

class func fetchChartPoints(symbol symbol: String, range: ChartTimeRange, completion:(chartPoints: [ChartPoint]) ->()) { 

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { 

     //An Alamofire regular responseJSON wont parse the JSONP with a callback wrapper correctly, so lets work around that. 
     let chartURL = SwiftStockKit.chartUrlForRange(symbol, range: range) 

     Alamofire.request(.GET, chartURL).responseData { response in 

      if let data = response.result.value { 

       var jsonString = NSString(data: data, encoding: NSUTF8StringEncoding)! 

       jsonString = jsonString.substringFromIndex(30) 
       jsonString = jsonString.substringToIndex(jsonString.length-1) 

       if let data = jsonString.dataUsingEncoding(NSUTF8StringEncoding) { 
        if let resultJSON = (try? NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(rawValue: 0))) as? [String : AnyObject] { 

         let series = resultJSON["series"] as! [[String : AnyObject]] 
         var chartPoints = [ChartPoint]() 
         for dataPoint in series { 
          //GMT off by 5 hrs 
          let date = NSDate(timeIntervalSince1970: (dataPoint["Timestamp"] as? Double ?? dataPoint["Date"] as! Double) - 18000.0) 

          chartPoints.append(
           ChartPoint(
           date: date, 
           volume: dataPoint["volume"] as? Int, 
           open: dataPoint["open"] as? CGFloat, 
           close: dataPoint["close"] as? CGFloat, 
           low: dataPoint["low"] as? CGFloat, 
           high: dataPoint["high"] as? CGFloat 
           ) 
          ) 
         } 
         dispatch_async(dispatch_get_main_queue()) { 
          completion(chartPoints: chartPoints) 
         } 
        } 
       } 
      } 
     } 
    } 
} 
+2

ご使用のコードの一部を共有してください。 –

+0

私はちょうどいくつかを添付しました –

答えて

0

あなたはJSONデータあなたをフィルタリングすることができますtherサーバーから取得しています。 あなたが正確に何を望んでいるか分かりません。いくつかのコードを共有するか、質問を詳しく記述してください。

+0

だから、私は1ヶ月以内に新しい株式を示したいと思います。私は、このGithubプロジェクト(https://github.com/ackleymi/SwiftStock)からswiftStockKit.swiftファイルを使用しました。これはyahoo APIへのアクセス方法です。ここでデータをフィルタリングするか、別の.swiftファイルでフィルタリングしますか? –

+0

また、アプリをyahoo apiに接続するコードの一部を添付しました –

+0

興味深い質問です。これを解決しましたか、それともまだ答えを探していますか? – LNI

関連する問題