落网数据库简单查询接口 caddy+php7+mongodb

落网数据库简单查询接口

一个简单的DEMO,使用了caddy + php7 + mongodb

数据库&接口设计 来自 https://github.com/Aedron/Luoo.spider 项目(V1.0版本分支)

参考地址:https://www.cnblogs.com/edit/p/luoo-service_caddy-php7-mongodb.html

环境配置:

下载程序,新建一个目录,比如 C:\web

https://caddyserver.com/download 下载caddy并解压到文件夹内,比如 C:\web\caddy_v1.0.0_windows_amd64

https://www.php.net/downloads.php 下载PHP7.3最新版并解压到文件夹内,比如 C:\web\php-7.3.5-nts-Win32-VC15-x64

https://www.mongodb.com/download-center/community 下载MongoDB社区版zip包 并解压到文件夹内,比如 C:\web\mongodb-win32-x86_64-2008plus-ssl-4.0.9

配置&启动脚本:

【PHP 安装mongodb拓展】

https://pecl.php.net/package/mongodb 下载最新的stable版本,比如现在是1.5.3,点击链接 “dll” ,在弹出的新页面里找到对应你PHP版本的地址然后下载。

下载完成后把 tgz包里面的 php_mongodb.dll 解压到 php 目录下的 ext 文件夹内。

找到 php目录下的 php.ini-production,复制一份并重命名为 php.ini  ,打开文件加入两行配置

extension_dir = "ext"
extension = mongodb

【caddy 配置&启动脚本】

caddy目录下新建 root 文件夹,用来存放php或html页面

caddy目录下新建文本文件 Caddyfile (不需要后缀名),写入

访问域名 {
	gzip
	tls 你的邮箱 #如果不需要https可删除此行
	root C:\web\root
	errors {
		404 404.html # Not Found
	}
	on startup _php_cgi.bat &
	fastcgi php 127.0.0.1:6545 php
	rewrite /luoo/ {
		to {path} {path}/ /luoo.php?_url={path}&{query}
	}
	header /luoo {
		Access-Control-Allow-Origin  *
		Access-Control-Allow-Methods "GET, POST, OPTIONS"
	}
	header / {
		-Server
		-X-Powered-By
	}
}

caddy目录下新建文本文件 _php_cgi.bat,写入

:start
    C:\web\php-7.3.5-nts-Win32-VC15-x64\php-cgi.exe -b 6545
    goto start

然后就可以 双击caddy.exe 启动了,或者是配置成windows服务使用。

【Mongodb 配置&导入bson文件】

Mongodb 目录下新建 data 文件夹

Mongodb 目录下新建文本文件 _start.bat,写入

title MongoDB
cd bin
mongod --dbpath C:\web\mongodb-win32-x86_64-2008plus-ssl-4.0.9\data
pause

双击 _start.bat ,即可启动 Mongodb 。

Mongodb 目录下新建文本文件 _import.bat,写入

title MongoDB import
echo MongoDB import
cd bin
mongorestore -d luoo C:\web\mongodb-win32-x86_64-2008plus-ssl-4.0.9\luoo
pause

顺便去github上下载一份落网数据文件,地址在 https://github.com/Aedron/Luoo.spider/tree/master/db/luoo

下载完成后,把 db目录下的 luoo 文件夹拷贝到 Mongodb 目录下,然后运行上面的 _import.bat 脚本,即可完成数据导入。

PHP代码编写:

在 C:\web\root 目录下新建 luoo.php,写入

  1 <?php
  2 header(‘Content-Type:application/json; charset=utf-8‘);
  3 if(empty($_GET[‘_url‘])){
  4     exit(json_encode([‘code‘=>‘400‘,‘msg‘=>‘访问异常‘]));
  5 }
  6 $router = explode(‘/‘,str_replace(‘/luoo/‘,‘‘,$_GET[‘_url‘]));
  7 define(‘API_LIST‘, [‘vol‘,‘vols‘,‘single‘,‘singles‘,‘article‘,‘latest‘]);
  8 if(!in_array($router[0],API_LIST)){
  9     exit(json_encode([‘code‘=>‘404‘,‘msg‘=>‘接口不存在‘]));
 10 }
 11 class Luoo{
 12     private $manager;
 13     private $config = ["latestVol"=>997,"latestSingle"=>20170721,"latestArticle"=>927];
 14     public function __construct(){
 15         $this->manager = new MongoDB\Driver\Manager();
 16     }
 17     private function getCount($collection,$where=[]){
 18         $command = new MongoDB\Driver\Command([‘count‘ => $collection,‘query‘=>$where]);
 19         $result = $this->manager->executeCommand(‘luoo‘,$command);
 20         $response = current($result->toArray());
 21         if($response->ok==1){
 22             return $response->n;
 23         }
 24         return 0;
 25     }
 26     private function getLyric($param){
 27         $query = new MongoDB\Driver\Query($param,[‘projection‘=>[‘_id‘ => 0],‘limit‘=>100]);
 28         $cursor = $this->manager->executeQuery(‘luoo.lyrics‘, $query);
 29         return $cursor->toArray();
 30     }
 31     public function vol(int $vol){
 32         $query = new MongoDB\Driver\Query([‘vol‘=>$vol], [‘projection‘=>[‘_id‘ => 0],‘limit‘=>1]);
 33         $cursor = $this->manager->executeQuery(‘luoo.vols‘, $query);
 34         $result = [‘code‘=>200];
 35         $result[‘data‘] = current($cursor->toArray());
 36         if($result[‘data‘] && $result[‘data‘]->id){
 37             $volId = $result[‘data‘]->id;
 38             $result[‘data‘]->lyrics = $this->getLyric([‘volId‘=>$volId]);
 39         }
 40         echo json_encode($result);
 41     }
 42     public function vols(int $date){
 43         $page = $_GET[‘page‘]??1;
 44         $where = [‘vol‘=>[‘$gte‘=>$date]];
 45         $options = [‘projection‘=>[‘_id‘ => 0],‘limit‘=>10,‘sort‘=>[‘vol‘ => 1]];
 46         if($page>1) $options[‘skip‘] = ($page-1)*10;
 47         $count = $this->getCount(‘singles‘,$where);
 48         $query = new MongoDB\Driver\Query($where, $options);
 49         $cursor = $this->manager->executeQuery(‘luoo.vols‘, $query);
 50         $result = [‘code‘=>200];
 51         $result[‘page‘] = $page;
 52         $result[‘total‘] = $count;
 53         $result[‘data‘] = $cursor->toArray();
 54         echo json_encode($result);
 55     }
 56     public function single(int $date){
 57         $query = new MongoDB\Driver\Query([‘date‘=>$date],[‘projection‘=>[‘_id‘ => 0],‘limit‘=>1]);
 58         $cursor = $this->manager->executeQuery(‘luoo.singles‘, $query);
 59         $result = [‘code‘=>200];
 60         $result[‘data‘] = current($cursor->toArray());
 61         if($result[‘data‘] && $result[‘data‘]->id){
 62             $result[‘data‘]->lyrics = $this->getLyric([‘type‘=>1,‘date‘=>$date]);
 63         }
 64         echo json_encode($result);
 65     }
 66     public function singles(int $date){
 67         $page = $_GET[‘page‘]??1;
 68         $where = [‘date‘=>[‘$gte‘=>$date]];
 69         $options = [‘projection‘=>[‘_id‘ => 0],‘limit‘=>10,‘sort‘=>[‘date‘ => 1]];
 70         if($page>1) $options[‘skip‘] = ($page-1)*10;
 71         $count = $this->getCount(‘singles‘,$where);
 72         $query = new MongoDB\Driver\Query($where, $options);
 73         $cursor = $this->manager->executeQuery(‘luoo.singles‘, $query);
 74         $result = [‘code‘=>200];
 75         $result[‘page‘] = $page;
 76         $result[‘total‘] = $count;
 77         $result[‘data‘] = $cursor->toArray();
 78         echo json_encode($result);
 79     }
 80     public function article(int $id){
 81         $query = new MongoDB\Driver\Query([‘id‘=>$id], [‘projection‘=>[‘_id‘ => 0],‘limit‘=>1]);
 82         $cursor = $this->manager->executeQuery(‘luoo.articles‘, $query);
 83         $result = [‘code‘=>200];
 84         $result[‘data‘] = current($cursor->toArray());
 85         if($result[‘data‘] && $result[‘data‘]->id){
 86             $articleId = $result[‘data‘]->id;
 87             $result[‘data‘]->lyrics = $this->getLyric([‘articleId‘=>$articleId]);
 88         }
 89         echo json_encode($result);
 90     }
 91     public function latest(string $type){
 92         switch (strtolower($type)) {
 93             case ‘vol‘:
 94                 $this->vol($this->config[‘latestVol‘]);
 95                 break;
 96             case ‘single‘:
 97                 $this->single($this->config[‘latestSingle‘]);
 98                 break;
 99             case ‘article‘:
100                 $this->article($this->config[‘latestArticle‘]);
101                 break;
102             default:
103                 echo json_encode([‘code‘=>‘400‘,‘msg‘=>‘允许的 type 为 vol 或 single 或 article‘]);
104                 break;
105         }
106     }
107 }
108 try {
109     $LUOO = new Luoo();
110     $LUOO->{$router[0]}($router[1]);
111 }
112 catch (TypeError $ex) { exit(json_encode([‘code‘=>‘400‘,‘msg‘=>‘请求参数有误‘]));}
113 catch (Error $ex) { exit(json_encode([‘code‘=>‘500‘,‘msg‘=>‘服务器内部错误‘]));}

API列表如下:

/vol/<volIndex>
根据期刊数来获取期刊数据, /vol/717
/vols/<volIndex>
根据当前期刊数来获取该期刊之后的所有新的期刊数据, 如 /vols/926

/single/<singleDate>
根据发布日期来获取单曲数据, 如 /single/20160722
/singles/<singleDate>
根据当前发布日期来获取该发布日期之后的所有新的单曲数据, 如 /singles/20170628

/article/<articleIndex>
根据文章id来获取文章数据, 如 /article/922

/latest/<type>
获取最新的期刊或单曲或文章, 允许的 type 为 vol 或 single 或 article, 如 /latest/vol

来源地址: https://www.cnblogs.com/edit/p/10880194.html

原文地址:https://www.cnblogs.com/edit/p/luoo-service_caddy-php7-mongodb.html

时间: 2024-10-17 02:05:57

落网数据库简单查询接口 caddy+php7+mongodb的相关文章

数据库简单查询总结

数据库的查询操作基本分类: 1.投影操作 2.选择操作 3.排序操作 投影操作: SELECT 列名列表 FROM 表名: SELECT * FROM 表名:(查询整个表) SELECT 列名 AS 新列名 FROM 表名:(查询列显示新的列名) SELECT DISTINCT 列名 FROM 表名:(排除重复数据) SELECT CONCAT(列名1,'-',列名2,'-',列名3) AS '标题' FROM 表名:(字符串连接) SELECT 列名 FROM 表名 LIMIT 开始序号,返回

MongoDB数据库简单操作

之前学过的有mysql数据库,现在我们学习一种非关系型数据库 一.简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成.MongoDB 文档类似于 JSON 对象.字段值可以包含其他文档,数组及文档

数据库基础学习4--表格的 增 删 改 查(简单查询与高级查询)

一.增 C:create 增加,创建,向数据库里面添加数据. insert into Fruit values('K009','苹果',3.0,'高青',90,'') insert into Fruit(Ids,Name,Price,Source,Numbers) values('K010','苹果',3.0,'高青',90) 二.改 U:update修改,从数据库表里面修改数据. update Fruit set Source='烟台' where Ids='K001' 三.删 D:delet

java MongoDB查询(一)简单查询

前言 MongoDB的java驱动提供了查询的功能,查询条件也是bson对象,这篇就看下怎么进行简单的数据查询 1.数据结构 集合:firstCollection 数据内容: { "_id" : ObjectId("55adba52fa1f3cf038c2aea6"), "name" : "user0", "age" : 22, "sex" : 0 } { "_id"

MongoDB和关系型数据库简单对比

MongoDB 是一个跨平台的,面向文档的数据库,提供高性能,高可用性和可扩展性方便. MongoDB 工作在收集和文件的概念. 数据库:数据库是一个物理容器集合.每个数据库都有自己的一套文件系统上的文件.一个单一的MongoDB服务器通常有多个数据库. 集合:集合是一组MongoDB的文档.它相当于一个RDBMS表.收集存在于一个单一的数据库.集合不执行模式.集合内的文档可以有不同的领域.通常情况下,一个集合中的所有文件是相同或相关的目的. 文档:文档是一组键 - 值对. 文件动态模式.动态模

Oracle数据库之四 简单查询

四.简单查询 ? 简单查询的主要特征就是将一张数据表之中的全部数据行进行显示,而后可以利用 SELECT 子句来控制所需要的输出列. 4.1.基础语法 范例:查询 emp 表中的数据(全部数据查询) SELECT * FROM emp; ? 在取得全部数据后,可以发现某些列上会显示 null 的信息,null 表示的是没有内容,但 null != 0 , null 指的是暂时未知的内容. 简单查询语句语法: SELECT [DISTINCT] * | 列名称[AS][列别名],列名称[AS][列

数据库部分---查询-简单查询;

1.最简单查询(查询所有数据) select * from 表名:*代表所有的列 2.查询指定列的数据 select 列名1,列名2 from 表名 3.修改结果集的列名 select 列名1 as '代号1',列名2 as '代号2' from 表名 4.条件查询 select * from 表名 where 列名=‘’: 5.多条件查询 select * from 表名 where 列名1=‘’ or 列名2=''; select * from 表名 where 列名1=‘’ and 列名2

数据库中的简单查询

1.简单查询 select * from Info --查所有数据select Code,Name from Info --查指定列的数据select Code as '代号',Name as '姓名' from Info --给列指定别名 2.条件查询 select * from Info where Code='p001'select * from Info where Sex='true' and Nation='n001' --多条件并的关系select * from Info wher

使用TT模板+mvc+wcf实现简单查询

伴随着春姑娘调皮的脚步,小编接手的档案管理项目也渐渐步入正轨,从开始的需求分析,到使用Axure画原型图,再到使用powerdesigner设计实体,生成数据库,一直到昨天刚刚通了一条线,这一路走来,小编懂得了很多,无路学习还是和团队小伙伴的交流合作,有时候,总是会因为大家意见不统一,搞的大家吹胡子瞪眼,但有时也会因为某件事情圆满成功而欢欣鼓舞,小组中最开心的事儿莫过于有人开会迟到买吃的了,哈哈,暴露了小编的本质,开头说了这么多,接下来,小编就跟分享一下,如果利用TT模板+mvc+wcf实现简单