2012-08-27 36 views
2

獲取天氣下面的代碼工作做好之前:的Android,無法從谷歌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; 
     } 

但現在它會返回一個字符串:不支持的API。

請幫幫我。谷歌API是關閉的? PS。我在中國。

回答

3

是的,Google似乎已經停止了無證的天氣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

我認爲谷歌天氣API的結束已經到來,谷歌已經停止服務。畢竟,它甚至不是官方支持的API。

iGoogle似乎也不再使用api。 你最好的選擇可能是尋找一個不同的免費天氣api。

我相信我們會在接下來的幾天裏聽到更多這種變化。