获取天气预报代码修改
由于最近比较忙,暂时只提供asp.net的代码更新,asp及php版本更新等闲下来了再修改。其实也就是修改了下正则表达式,大家有兴趣也可以自己研究下ashx文件中的正则表达式自己修改。
根据访问用户IP地址自动获取天气预报及简易天气预报查询 代码修改如下
原创文章,转载请注明出处:获取天气预报代码修改
根据访问用户IP地址自动获取天气预报及简易天气预报查询 代码修改如下
+展开
-C#
<%@ WebHandler Language="C#" Class="weather" %>
using System;
using System.Web;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
using System.Net;
public class weather : IHttpHandler {
/// <summary>
/// 获取客户ip地址
/// </summary>
/// <returns></returns>
private string GetIP()
{
string ip = HttpContext.Current.Request.ServerVariables["http_x_forwarded_for"];
if (!UserCheck.IsNotNull(ip)) ip = HttpContext.Current.Request.ServerVariables["remote_addr"];
return ip;
}
private string RemoveHTML(string v)
{
if (string.IsNullOrEmpty(v)) return "";
return Regex.Replace(v, "<[^>]+>", "", RegexOptions.Compiled).Trim();
}
public void ProcessRequest(HttpContext context)
{
string Ip = GetIP(), area = "", json = "var weather={success:false};";
if (Ip != null && !string.IsNullOrEmpty(Ip))
{
string[] arr = Ip.Split('.');
double ipNum = 0, pow = 256;
ipNum = double.Parse(arr[0]) * Math.Pow(pow, 3) + double.Parse(arr[1]) * Math.Pow(pow, 2)
+ double.Parse(arr[2]) * pow + double.Parse(arr[3]);
DBHelper db = new DBHelper();
object addr = DBHelper.ExecScalar("select addr from ipdb where ipe>=" + ipNum.ToString() + " and ipb<=" + ipNum.ToString(), db.CN);
db.CloseDB();
if (addr == null || addr.ToString() == "对方和您在同一内部网") addr = "桂林";
try
{
HttpWebRequest wr = (HttpWebRequest)HttpWebRequest.Create("http://php.weather.sina.com.cn/search.php?city=" + addr.ToString());
string htmlBody = "";
using (StreamReader sr = new StreamReader(wr.GetResponse().GetResponseStream(), Encoding.GetEncoding(936)))
{
htmlBody = sr.ReadToEnd();
}
//桂林,多云转阴,16℃~7℃,风力:≤3级 ==>今天
Regex r = new Regex(addr.ToString() + ",([^,]+),([^,]+),风力:([^']+)", RegexOptions.IgnoreCase | RegexOptions.Compiled)
// <li>风向:北风</li>
, dir = new Regex("<li>\\s*风向:([^<]+)</li>", RegexOptions.IgnoreCase | RegexOptions.Compiled)
//<div class="box_c weather_date">
, dsrx = new Regex("<div\\s+class=\"box_c\\s*weather_date\"\\s*>([\\s\\S]+?)</div>", RegexOptions.IgnoreCase | RegexOptions.Compiled)
, tbrx = new Regex("<table\\s+class=\"cell\"[^>]*>([\\s\\S]+?)</table>", RegexOptions.IgnoreCase | RegexOptions.Compiled)
, tdrx = new Regex("<td>([\\s\\S]+?)</td>", RegexOptions.Compiled | RegexOptions.IgnoreCase);
if (r.IsMatch(htmlBody))
{
DateTime dt = DateTime.Now;
Match m = r.Match(htmlBody);
json = "var weather={success:true,addr:'" + Format.Js(addr.ToString()) + "',weathers:[{d:'" + dt.ToString("yyyy-MM-dd") + "'"
+ ",weather:'" + m.Groups[1].Value + "',tmp:'" + m.Groups[2].Value + "',dir:'" + dir.Match(htmlBody).Groups[1].Value + "',strong:'" + m.Groups[3].Value + "'}";
if (dsrx.IsMatch(htmlBody))
{
htmlBody = dsrx.Match(htmlBody).Groups[1].Value;
MatchCollection mcTB = tbrx.Matches(htmlBody), mcTD;
string dweather = "", nweather = "", dtmp = "", ntmp = "", ndir = "", ddir = "";
for (int i = 0; i < 2 && i < mcTB.Count; i++)
{
mcTD = tdrx.Matches(mcTB[i].Groups[1].Value);
dweather = mcTD[4].Groups[1].Value; nweather = mcTD[5].Groups[1].Value;
if (dweather != nweather) dweather = dweather + " 转 " + nweather;
dtmp = RemoveHTML(mcTD[6].Groups[1].Value); ntmp = RemoveHTML(mcTD[7].Groups[1].Value);
ddir = mcTD[8].Groups[1].Value; ndir = mcTD[9].Groups[1].Value;
if (ddir != ndir) ddir = ddir + " 转 " + ndir;
dt = dt.AddDays(1);
json += ",{d:'" + dt.ToString("yyyy-MM-dd") + "',weather:'" + dweather + "',tmp:'" + dtmp + "~" + ntmp + "',dir:'" + ddir + "'}";
}
}
json += "]};";
}
}
catch { }
}
context.Response.Write(json);
}
public bool IsReusable {
get {
return false;
}
}
}
using System;
using System.Web;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
using System.Net;
public class weather : IHttpHandler {
/// <summary>
/// 获取客户ip地址
/// </summary>
/// <returns></returns>
private string GetIP()
{
string ip = HttpContext.Current.Request.ServerVariables["http_x_forwarded_for"];
if (!UserCheck.IsNotNull(ip)) ip = HttpContext.Current.Request.ServerVariables["remote_addr"];
return ip;
}
private string RemoveHTML(string v)
{
if (string.IsNullOrEmpty(v)) return "";
return Regex.Replace(v, "<[^>]+>", "", RegexOptions.Compiled).Trim();
}
public void ProcessRequest(HttpContext context)
{
string Ip = GetIP(), area = "", json = "var weather={success:false};";
if (Ip != null && !string.IsNullOrEmpty(Ip))
{
string[] arr = Ip.Split('.');
double ipNum = 0, pow = 256;
ipNum = double.Parse(arr[0]) * Math.Pow(pow, 3) + double.Parse(arr[1]) * Math.Pow(pow, 2)
+ double.Parse(arr[2]) * pow + double.Parse(arr[3]);
DBHelper db = new DBHelper();
object addr = DBHelper.ExecScalar("select addr from ipdb where ipe>=" + ipNum.ToString() + " and ipb<=" + ipNum.ToString(), db.CN);
db.CloseDB();
if (addr == null || addr.ToString() == "对方和您在同一内部网") addr = "桂林";
try
{
HttpWebRequest wr = (HttpWebRequest)HttpWebRequest.Create("http://php.weather.sina.com.cn/search.php?city=" + addr.ToString());
string htmlBody = "";
using (StreamReader sr = new StreamReader(wr.GetResponse().GetResponseStream(), Encoding.GetEncoding(936)))
{
htmlBody = sr.ReadToEnd();
}
//桂林,多云转阴,16℃~7℃,风力:≤3级 ==>今天
Regex r = new Regex(addr.ToString() + ",([^,]+),([^,]+),风力:([^']+)", RegexOptions.IgnoreCase | RegexOptions.Compiled)
// <li>风向:北风</li>
, dir = new Regex("<li>\\s*风向:([^<]+)</li>", RegexOptions.IgnoreCase | RegexOptions.Compiled)
//<div class="box_c weather_date">
, dsrx = new Regex("<div\\s+class=\"box_c\\s*weather_date\"\\s*>([\\s\\S]+?)</div>", RegexOptions.IgnoreCase | RegexOptions.Compiled)
, tbrx = new Regex("<table\\s+class=\"cell\"[^>]*>([\\s\\S]+?)</table>", RegexOptions.IgnoreCase | RegexOptions.Compiled)
, tdrx = new Regex("<td>([\\s\\S]+?)</td>", RegexOptions.Compiled | RegexOptions.IgnoreCase);
if (r.IsMatch(htmlBody))
{
DateTime dt = DateTime.Now;
Match m = r.Match(htmlBody);
json = "var weather={success:true,addr:'" + Format.Js(addr.ToString()) + "',weathers:[{d:'" + dt.ToString("yyyy-MM-dd") + "'"
+ ",weather:'" + m.Groups[1].Value + "',tmp:'" + m.Groups[2].Value + "',dir:'" + dir.Match(htmlBody).Groups[1].Value + "',strong:'" + m.Groups[3].Value + "'}";
if (dsrx.IsMatch(htmlBody))
{
htmlBody = dsrx.Match(htmlBody).Groups[1].Value;
MatchCollection mcTB = tbrx.Matches(htmlBody), mcTD;
string dweather = "", nweather = "", dtmp = "", ntmp = "", ndir = "", ddir = "";
for (int i = 0; i < 2 && i < mcTB.Count; i++)
{
mcTD = tdrx.Matches(mcTB[i].Groups[1].Value);
dweather = mcTD[4].Groups[1].Value; nweather = mcTD[5].Groups[1].Value;
if (dweather != nweather) dweather = dweather + " 转 " + nweather;
dtmp = RemoveHTML(mcTD[6].Groups[1].Value); ntmp = RemoveHTML(mcTD[7].Groups[1].Value);
ddir = mcTD[8].Groups[1].Value; ndir = mcTD[9].Groups[1].Value;
if (ddir != ndir) ddir = ddir + " 转 " + ndir;
dt = dt.AddDays(1);
json += ",{d:'" + dt.ToString("yyyy-MM-dd") + "',weather:'" + dweather + "',tmp:'" + dtmp + "~" + ntmp + "',dir:'" + ddir + "'}";
}
}
json += "]};";
}
}
catch { }
}
context.Response.Write(json);
}
public bool IsReusable {
get {
return false;
}
}
}
加支付宝好友偷能量挖...
原创文章,转载请注明出处:获取天气预报代码修改