<?php
namespace
App\Http\Controllers\M;
use
App\Http\Controllers\BaseController;
use
App\Model\Bbs\Article;
use
App\Model\Bbs\Ask;
use
App\Model\Bbs\Thread;
use
App\Model\Main\Video;
use
App\Model\Garage\SeriesInfoModel;
use
Carbon\Carbon;
use
Illuminate\Support\Facades\Cache;
class
SitemapController
extends
BaseController
{
public
function
siteMap(
$type
)
{
$cacheKey
=
"site-"
.
$type
;
if
(Cache::has(
$cacheKey
)) {
$siteMap
= Cache::get(
$cacheKey
);
}
else
{
$siteMap
=
$this
->buildSiteMap(
$type
);
Cache::add(
$cacheKey
,
$siteMap
, 120);
}
return
response(
$siteMap
)
->header('Content-type', 'text/xml');
}
protected
function
buildSiteMap(
$type
)
{
$sitemapInfo
= [];
switch
(
$type
) {
case
'video':
$sitemapInfo
=
$this
->getVideoInfo();
break
;
case
'article':
$sitemapInfo
=
$this
->getArticleInfo();
break
;
case
'bbs':
$sitemapInfo
=
$this
->getBbsInfo();
break
;
case
'ask':
$sitemapInfo
=
$this
->getAskInfo();
break
;
case
'series':
$sitemapInfo
=
$this
->getSeriesInfo();
break
;
}
$lastmod
=
$sitemapInfo
[0]['pub_time'];
$xml
= [];
$xml
[] = '<?xml version=
"1.0"
encoding=
"UTF-8"
?' . '>';
$xml
[] = '<urlset xmlns=
"http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:mobile=
"http://www.baidu.com/schemas/sitemap-mobile/1/"
>';
$xml
[] = ' <url>';
$xml
[] =
" <loc>https://m.xxx.com</loc>"
;
$xml
[] =
" <lastmod>$lastmod</lastmod>"
;
$xml
[] = ' <changefreq>daily</changefreq>';
$xml
[] = ' <priority>0.8</priority>';
$xml
[] = ' </url>';
foreach
(
$sitemapInfo
as
$sitemap
) {
$xml
[] = ' <url>';
$xml
[] =
" <loc>{$sitemap['url']}</loc>"
;
$xml
[] =
" <mobile:mobile type=\"mobile\"/>"
;
$xml
[] =
" <lastmod>{$sitemap['pub_time']}</lastmod>"
;
$xml
[] =
" </url>"
;
}
$xml
[] = '</urlset>';
return
join(
"\n"
,
$xml
);
}
protected
function
getVideoInfo()
{
$videos
= Video::where('pub_time', '<=', Carbon::now())
->where('published', 2)
->where('is_del', 0)
->orderBy('id', 'desc')
->pluck('pub_time', 'id')
->all();
$res
=
$article
= [];
foreach
(
$videos
as
$id
=>
$pub_time
) {
$article
['id'] =
$id
;
$article
['pub_time'] =
substr
(
$pub_time
, 0, 10);
$article
['url'] =
"https://m.xxx.com/video_"
.
$id
.
".html"
;
$res
[] =
$article
;
}
return
$res
;
}
protected
function
getArticleInfo()
{
$articles
= Article::where('pub_time', '<=', Carbon::now())
->where('published', 2)
->where('is_del', 0)
->orderBy('id', 'desc')
->pluck('pub_time', 'id')
->take(5000)
->all();
$res
=
$article
= [];
foreach
(
$articles
as
$id
=>
$pub_time
) {
$article
['id'] =
$id
;
$article
['pub_time'] =
substr
(
$pub_time
, 0, 10);
$article
['url'] =
"https://m.xxx.com/news/article_"
.
$id
.
".html"
;
$res
[] =
$article
;
}
return
$res
;
}
protected
function
getBbsInfo()
{
$articles
= Thread::where('visible', 1)
->where('is_del', 0)
->orderBy('id', 'desc')
->pluck('dateline', 'id')
->take(10000)
->all();
$res
=
$article
= [];
foreach
(
$articles
as
$id
=>
$pub_time
) {
$article
['id'] =
$id
;
$article
['pub_time'] =
substr
(
$pub_time
, 0, 10);
$article
['url'] =
"https://m.xxx.com/bbs/thread_"
.
$id
.
".html"
;
$res
[] =
$article
;
}
return
$res
;
}
protected
function
getAskInfo()
{
$articles
= Ask::where('state', 1)
->orderBy('id', 'desc')
->pluck('dateline', 'id')
->take(10000)
->all();
$res
=
$article
= [];
foreach
(
$articles
as
$id
=>
$pub_time
) {
$article
['id'] =
$id
;
$article
['pub_time'] =
substr
(
$pub_time
, 0, 10);
$article
['url'] =
"https://m.xxx.com/ask_"
.
$id
.
".html"
;
$res
[] =
$article
;
}
return
$res
;
}
protected
function
getSeriesInfo()
{
$articles
= SeriesInfoModel::where('status', 1)
->where('is_stop', 0)
->pluck('name', 'id')
->all();
$res
=
$article
= [];
foreach
(
$articles
as
$id
=>
$pub_time
) {
$article
['id'] =
$id
;
$article
['pub_time'] =
date
('Y-m-d', time());
$article
['url'] =
"https://m.xxx.com/series/"
.
$id
.
"/details"
;
$res
[] =
$article
;
}
return
$res
;
}
}