zoukankan      html  css  js  c++  java
  • 做一个给自己手机免费发送“天气预报”信息的软件

                  实现一个以下截图这样的功能!没错,就是你手机可以收到“免费”的天气预报短信!

                                                

    一、在做之前必须了解以下四个功能:

    1、WebService

    2、Quartz.Net(定时任务框架)

    3、SMTP:简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式

    4、开通139免费邮箱(移动),或者132(联通)的都可以,开通很简单,百度:输入“移动(联通)邮箱”

         (因为是免费的,所以你必须开通免费的手机邮箱,收短信不扣费,不然你还得做“短信猫”类似的接口,成本太高。)

    二、使用MVC3开发(或者使用WebForm、Winform也可以,最近本人一直用MVC3开发项目)

    1、在项目中右键添加Web服务引用(地址为:http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx

         这个网站提供很多免费的Web接口(这个是天气预报的)。

      

    2、点击确定按钮,也可以自己重命名(这里默认即可)

      

    3、接下来就得使用到Quartz.Net(下载Quartz.Net.dll,如果有需要,留言就行。)

         在Global.asax中,Application_Start()方法中写定时器的代码。

            private IScheduler sched;
    protected void Application_Start()
            {
    //作为可配置的,所以在Web.Config中进行配置,indexStarHour是执行的小时,indexStartMin是执行的分钟。
                //这里使用的是每天的**:**,几点几分的形式。
                int indexStartHour = Convert.ToInt32(ConfigurationManager.AppSettings["IndexStartHour"]);
    int indexStartMin = Convert.ToInt32(ConfigurationManager.AppSettings["IndexStartMin"]);
                ISchedulerFactory sf = new StdSchedulerFactory();
    sched = sf.GetScheduler();
                //“DoWeather”这个类进行执行计划的内容,实现了IJob接口。
    JobDetail job = new JobDetail("job1", "group1", typeof(DoWeather));
    //方法:
    TriggerUtils.MakeDailyTrigger(每天的几点几分执行任务),还有很多的方法,如每周,或者每隔几分钟执行几次。
    Trigger trigger = TriggerUtils.MakeDailyTrigger("tigger1", indexStartHour, indexStartMin);//每天*点*分执行
                trigger.JobName = "job1";
                trigger.JobGroup = "group1";
                trigger.Group = "group1";
                sched.AddJob(job, true);
                sched.ScheduleJob(trigger);
                sched.Start();
           }
    
     

                   记得还要在Application_End()中进行关闭  ,所以sched得为全局的变量。

            protected void Application_End(object sender, EventArgs e)
            {
                sched.Shutdown(true);
            }

        4、建一个DoWeather类用于执行你指定的计划(每天的几点几分进行发送天气预报到你的手机)

             记得引用Quartz的.dll 

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Web;
    using Quartz;
     
    namespace LJZCWeather
    {
        public class DoWeather : IJob
        {
            public void Execute(JobExecutionContext context)
            {
                DoIndex();
            }
            public void DoIndex()
            {
                //使用的是163服务器(因为我的邮箱是@163.com的 )
                string strSmtpServer = "smtp.163.com";
                //信息来自哪个邮箱(自己的邮箱)
                string StrFrom = "自己的邮箱@163.com";
                //自己邮箱的密码
                string strFromPass = "密码";
                //主题
                string strSubject = "田鑫制作(近三天)天气预报软件:";
                //要发送去哪里,自己注册的手机邮箱,添加数组:可以放多个邮箱(家人也可以享受这个功能)
                string[] strto = { "你的联通号码@wo.com.cn", "你的移动号码@139.com" };
                //发送的内容
                string content = null;
                string[] Weath = null;
                //我这里使用的缓存技术,因为免费的用户使用的话不能长时间的获取数据(人家的服务器受不了啊)!            
                if (HttpRuntime.Cache["We"] == null)
                {
                    //调用Web服务,得到你所需要的内容,我是济南的,所以CityCode是“937"
                    //找自己对应的城市,调用getRegionProvince ()获得省份之后再调用getSupportCityString()获得自己城市的Code
                    ServiceReference1.WeatherWSSoapClient s = new ServiceReference1.WeatherWSSoapClient("WeatherWSSoap");
                    Weath = s.getWeather("937", "");
                    HttpRuntime.Cache.Insert("We", Weath, null, DateTime.Now.AddHours(3), TimeSpan.Zero);
                }
                else
                {
                    Weath = (string[])HttpRuntime.Cache["We"];
                }
                if (Weath.Length > 1)
                {
                    for (int i = 0; i < Weath.Length; i++)
                    {
                        //今天的天气状况
                        string TodayWeather = Weath[7].ToString();
                        string TodayWenDU = Weath[8].ToString() + Weath[9].ToString();
                        //明天的天气状况
                        string NextWeather = Weath[12].ToString();
                        string NextWenDU = Weath[13].ToString() + Weath[14].ToString();
                        //后天的天气状况
                        string HoutianWeather = Weath[17].ToString();
                        string HoutianWenDU = Weath[18].ToString() + Weath[19].ToString();
                        //短信接收到的内容
                        content = "济南天气:" + TodayWeather + TodayWenDU + "," + "
    " + NextWeather + NextWenDU + "," + "
    " + HoutianWeather + HoutianWenDU;
                    }
                }
                for (int i = 0; i < strto.Length; i++)
                {
                    //调用SendSMTPEMail()进行发送邮箱(手机邮箱)
                    this.SendSMTPEMail(strSmtpServer, StrFrom, strFromPass, strto[i], strSubject, content);
                }
            }
            //发送邮箱方法
            private bool SendSMTPEMail(string strSmtpServer, string strFrom, string strFromPass, string strto, string strSubject, string strBody)
            {
                try
                {
                    System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient(strSmtpServer);
                    client.UseDefaultCredentials = false;
                    client.Credentials = new System.Net.NetworkCredential(strFrom, strFromPass);
                    client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
                    System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage(strFrom, strto, strSubject, strBody);
                    message.BodyEncoding = System.Text.Encoding.UTF8;
                    message.IsBodyHtml = true;
                    client.Send(message);
                    return true;
                }
                catch (Exception ex)
                {
                    string ms = ex.Message;
                    return false;
                }
            }
        }
    }
    

      

        5、还有一点别忘了,appSettings配置信息。

      <appSettings>    
        <add key="IndexStartHour" value="11"/>
        <add key="IndexStartMin" value="25"/>
      </appSettings>

        6、大功告成!自己试试,如果遇到问题请留言。如果真收到短信了:右下角“推荐”一个吧!

     

  • 相关阅读:
    人工智能实战2019第一次作业_李大
    300道四则运算题目
    build to win读后感
    C# WinForm(简易计算器示例)
    WPF关于Calendar的Style
    winform下实现Label在窗体中从右到左不断循环的动画效果
    WPF 选中datagrid列头中checkbox则全选对应整列checkbox
    Window下android 模拟器SD卡的使用方法
    Linux下在Android模拟器中使用SD 卡的操作步骤
    WPF之VLC流媒体播放
  • 原文地址:https://www.cnblogs.com/tianxinbest/p/3210320.html
Copyright © 2011-2022 走看看