Финансовый API для Android

Я пытаюсь создать новое приложение, и я хотел бы получать обновления акций, обновления обмена валюты и т. д. Не могли бы вы предложить какой-нибудь бесплатный API для получения этих обновлений? Я уже пробовал:

1) API Google Финансов. Причина неиспользования: устарело и скоро будет закрыто, что сделает мое приложение устаревшим.

2) API Yahoo Finance. Причина неиспользования: для него нет надлежащей документации. Причина этого в том, что у Yahoo на самом деле нет финансового API. Похоже, что некоторые перепроектировали API, который они используют для получения финансовых данных, но они нарушают Условия обслуживания Yahoo. Я не хочу этого делать. (Читать на http://developer.yahoo.com/forum/General-Discussion-at-YDN/Using-Yahoo-Finance-API-Not-RSS-/1250246255000-0b82f8f0-7f48-3af2-8fe2-e73a138cbfaa)

Было бы здорово, если бы была дана ссылка на какой-нибудь ресурс или код. Спасибо за помощь заранее.


person harshit    schedule 06.09.2012    source источник
comment
Если бы я был на вашем месте, я бы попытался найти веб-службу на основе REST, которая сделала бы это.   -  person Kristopher Micinski    schedule 06.09.2012
comment
искал даже для этого. большинство ссылок, которые предоставляет Google, ведут на Yahoo Finance.   -  person harshit    schedule 06.09.2012
comment
если у них есть REST-подобный API, вы должны использовать его, я был бы удивлен, если бы это противоречило их TOS. Java-код, который анализирует HTML, — это не одно и то же.   -  person Kristopher Micinski    schedule 06.09.2012
comment
stackoverflow.com/ вопросы/417453/   -  person Kristopher Micinski    schedule 06.09.2012
comment
спасибо большое, обязательно попробую и сообщу о результатах. У меня сейчас нет adb и android sdk. Я сообщу вам новости примерно через 12 часов.   -  person harshit    schedule 06.09.2012


Ответы (1)


Использую 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;
}
person harshit    schedule 08.09.2012
comment
Пожалуйста, скажите мне, что означает from и to в этом URL-адресе, который вы указали.... - person Srinivasan; 09.04.2014