Android Open Source - android-bossweather W O E I D Utils






From Project

Back to project page android-bossweather.

License

The source code is released under:

Apache License

If you think the Android project android-bossweather listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Copyright (C) 2011 The Android Open Source Project
 * Copyright (C) 2012 Zhenghong Wang//w w  w .  j a v a2 s.  c  o  m
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.michael.feng.utils.YahooWeather4a;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.apache.http.HttpEntity;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import android.content.Context;
import android.util.Log;
import android.widget.Toast;

public class WOEIDUtils {
  
  public static final String WOEID_NOT_FOUND = "WOEID_NOT_FOUND"; 
  private final String yahooapisBase = "http://query.yahooapis.com/v1/public/yql?q=select*from%20geo.places%20where%20text=";
  private final String yahooapisFormat = "&format=xml";
  private String yahooAPIsQuery;
  
  public static WOEIDUtils getInstance() {
    return new WOEIDUtils();
  }
  
  public String getWOEIDid(Context context, String cityName) {
    return queryWOEIDfromYahooAPIs(context, cityName);
  }

  private String queryWOEIDfromYahooAPIs(Context context, String uriPlace) {
    Log.d("tag", "QueryYahooApis");

    yahooAPIsQuery = yahooapisBase + "%22" + uriPlace + "%22"
        + yahooapisFormat;
    
    yahooAPIsQuery = yahooAPIsQuery.replace(" ", "%20");
    
    Log.d("tag", "yahooAPIsQuery: " + yahooAPIsQuery);

    String woeidString = queryYahooWeather(context, yahooAPIsQuery);
    Document woeidDoc = convertStringToDocument(context, woeidString);
    return getFirstMatchingWOEID(woeidDoc);

  }
  
  private String queryYahooWeather(Context context, String queryString) {
    Log.d("tag", "QueryYahooWeather");
    String qResult = "";
//    queryString = Uri.encode(queryString);

    HttpClient httpClient = new DefaultHttpClient();

    // return Uri.encode(queryString);

    HttpGet httpGet = new HttpGet(queryString);

    try {
      HttpEntity httpEntity = httpClient.execute(httpGet).getEntity();

      if (httpEntity != null) {
        InputStream inputStream = httpEntity.getContent();
        Reader in = new InputStreamReader(inputStream);
        BufferedReader bufferedreader = new BufferedReader(in);
        StringBuilder stringBuilder = new StringBuilder();

        String stringReadLine = null;

        while ((stringReadLine = bufferedreader.readLine()) != null) {
          stringBuilder.append(stringReadLine + "\n");
        }

        qResult = stringBuilder.toString();
      }

    } catch (ClientProtocolException e) {
      e.printStackTrace();
      Toast.makeText(context, e.toString(), Toast.LENGTH_LONG)
          .show();
    } catch (IOException e) {
      e.printStackTrace();
      Toast.makeText(context, e.toString(), Toast.LENGTH_LONG)
          .show();
    }

    return qResult;

  }
  
  private Document convertStringToDocument(Context context, String src) {
    Log.d("tag", "convertStringToDocument");
    Document dest = null;

    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder parser;

    try {
      parser = dbFactory.newDocumentBuilder();
      dest = parser.parse(new ByteArrayInputStream(src.getBytes()));
    } catch (ParserConfigurationException e1) {
      e1.printStackTrace();
      Toast.makeText(context, e1.toString(), Toast.LENGTH_LONG)
          .show();
    } catch (SAXException e) {
      e.printStackTrace();
      Toast.makeText(context, e.toString(), Toast.LENGTH_LONG)
          .show();
    } catch (IOException e) {
      e.printStackTrace();
      Toast.makeText(context, e.toString(), Toast.LENGTH_LONG)
          .show();
    }

    return dest;

  }
  
  private String getFirstMatchingWOEID(Document srcDoc) {
    Log.d("tag", "parserWOEID");

    try {
      NodeList nodeListDescription = srcDoc.getElementsByTagName("woeid");
      if (nodeListDescription.getLength() > 0) {
        Node node = nodeListDescription.item(0);
        return node.getTextContent();
      } else {
        return WOEID_NOT_FOUND;
      }
    } catch (Exception e) {
      e.printStackTrace();
      return WOEID_NOT_FOUND;
    }
    
  }
}




Java Source Code List

com.michael.feng.bossweather.AddActivity.java
com.michael.feng.bossweather.EditActivity.java
com.michael.feng.bossweather.MainActivity.java
com.michael.feng.model.City.java
com.michael.feng.tools.CityDAO.java
com.michael.feng.tools.ConvertUtil.java
com.michael.feng.tools.ImageUtils.java
com.michael.feng.tools.MyCard.java
com.michael.feng.tools.MyImageCard.java
com.michael.feng.tools.SQLiteHelper.java
com.michael.feng.utils.YahooWeather4a.ConditionDefinition.java
com.michael.feng.utils.YahooWeather4a.WOEIDUtils.java
com.michael.feng.utils.YahooWeather4a.WeatherInfo.java
com.michael.feng.utils.YahooWeather4a.YahooWeatherInfoListener.java
com.michael.feng.utils.YahooWeather4a.YahooWeatherUtils.java