Android,无法从google api获取天气

时间:2012-08-27 10:01:22

标签: android weather-api

以下代码之前运作良好:

class RetreiveWeatherTask extends AsyncTask<Bundle, Void, WeatherData> {

        private static final String TAG = "WeatherManager";

        @Override
        protected WeatherData doInBackground(Bundle... params) {
            Utils.log(TAG, "start get weather");
            WeatherData weatherData = new WeatherData();
            Bundle b = new Bundle(params[0]);
            double latitude = b.getDouble(REF_LAT);
            double longtitude = b.getDouble(REF_LONG);

            try
            {
                StringBuilder weatherBuilder = new StringBuilder();
                //weatherBuilder.append("http://www.google.com/ig/api?hl=zh-cn&weather=,,,");
                weatherBuilder.append("http://www.google.com/ig/api?hl=en-us&weather=,,,");
                int la = (int) latitude * 1000000;
                int lo = (int) longtitude * 1000000;
                weatherBuilder.append(la);
                weatherBuilder.append(",");
                weatherBuilder.append(lo);
                String weather = weatherBuilder.toString();
                HttpGet hg = new HttpGet(weather);
                // HttpGet hg = new
                // HttpGet("http://www.google.com/ig/api?hl=zh-cn&weather=,,,39130000,117200000");
                HttpClient hc = new DefaultHttpClient();
                HttpResponse hr = hc.execute(hg);
                String responseString = "";
                if (hr.getStatusLine().getStatusCode() != HttpStatus.SC_OK)
                {
                    Utils.logi("", "Location != HttpStatus.SC_OK");
                    return null;
                }
                responseString = EntityUtils.toString(hr.getEntity());
                InputStream is = new ByteArrayInputStream(responseString.getBytes());

                // URL url = new
                // URL("http://www.google.com/ig/api?hl=zh-cn&weather=,,,39130000,117200000");
                // InputStream is =url.openStream();
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                DocumentBuilder db = dbf.newDocumentBuilder();
                Document document = db.parse(is);

                NodeList currList = (NodeList) document.getElementsByTagName("current_conditions");
                NodeList currList2 = currList.item(0).getChildNodes();

                weatherData.weather = new String(currList2.item(0).getAttributes().item(0).getNodeValue());

                weatherData.curTemperature = new String(currList2.item(2).getAttributes().item(0).getNodeValue() + "℃");

                weatherData.wind = new String(currList2.item(5).getAttributes().item(0).getNodeValue());

                Utils.log(TAG, "Get weather = " + weatherData.weather);
                if (isNeedIconFromNet)
                {
                    weatherData.iconUrl = new String(currList2.item(4).getAttributes().item(0).getNodeValue());


                    String url = "http://www.google.com" + weatherData.iconUrl;
                    weatherData.icon = getBitmapByUrl(url);
                }

            }
            catch (Exception e)
            {
                Utils.logi("", "Location get temp Exception e");
                e.printStackTrace();
            }

            return weatherData;
        }

但现在它返回String:Unsupported API。

请帮帮我。谷歌api关闭了吗? PS。我在中国。

2 个答案:

答案 0 :(得分:3)

是的,谷歌似乎停止了无证的天气api服务。

XML Parsing Error: syntax error
Location: http://www.google.com/ig/api?weather=delhi
Line Number 1, Column 1:Unsupported API
^

您可以尝试yahoo weatherhttp://www.wunderground.com/weather/api。 然而,谷歌提供了大约4天的天气预报,而雅虎提供了大约2天的预测(可能有一些其他方式来间接从雅虎获得更多天的预测)。

答案 1 :(得分:1)

我认为谷歌天气api的结束已经到来,谷歌已停止服务。毕竟,它甚至不是任何官方支持的api。

iGoogle似乎也不再使用api了。 你最好的选择可能是寻找一个不同的自由天气api。

我相信我们会在接下来的几天内听到更多这种变化。