2014-11-03 51 views
0

我是新来解析的,我试图通过YQL语句检索库存数据来进行测试。每次运行程序时,我都会遇到一个错误的连接,并且我已经搜索过但尚未找到任何解决方案。我从我的字符串构建器获得的链接是:与YQL查询的连接不好

https://query.yahooapis.com/v1/public/yql?q=select%20 *%20from%20yahoo.finance.quote%20where%20symbol%20in%20“MSFT”%2C“YHOO”%2C“AAPL”%2C“ )&诊断=真& ENV =商店%3A%2F%2Fdatatables.org%2Falltableswithkeys

的输出用于我的打印语句

System.out.println(responseCode); 
System.out.println(HttpURLConnection.HTTP_OK); 

分别400,200是。我没有收到任何实际的错误,但我的程序只是在比较两个值的if语句处终止。

import java.*; 
import java.awt.List; 
import java.io.IOException; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.net.URLConnection; 
import java.util.ArrayList; 

import javax.lang.model.element.Element; 
import javax.swing.text.Document; 
import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException; 
import javax.xml.soap.Node; 

import org.omg.CORBA.portable.InputStream; 
import org.w3c.dom.NodeList; 
import org.xml.sax.SAXException; 

public class Testing 
{ 
    public static void main(String[] args) 
    { 
     ArrayList<String> stockTicker = new ArrayList<>(); 
     stockTicker.add("MSFT"); 
     stockTicker.add("YHOO"); 
     stockTicker.add("AAPL"); 
     stockTicker.add("GOOG"); 
     String YahooURL = "https://query.yahooapis.com/v1/public/yql? q=select%20*%20from%20yahoo.finance.quote%20where%20symbol%20in%20"; 
     for(int x=0; x < stockTicker.size()-1; x++) 
      { 
       YahooURL += "\""+stockTicker.get(x)+"\"%2C"; 
      } 
    YahooURL += "\""+stockTicker.get(stockTicker.size()-1)+"\""; 
    YahooURL += ")&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys"; 
    System.out.println(YahooURL); 

    try { 
     URL url = new URL(YahooURL); //Begin Connecting 
     URLConnection connection; 
     connection = url.openConnection(); 
     HttpURLConnection httpConnection = (HttpURLConnection)connection; 
     int responseCode = httpConnection.getResponseCode(); 
     // Tests if responseCode == 200 Good Connection 
     System.out.println(responseCode); 
     System.out.println(HttpURLConnection.HTTP_OK); 
     if (responseCode == HttpURLConnection.HTTP_OK) { 
      System.out.println("gets past response code"); 
      java.io.InputStream in = httpConnection.getInputStream(); 
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder db = dbf.newDocumentBuilder(); 
      org.w3c.dom.Document dom = db.parse(in); 
      org.w3c.dom.Element docEle = dom.getDocumentElement(); //End of Connecting 
      //begin parsing 
      NodeList quoteList = docEle.getElementsByTagName("results"); 
      for (int i = 0 ; i < quoteList.getLength(); i++) 
      { 
      org.w3c.dom.Node q = quoteList.item(i); 
      if (quoteList != null && quoteList.getLength() > 0) 
      { 
       Element tickerID = (Element) q; 
       String tID = (String) ((DocumentBuilderFactory) tickerID).getAttribute("quote symbol"); 
       NodeList infoList = ((org.w3c.dom.Node) tickerID).getChildNodes(); 
       for(int j=0; j < infoList.getLength();j++) 
       { 
        Node qi = (Node) infoList.item(j); 
        if(qi.getNodeType()==Node.ELEMENT_NODE) 
        { 
         Element info = (Element) qi; 
         System.out.println("TickerID: " + q + ((org.w3c.dom.Element) qi).getTagName() + " = " + qi.getTextContent()); 
        } 
       } 
      } 
      } 
     } 
     } catch (MalformedURLException e) { 
     e.printStackTrace(); 
     } catch (IOException e) { 
     e.printStackTrace(); 
     } catch (ParserConfigurationException e) { 
     e.printStackTrace(); 
     } catch (SAXException e) { 
     e.printStackTrace(); 
     } 
     finally { 
     } 
    } 
} 

回答

0

尝试更换以下行(注意最后(?后除去坯件和开口括号):

String YahooURL = "https://query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.quote where symbol in ("; 

粘贴correct link into my browser我获得响应,并且在同一应后申请你的片段。

+0

感谢您的帮助,但是我只是试了一下这个链接,我得到了一个新的打印输出值(responseCode),505,而不是400. – Frodgers 2014-11-03 20:30:55

+0

谢谢你的帮助,事实证明我只是不小心忘记了“ (“在URL的末尾,并在?q =之后添加了那些空格。我能够找到505错误的解决方案。 – Frodgers 2014-11-03 20:44:14

+0

不客气,很高兴我能提供帮助。 – Matt 2014-11-04 09:34:20