前言

上一小节说道,点击版面图片区域,可获取到映射的文章链接。本节将着重实现对文章html的解析,正则匹配走起~
通过对文章html结构的比对,调查发现,文章详情从class="text_c"的地方开,所以解析文章的函数如下。

代码实现

在utils目录下新建articleExtract.js

var articleObj = {};
var articleExtract = function (html, newsHref, pagenum) {articleObj["newshref"] = newsHref; //该文章的链接articleObj["pagenum"] = pagenum; //该文章所在版面编号var html = html.replace(/<br\/>/ig, "\r\n");// console.log(articleHtml);/*正则*///文章部分var titleReg = /<div[^>]+class="text_c"[^>]*>[\s\S]+?<\/div>/i; //会匹配到class=lai的结束</div>为止,所以只能用标题部分的//来源部分var sourceReg = /<div[^>]+class="lai"[^>]*>([\s\S]+?)<\/div>/i;//正文图片var imgReg = /<table[^>]+class="pci_c"[^>]*>[\s\S]+?<\/table>/ig;//正文文章var contentReg = /<!--enpcontent--><p>[\s\S]*?<\/p><!--\/enpcontent-->/i;//中间变量// var articleHtml = articleMatch[0];//存放匹配的文章部分的htmlvar titleHtml = "";var imgHtmlArray = ""; //存放匹配的正文图片部分的htmlvar contentHtml = ""; //存放匹配的正文文章部分的html//正则匹配结果var titleMatch = html.match(titleReg); //存放匹配的文章的结果var sourceMatch = html.match(sourceReg); //存放的标题部分的htmlvar imgMatch = html.match(imgReg); //存放匹配的正文图片部分的htmlvar contentMatch = html.match(contentReg); //存放匹配的正文文章部分的html//结果变量var h1 = ""; //主标题var h2 = ""; //副标题var h3 = ""; //引标题var h4 = ""; //不知道代表啥标题var source = ""; //来源及日期var imgArray = []; //图片及图片说明var contentArray = []; //文章每段的内容//给中间变量赋值titleMatch && (titleHtml = titleMatch[0]);sourceMatch && (source = sourceMatch[1].replace(/\s+/g, ''));imgMatch && (imgHtmlArray = imgMatch);contentMatch && (contentHtml = contentMatch[0]);/***********图片***********************/if (imgHtmlArray) {var i;var imgSrc = ''var imgDesc = ''for (i = 0; i < imgHtmlArray.length; i++) {imgSrc = imgMatch[i].match(/<img src="(.*?)"[^]*>/i)[1].replace("../../../", 'http://paper.people.com.cn/rmrb/');imgDesc = imgMatch[i].match(/<p>([\s\S]*?)<\/P>/i)[1]imgArray.push({imgSrc: imgSrc,imgDesc: imgDesc})}console.log("图片匹配", imgArray);}/*************标题*********************/h1 = titleHtml.match(/<h1>([\s\S]+?)<\/h1>/i)[1]; //标题肯定存在,所以用 +h2 = titleHtml.match(/<h2>([\s\S]*?)<\/h2>/i)[1] //副标题不一定存在,所以用 *h3 = titleHtml.match(/<h3>([\s\S]*?)<\/h3>/i)[1] //引标题不一定存在,所以用 *h4 = titleHtml.match(/<h4>([\s\S]*?)<\/h4>/i)[1] //h4不知道是啥标题,所以用 *console.log("标题 ", h1);console.log("副标题 ", h2);console.log("引标题 ", h3);console.log("不知道是啥的h4 ", h4);console.log("来源", source);console.log("图片列表", imgHtmlArray);console.log("文章段落列表", contentHtml);/*************正文*********************/if (contentHtml) {var contents = contentHtml.match(/<p>.*?<\/p>/ig);var p = {};var text = "";var strong = "strong";//某些新闻没有正文内容(比如广告,只有一张图片),因此需要判断一下if (contents) {for (i = 0; i < contents.length; i++) {var currentP = contents[i];text = currentP.match(/<p>(.*?)<\/p>/i)[1].replace(/(&nbsp;)+/g, '\t');if ((text.indexOf('STRONG') != -1) || (text.indexOf('FONT') != -1)) {text = text.match(/<strong>(.*?)<\/strong>/i)[1].replace(/(&nbsp;)+/g, '\t');contentArray.push({ "text": text, "strong": strong });} else {contentArray.push({ "text": text });}}}}articleObj["titleObj"] = {title: h1,sub: h2,quote: h3,unknown: h4,source: source}articleObj["imgArray"] = imgArrayarticleObj['contentArray'] = contentArrayreturn articleObj
}module.exports = articleExtract;

修改pages/article/article.js
添加articleExtract函数

var app = getApp();
//article url
var todayDateArray = require('../../utils/util.js').todayDateArray;
var articleExtract = require('../../utils/articleExtract.js')
var baseUri = "http://paper.people.com.cn/rmrb/html"
//拼接url的变量
//...
Page({/*** 页面的初始数据*/data: {articleObj:{}},//...onShow: function () {// ...},//请求文章getArticle: function (url, newsHref, pagenum) {var self = this;var reqObj = { url: url };wx.request({url: url,success:function(res){var html = res.data;//解析文章html,获取文章标题、内容等相关信息var tmpArticleObj = articleExtract(html, newsHref, pagenum);console.log("文章解析结果", tmpArticleObj )self.setData({articleObj: tmpArticleObj,});}});},
})

文章解析出来了,下一步就是把他显示出来

显示文章
在article.wxml,把内容简单的显示出来

<!--pages/article/article.wxml-->
<view class="page-contain"><view class="article-contain"><view class="article-header"><view wx:if="{{articleObj.titleObj.introTitle}}" class="header-introtitle">{{articleObj.titleObj.introTitle}}</view><view wx:if="{{articleObj.titleObj.title}}" class="header-title">{{articleObj.titleObj.title}}</view><view wx:if="{{articleObj.titleObj.subTitle}}" class="header-subTitle">{{articleObj.titleObj.subTitle}}</view><view wx:if="{{articleObj.titleObj.authors}}" class="header-authors">{{articleObj.titleObj.authors}}</view></view><view class="article-attachment" wx:if="{{articleObj.imgArray}}"><view class="attachment-img" wx:for="{{articleObj.imgArray}}"><image src="{{item.imgSrc}}" mode='widthFix'></image><view class="attachment-alt" wx:if="{{item.imgAlt}}">{{item.imgAlt}}</view></view></view><view class="article-content" wx:if="{{articleObj.contentArray}}"><view class='content-p {{item.strong}}' wx:for="{{articleObj.contentArray}}"><text decode='true'>{{item.text}}</text></view></view></view>
</view>

至此,文章详情算是显示出来了,下一步,继续完善

微信小程序实践_4显示新闻(2)相关推荐

  1. 录音、上传、播放音频微信小程序实践

    文章目录 录音.上传.播放音频微信小程序实践 实践分析 依赖接口 录音 上传 播放 Page 事件 参考 录音.上传.播放音频微信小程序实践 最近上线了一款智能外呼机器人产品,需要开发一款录音.上传. ...

  2. 微信小程序云开发之新闻博客社区项目debug后的项目代码

    大家好,我是csdn的博主:lqj_本人 这是我的个人博客主页:lqj_本人的博客_CSDN博客-微信小程序,html特效,vue2基础领域博主 本次文章主要时为我最近在哔哩哔哩上的新发布的视频做一个 ...

  3. 微信小程序点播插件_微信小程序 wxParse插件显示视频问题

    修改wxParse/html2json.js 文件 ,在 html2json(html, bindName)方法里 var node = { node: 'element', tag: tag, }; ...

  4. 微信小程序运用云函数调用新闻类API

    微信小程序运用云函数调用新闻类API 微信小程序运用云函数调用新闻类API 新闻列表的编写 云函数的编写 JS方法 wxml页面编写 wxss样式 最终效果截图 微信小程序运用云函数调用新闻类API ...

  5. 电脑版微信小程序全屏显示方法,手机横屏方法。

    电脑版微信小程序全屏显示方法: 在app.json中加入:"resizable": true 注意要与"pages"同级,网上有许多错误方法! 手机横屏方法: ...

  6. 第21课 微信小程序视频标签显示弹幕

    第21课 微信小程序视频标签显示弹幕 效果图如下: wxml代码如下: <videosrc="http://wxsnsdy.tc.qq.com/105/20210/snsdyvideo ...

  7. 微信小程序(模仿头条新闻)

    微信小程序(模仿头条新闻) 项目目录结构 说明 本例子调用聚合数据,需要自己申请API,并将聚合数据的域名添加到微信公众平台上小程序后台的服务器域名之中,微信小程序暂时不支持外部链接. 例子说明 ma ...

  8. uni-app分割线微信小程序端不显示

    uni-app分割线微信小程序端不显示 文章目录 uni-app分割线微信小程序端不显示 问题描述 解决方案 问题描述 做项目时,遇到一个问题: 自定义的分割线组件在web端能显示,在微信小程序端却不 ...

  9. 关于微信小程序图片不显示的问题解决方案

    关于微信小程序图片不显示的问题解决方案 经过查阅资料发现如下文档导致图片不显示: 1.本地图片是用image加载的:src="../../../images/ic_header.jpg&qu ...

最新文章

  1. ckeditor深入挖掘吃透
  2. Unity3D的一些坑
  3. 图灵奖获得者、信息安全常青树Adi Shamir:从密码学到AI对抗性样本研究|智源大会嘉宾风采...
  4. 虚拟桌面分屏_桌面中的灭霸 三星C49HG90 32:9超带鱼屏体验
  5. iOS学习笔记-地图MapKit入门
  6. 运维基础--用户的权限管理
  7. 局域网中搜计算机无法访问,怎么找不到共享电脑,手把手教你局域网中共享电脑找不到怎么办...
  8. LeetCode 1004. 最大连续1的个数 III(双指针+滑动窗口)
  9. 魔兽世界服务器Trinitycore分析二:auth server的main函数
  10. 进阶之路:Java 日志框架全画传(中)
  11. 调试bootmgrwinload vistawin7 x86x64
  12. 1.13 08特殊日历计算
  13. android游戏和ios游戏哪个多,从2019年3月开始的5款最佳Android和iOS游戏
  14. Andriod Studio 安装过程
  15. 多御浏览器安卓版有哪些地方值得下载使用?
  16. 霍尼韦尔Granit 1990iSR工业二维码扫描枪
  17. [sicily]1484. 守望者的逃离
  18. php 单笔转账到支付宝账户,支付宝公钥证书实现版本
  19. 数据科学和人工智能技术笔记 十四、K 最近邻
  20. labelme jason文件批处理

热门文章

  1. 巩固一下C语言中的指针
  2. Python模块学习:threading 多线程控制和处理
  3. Rundeck crontab格式
  4. java获取昨天日期
  5. 关于遮罩层无效的记录
  6. 顺利通过scjp认证考试
  7. WordPress漏洞扫描工具WPScan
  8. linux大文件拷贝,Linux如何提高大文件的拷贝效率
  9. ThinkPHP V5.0.5漏洞_漏洞考古:thiknphp5 代码执行漏洞
  10. linux中yum安装splunk,Yum源搭建