如何利用爬虫和小程序模板消息实现早报提醒

网络爬虫

当今社会通讯发达,大量资讯信息汇集,如何精准有效的获取最有价值的信息,也成为一项令人苦恼的事情。由此引发出通过大数据算法提取出最热点的信息的应用。百味博客致力于软件研发管理、互联网科技资讯、企业管理等领域研究学习。应博主及广大网友需求,特定制了“百味博客科技早报提醒”的功能。
百味博客使用的是经典的PHP程序 wordpress. 在开发早报功能前,需先安装wordpress插件“wp-json”, 该插件提供了rest的接口形式,以便直接对接早报功能。

一、抓取新闻数据

//待补充

二、分析热点、提炼

//待补充

三、WordPress存储

//待补充

四、小程序展示

//待补充

五、对接小程序模板消息

//待补充

六、定时发送早报提醒

//待补充

最终演示效果可以扫描下面二维码进入早报查看,或者在微信小程序栏搜索“百味博客”进入即可。

微信订阅号

某聚合支付平台行业解决方案

聚合支付

第1章 关于本解决方案

本解决方案涵盖项目整个流程需求、设计、开发、问题售后、扩展以及安全性措施等。

第2章 概述

2.1 项目背景

支付行业的高速发展,面对国家对第三方平台的要求日益提高,聚合支付平台应运而生,作为第三方支付平台服务的拓展,介于第三方支付机构和商户之间。商家出于时间成本、精力上的考虑,不再需要一家家去对接支付宝、财付通、百度钱包等各个支付通道,而是直接由聚合支付服务商通过统一的开发系统实现一次性对接,同时支持市面上主流的多家支付通道、多个支付场景、多种支付方式。形成了自己的特色,软件产品服务于国内百余家支付公司。在为客户创造价值的同时,产品本身也获得了丰富与完善。公司战略是立足于软件研发,通过服务延伸软件价值,潜心深耕支付软件产品,与客户创建互利共赢是我们的愿景。

2.2 项目设计原则

项目以安全性、稳定性、健壮性为初衷进行设计。

第3章 需求描述及分析

3.1 概述

3.1.1 需求分析组成

业务需求、接口需求、安全需求;系统涉众的分析、总体功能需求、技术架构需求。

3.1.2 业务原理和逻辑

国付聚合支付系统,可以将市面上主流的支付渠道整合为一个付款渠道接口,发放给下级商户用户使用。商户(各类型站点或者线下商店以及各种付款场景使用者)只向平台申请一次就可以接入全部的主流支付 ,不用再去一个个的申请,节约站点支付开发的时间,解决收款混乱以及网站支付问题。

商户根据平台接口文档接入平台,平台进行审核/下号,平台之间产生资金流向并生成订单流水,支付担保平台提交给上游接口,等待上游接口返回订单状态;根据上游接口返回的订单状态,支付担保平台内部做具体业务逻辑处理(数据安全校验MD5值比对、非法值过滤、单号过滤等),将处理后的结果中转给下级商户平台。

3.1.3 接口需求

虚拟接口包括:业务逻辑接口、数据对象接口、模型抽象接口、全局接口等。

实体接口包括:网银支付接口、手机快捷接口、支付宝、财付通、微信等。

3.1.4 基于Java框架的安全性

Java框架提供了一个强健的安全系统,该系统能够限制代码在严格约束的、管理员定义的安全上下文中运行。

3.2 项目分析

3.3 应用领域与使用对象

主要用于线上收款,一些游戏类站点或者一些商城,如果需要各种支付方式(比如微信支付,支付宝支付,银联快捷支付)就必须分别向这些支付渠道商申请账号,不仅耗时耗力而且不便于统一维护和财务统计。通过国付API聚合支付系统对接后,只需要向平台申请一次支付,就可以同时拥有多种支付通道,而且这些支付通道不受上级通道限制。可以解决一些行业的支付问题,是一种创新的支付方式。

3.3.1 技术架构

使用Java三层体系架构:

表示层:主要使用Struts技术,逻辑层强大和完善,无论表现层如何定义和更改,各司其职,逻辑层都能完善地提供服务。

业务逻辑层:主要针对具体问题操作,也是对数据Data层的操作,对数据业务进行逻辑处理,实现积木拼接式搭建。

抽象接口层:对数据访问层抽象出接口,业务逻辑层经过抽象接口层去调用,保证调用分离,扩展分离。

数据访问层:主要对原始数据(数据库或XML、文本文件等存放数据形式)进行加工和提取,为业务逻辑层提供数据服务。

工厂模式(简单工厂、抽象工厂)。

设计模式:单例模式、适配器模式、模版方法模式、职责链模式等。

3.4 业务模式

 

第4章 总体设计

4.1 总体设计目标

高并发、大数据承载量、安全、稳定为最终实现目标。

4.2 总体设计原则

依据七大原则:开-闭原则(OCP)、里氏替换原则(LSP)、依赖倒转原则(DIP)、接口隔离原则(ISP)、迪米法特原则(LKP)、单一职责原则(SRP)、合成/复用聚合原则(CARP)。

4.2.1 服务器

系统采用分布式的部署方案,所以对服务器的要求比较高。并发能支撑到每秒500笔交易请求。服务器的搭配一般有3个方案:

方案一:

1台8核32G的服务器,带宽选10M。

方案二:

2台4核16G的服务器,带宽选5M。

方案三:

4台服务器。一台作为数据库服务器,4H8G,内网传输;两台作为应用服务器,4H16G,用于处理后台、交易和清算数据;一台作为查询服务器,4H8G,专门用来处理下游的查询请求。

4.3 平台选择

WEB服务器操作系统环境:CentOS 6.8 Linux 64位

WEB服务器数据库环境:MySQL

第5章 详细设计

5.1 技术架构设计

5.1.1 设计原则

可靠性、健壮性、可修改性、便捷性、可测试性、效率性、标准化性、先进性、可扩展性。

5.2 功能设计 

5.3 安全设计

信息内部传输采用MD5不可逆加密算法,涉及到金额、银行卡、结算等敏感信息系统会自动过滤恶意请求,保证用户资金安全。

5.3.1 界面设计原则

操作简单,布局舒适,颜色美观,效果出色。

5.3.2 易用性设计

用最简单的操作达成最复杂的需求,一站式服务的用户体验。

5.3.3 项目测试方案

5.3.3.1 测试阶段

基本单元测试,压力测试,性能测试必不可少。

第7章 项目预算

现阶段国付聚合支付平台的项目费用提供两套方案:

方案一:我司收取系统的费用,分三阶段付款。具体方案联系销售人员。

方案二:我司免费提供系统进行使用。前期收取一定的系统搭建费用;后期按照交易量比例进行收取。

 

 

欢迎留言联系

API接口防恶意调用盗链或攻击方案

Web前后分离开发,防止API接口被恶意调用或攻击。度娘分享了很多种应对场景的方法。总结得比较好的见文章《前后端分离,如何防止API接口被恶意调用或攻击》、《如何防止别人恶意调用API接口》。
网络安全
本文选用了另外一种常见的配置下载防盗链机制的方法,使用该方式前请仔细阅读《彻底搞清referrer和origin》后,理解应用场景。具体操作记录如下:

  1. 增加Nginx端配置,使其能够获取到Http头信息Origin、Referer。
    proxy_set_header Origin $http_origin;
    proxy_set_header Referer $http_referer;
    
  2. 后端Java来源验证
    public static boolean originAuth(HttpServletRequest request) {
            String referer = request.getHeader("Referer");
            String origin = request.getHeader("Origin");
            String sitePart = request.getServerName();
            if(referer == null || origin == null) {
                return false;
            }
            if (referer != null && !referer.contains(sitePart)) {
                return false;
            }
            if (origin != null && !origin.contains(sitePart)) {
                return false;
            }
            return true;
        }
    

因Http协议是无状态的,针对上面的方法也不是完全无破解方案,只是提高了攻击者的难度。在这条接口网络安全的道路上还得持续的斗智斗勇。

【刷爆微信朋友圈】短视频营销微信传播分享系统

什么是短视频裂变

视频裂变也叫视频强制裂变,是一种强制分享浏览广告吸粉的模式。首先挑选一个极有吸引力的视频,把您的产品和联系方式(微信,QQ)以H5落地页的形式插入到视频底部,然后由大量的转发人员曝光到朋友圈,观看这个视频到高潮时,会强制分享到5个群或者朋友圈才能继续观看!

短视频裂变演示

短视频裂变流程

①做一条网页链接,链接分享出去可以显示标题和图片(最好标题可以自动识别用户手机的地址)
②用户点进去之后可以点击视频可以播放
③视频播放到高潮的时,提示分享到三个微信群和朋友圈才能继续看(一般显示网速太慢,分享了可以视频加速)
④用户分享到微信群和朋友圈之后可以,返回继续播放视频
⑤视频播放完之后,立刻自动弹出广告落地页

短视频裂变注意事项

裂变的链接无论是视频播放页面链接还是广告文案页面链接都容易被封,所以一般需要做跳转。推广的链接(第一链接)自动跳到落地链接(第二链接)。只要封第一链接就行了,一般第一链接买抗封性比较好的域名(比如阿里云备案的域名)。第二链接短时间流量大了之后被封可能性非常大,所以第二链接一般多准备几个域名(最好做域名池)。

短视频营销系统架构设计

考虑并发十几万情况,服务器需要集群部署形式.

  • 服务器架构

服务器使用百度云/阿里云等在线云服务器。保障其稳定和扩展性。服务器架构如下:

  • 数据架构
    数据结构更经过精心的设计,从字段到表的分配,索引的构建,都经过缜密的考虑,能最大限度的发挥 MySQL快速数据库的效能。
    短视频架构网络图

短视频系统服务器配置

以下服务器配置预估建立在并发十几万的基础上。实际运行操作中依据情况进行拓展部署

项目 数量 说明
负载均衡服务器Nginx 1 负载集群服务和任务调度分发
H5服务端集群 3 考虑大访问量使用集群节点
管理后台应用 1 管理后台为内部人员使用,可使用单台即可
缓存服务器Redis 3 为提升H5响应效率和性能增加缓存服务器
数据存储服务MySql 1 数据核心存储持久化
工信部认证域名池 N N/A

系统演示

该项目为Java项目,可联系博主 索要 演示地址 或者 系统源码

微信:jiaivr

 

基于Nginx+Lua模块校验的Token认证

nginxlua

前言

在使用Nginx实现访问时的Token验证,将会使用到一个基于 Nginx 与 Lua 模块来实现Token的验证。在请求Nginx配置的地址时,将使用Headers传递Token参数,并在Nginx端做网关校验。

环境说明

有两种方式可选择,推荐使用OpenResty简单快捷:

1)使用nginx的lua模块配置环境

  • LuaJIT (下载地址:http://luajit.org/download.html)
  • lua-nginx-module (下载地址:https://github.com/openresty/lua-nginx-module/releases)
  • nginx (下载地址:http://nginx.org/en/download.html)

2)封装过后的高性能 Web 平台 OpenResty

OpenResty 其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

其官网做了更多详细的简介描述:

OpenResty 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。

OpenResty 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。

以上信息参考OpenResty官方中文网站 http://openresty.org/cn/

软件安装

Nginx及模块安装可参阅官方的安装介绍,再此不再重述。
附赠Centos7的简单安装脚本

yum install -y yum-utils
yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
yum install -y openresty

另Centos7 OpenResty Dockerfile见GitHub: https://github.com/bywei/Centos_OpenResty_Dockerfile

Nginx配置

Nginx的Token校验实现在nginx.conf中配置相应的Lua脚本,编辑Nginx配置文件即可。

vi nginx/conf/nginx.conf

完整的nginx.conf配置文件演示如下,在实际业务场景中通过扩展Lua脚本功能逻辑来实现即可。比如可通过增加Redis来实现Nginx Token权限校验Api网关,具体通过Redis实现权限校验网关,有兴趣的网友可在文章下方评论留言,将附赠Lua实现源码。

#user  nobody;
worker_processes  1;
 
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
 
#pid        logs/nginx.pid;
 
 
events {
    worker_connections  1024;
}
 
 
http {
    include       mime.types;
    default_type  application/octet-stream;
 
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
 
    access_log  logs/access.log  main;
 
    sendfile        on;
    #tcp_nopush     on;
 
    #keepalive_timeout  0;
    keepalive_timeout  65;
 
    #gzip  on;
 
    server {
        listen       80;
        server_name  localhost;
 
        #charset koi8-r;
 
        access_log  logs/access.log;
 
        location / {
            autoindex on;
                autoindex_exact_size off;
                autoindex_localtime on;
                root   /fileroot;
 
            index  index.html index.htm;
            access_by_lua '
              --获取请求的Header参数列表
              local args   = ngx.req.get_headers();
              --提取Header中的token参数,该参数在请求地址时必须加上
              local token1 = args["token"];
              --配置验证的token,此处可增加Redis做存储,然后提取
              local token2 = "f7781231c6f2ea3161sd244453580f73a";
              --token不一致则相应403无权限访问该地址
              if token1 ~= token2 then
                  ngx.exit(ngx.HTTP_FORBIDDEN);
              end
          ';
        }
 
        #通过该地址可测试Lua脚本是否安装成功
        location /lua {
            default_type 'text/html';
            content_by_lua 'ngx.say("hello world");';
        }
 
        #error_page  404              /404.html;
  }
}