我希望将 yahoo Finance api 过滤到仅出价在 0 美元到 10 美元之间的股票
Posted
技术标签:
【中文标题】我希望将 yahoo Finance api 过滤到仅出价在 0 美元到 10 美元之间的股票【英文标题】:I am looking to filter the yahoo finance api to only stocks that have a bid price that is between about $0 and $10 【发布时间】:2016-11-23 02:55:51 【问题描述】:我目前正在使用 AlamoFire 和 Json 将 yahoo Finance api 安装到我的应用程序中。我想过滤出价类别以仅显示介于 0 美元到 10 美元之间的股票我将如何执行此操作。附言我正在使用迅速。我希望有人能帮帮忙。非常感谢。下面我会附上一些代码。
导入 UIKit 进口阿拉莫火 结构股票搜索结果 var 符号:字符串? 变量名称:字符串? var 交换:字符串? 变量资产类型:字符串? 结构股票 var 问:字符串? var averageDailyVolume:字符串? var 出价:字符串? var bookValue:字符串? var changeNumeric: 字符串? var changePercent: 字符串? var dayHigh:字符串? var dayLow:字符串? var 股息共享:字符串? var 股息收益率:字符串? var ebitda: 字符串? var epsEstimateCurrentYear:字符串? var epsEstimateNextQtr:字符串? var epsEstimateNextYr:字符串? var eps: 字符串? var 五十天移动平均:字符串? var lastTradeDate:字符串? var last:字符串? var lastTradeTime: 字符串? var marketCap:字符串? var companyName: 字符串? var oneYearTarget:字符串? var open: 字符串? var pegRatio:字符串? var perRatio:字符串? var previousClose: 字符串? var priceBook:字符串? var priceSales:字符串? var shortRatio:字符串? var stockExchange:字符串? var 符号:字符串? var twoHundreddayMovingAverage:字符串? var 卷:字符串? var yearHigh:字符串? var yearLow:字符串? var 数据字段:[[字符串:字符串]] 结构图点 变量日期:NSDate? var 音量:整数? var open: CGFloat? var close: CGFloat? var 低:CGFloat? 变量高:CGFloat? 枚举 ChartTimeRange 案例 OneDay, FiveDays, TenDays, OneMonth, ThreeMonths, OneYear, FiveYears 类 SwiftStockKit 类 func fetchStocksFromSearchTerm(term term: String, completion:(stockInfoArray: [StockSearchResult]) -> ()) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) 让 searchURL = "http://autoc.finance.yahoo.com/autoc" Alamofire.request(.GET, searchURL, parameters: ["query": term, "region": 2, "lang": "en"]).responseJSON response in 如果让 resultJSON = response.result.value 为? [字符串:任何对象] if let jsonArray = (resultJSON["ResultSet"] as! [String : AnyObject])["Result"] as? [[字符串:字符串]] var stockInfoArray = [StockSearchResult]() 对于 jsonArray 中的字典 stockInfoArray.append(StockSearchResult(symbol: dictionary["symbol"], name: dictionary["name"], exchange: dictionary["exchDisp"],assetType: dictionary["typeDisp"])) dispatch_async(dispatch_get_main_queue()) 完成(stockInfoArray:stockInfoArray) 类 func fetchStockForSymbol(符号符号:字符串,完成:(股票:股票)->()) 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 响应 如果让 resultJSON = response.result.value 为? [字符串:任何对象] if let stockData = ((resultJSON["query"] as! [String : AnyObject])["results"] as! [String : AnyObject])["quote"] as? [字符串:任何对象] // 漫长的创作,是的 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(["PriceBook" : 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"]) 让股票=股票( 问:dataFields[0].values.first, averageDailyVolume: dataFields[1].values.first, 出价: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, 股息共享:dataFields[8].values.first, 股息收益率: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, 五十天移动平均:dataFields[15].values.first, lastTradeDate: dataFields[16].values.first, 最后:dataFields[17].values.first, lastTradeTime: dataFields[18].values.first, 市场资本:dataFields[19].values.first, 公司名称:dataFields[20].values.first, oneYearTarget: dataFields[21].values.first, 打开:dataFields[22].values.first, pegRatio: dataFields[23].values.first, peRatio: dataFields[24].values.first, 上一个关闭:dataFields[25].values.first, priceBook: dataFields[26].values.first, priceSales: dataFields[27].values.first, shortRatio:dataFields[28].values.first, 证券交易所:dataFields[29].values.first, 符号:dataFields[30].values.first, twoHundreddayMovingAverage:dataFields[31].values.first, 卷:dataFields[32].values.first, yearHigh:dataFields[33].values.first, yearLow:dataFields[34].values.first, 数据字段:数据字段 ) dispatch_async(dispatch_get_main_queue()) 完成(库存:库存)
【问题讨论】:
您是要在从 api 获得响应并过滤stockData
后过滤股票,还是使用 AlamoFire 发出请求并在 stockURL
中应用参数。
@Asdrubal 理想情况下我想将参数应用于 stockUrl,但我觉得对 stockData 应用过滤器会更容易,我只是还没有找到方法
【参考方案1】:
如果您提前知道要过滤 1 到 10 之间的数组,您可以这样。
struct Stock
var currentPrice : Double
let aStock = Stock(currentPrice: 1.1)
let bStock = Stock(currentPrice: 20.4)
let cStock = Stock(currentPrice: 5.0)
let stocks = [aStock,bStock,cStock]
let filteredStocks = stocks.filter($0.currentPrice >= 1.0 && $0.currentPrice <= 10.0 )
上面的代码只是下面代码的简写
var filteredStocks = [Stock]()
for stock in stocks
if (stock.currentPrice >= 1.0 && stock.currentPrice <= 10.0)
filteredStocks.append(stock)
如果您想让最小和最大范围更具动态性,您可以将其放在以最小和最大作为参数的方法中。
func filter(stocks: [Stock], from min: Double, to max: Double)
return stocks.filter($0.currentPrice >= min && $0.currentPrice <= max )
【讨论】:
我遇到了一些问题,抱歉我对这一切还是有点陌生。首先,如果我将 var 出价(您当前的价格变量)更改为双倍,雅虎财务 api 将不再识别该变量并继续使应用程序崩溃。其次,我在我的 struct Stock 中还有其他几个变量,一旦我尝试过滤 let aStock = Stock(bid: 1.1) 中的bid 变量,我必须为所有其他字符串添加字符串值。我也很想知道是否有办法在诸如 select * from yahoo.finance.quotes where bid > 10 的语法中使用 sql。 抱歉所有问题。希望很快能收到回复! 对于您的第一个问题,如果这有助于 API 识别变量,您可以使用 Float 而不是 Double。在您的 Stock 结构中,我没有意识到都是字符串,您应该真正将它们转换为适当的类型。例如 var lastTradeDate: String?应该真的是一个 NSDate 对象。比较过滤器函数的字符串不是一个好主意。我真的不知道你是否可以使用 SQL,因为它们可能会打开安全漏洞。以上是关于我希望将 yahoo Finance api 过滤到仅出价在 0 美元到 10 美元之间的股票的主要内容,如果未能解决你的问题,请参考以下文章
Yahoo Finance API / URL 不起作用:Pandas DataReader 的 Python 修复
yahoo Finance api 股票是不是返回股票期权数据?
如何使用 Yahoo,Finance stock API 获取股票数据
Yahoo Finance API 在旧 URL 和 User-Agent 上给出错误 403(禁止)