6.17周六随写

class F {
            constructor() {

                // 获取新闻消息
                this.newsCb = null;    // 用户的回调
                this.aNews = [];    // 接口数据
                this.getNewsTimer = null;    // 获取新闻消息定时器
                this.intermissionShowNewsTimer = null;    // 轮播新闻消息定时器
                this.aNewsIndex = 0;    // 新闻索引
                this.option = {
                    getNewstime: 3,  // 单位h
                    intermissionShowNewsTime: 3000,  //单位 ms,
                    num: 5,    // 取几条数据
                    url: ‘https://news.xiaohulu.com/api.php?mod=js&bid=80‘
                };
            }

            /**
             * [getNewsInfo description]
             * @param  {[Function]} newsCb [回调, err, res2个参数, err是错误信息, res是结果]
             * @param  {[Object]} option [description]
             * /*f.getNewsInfo(function(err, res) {
                    console.log(res);
                }, {
                    num: 5,    // 取几条新闻轮播
                    getNewstime: 3,  // 单位h
                    intermissionShowNewsTime: 1000,  //单位 ms
                    url: ‘https://news.xiaohulu.com/api.php?mod=js&bid=80‘
                });

                setTimeout(()=>{
                    f.stop();
                }, 10000)
            */
            getNewsInfo(newsCb, option) {
                if (this._isFunction(newsCb)) this.newsCb = newsCb;
                this.option = Object.assign(this.option, option);
                let self = this,
                    url = this.option.url;
                let p = fetch(url).then((res)=> {
                    return res.text();
                }).then((res)=> {
                    self._getInfoFromStr(res);
                }).catch((err)=> {
                    self.newsCb(err);
                });

                return this;
            }

            stop() {
                clearInterval(this.getNewsTimer);
                clearInterval(this.intermissionShowNewsTimer);
                this.getNewsTimer = null;    // 获取新闻消息定时器
                this.intermissionShowNewsTimer = null;    // 轮播新闻消息定时器
            }

            _isFunction(fn) {
                return Object.prototype.toString.call(fn) === ‘[object Function]‘;
            }

            _getInfoFromStr(txt) {

                let patt1 = /<a([^>]*?)href=[‘"]([^‘"]*?)[‘"]([^>]*?)>(.*?)<\/a>/ig;
                let res = txt.match(patt1);
                let hrefArr = this._getHrefFromA(res);
                let TitleArr = this._getContFromTxt(txt);
                let result = [];
                hrefArr.forEach(function(item, index) {
                    let obj = {};
                    obj.href = item,
                    obj.title = TitleArr[index];
                    result.push(obj);
                });
                this.aNews = result;
                // 获取数据后就开启3小时再次获取数据
                this._startUpGetNews();
                this._startShowNews();
                // 先搞起数据
                ++ self.aNewsIndex;
                self.newsCb && self.newsCb(null, self._changeData());
            }

            // 返回一个title数组
            _getContFromTxt(txt) {
                let patt1 = /(?:[^_]+(?=\.html))|[^>]+(?=<\/a>)/g;
                let res = txt.match(patt1);
                return res;
            }

            // 返回一个href数组
            _getHrefFromA(arr) {
                let result = [];
                result = arr.map(function(a, index) {
                    a = a || "<a href=‘https://news.xiaohulu.com/portal.php?mod=view&aid=589‘ title=‘主播进阶篇-敢想敢做,做一个“敢”的主播‘ target=‘_blank‘>主播进阶篇-敢想敢做,做一个“敢”的主播</a>";
                    let href = "";
                    let hStart = "<a href=",
                        hEnd = " title=",
                        startIndex = a.indexOf(hStart),
                        entIndex = a.indexOf(hEnd);
                    if (startIndex !== -1 && entIndex != -1) {
                        href = a.substring(hStart.length + 1, entIndex - 1);
                    };
                    return href;
                });
                return result;
            }

            // 开启3小时获取一次新闻消息
            _startUpGetNews() {
                clearInterval(this.getNewsTimer);
                let h = this.option.getNewstime;
                let self = this;
                this.getNewsTimer = setInterval(()=>{
                    self.getInfo(‘‘, ‘‘);
                }, h*60*60*1000);
            }

            // 开启每几秒轮播一下新闻
            _startShowNews() {
                let self = this;
                clearInterval(this.intermissionShowNewsTimer);

                this.intermissionShowNewsTimer = setInterval(function() {
                    ++ self.aNewsIndex;
                    self.newsCb && self.newsCb(null, self._changeData());
                }, this.option.intermissionShowNewsTime);
            }

            // 换数据
            _changeData() {
                // let length = this.aNews.length - 1;
                let length = this.option.num - 1;
                if (this.aNewsIndex > length) {
                    this.aNewsIndex = 0;
                };
                return this.aNews[this.aNewsIndex];
            }
        } 

        let f = new F();
        f.getNewsInfo(function(err, res) {
            console.log(res);
        }, {
            getNewstime: 3,  // 单位h
            num: 2,
            intermissionShowNewsTime: 1000,  //单位 ms
            url: ‘https://news.xiaohulu.com/api.php?mod=js&bid=80‘
        });

        setTimeout(()=>{
            f.stop();
        }, 10000)
时间: 2024-10-27 04:30:07

6.17周六随写的相关文章

2016第17周六

最近两天空闲时间又翻看了一遍代码大全2,感觉里面很多东西讲的还是很不错的,虽然是很多年前写的,但里面还是有不少东西值得学习的,简单记录下这次翻阅个人印象最深的几部分. 1.代码大全虽然没有章节练习题,但作者几乎每章都给了核对表和要点总结. 2.用表驱动法代替多条件分支判断. 3.使用隐约来增强表达沟通效果. 4.代码大全主要围绕代码构建讲了构建决策,编写高质量,重构保证代码质量,系统考虑,编程工艺.

2017第17周六

晚上吃晚自做的饭后在客厅看电视,<跑男>消遣时间,算是放松,虽然是被导演剪辑过的,但他们也是把公众想看最能吸引人的部分选出来,给一些能来就不想选择的提供他们想要的. 昨天差点有失控发火了,最后还是忍住,感觉这不能解决问题,对双方都没好处,只是为别人的错误和无能惩罚自己.很多时候很多问题都是沟通信息传递效率低的问题,这在想让别人帮你做事的时候,一种好的解决方法就是尽可能把要做的事简化成可操作的步骤即可,让对方按步骤做就行.

写好函数的规范小结

<代码整洁之道>第三章的阅读小结. 写好函数: 1,短小!20行左右就是上限. 2,只做一件事!这是最重要的一点.要判断函数是否只做了一件事的方法就是看能否再拆出来一个函数. 3,每个函数一个抽象层级.自顶向下读代码:向下原则.每个函数引出下一个函数. 4,switch语句应该埋在抽象工厂底下.而面对不同类型该做不同操作的功能用多态来实现. 5,使用描述性的名称.长而具有描述性的名称最佳.命名方式(风格)应该保持一致 6,函数参数:最佳是零参数,其次是单参数,再次是二,应避免三参数及以上. 7

写你的简历应该注意什么

总结 在这里我把精益技术简历的47条原则整理在一起,以便阅读整理: 版式 原则1:使用对齐 原则2:不必使用居中 原则3:谨慎使用粗体 原则4:避免不必要的折行 原则5:使用制表符辅助对齐 个人信息 原则6:不要使用不必要的条目名称 原则7:使用分隔符增强电话号码的可读性 原则8:使用可以点击的链接 原则9:不要使用照片 原则10:不要写无关个人信息 原则11:使用客观事实而非主观描述 原则12:考虑提供他人的评价 原则13:不必写求职目标 技术能力 原则14:不要堆砌技术名词 原则15:对技术

python3 文件读入写出小结

Python3 各种文件格式的转换: 1 import json 2 import pymysql 3 from datetime import datetime 4 from xlrd import xldate_as_tuple 5 import xlrd 6 import xlwt 7 8 9 # 读CSV 10 def readCSV(): 11 ls = [] 12 with open('../ls/textfile/price2016.csv', 'r', encoding='utf

PSP0表格

一 项目计划日志 周活动总结表 姓名:陆宇                                                                         日期:3.14 日期       任务 听课 编写程序 阅读课本 准备考试 日总计 周日 周一 周二 300 80 60 440 周三 100 90 60 250 周四 200 60 50 310 周五 200 120 50 370 周六 90 90 周总结 800 350 210 1370 二 时间记录日志

白帽生活

2016.12.16    送小孩回老房子 一觉醒来一点了,我和小孩还真能睡啊! 中午老婆做做的虾仁抓饭给我们吃,还不错. 饭后给顺顺洗澡,送顺顺回老房子. 晚上回来因为做饭的问题和老婆吵架,真生气. 晚上学习-- 2016.12.17    周六    打扫卫生 翻录 逛街 上午起来 先打开电脑翻录 i春秋视频 办公室2两台 家里 联动! 把家里卫生给打扫了,把顺顺乱塞的玩具都翻出来了,有成就. 下午 小高去他哥家送东西 完后我们一起逛街 吃拌面. 本文出自 "12377962" 博

ACM比赛经验

ACM比赛经验: 推荐此篇文章打印,与模板放在一起. 1. 比赛中评测会有些慢,偶尔还会碰到隔10分钟以上才返回结果的情况,这段时间不能等结果,必须开工其他题,如果WA,两道题同时做.交完每道题都要先打印. 2. 比赛时发的饭不是让你当时就吃的,那是给你赛后吃的.基本上比赛中前几名的队都没人吃,除非领先很多. 3. 很多选手,尤其是第一次参加比赛的,到一个新环境,全当旅游了,参观的参观,找同学的找同学,玩玩乐乐就把正事抛到脑后了,结果比赛自然没什么好成绩,这样的例子太多了.所以到参赛地后要时刻不

iOS--上传AppStore时遇到的10个大坑

2015.9.11更新 摘自:http://zhuanlan.zhihu.com/100000PM/20010725 相信大家一定非常「深恶痛疾」AppStore的一系列产品上架规则.每次产品上架,一定要折腾很久,让人蛋疼.所以特此发起本期沙龙,为大家带来一些经验. 闫国荣:以下是现在能记忆起,遇到的问题.大家对此有不清楚的地方可以提出来,我详细介绍下. 内容含敏感话题或对苹果不友好的信息(如苹果婊) 使用了友盟的统计SDK,获取了IDFA但是上传填写无广告 采用友盟IDFA的sdk,并用友盟的