2

以下代码之前运行良好:

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。我在中国。

4

2 回答 2

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. 但是,google 提供了大约 4 天的天气预报,而 yahoo 只提供了大约 2 天的预报(可能有其他方法可以间接从 yahoo 获得更多天的预报)。

于 2012-08-27T12:52:03.337 回答
1

我认为谷歌天气 API 的终结已经到来,谷歌已经停止了该服务。毕竟,它甚至都不是官方支持的 api。

iGoogle 似乎也不再使用该 API。您最好的选择可能是寻找不同的免费天气 api。

我相信我们会在接下来的几天里听到更多关于这种变化的消息。

于 2012-08-27T12:16:07.773 回答