Week 7
Request
- 使用 HttpClient 访问网络
- 提供城市天气查询(json Phrase)
- 提供 IP 地址查询(xml Phrase)
Accomplish
使用 HttpClient 访问网络
下面参考 Microsoft UWP Document 提供了利用 HttpClient 通过 网址 url 进行网络访问的代码模板。我们要做的事就三个:
- 给函数提供访问的 url 所需的参数;
- 替换将要访问的 url
- 完成下面的 http response处理代码
函数的返回值可以自行修改。
1 | private async Task<string> WeatherApi(/*params*/) { |
提供城市天气查询(json Phrase)
下面给出有关于 json phrase 的代码。
这里调用的是中国气象局的api,作为一个年迈的网站,它的查询 url 不支持城市中文名,而应使用城市代码。感谢blouc的贡献,我直接将它洗成 xml 来辅助使用了,具体见代码文件内的 weather.xml 文件。
对于 json 数据的解析,使用 newton 库提供的 json 解析库。
1 | /* Accomplish the url */ |
提供 IP 地址查询(xml Phrase)
调用网络服务的代码与天气查询的是一致的,只是更换了 url 网址与下面的 httpResponse 处理代码。
这里返回了 xml 数据,我们利用官方提供的 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
```cs
Byte[] getByte = await httpResponse.Content.ReadAsByteArrayAsync();
Encoding code = Encoding.GetEncoding("UTF-8");
string result = code.GetString(getByte, 0, getByte.Length);
// Phrase the xml data
XmlDocument document = new XmlDocument();
document.LoadXml(result);
var province = document.GetElementsByTagName("province");
location += "省份: " + province[0].InnerText + "\n";
var city = document.GetElementsByTagName("city");
location += "城市: " + city[0].InnerText + "\n";
var rectangle = document.GetElementsByTagName("rectangle");
var temp = rectangle[0].InnerText.Split(';');
location += "区域:\n\t" + temp[0] + "\n\t" + temp[1] + "\n";