惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
V2EX
博客园 - 叶小钗
Last Week in AI
Last Week in AI
Google DeepMind News
Google DeepMind News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Microsoft Security Blog
Microsoft Security Blog
腾讯CDC
P
Proofpoint News Feed
大猫的无限游戏
大猫的无限游戏
The Cloudflare Blog
aimingoo的专栏
aimingoo的专栏
月光博客
月光博客
量子位
A
About on SuperTechFans
Engineering at Meta
Engineering at Meta
Apple Machine Learning Research
Apple Machine Learning Research
Jina AI
Jina AI
博客园 - Franky
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
人人都是产品经理
人人都是产品经理
D
DataBreaches.Net
博客园_首页
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Stack Overflow Blog
Stack Overflow Blog

博客园 - 北极熊,我来了!

C#获取类以及类下的方法(用于Asp.Net MVC) 使用JavaScript判断用户是否为手机设备 手机端页面自适应解决方案 Asp 邮件发送代码 js 日期字符串转换成日期类型,判断星期几 浅析a标签的4个伪类 C#读取Rss功能函数 《中文防止乱码的万能解决方案》 Asp.NET使用HTML控件上传文件 《JS两级联动菜单学习全接触》 活动目录ADSI实现添加系统帐号问题!!! ADSI管理Windows2003系统帐号 中国频道空间使用Jmail发送邮件 《IP地址和数字之间转化的算法》 《单域名下整合动网、动易、OBlog程序》 JS读取XML数据 Asp.NET读取Excel数据 [XML系列]Flash读取XML数据 《省市联动功能菜单的实现》
《小偷程序:自动获取百度天气预报》
北极熊,我来了! · 2007-08-21 · via 博客园 - 北极熊,我来了!

在做项目的过程中,需要用到一个类似天气预报的功能,以前不懂,以为那个是需要自己手工去更新的,在新闻小偷遍地的今天,越来越觉得以前自己的想法是错误的,简直是很幼稚。这里给出实现天气预报抓取功能的全部代码,假如有更好的办法,请与我联系。
代码如下:

        /// <summary>
        
/// 获取当天的天气情况
        
/// </summary>
        
/// <param name="City"></param>
        
/// <returns></returns>

        public static string ThiefWeather(string City)
        
{
            
string TodayWeather;
            
string thisDate = DateTime.Today.ToString("yyyyMMdd");
            
if (!FObject.IsExist(HttpContext.Current.Server.MapPath("/Cache/Baidu/" + thisDate + ".lic"), FsoMethod.File))
            
{
                
try
                
{
                    Uri uri 
= new Uri("http://www.baidu.com/s?wd=" + HttpContext.Current.Server.UrlEncode(City + "天气预报").ToUpper() + "&cl=3");
                    WebRequest wreq 
= WebRequest.Create(uri);
                    HttpWebResponse wresp 
= (HttpWebResponse)wreq.GetResponse();
                    Stream s 
= wresp.GetResponseStream();
                    StreamReader objReader 
= new StreamReader(s, System.Text.Encoding.Default);
                    
string HTML = objReader.ReadToEnd();
                    TodayWeather 
= GetRegValue("city=" + HttpContext.Current.Server.UrlEncode(City).ToUpper() + "\" target=\"_blank\">" + City + "</a>(.+?)\n", HTML);
                    FObject.WriteFile(HttpContext.Current.Server.MapPath("/Cache/Baidu/" + thisDate + ".lic"), TodayWeather);
                }

                
catch
                
{
                    TodayWeather 
= "";
                }

            }

            
else
            
{
                TodayWeather 
= HttpContext.Current.Server.HtmlDecode(Licensed.GetLicenseData("/Cache/Baidu/" + thisDate + ".lic"));
            }

            
return TodayWeather;
        }

        
/// <summary>
        
/// 正则表达式获取对应数据
        
/// </summary>
        
/// <param name="RegexString"></param>
        
/// <param name="RemoteStr"></param>
        
/// <returns></returns>

        private static string GetRegValue(string RegexString, string RemoteStr)
        
{
            
string MatchVale = "";
            Regex r 
= new Regex(RegexString);
            Match m 
= r.Match(RemoteStr);
            
if (m.Success)
            
{
                MatchVale 
= m.Groups[1].ToString();
            }

            
return MatchVale;
        }

说下实现的思路吧,我想对于做程序的来说,其实思路是更加的重要,很多时候,发现很多人技术是可以的,就是缺少具体去实现他的思路,以至与我以前一个老师,是做软件开发的,做到后来一直在为软件的更新维护发愁,其实只要做个在线更新的功能就可以了,而这个思路,我好像却是来源与玩传奇的经历,因为那个时候登陆器是老是需要更新升级,呵呵。

编程思路:
抓取百度的天气预报的页面返回结果-->使用正则表达式进行字符分割,目的是为了实现只要的内容-->判断当日该天气预报文件是否存在(每天第一个用户会自动的去更新当日的天气预报,这里这样做的目的是为了提高网站的访问速度)-->在页面需要显示的地方去读取该文件就可以了。