由于工作上的需求,现在需要将其他公众号文章发布在我们小程序上,而其他公众号小程序已经没有合作添加位了,在他们允许的情况下,我使用nginx加代码去处理这个问题
首先小程序后台我们新增一个业务域名,小程序中可以直接访问的那种
使用了guzzlehttp/guzzle以及kub-at/php-simple-html-dom-parser类包
小程序使用webviews去访问指定的文章链接
https://a.b.c/api/news/100
该接口处理
public function html($new_id, News $news)
{
$news = $news->find($new_id);
$client = new \GuzzleHttp\Client();
$info = $client->get($news['detail_url'], [
'verify' => false,
'timeout' => 5,
]);
$html =$info->getBody()->getContents();
echo $this->deal($html);
exit();
}
public function deal($html)
{
$replace = [
"http://m.qpic.cn" => "https://自己小程序的授信域名/m.qpic.cn",
"https://m.qpic.cn" => "https://自己小程序的授信域名/m.qpic.cn",
"http://a1.qpic.cn" => "https://自己小程序的授信域名/a1.qpic.cn",
"https://a1.qpic.cn" => "https://自己小程序的授信域名/a1.qpic.cn",
"http://mmbiz.qpic.cn" => "https://自己小程序的授信域名/mmbiz.qpic.cn",
"https://mmbiz.qpic.cn" => "https://自己小程序的授信域名/mmbiz.qpic.cn",
"http://mmbiz.qlogo.cn" => "https://自己小程序的授信域名/mmbiz.qlogo.cn",
"https://mmbiz.qlogo.cn" => "https://自己小程序的授信域名/mmbiz.qlogo.cn",
"http://mmsns.qpic.cn" => "https://自己小程序的授信域名/mmsns.qpic.cn",
"https://mmsns.qpic.cn" => "https://自己小程序的授信域名/mmsns.qpic.cn",
"//res.wx.qq.com" => "https://自己小程序的授信域名/res.wx.qq.com",
];
foreach ($replace as $key=>$value){
$html = str_replace($key,$value,$html);
}
$dom = HtmlDomParser::str_get_html($html);
$imgs = $dom->find('img');
foreach ($imgs as $img) {
$attrs = $img->attr;
foreach ($attrs as $attr=>$value) {
if (preg_match('/src/', $attr)) {
if($value){
$img->src = $value;
}
}
}
}
return $dom;
}
然后在自己的小程序首页业务域名处新增ssl配置,然后新增反向代理,代理配置如下
location ^~/ {
resolver 114.114.114.114;
set $proxy_to http:/$uri;
proxy_set_header Referer http://mp.weixin.qq.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass $proxy_to;
# expires 365d;
}
结论: