为了方便大家能及时跟进本次 新型冠状病毒2019-nCoV
疫情的进展情况,计划在小程序上上线一个基于丁香园疫情页面的推送服务,服务调取函数如下,供大家参考!
<?php
function get_nCoV_news()
{
$reg = '/<script id="getTimelineService">.+?window.getTimelineService\s=\s({.+?)}catch\(e\){}<\/script>/im';
if( preg_match( $reg , file_get_contents( 'https://3g.dxy.cn/newh5/view/pneumonia' ) , $out ) )
{
return @json_decode( $out[1] , 1);
}
return false;
}
function get_nCoV_province()
{
$reg = '/<script id="getListByCountryTypeService1">.+?window.getListByCountryTypeService1\s=\s(\[.+?])}catch\(e\){}<\/script>/im';
if( preg_match( $reg , file_get_contents( 'https://3g.dxy.cn/newh5/view/pneumonia' ) , $out ) )
{
return @json_decode( $out[1] , 1);
}
return false;
}
?>
此外可以尝试使用datav等工具联动数据库和api取出数据予以可视化呈现:每个组件都有一个render方法
,会接收 data 数据
,如果对组件进行绘制,可以作为数据更新使用 。其中代码所放位置必须在 module.exports = (stage) => {}
方法里面,varCtrName.render = (data) => {}//data
为对应组件配置的API里返回的json数据, varCtrName(获取的组件).emit('global_var', 'bm_name', val);
通过hook.js给回调参数赋值,这样在screenIDE组件的数据–数据源类型里面就可以使用 :bm_name
作为参数,从而在hook.js给回调参数赋值。
控制屏与展示屏之间由Socket通信。 所有屏打开时会向Socket服务器注册。 控制屏发消息给Socket服务器,然后Socket服务器会广播给所有向自己注册的屏。
//动态插入JS文件
function getJs(url){
var dom = document.createElement('script');//建立一个script元素
dom.type = 'text/javascript';//写入属性
dom.async = 'true';
dom.src = url;
document.getElementsByTagName('head')[0].appendChild(dom);
}
// 如果是公网DataV,就引用公网JS文件,如果是部署版DataV,就引用内网JS文件
const jsDomain="ip";
// 导入socket.js
getJs(`http://${jsDomain}/public/socket.js`) // socket方法
getJs(`http://${jsDomain}/public/common.js`) // 通用方法
// 控屏
function screenControl(stage) {
// 把当前屏注册向socket服务器注册
var screenIdMatches = location.href.match(/(screen|share)\/([a-z\d]+)/);
var screenId = screenIdMatches && screenIdMatches.length ? screenIdMatches[2] : '';
var groupMatches = location.search.match(/group=([a-z0-9]+)/i);
var group = groupMatches && groupMatches.length ? groupMatches[1] : 'public';
var broadcast = new Socket(screenId, "mytest", group);
broadcast.ready(function () {
broadcast.on(sceneName, function (data) {
//data.Show为按钮的对应属性的值
//代码
})
})
}
//-----入口-------
module.exports = (stage) => {
let interval = setInterval(function () {
if (Socket) {//用来确保Socke存在
screenControl(stage);//运行上面的“控屏”方法
clearInterval(interval);//
}
}, 1000)
}