做一個給自己手機免費發送“天氣預報”信息的軟件


              實現一個以下截圖這樣的功能!沒錯,就是你手機可以收到“免費”的天氣預報短信!

                                            

一、在做之前必須了解以下四個功能:

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 + "," + "\r\n" + NextWeather + NextWenDU + "," + "\r\n" + 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、大功告成!自己試試,如果遇到問題請留言。如果真收到短信了:右下角“推薦”一個吧!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM