没有服务器利用git实现自己的程序远程更新、使用时间、公告、白名单、黑名单等

这两个api速度都非常的快。写软件必备。
淘宝:http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp
苏宁:http://quan.suning.com/getSysTime.do

https://cdn.lanluo.cn/jue5

http://api.k780.com:88/?app=life.time&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json

http://api.nowapi.com:88/?app=life.time&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json

有时候我们个人写软件的时候,自己没有服务器,又想要实现自己软件的远程更新,或者做一些公告信息推送,使用时间限制,白名单,黑名单等这些功能,当然实现的方法有很多,一般都是把信息保存在一个网址内,然后利用爬虫的方式去解决这个问题,今天我也分享一种方法,利用github、gitee等这样的网站实现,这类网站是可以生成网页服务的,其中的md文件是可以用网络直接访问的,就像在本地读一个txt文本一样,只是这个文本放在了git上,那就用网络的方式把信息读下来就行了。


在国内推荐使用gitee(码云),我就用这个演示,因为我对C#比较熟悉,下面我就用C#实现一个软件使用时间限制做法,语言不重要,重要的是方法。

源码: 

using System;
using System.IO;
using System.Net;
using System.Text;
 
namespace Git_Test
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                //利用md文件
                //例如我的md文件内容:VersionUpdata版本更新,TimeLimit2021-10-12 12:12:13,Notice公告,OtherMessages其它消息
                //这里以时间限制为例
                //正式使用的时候用加密传输字符,这里只是提供一个思路
                string url = "https://keyestore.gitee.io/VerifyTest.md";
                string data = GetInfo(url);
 
                Console.WriteLine(data);
                Console.WriteLine("\r\n");
 
                //信息使用 , 逗号分隔
                string[] dataArr = data.Split(',');
                for (int i = 0; i < dataArr.Length; i++)
                {
                    string tempData = null;
 
                    //版本更新
                    if (dataArr[i].Contains("VersionUpdata"))
                    {
                        //替换掉VersionUpdata,只留版本更新
                        tempData = dataArr[i].Replace("VersionUpdata", "");
                        Console.WriteLine(tempData);
                        Console.WriteLine("\r\n");
                    }
 
                    //使用时间限制
                    if (dataArr[i].Contains("TimeLimit"))
                    {
                        //替换掉TimeLimit,只留2021-10-12 12:12:13                        
                        tempData = dataArr[i].Replace("TimeLimit", "");
                        Console.WriteLine(tempData);
 
                        //这里用网络时间限制程序的运行
                        string getSysTime = "http://quan.suning.com/getSysTime.do";
 
                        //这里返回的是json格式,为了方便,下面直接截取想要的字符串
                        string timeLimit = GetInfo(getSysTime);
                        Console.WriteLine(timeLimit);
 
                        //提取服务器时间和md里自己的时间,计算时间差,从而限制程序的运行
                        //截取的字符就是当前时间,格式:2020-05-13 23:23:23
                        DateTime curTime = Convert.ToDateTime(timeLimit.Split(',')[0].Split('"')[3]); 
                        DateTime setTime = Convert.ToDateTime(tempData);
                        TimeSpan curTS = new TimeSpan(curTime.Ticks);
                        TimeSpan setTS = new TimeSpan(setTime.Ticks);
                        int tsSubDay = setTS.Subtract(curTS).Days;
                        if (setTS.Subtract(curTS).TotalSeconds > 0)
                        {
                            Console.WriteLine("程序还能使用" + tsSubDay + "天");
                        }
                        else
                        {
                            Console.WriteLine("时间到期,程序停止使用");
                            Environment.Exit(0); //程序直接退出
                        }
 
                        Console.WriteLine("\r\n");
                    }
 
                    //公告信息
                    if (dataArr[i].Contains("Notice"))
                    { //替换掉Notice,只留公告
                        tempData = dataArr[i].Replace("Notice", "");
                        Console.WriteLine(tempData);
                        Console.WriteLine("\r\n");
                    }
 
                    //其它信息
                    if (dataArr[i].Contains("OtherMessages"))
                    {
                        //替换掉OtherMessages,只留其它消息
                        tempData = dataArr[i].Replace("OtherMessages", "");
                        Console.WriteLine(tempData);
                        Console.WriteLine("\r\n");
                    }
 
                }
            }catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
                Environment.Exit(0); //程序异常,直接退出
            }
 
 
            Console.ReadKey();
        }
 
        static string GetInfo(string url)
        {
            try
            {
                WebClient webClient = new WebClient();
                Stream stream = webClient.OpenRead(url);
                MemoryStream ms = new MemoryStream();
                byte[] bArr = new byte[1024];
                int num = 0;
                while ((num = stream.Read(bArr, 0, bArr.Length)) > 0)
                {
                    ms.Write(bArr, 0, num);
                }
 
                return Encoding.UTF8.GetString(ms.ToArray());
            }catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
                Environment.Exit(0);  //获取失败,直接退出程序,无条件的
                return null;
            }
        }
    }
}

 

    /// <summary>  
    /// C#时间格式转换为时间戳(互转)  
    /// 时间戳定义为从格林威治时间 1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。   
    /// </summary>  
    /// <summary>  
    /// 获取时间戳Timestamp    
    /// </summary>  
    /// <param name="dt"></param>  
    /// <returns></returns>  
    private int GetTimeStamp(DateTime dt)  
    {  
        DateTime dateStart = new DateTime(1970, 1, 1, 8, 0, 0);  
        int timeStamp = Convert.ToInt32((dt - dateStart).TotalSeconds);  
        return timeStamp;  
    }  
  
    /// <summary>  
    /// 时间戳Timestamp转换成日期  
    /// </summary>  
    /// <param name="timeStamp"></param>  
    /// <returns></returns>  
    private DateTime GetDateTime(int timeStamp)  
    {  
        DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));  
        long lTime = ((long)timeStamp * 10000000);  
        TimeSpan toNow = new TimeSpan(lTime);  
        DateTime targetDt = dtStart.Add(toNow);  
        return targetDt;  
    }  
  
    /// <summary>  
    /// 时间戳Timestamp转换成日期  
    /// </summary>  
    /// <param name="timeStamp"></param>  
    /// <returns></returns>  
    private DateTime GetDateTime(string timeStamp)  
    {  
        DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));  
        long lTime = long.Parse(timeStamp + "0000000");  
        TimeSpan toNow = new TimeSpan(lTime);  
        DateTime targetDt = dtStart.Add(toNow);  
        return dtStart.Add(toNow);  
    } 

 

 

PS:怎样利用github、gitee等实现网页服务,请自行百度、谷歌,这里不讨论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值