java通过新浪天气API获得天气信息

新浪天气预报API

http://php.weather.sina.com.cn/xml.php?city=%B1%B1%BE%A9&password=DJOYnieT8234jlsK&day=0

其中,city后为城市转码(例:%B1%B1%BE%A9是北京按GBK所得转码)。

Password固定

Day为0表示当天天气,1表示第二天的天气,2表示第三天的天气,以此类推,最大为4

返回结果为xml格式信息。

 

java代码:

package me.www;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Map;
import java.util.Properties;
import java.util.Scanner;
/**
 * 根据新浪天气API获得天气情况,所得结果为xml文件
 *  
 * @version 1.30
 * @author wwww
 */
public class GetTest {
 public static void main(String[] args) throws IOException {
  Properties props = new Properties();
  try (InputStream in = Files.newInputStream(Paths.get("get.properties"))) {
   props.load(in);
  }
  String url = props.remove("url").toString();
  String result = doGet(url, props);
  System.out.println(result);
  PrintWriter out = new PrintWriter(Files.newOutputStream(Paths.get("E:/weather.xml")));
  out.print(result);
  out.flush();
  out.close();
 }
 public static String doGet(String url, Map<Object, Object> nameValuePairs) throws IOException {
  StringBuilder urlString = new StringBuilder(url);
  urlString.append("?");
  boolean first = true;
  for (Map.Entry<Object, Object> pair : nameValuePairs.entrySet()) {
   if (first)
    first = false;
   else
    urlString.append('&');
   String name = pair.getKey().toString();
   String value = pair.getValue().toString();
   urlString.append(name);
   urlString.append('=');
   urlString.append(URLEncoder.encode(value, "GBK"));
  }
  URL url1 = new URL(urlString.toString());
  URLConnection connection = url1.openConnection();
  StringBuilder response = new StringBuilder();
  try (Scanner in = new Scanner(connection.getInputStream())) {
   while (in.hasNextLine()) {
    response.append(in.nextLine());
    response.append("\n");
   }
  } catch (IOException e) {
   if (!(connection instanceof HttpURLConnection))
    throw e;
   InputStream err = ((HttpURLConnection) connection).getErrorStream();
   if (err == null)
    throw e;
   Scanner in = new Scanner(err);
   response.append(in.nextLine());
   response.append("\n");
  }
  return response.toString();
 }
}

附:get.properties

url=http://php.weather.sina.com.cn/xml.php
city=北京
password=DJOYnieT8234jlsK
day=0

 

结果为:

<?xml version="1.0" encoding="UTF-8"?>
<!-- published at 2015-12-04 11:15:04 -->
<Profiles>
<Weather>
<city>北京</city>
<status1>晴</status1>
<status2>晴</status2>
<figure1>qing</figure1>
<figure2>qing</figure2>
<direction1>北风</direction1>
<direction2>无持续风向</direction2>
<power1>3-4</power1>
<power2>≤3</power2>
<temperature1>6</temperature1>
<temperature2>-5</temperature2>
<ssd>1</ssd>
<tgd1>6</tgd1>
<tgd2>6</tgd2>
<zwx>2</zwx>
<ktk>7</ktk>
<pollution>3</pollution>
<xcz>1</xcz>
<zho></zho>
<diy></diy>
<fas></fas>
<chy>6</chy>
<zho_shuoming>暂无</zho_shuoming>
<diy_shuoming>暂无</diy_shuoming>
<fas_shuoming>暂无</fas_shuoming>
<chy_shuoming>棉衣、冬大衣、皮夹克、内着衬衫或羊毛内衣、毛衣、外罩大衣</chy_shuoming>
<pollution_l>轻度</pollution_l>
<zwx_l>弱</zwx_l>
<ssd_l>偏冷</ssd_l>
<fas_l>暂无</fas_l>
<zho_l>暂无</zho_l>
<chy_l>薄冬衣</chy_l>
<ktk_l>建议开启(制热)</ktk_l>
<xcz_l>非常适宜</xcz_l>
<diy_l>暂无</diy_l>
<pollution_s>对空气污染物扩散无明显影响</pollution_s>
<zwx_s>紫外线弱</zwx_s>
<ssd_s>大部分人群外出活动要戴薄手套、薄围巾和帽子。</ssd_s>
<ktk_s>建议开启空调</ktk_s>
<xcz_s>洗车后至少未来4天内没有降水、大风、沙尘天气,保洁时间长,非常适宜洗车。注意洗车当日气温不能太低以免结冰。</xcz_s>
<gm>2</gm>
<gm_l>多发期</gm_l>
<gm_s>天气较冷,室内外温差较大,较易引起感冒;</gm_s>
<yd>5</yd>
<yd_l>不适宜</yd_l>
<yd_s>天气较冷,多数人不适宜户外运动;</yd_s>
<savedate_weather>2015-12-04</savedate_weather>
<savedate_life>2015-12-04</savedate_life>
<savedate_zhishu>2015-12-04</savedate_zhishu>
<udatetime>2015-12-04 08:10:00</udatetime>
</Weather>
</Profiles>

xml中各元素含义如下:


标签中1表示白天,2表示夜间

<status>

< figure>

<direction>

<power>

<temperature>

<ssd>

<ssd_l>

<ssd_s>

<tgd>

<zwx>

<zwx_l>

<zwx_s>

<ktk>

<ktk_l>

<ktk_s>

<pollution>

<pollution_l>

<pollution_s>

<xcz>

<xcz_l>

<xcz_s>

<chy>

<chy_l>

<chy_shuoming>

<gm>

<gm_l>

<gm_s>

<yd>

<yd_l>

<yd_s>

<zho>

<zho_l>

<zho_shuoming>

<diy>

<diy_l>

<diy_shuoming>

<fas>

<fas_l>

<fas_shuoming>

<savedate_weather>

<savedate_life>

<savedate_zhishu>

天气情况中文

天气情况拼音

风向

风级

温度

体感指数数值

体感度指数

体感度指数说明

体感温度

紫外线指数数值

紫外线指数

紫外线指数说明

空调指数数值

空调指数


空调指数说明

污染指数数值

污染物扩散条件

污染指数说明

洗车指数数值

洗车指数

洗车指数说明

穿衣指数数值

穿衣指数

穿衣说明

感冒指数数值

感冒指数

感冒指数说明

运动指数数值

运动指数

运动指数说明

天气预报日期

生活日期

指数日期

 

 

你可能感兴趣的:(java通过新浪天气API获得天气信息)