目录
有朋友想做个导航站,找了一圈网上关于帝国cms内核的网址导航站源码,发现价值2999元帝国CMS芒果目录网整站源码符合他的需求,在网上下载安装该源码后发现通过链接一键获取网站meta信息(标题、关键词、描述)和只获取权重网站功能已经失效,同时在线php网站缩略图功能也失效了,问能不能做一款导航站,对于帝国cms功能的二次开发,只能说先测试一下,不保证能全部解决
需求一:通过链接一键获取网站meta信息(标题、关键词、描述)
对于这个需求,下载了价值2999元帝国CMS芒果目录网整站源码,发现原需求接口也是使用,php使用正则表达式获取meta信息
/** 获取META信息 */
function get_sitemeta($url) {
$data = file_get_contents($url);
$meta = array();
if (!empty($data)) {
#Title
preg_match('/<TITLE>([wW]*?)</TITLE>/si', $data, $matches);
if (!empty($matches[1])) {
$meta['title'] = $matches[1];
}
#Keywords
preg_match('/<METAs+name="keywords"s+content="([wW]*?)"/si', $data, $matches);
if (empty($matches[1])) {
preg_match("/<METAs+name='keywords's+content='([wW]*?)'/si", $data, $matches);
}
if (empty($matches[1])) {
preg_match('/<METAs+content="([wW]*?)"s+name="keywords"/si', $data, $matches);
}
if (empty($matches[1])) {
preg_match('/<METAs+http-equiv="keywords"s+content="([wW]*?)"/si', $data, $matches);
}
if (!empty($matches[1])) {
$meta['keywords'] = $matches[1];
}
#Description
preg_match('/<METAs+name="description"s+content="([wW]*?)"/si', $data, $matches);
if (empty($matches[1])) {
preg_match("/<METAs+name='description's+content='([wW]*?)'/si", $data, $matches);
}
if (empty($matches[1])) {
preg_match('/<METAs+content="([wW]*?)"s+name="description"/si', $data, $matches);
}
if (empty($matches[1])) {
preg_match('/<METAs+http-equiv="description"s+content="([wW]*?)"/si', $data, $matches);
}
if (!empty($matches[1])) {
$meta['description'] = $matches[1];
}
}
return $meta;
}
简单写了个index.php,加入以下代码,测试该正则表达式是正确的,不论是http://开头还是https://开头链接都可以获取到meta信息三件套标题、关键词和描述
$site = "http://zz2zz.com";
$content = get_sitemeta($site);
print_r($content);
那么在帝国cms信息页点击获取网站信息却不成功,是哪里除了问题呢?
问题一:点击获取网站信息提示非法来源
解决:后台--系统设置--安全参数设置--开启后台来源认证码--把金刚模式改成刺猬模式
问题二:修改问题一,但是点击获取网站信息无法获取meta信息
通过弹窗链接发现,点击获取网站信息时包含meta信息和权重信息
而权重信息链接是失效的,只需要把获取权重的参数删除即可获取meta信息
问题三:只能获取http://开头的网站,https://开头的网站meta信息无法获取
原因是原程序作者在写入时,就没有考虑https://
这时,只需要运用PHP curl_init()简单使用在HTTP、HTTPS上的写法,就能获取到网站meta信息
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);//不做服务器认证
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);//不做客户端认证
至此,成功实现通过链接获取网站meta信息,也就是标题、关键词、和描述
需求二:获取网站权重,也就是百度搜索、360搜索、搜狗搜索、神马搜索权重,这个目前不打算写,原因很简单,目前没有找到免费的接口!爱站和站长工具的接口都是需要收费的,至于一些个人博客提供的api,更不打算写了,因为不知道能用多久!
所以这个需求放弃做了。
需求三:通过链接获取网站缩略图
原程序模板使用的是:https://blinky.nemui.org/获取网站缩略图,但是现在似乎网站挂掉了,使用国内ip访问无法打开,使用外网访问也打不开。简单搜索国内网站缩略图的api接口,免费的基本没有,这个功能也只能作罢,如果有免费的网站缩略图api接口,可以抽空写上,不过可以换个方式,可以使用网站ico图片作为缩略图,只需要网址+/favicon.ico即可,至于帝国cms无法上传ico图标,可以查看文章:帝国cms无法上传ico图标格式文件的解决方法
至此,只实现了通过链接一键获取网站meta信息。