微信小程序练手 - 清纯可爱唯美小清新校花图集

小程序预览

清纯可爱唯美小清新校花图集

目的

现在小程序这么火,我也想蹭蹭热度,功能其实很简单。就是单纯的图片展示而已。图片也是来源于互联网。
虽说已经上线两个多月了,不过用户很少,看了一下统计,不到100。
之前小程序名称中带了美女两个字,所以在微信端是搜不到的。
后面问了腾讯的客服,她也只是委婉的说我的名称中带了被举报的词语。所以才搜不到。
我自己又去微信上测试了一下,发现就是美女这个词语导致的。
小程序名称带了一堆关键词,就是尝试一下看会不会被更多的人搜到。
反正现在的结果来看,没什么鸟用。

小程序代码

小程序的代码已开源,很简单,没什么复杂的逻辑,就是单纯的页面展示。
戳这里:https://github.com/justfantasy/beauty-girl.git

数据结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
--
-- 就两个表,够简单
--
CREATE TABLE `beauty_albums` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`src` varchar(30) NOT NULL DEFAULT '' COMMENT '来源网站',
`original_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '原始ID',
`classify` varchar(30) NOT NULL DEFAULT '' COMMENT '分类',
`title` varchar(100) NOT NULL DEFAULT '' COMMENT '标题',
`cover` varchar(500) NOT NULL DEFAULT '' COMMENT '封面',
`num` tinyint(4) unsigned NOT NULL DEFAULT '0' COMMENT '数量',
`publish_at` timestamp NULL DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `beauty_lists_src` (`src`,`original_id`) USING BTREE,
KEY `beauty_lists_publish_at` (`publish_at`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=7068 DEFAULT CHARSET=utf8mb4 COMMENT='美女专辑';

CREATE TABLE `beauty_images` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`aid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '列表ID',
`url` varchar(500) NOT NULL DEFAULT '' COMMENT '图片地址',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `beauty_images_aid` (`aid`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=120953 DEFAULT CHARSET=utf8mb4 COMMENT='美女图片';

后端接口

是用laravel5.6写的,也很简单,这里贴一些主要的代码吧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
//采集用的querylist的一个包,定时任务,每天采集一次
protected function collectFromMmonly($page=1, $url='http://www.mmonly.cc/mmtp/', $today=false)
{
if ($page > 1)
{
$url .= 'list_9_' . $page . '.html';
}

try
{
$query = new QueryList();
$query = $query->get($url, [], [
'headers' => [
'Proxy-Connection' => 'keep-alive',
'Pragma' => 'no-cache',
'Cache-Control' => 'no-cache',
'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'User-Agent' => 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'
]
])->encoding('UTF-8','GB2312')->removeHead();
$data = $query->rules([
'url' => ['.ABox>a', 'href'],
'title' => ['img', 'alt'],
'cover' => ['img', 'src'],
'other' => ['.items_likes', 'text'],
])->range('.item_list .item')->query()->getData()->all();

$dataCount = count($data);

foreach ($data as $k => $d)
{
$tmp = explode('/', $d['url']);
$tmpCount = count($tmp);
$now = date('Y-m-d H:i:s');
$other = explode("共", $d['other']);
$insert = [
'src' => 'mmonly',
'original_id' => explode('.', $tmp[$tmpCount-1])[0],
'classify' => $tmp[$tmpCount-2],
'title' => $d['title'],
'cover' => $d['cover'],
'publish_at' => !$today ? str_replace(' ', '', htmlentities(trim($other[0], 'DATE:'))) : date('Y-m-d H:i:s'),
'num' => count($other) > 1 ? trim($other[1], '共张') : 0,
'created_at' => $now,
'updated_at' => $now
];

//如果数据库已经存在,则直接退出
$count = BeautyAlbums::query()->where('src', 'mmonly')->where('original_id', $insert['original_id'])->count();
if ($count)
{
if ($k >= $dataCount - 1)
exit('没有最新的数据需要采集!');
else
continue;
}

try
{
$id = DB::table('beauty_albums')->insertGetId($insert);

//获取图片
$this->collectImageFromMmonly($d['url'], $insert['original_id'], $insert['num'], $id, $now, $today);
}
catch (\Illuminate\Database\QueryException $e)
{
continue;
}
}
}
catch (\GuzzleHttp\Exception\ClientException $e)
{
error_log('page:' . $page . PHP_EOL, 3, 'p.log');
}
}

接口更简单…一目了然,注释都省了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;
use App\Models\BeautyAlbums;
use App\Models\BeautyImages;
use App\Http\Controllers\Controller;

class BeautyController extends Controller
{
public function index(Request $request)
{
//详情页的推荐列表
if ($request->type == 'recommend')
{
$pageSize = 20;
$count = BeautyAlbums::query()->where('classify', $request->classify)->count();
$totalPage = floor($count/$pageSize);

//从同一分类中随机取一页,作为推荐的内容
$page = mt_rand(1, $totalPage > 1 ? $totalPage : 1);
return BeautyAlbums::query()->orderBy('publish_at', 'desc')
->orderBy('id', 'desc')
->select('id', 'title', 'cover')
->skip(($page-1)*$totalPage)
->take($pageSize)
->where('classify', $request->classify)
->get();
}

$query = BeautyAlbums::query()->orderBy('publish_at', 'desc')
->orderBy('id', 'desc')
->select('id', 'title', 'cover');
if ($request->classify)
{
$query->where('classify', $request->classify);
}

return $query->paginate(20);
}

public function view($id)
{
$ret = BeautyAlbums::query()->select('id', 'title', 'cover', 'publish_at', 'classify')->find($id);
$ret['images'] = BeautyImages::query()->where('aid', $id)->select('url')->get();
return $ret;
}
}