2012-09-06 40 views
4

我正在嘗試新建一個應用程序,並希望獲得股票更新,貨幣兌換更新等。請問您可以建議一些免費API以獲取這些更新嗎?我已經嘗試過:適用於Android的財務API

1)Google財經API不使用的原因:不推薦使用,並很快關閉,這會使我的應用程序過時。

2)Yahoo Finance API不使用的原因:沒有適當的文件。原因是雅虎實際上沒有財務API。看起來有些人已經反向設計了一個用來提取財務數據的API,但它們正在打破雅虎的服務條款。我不想這樣做。 (從http://developer.yahoo.com/forum/General-Discussion-at-YDN/Using-Yahoo-Finance-API-Not-RSS-/1250246255000-0b82f8f0-7f48-3af2-8fe2-e73a138cbfaa讀取)

如果提供了一些資源或代碼的鏈接,那將會很棒。我在這裏先向您的幫助表示感謝。

+0

如果我是你,我會嘗試找出它這樣做是基於REST的Web服務。 –

+0

甚至看起來。大多數谷歌提供的鏈接指向雅虎財經 – harshit

+1

如果他們有一個類似API的REST,那麼你應該使用它,我會驚訝,如果它是對他們的服務條款。解析HTML的Java代碼,這不是一回事。 –

回答

3

立即使用yql。

查詢:"http://query.yahooapis.com/v1/public/yql?q=select%20rate%2Cname%20from%20csv%20where%20url%3D'http%3A%2F%2Fdownload.finance.yahoo.com%2Fd%2Fquotes%3Fs%3D" + from + to + "%253DX%26f%3Dl1n'%20and%20columns%3D'rate%2Cname'&format=json&callback=parseExchangeRate"

代碼片段:

private static String convertStreamToString(InputStream is) { 
    /* 
    * To convert the InputStream to String we use the 
    * BufferedReader.readLine() method. We iterate until the BufferedReader 
    * return null which means there's no more data to read. Each line will 
    * appended to a StringBuilder and returned as String. 
    */ 
    BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
    StringBuilder sb = new StringBuilder(); 

    String line = null; 
    try { 
     while ((line = reader.readLine()) != null) { 
      sb.append(line + "\n"); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      is.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    return sb.toString(); 
} 

/* 
* This is a test function which will connects to a given rest service and 
* prints it's response to Android Log with labels "Praeda". 
*/ 
public static String[] connect(String url) { 
    HttpClient httpclient = new DefaultHttpClient(); 
    String[] str = new String[5]; 

    // Prepare a request object 
    HttpGet httpget = new HttpGet(url); 

    // Execute the request 
    HttpResponse response; 
    try { 
     response = httpclient.execute(httpget); 
     // Examine the response status 
     Log.d(TAG, response.getStatusLine().toString()); 

     // Get hold of the response entity 
     HttpEntity entity = response.getEntity(); 
     // If the response does not enclose an entity, there is no need 
     // to worry about connection release 

     if (entity != null) { 

      // A Simple JSON Response Read 
      InputStream instream = entity.getContent(); 
      String result = convertStreamToString(instream); 
      result=result.replace("parseExchangeRate(", "").replace(");", ""); 
      Log.d(TAG, result); 

      // A Simple JSONObject Creation 
      JSONObject json = new JSONObject(result); 
      Log.d(TAG, "<jsonobject>\n" + json.toString() 
        + "\n</jsonobject>"); 

      // A Simple JSONObject Parsing 
      // JSONArray nameArray=json.names(); 
      // Log.i("query",nameArray.toString()); 
      // JSONObject query=json.getJSONObject("query"); 
      // Log.i("query",query.toString()); 
      // JSONArray results=query.getJSONArray("results"); 
      // Log.i("rslts",results.toString()); 
      // JSONArray quote=results.getJSONArray("quote"); 
      // JSONObject quote=results.getJSONObject("quote"); 
      // Log.i("quote",quote.toString()); 
      JSONObject query = json.getJSONObject("query"); 
      Log.d(TAG, query.toString()); 
      JSONObject results = query.getJSONObject("results"); 
      Log.d(TAG, results.toString()); 
      JSONObject quote = results.getJSONObject("row"); 
      Log.d(TAG, quote.toString()); 
      for (int i = 0; i < quote.length(); i++) { 

       // Log.i("Praedafor","<jsonname"+i+">\n"+nameArray.getString(i)+"\n</jsonname"+i+">\n" 
       // +"<jsonvalue"+i+">\n"+valArray.getString(i)+"\n</jsonvalue"+i+">"); 
       // JSONObject quotes = results.getJSONObject(i) 
       // .getJSONObject("quote"); 
       // Log,i 
       // Log.i("name",quote.getString("Name")); 
       // Log.i("name","pahunch"); 
       // Log.i("name",quote.getString("Symbol")); 

       // Log.i("name",quote.getString("DaysLow")); 

       // Log.i("name",quote.getString("DaysHigh")); 

       // Log.i("name",quote.getString("Open")); 

       // Log.i("name",quote.getString("PreviousClose")); 
       String symbol = quote.getString("rate"); 
       str[0] = symbol; 
       String dayslow = quote.getString("DaysLow"); 
       str[1]=dayslow; 
       // tv1.setText(quote.getString("DaysLow")); 
       str[2]= quote.getString("DaysHigh"); 
       str[3]= quote.getString("Open"); 
       str[4]= quote.getString("Change"); 
      } 

      // A Simple JSONObject Value Pushing 
      // json.put("execution-start-time", "sample value"); 
      Log.d(TAG, "<jsonobject>\n" + json.toString() 
        + "\n</jsonobject>"); 
      // Log.i("Praeda12",json.get("").toString()); 

      // Closing the input stream will trigger connection release 
      instream.close(); 
     } 

    } catch (ClientProtocolException e) { 
     Log.d(TAG, "ClientProtocolException"); 
     e.printStackTrace(); 
    } catch (IOException e) { 
     Log.d(TAG, "IOException " + e.getMessage()); 
     e.printStackTrace(); 
    } catch (JSONException e) { 
     Log.d(TAG, "JSONException " + e.getMessage()); 
     e.getMessage(); 
    } 
    return str; 
} 
+1

請告訴我你在這個URL中「from」和「to」是什麼意思.... – Srinivasan