实战连串的天气预报实时收集

前言:

李志说,你离开了底特律,从此没有人跟我道;

今天
CYQ.Data 框架  框架群里,“路过冬季”问了个天气预报的问题,问哪个地方出webservice调用?于是随性就生出矣及时首作品了。

朴树说,她们还尽了咔嚓,她们以乌呀;

 

阿信说,想将您勾勒成一首歌,想留下一单单猫;

天气预报,记念被举行过这三欠好。

……

 

朴树

第一蹩脚的做法是:

孰之唱里,没有一个故事,什么人的故事里,没有一个人数。

技术主任写了单采访后台,每日得各国采一软,从tq121站里集大量底天音信到数据库,我虽直接由数据库里读数据了。

语音乐又平等潮刷屏了。

 

以斯忙在写年初总括的时刻,它深受咱每个听众生成了平卖年度音乐报告:

总结:

爱当晚间听歌

这种做法异常烦,每日要起来后台采数据,做成活动的,还要不半里程程序自动死亡才行,而且数据库会时有爆发大堆垃圾过时的数量。

离,哭,孤独是过多少人口二零一七年听到最多的歌词

优点是:可以收集很多音信,做成很专业的天气预报站,这时候召开旅游站,天气为是最重要模块,所以那种艺术呢杀有分寸。

在有同龙把有同首歌唱反复听了众多涂鸦

 

每当有平龙睡眠得不行晚,凌晨两三点钟尚于听歌…..

第二次:

每个人之告诉看起来还优异有趣,却为都小扎心,从某种程度上反映着即青少年群体的生活状态。

祥和做毕业设计,都并未采访后台,自己还要写不暴发采集来,没多少读了,只好到处百度搜索“天气预报Webservice”调用。

此出几号为自家享受了他们年度报告的小青年,每一样份歌单的私下,都是一个关于他们好的岁尾考虑:

 

01

@FaatenZ:

听见最多之歌词

世代是词对于巧过去一样年之自来说再合适不了。

自身二〇一八年婚了,和本身无限轻之口,婚礼现场的誓词就是世代,永远当一齐,白头偕老。

自与它是在网上认识的,这时候我们靠拢高中毕业,大家的家分属于个别独不同之都。

谁啊从没悟出,在老人眼里最不借助谱的网恋会受我们以联名一辈子吗?

高校四年,我与其一样当点滴个不同之都会,一多少个月才可以见相同破对。

我很欣慰,大家中间并无为距离终结,反而以距离为我们相互思恋。

高校毕业时,我与它结了季年之异地恋,她来到自家之市,和我一头加油。

赶巧过去的二零一七年九月25日,阳光明媚,但自己永远记得这天,这天她变成自之新娘,那天她非凡美。

婚礼现场宣誓时,我激动地哭了,网恋加异地恋,修成正果实属正确。

登机度蜜月啦

本身与它们前几日泰王国度蜜月,前年永久过去了,但接下的小日子,我们会永远在共同。

总结:

02

@歌王徐小鹏:

听见最多之词

刹那间到了2018年,想想毕业不久3年了,不免为会惊叹时光过得好不久。

自己学的凡情报,高校四年就径直惦念做记者,毕业后尚算顺利,称心遂意成为了平叫作媒体记者。

老三年时,我总共写了大体上暴发1000首各样音讯稿,全国各地出差,记不清去了略微现场。

前边片上首祚休假,我在家收拾好的媒体证,逐步一码堆在这边,每一个仍旧时候的知情者。

自己的媒体采访证

资讯行业有雷同句话:“明日的事体用改为前天之史”,意思是大家记者的诸一样首通讯都碰面作为文字记载被历史中,告诫我们而创建的通讯消息事件。

当年春季我失去四川省宣城市毛坦厂中学报道一年一度的高考,看正在毛坦厂镇边缘夹道欢送的养父母,看在相同辆辆大巴车里将走及考场的文化人,我衷心惊叹,脑中忆起了自要好当初高考时的场景。

信息记者则累,常常要出差,但好以本人和老人在于联合,不忙的时刻可以照看他们。

筷子兄弟之《三伯》有雷同词:“时光时光慢些吧
不要再受您再一次变总了”,现在每一遍听到都会面当难受。

咱老了,父母老了,时光时光你还缓缓些吧!

这种做法呢够呛窝囊,首先Webservice糟糕找,第二找到的而小站提供的,随时又相会挂掉了,如若每户挂掉,你如另外找一个?

03

@十字魔偶:

视听最多的词

心中?欣欣自得、伤心、痛心?感谢三石伯伯送我这样多中央!

实际上我当音乐是一个知觉的玉女,不分开高低、也不曾前后的分,你道就首歌是你的缪斯女神,那她肯定就用会当你的耳畔心中无鸣金收兵地出现。

2018年同等年本人从以为是转的同年,也混着不少工作。

洋洋得意之事体多,毕业两年来当帝都不断打磨提升。好运常伴,在2019年终志得意满的跳槽进入了同等寒500胜集团之总部,并且站稳脚跟;自己吧,也由一个害羞不相会说的男孩变得尤为游刃有余。

二〇一九年尚去同随着公司出差的怪部队,去了一些个都市,好于不极端劳碌,走走停停,也算是体验了将“不雷同的烟火”。

伤感的作业暂时没,毕竟我或很开朗的,哈哈,只是要团结会放下一些执念、专心做团结想做的从事,别浪费了时空吧

失的地点太多,很多像都没留存,附上一布置自己当麦纳麦鹅厂新总部拍的曙色,看即光芒万丈,却不知多少人口以这尘世间的美好事物在偷偷贡献,希望单身当异地打并的各国位亲都能安全幸福。

腾讯总部

可取是:找到就调用,什么啊未用无,菜鸟也可以飞。

04

@是菲不是奇怪:

听到最多之乐章

距并无表示如若再开。

毕业这年,我采纳到时尚之都,我立之男友也与了回复,这让我看内心特别暖和,迪拜那么大,只要暴发异在,我还时有暴发平等栽小的感到。

或是是深城市之抓住无限多,也许是本身走位不够浪漫,综上说述,我平昔不曾悟出一个针对我那么温柔珍爱的男友竟然会背判我。

自选去他,一个丁最先新的存。

光阴是治愈失恋最好之良药,我把好疯狂投入到办事同学着去:

白天做事,清晨健身,周末出门去与沙龙仍旧在家充电学习,在特别丰盛之一段时间里,我拿好的时刻部署的满满当当的。

非凡幸运,我忘记了老渣男带被自家之侵蚀;很幸运,我的劳作出矣深可怜之起色;仍然殊幸运,我赶上了前些天之未婚夫。

自己跟他是于一个运动及识的,他连无是一个文明的人口,大高个,方形脸,说话声音大响亮,因为凡东北人,天生自带幽默属性。

外学的时尽管已经动寒暑假的年华走遍半只中国,外国也错过过局部地点,眼界很有钱,和外扯总是发生广大抱。

本年国庆我们订婚了,因为他以底特律办事,所以自己及他远在异地恋状态,但当时并无妨碍我们片独人口之心思。

距有美,有时候的确挺有道理的。

过截至新年自己哪怕把于迪拜底工作辞了,去科伦坡,和外一起组建大家的小窝。

自我上单月去押他的火车票

“塞翁失马,焉知非福”,离开这个词对本身本吧,并无难过。

 

05

@Me乐乐:

视听最多之词

世界那么坏,我确实想去看看!

自也想去潘帕斯草原看牛羊,去乞力马扎罗看日出,去北极圈看极光,去大堡岛礁潜水!

二零一七年,我仍没机会去世界那多少个精粹有趣之地点看。

没工夫尚未钱,年轻的自己只有最可贵的只是一无所有的年青。

二〇一七年自己无暇了全部一年!一年,除了生病要过病假,我直接都地处工作状态。

虽说本人没有机会下散步,但迅即并代表我之心头为是死的。

2018年自己读了即100本书,平均三龙一样据,当然也暴发一些不胜相似的书写,我同一龙三如约。

许多优良的书写仍旧笔者生平的头脑,这么些作者会把您带入到他们的记挂世界,让您以这边遨游,同样可以让你享受。

二〇一八年本人尽容易之开便是刘慈欣的《三体》,这诚然是当今世界最伟大之小说有!

自身的三体世界

大刘通过最伟大的脑洞向我们展示了一个庞大的世界,在《三体》里面,既可以来看弱肉强食,也会看出大刘对全人类历史的反省。

前日凡是二〇一八年了,二〇一九年自然假如出去浪一圈了!已经准备好去看俄Rose世界杯了,没道什么人吃自身是德意志战车的死忠粉呢!

兹晓得我胡二零一八年这拼了咔嚓?就是为二零一九年能多编辑几天假哈哈哈!

假高晓松的同词话,2018,世界仍相当特别,大至可以到处浪!

第三次:

06

@V字团长:

视听最多之词

二〇一八年针对本身的话挺有意义的,拥有这词也会诠释我大部分之情怀。

2017新春,从卢布尔雅这为人double来了香港,收入比在此以前高达了一个杀台阶,拥有的存慢慢变多了;

选购了自己人生之首先辆车,周末之时节日常来一个江湖浙沪周边自驾游,越发喜爱起存来;

找到了女对象,哈哈,这些对我的话是无与伦比值得拥有的同项事情,程序员也发女对象了!我老强调同她于一块的美好时光。

先是涂鸦圣诞节及女性对象逛街

丁之欲念是绵绵,月薪水五千底时候会认为月薪五万很可观,等到真正达到和谐那时之优先想目的时,又会面失去想如果更多之物。

奇迹想起我爸那么一辈,拥有的物其实与我们现在较起来少之分外,但他俩意得志满。

我要将来好拥有双重多的物,但自呢时时告诉要好,你还年轻,不要着急,多好力量挣钱多少钱,该有的本会有着。

2018,平常心,平常心。

颇喜爱小刚好版本的那篇《有没发出一致篇歌唱会受你回顾自己》:

爆发无发生这等同首歌

会晤给你轻轻就和

拉动我们一并过去

记从未沉默了

当我们的歌单里,有好多别出心裁的音乐歌曲,或喜欢、或天真烂漫、或悲伤、或不适,他们的核心对诺在跟大家在之惊喜。

今非昔比之人对音乐有两样之爱和追求,但那一个陪在我们成人的音乐背后或多要有失都有那么等同截往事,都来这相同广大人数,和音乐共同保存在咱们的记念里。

你的歌单是啊呢?

是电子商务平台在首页显示下天气,那时候正好赶上刚做完web版的收集系统,于是顺理直接用搜集类库现采现显。

 

总结:

可取是:不用和数据库打交道,现采现显,收缩数据库压力,速度快,每日只采一差,丁点音讯,缓存即可。对于天唯有是装饰性的但是适用。

缺点是:数据量少,不克召开能专业性天气预报站。

 

以下介绍现采现显的落实模式

 

1:既然要收集,当然找到有天气预报的立了,这些很好找,网上到处都是资源,只要你会采。

仍百度,你找城市使布宜诺斯艾利斯(Ellis),即会油不过生气象新闻了,如图:

 

葡京网上娱乐场 1

 

按腾讯soso,如下图。当然还闹其它众多众多,只要看收获的,都得搜集,不过最好好找好立,稳定。

 

葡京网上娱乐场 2

 

2:采集类,一个吓的采集类,事半功倍,以下出一个简化版,充裕采集天气消息

葡京网上娱乐场 3葡京网上娱乐场 4

using System;
using System.Text;
using System.Net;
using System.Text.RegularExpressions;

namespace CYQ.Tool
{
    /// <summary>
    /// 作者:路过秋日
    /// 博客:http://cyq1162.cnblogs.com
    /// </summary>
    public class GatherHelper
    {
        /// <summary>
        /// 重返获取之靶子地址HTML全体代码
        /// </summary>
        /// <param name=”strUrl”>目的地方</param>
        /// <returns></returns>
        public static string GetHtmlCode(string pageUrl, Encoding encoding)
        {
            try
            {
                //重临目的页HTML代码
                WebClient webclient = new WebClient();
                webclient.Credentials = CredentialCache.DefaultCredentials;
                byte[] buffer = webclient.DownloadData(pageUrl);
                string HtmlCode = encoding.GetString(buffer);
                webclient.Dispose();    //释放WebClient资源
                return HtmlCode;
            }
            catch
            {
                return string.Empty;
            }

        }

        #region 内容截取分析
        /// <summary>
        /// 再次回到按照内容起首与善终代码分析发生内容
        /// </summary>
        /// <param name=”ContentCode”>内容代码</param>
        /// <param name=”StartCode”>内容所在起初代码</param>
        /// <param name=”EndCode”>内容所在截止代码</param>
        /// <param name=”index”>取第几长条[从1开始]</param>
        /// <returns></returns>
        public static string GetContent(string contentCode, string startCode, string endCode, int index)
        {
            string[] matchItems = null;
            return GetContent(contentCode, startCode, endCode, index, out matchItems);
        }
        public static string GetContent(string contentCode, string startCode, string endCode, int index, out string[] matchItems)
        {
            matchItems = null;
            if (string.IsNullOrEmpty(startCode) && string.IsNullOrEmpty(endCode))
            {
                return contentCode;
            }
            Regex regObj = new Regex(startCode + @”([\S\s]*?)” + endCode, RegexOptions.Compiled | RegexOptions.IgnoreCase);
            MatchCollection matchItemList = regObj.Matches(contentCode);
            if (matchItemList != null && matchItemList.Count >= index)
            {
                matchItems = new string[matchItemList.Count];
                for (int i = 0; i < matchItemList.Count; i++)
                {
                    matchItems[i] = matchItemList[i].Groups[1].Value;
                }
                index = index > 0 ? index – 1 : 0;
                return matchItemList[index].Groups[1].Value;
            }
            return string.Empty;
        }
        #endregion
    }
}

 

3:编写天气预报实体类,将采的音以实体再次来到,假若采集多独,再次来到就是List<实体>了

葡京网上娱乐场 5葡京网上娱乐场 6

  public class WeatherInfo
    {
        private string imgUrl;
        /// <summary>
        /// 天气图片地址
        /// </summary>
        public string ImgUrl
        {
            get { return imgUrl; }
            set { imgUrl = value; }
        }
        private string wind;
        /// <summary>
        /// 天气风力
        /// </summary>
葡京网上娱乐场,        public string Wind
        {
            get { return wind; }
            set { wind = value; }
        }
        private string cityName;
        /// <summary>
        /// 天气都名
        /// </summary>
        public string CityName
        {
            get { return cityName; }
            set { cityName = value; }
        }
        private string temperature;
        /// <summary>
        /// 天气温度
        /// </summary>
        public string Temperature
        {
            get { return temperature; }
            set { temperature = value; }
        }
        private string description;
        /// <summary>
        /// 天气说明
        /// </summary>
        public string Description
        {
            get { return description; }
            set { description = value; }
        }

 

4:编写采集Soso的天气预报类

 

A:新建采集天气预报类:WeatherSearch

葡京网上娱乐场 7葡京网上娱乐场 8

    /// <summary>
    /// 作者:路过夏天
    /// 博客:http://cyq1162.cnblogs.com
    /// </summary>
    public class WeatherSearch
    {
        /// <summary>
        /// 数据收集来源于腾信搜搜天气预报
        /// </summary>
        /// <param name=”cityName”></param>
        /// <returns></returns>
        public static WeatherInfo Get(string cityName)
        {
              //待实现
        }

        private static WeatherInfo GetFormCache(string cityName,string key)
        {
            object weather = HttpContext.Current.Cache.Get(key);
            if (weather!=null)
            {
                return weather as WeatherInfo;
            }
            return null;
        }

    }

 

着重表达:

募集一涂鸦后,记得缓存起来,不然老是访都现采,刷刷就吃soso给封了,切身经历什么。

 

B:Get函数分解:

1:先念博缓存,注意缓存Key用日期做key,能够好缓存前天同去后天之复苏存。

葡京网上娱乐场 9葡京网上娱乐场 10

        public static WeatherInfo Get(string cityName)//闽南语城市称号
        {
            if (string.IsNullOrEmpty(cityName))
            {
                return null;
            }
            string todayKey = cityName + DateTime.Now.ToString(“yyyyMMdd”);
            WeatherInfo weather = GetFormCache(cityName, todayKey);
            if (weather == null)
            {
                //待实现
            }
        }

2:读不交缓存就现采了,调用采集类

葡京网上娱乐场 11葡京网上娱乐场 12

 if (weather == null)
  {
                weather = new WeatherInfo();
                weather.CityName = cityName;
                cityName = System.Web.HttpUtility.UrlEncode(cityName + “天气”, Encoding.GetEncoding(“gb2312”));
                string url = “http://www.soso.com/q?num=1&w=” + cityName;

                //采集所有html
                string html = GatherHelper.GetHtmlCode(url, Encoding.GetEncoding(“gb2312”));
                //接下来要实现
  }

说明:

这里都要为此中文编码传过去,至于url,是自我意识的绝精简的参数,现在一度把搜搜的索页面的全html抓回去了,接下去便分手有想只要之音。

3:分析html,减少范围,对于一大堆html,大家要这等同有

葡京网上娱乐场 13葡京网上娱乐场 14

<!–上边的于略去–>
<div class=”w_main”>
                                            <ol>
                                                <li class=”w_space” title=”北风4-5级”><span>今天(周五)</span>
                                                    <img src=”http://cache.soso.com/zdq/wea/s\_a3.png” onload=”setPng(this,48,48)” />
                                                    <span>21 / 28<em>°</em>C</span><span class=”w_w”>多云转阵雨</span> </li>
                                                <li title=”北风3-4级”><span>明天(周六)</span>
                                                    <img src=”http://cache.soso.com/zdq/wea/s\_a3.png” onload=”setPng(this,48,48)” />
                                                    <span>22 / 28<em>°</em>C</span><span class=”w_w”>多云转阵雨</span> </li>
                                                <li title=”微风”><span>后天(周日)</span>
                                                    <img src=”http://cache.soso.com/zdq/wea/s\_a33.png” onload=”setPng(this,48,48)” />
                                                    <span>18 / 29<em>°</em>C</span><span class=”w_w”>多云</span> </li>
                                            </ol>
</div>
<!–下边的啊叫略去–>

说明:

我们运用GetContent方法好挺便于的紧缩范围,只要找到唯一的胚胎标签和停止标签,不会师正则,也同样截取。

4:使用GetContent步步截取所要信息

葡京网上娱乐场 15葡京网上娱乐场 16

if (string.IsNullOrEmpty(html)) { return null; }
                //缩小范围
                html = GatherHelper.GetContent(html, “<div class=\”w_main\”>”, “</div>”, 1);
                if (string.IsNullOrEmpty(html)) { return null; }

                //说明
                weather.Description = GatherHelper.GetContent(html, “<span class=\”w_w\”>”, “</span>”, 1);
                //图片
                weather.ImgUrl = GatherHelper.GetContent(html, “<img src=\””, “\””, 1);
               
                //风向
                weather.Wind=GatherHelper.GetContent(html, “title=\””, “\””, 1);

                //温度
                weather.Temperature = GatherHelper.GetContent(html, “/> <span>”, “<em>”, 1);

5:存入缓存并消除前几日底休养生息存信息[在押用出示几龙之音信了]

葡京网上娱乐场 17葡京网上娱乐场 18

                HttpContext.Current.Cache.Insert(todayKey, weather);
                string yesterdayKey = cityName + DateTime.Now.AddDays(-1).ToString(“yyyyMMdd”);

                if (HttpContext.Current.Cache.Get(yesterdayKey)!=null)
                {
                    HttpContext.Current.Cache.Remove(yesterdayKey);
                }

 

5:界面调用

葡京网上娱乐场 19葡京网上娱乐场 20

 protected void Page_Load(object sender, EventArgs e)
    {
        WeatherInfo info = WeatherSearch.Get(“广州”);
        if (info != null)
        {
            litCity.Text = info.CityName;
            litDescprtion.Text = info.Description;
            imgUrl.ImageUrl = info.ImgUrl;
            litWind.Text = info.Wind;
            litTemperature.Text=info.Temperature;
        }
    }

 

6:调用结果

葡京网上娱乐场 21

 

 

终极结言:

本博没有高速评论通道,大伙积极点入手。

再不济手动复制-》“此文是,值的引进”!!

-_-…!!!

IE6好卡,鼠标又疯狂,单击双击混在一块儿,本文写起来好烦~~

 

 

本文示例下载地址:CYQ.Data 轻量数据层之路
bug反馈、优化指出、最新框架下载