内网公告牌获取天气信息解决方案(C# WebForm)
需求:内网公告牌能够正确显示未来三天的天气信息
本文关键字:C#/WebForm/Web定时任务/Ajax跨域
规划:
1、天定时读取百度接口获取天气信息并存储至Txt文档;
2、示牌开启时请求WebService,获取天气信息;
解决方案:
1、在Global.asax中能够配置整个工程不同情况下触发的事件,其中 Application_Start方法是在iis启动本项目时就开始的进程。在本方法下写入定时从百度读取天气信息的代码,调用的WebService代码在下面的第2部分:
protected void Application_Start(object sender, EventArgs e)
{
String NowTime = DateTime.Now.ToString("hh24:mi:ss");
//定时任务
//if (NowTime == "")
//{
WebService1 ws = new WebService1();
ws.GetBaiduWeather();
//}
//每天执行一次
Timer t = new Timer(60 * 60 * 24 * 1000);
t.Elapsed += new System.Timers.ElapsedEventHandler(DownLoadWeather);
t.Enabled = true; }
WebService代码如下
[WebMethod]
public void GetBaiduWeather()
{
string callback = HttpContext.Current.Request["jsoncallback"];
WeatherDownload.getrequest();
HttpContext.Current.Response.Write(callback +
"({result:'true'})");
HttpContext.Current.Response.End();
}
调用百度天气接口存储数据的代码如下所示,其存储的结果是Json字符串。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net;
using System.IO;
using System.Text;
using System.Text.RegularExpressions; namespace WebService
{
public static class WeatherDownload
{
public static string url = "http://apis.baidu.com/apistore/weatherservice/recentweathers";
public static string param = "cityname=石家庄&cityid=101090101";
/// <summary>
/// 查询天气情况
/// </summary>
/// <param name="url"></param>
public static void getrequest()
{
string strURL = url + '?' + param;
System.Net.HttpWebRequest request;
request = (System.Net.HttpWebRequest)WebRequest.Create(strURL);
request.Method = "GET";
request.Headers.Add("apikey", "在百度上申请的开发者个人码");
System.Net.HttpWebResponse response;
response = (System.Net.HttpWebResponse)request.GetResponse();
System.IO.Stream s;
s = response.GetResponseStream();
string StrDate = "";
string strValue = "";
StreamReader Reader = new StreamReader(s, Encoding.UTF8);
while ((StrDate = Reader.ReadLine()) != null)
{
strValue += StrDate + "\r\n";
}
if (File.Exists(System.AppDomain.CurrentDomain.BaseDirectory + "\\" + DateTime.Now.ToString("yyyyMMdd") + ".txt"))
{
}
else
{
using (File.Create(System.AppDomain.CurrentDomain.BaseDirectory + "\\" + DateTime.Now.ToString("yyyyMMdd") + ".txt"))
{
}
}
FileStream fs = new FileStream(System.AppDomain.CurrentDomain.BaseDirectory + "\\" + DateTime.Now.ToString("yyyyMMdd") + ".txt", FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
String w = UnicodeToStr(strValue);
sw.Write(w);
sw.Flush();
sw.Close();
fs.Close();
}
/// <summary>
/// 编码为汉字
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string UnicodeToStr(string str)
{
string outStr = "";
Regex reg = new Regex(@"(?i)\\u([0-9a-f]{4})");
outStr = reg.Replace(str, delegate(Match m1)
{
return ((char)Convert.ToInt32(m1.Groups[1].Value, 16)).ToString();
});
return outStr;
}
}
}
2、页面请求WebService获取天气数据
此处使用的Ajax请求,特征是跨域请求,当时出的问题比较多,一篇很好的参考文献如下(http://www@suchso@com/projecteactual/jquery-ajax-parsererror-was-not-called.html)(请把@改为.)
$.ajax({
//111.111.111.111为实际
url: "http://111.111.111.111/WebService1.asmx/GetWeather?jsoncallback=?",
dataType: "jsonp",
success: OnSuccess,
error: OnError
});
//}
function OnSuccess(json) {
$("#today").text(json.retData.today.curTemp.toString())
$("#today_wth").text(json.retData.today.type.toString())
}
function OnError(XMLHttpRequest, textStatus, errorThrown) {
alert("Something error");
}
对应的WebService代码如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.IO;
using System.Text;
namespace WebService
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class WebService1 : System.Web.Services.WebService
{
[WebMethod]
public void GetWeather()
{
String sr = File.ReadAllText(System.AppDomain.CurrentDomain.BaseDirectory + DateTime.Now.ToString("yyyyMMdd") + ".txt", UnicodeEncoding.GetEncoding("UTF-8")); string callback = HttpContext.Current.Request["jsoncallback"];
HttpContext.Current.Response.Write(callback + "(" + sr + ")");
} }
}
内网公告牌获取天气信息解决方案(C# WebForm)的更多相关文章
- C#调用WebService获取天气信息
概述 本文使用C#开发Winform应用程序,通过调用<WebXml/>(URL:http://www.webxml.com.cn)的WebService服务WeatherWS来获取天气预 ...
- Java通过webservice接口获取天气信息
通过SOAP请求的方式获取天气信息并解析返回的XML文件. 参考: http://www.webxml.com.cn/WebServices/WeatherWS.asmx import java.io ...
- ESP32 IDF 获取天气信息
一.注册天气获取账号 我使用的知心天气,没有获取天气账号的小伙伴可以去注册一下,知心天气官网:https://www.seniverse.com/ 取得天气获取的API后,可以直接在浏览器中访问测试一 ...
- 半吊子学习Swift--天气预报程序-获取天气信息
昨天申请的彩云天气Api开发者今天上午已审核通过  饭后运动过后就马不停蹄的来测试接口,接口是采用经纬度的方式来获取天气信息,接口地址如下 https://api.caiyunapp.com/v2/ ...
- java获取天气信息
通过天气信息接口获取天气信息,首先要给项目导入程序所需要的包,具体需要如下几个包: json-lib-2.4.jar ezmorph-1.0.6.jar commons-beanutils-1.8.3 ...
- Kettle通过Webservice获取天气信息
Kettle通过Webservice获取天气信息 需求: 通过kettle工具,通过webservice获取天气信息,写成xml格式文件. 思路: Kettle可通过两种选择获取webservic ...
- ajax无刷新获取天气信息
浏览器由于安全方面的问题,禁止ajax跨域请求其他网站的数据,但是可以再本地的服务器上获取其他服务器的信息,在通过ajax请求本地服务来实现: <?php header("conten ...
- Android实现自动定位城市并获取天气信息
定位实现代码: <span style="font-size:14px;">import java.io.IOException; import java.util.L ...
- java解析xml实例——获取天气信息
获取xml并解析其中的数据: package getweather.xml; import java.io.IOException; import java.util.HashMap; import ...
随机推荐
- Groovy入门经典 随书重点
1 数值和表达式 1.1数值 整数是Integer类的实例 有小数部分的数值是BigDecimal类的实例 不同于java,没有基础数据类型 一切皆对象的概念重于java 1.2表达式 两个整数的除法 ...
- 键盘对应的ASCII码
ESC键 VK_ESCAPE (27)回车键: VK_RETURN (13)TAB键: VK_TAB (9)Caps Lock键: VK_CAPITAL (20)Shift键: VK_SHIFT ($ ...
- ssh 整合
1. 加入 Spring 1). 加入 jar 包 2). 配置 web.xml 文件 3). 加入 Spring 的配置文件. 2. 加入 Hibernate 1). 同时建立持久化类, 和其对应的 ...
- DataStructure——红黑树学习笔记
1.前言 本文伪码和解释参考: http://blog.csdn.net/v_JULY_v/article/details/6105630 C实现的源码本文未贴出,请见: http://blog.cs ...
- OC基础--继承
继承的基本概念: 现实生活中的继承: 人类是一个基类(也称做父类),通常情况下所有人类所共同具备的特性,如有手有脚能吃能喝 按照生活常规,我们继续给人类来细分的时候,我们可以分为学生类 工人类等,学生 ...
- python 类以及单例模式
python 也有面向对象的思想,则一切皆对象 python 中定义一个类: class student: count = 0 books = [] def __init__(self ...
- Debian 7环境安装TightVNC+Gnome远程桌面环境
昨天下午的时候一个Hostus网友希望在购买的VPS主机中安装桌面环境用来跑软件项目,其实也是我们很多用户习惯的VNC桌面,毕竟在LINUX服务器中也无法去安装WINDOWS系统,尤其是OPENVZ架 ...
- Titanium studio介绍
1.Titanium Studio 概述 TitaniumStudio是Appcelerator公司开发的一款基于Eclipse的,使开发者利用Javascript来快速开发移动应用程序的跨平台的集成 ...
- jquery checkbox实例
<!DOCTYPE html><html> <head><meta charset="utf-8" /><title>& ...
- 学习中的错误——ubuntu 14.04 LTS 启动eclipse报错
在ubuntu中启动eclipse报错:(Eclipse:15978): GLib-GIO-CRITICAL **: g_dbus_connection_get_unique_name: assert ...