sixsix团队“餐站”应用代码规范及开发文档
网络爬虫文档
以下是我们软工小组关于网络爬虫部分代码的的说明文档。至于一些分功能的小函数或方法就不在此赘述,一看就能明白。下面就主要的函数进行说明。
从总体上来说主要有三部分:店家信息爬取部分,菜品信息爬取部分,数据库部分。下面就三个部分一个一个说明。
数据库部分
整个程序是用java实现的,所以数据库部分主要由两个类Db.java和Dbop.java组成。
Db.java主要提供数据库的接口,包含如下:
- 静态加载数据库驱动
static {
try {
Class.forName(dbClassName);//加载驱动
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
- 建立到MySQL的连接,即建立到数据库的连接
public static Connection getDbConnection() {//建立到MySQL的连接
try {
conn = DriverManager.getConnection(DbHost, user, password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
- 关闭到MySQL的连接,即关闭到数据库的连接
public static void closeDbConnection(Connection connection) {//关闭数据库MYSQL
if (connection != null) {
try {
if (!connection.isClosed()) {
connection.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Dbop.java主要提供数据库的操作,包含如下:
- 将爬取的店家信息存入数据库
public static void InsertToStoreDb(long id,String StoreUrl,String StoreName,String LogoUrl,
int DeliveryTime,String Opentime,int Quantity,String Sale,String location,String lng,String lat)
- 清空店家信息表
public static void clearStore()
- 清空菜品信息
public static void clearProduct()
- 将爬取的菜品信息存入数据库
public static void insertToProductDb(long product_id,String product_name,String product_img,int price,String sold_quantity,String left_quantity,long store_id,String store_name,String lng,String lat,int delivery_time)
- 从数据库中取出店家名字
public static String getStoreName(int id)
- 取出送餐时间
public static String getStoreDeliveryTime(int id)
- 取出店家所在位置的经度
public static String getStoreLng(int id)
- 取出店家所在位置的纬度
public static String getStoreLat(int id)
店家信息爬取部分
这一部分主要是从饿了么网页上爬取店家相关的信息存入数据库。
首先是Storeurl.java
- 实例化网页分析器
public void createParser(String url) throws ParserException
- 重置网页分析器
public void resetParser()
- 爬取并将爬取的数据存入数据库(总函数)
public void crawlerToDb()
- 根据分析网页找到的节点进行信息提取
public void parserMethod(String url)
- 根据找到的特定节点提取店家链接和店家logo(后面还有相同的函数用于提取其他信息,就不一一赘述)
public void getStoreUanal(NodeFilter url,NodeFilter img,Parser parser) throws ParserException{//get store url and name and logo
其次是GetLungAndLat.java
- 百度提供的一个接口,用于查询地址的经纬度
public static String getCoordinate( String st)
{
String str= new String();//从服务器端获取的数据转换为字符串形式
String url = "http://api.map.baidu.com/geocoder/v2/?address="+st+"&output=json&ak=DWDtiXpQ9UBnnkwXmpoYYxLs";
try{
HttpGet request = new HttpGet(url);
HttpResponse response = HttpClients.createDefault().execute(request);
if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK)
str=EntityUtils.toString(response.getEntity());
}catch(Exception e)
{
e.printStackTrace();
}
return str;//.replace(' ', ',');
}
- 从百度提供的接口查询到的结果中分别提取经度和纬度。
public static String getLnAndLa(String address)
- 利用正则表达式处理出错的查询结果,主要用于查询提取经纬度时使用。
public static String special(String address)
菜品信息爬取部分
这个则主要根据前面爬取的店家信息中店家链接爬取相应店家的菜品信息,主要是product.java。具体如下:
- 根据相应爬取分析得到的菜品数据存入数据库(主函数)
public void crawlerToDbproduct()
- 判断是否该店家的信息是否已经爬取并存入数据库,如果已经存入数据库,则不进行爬取,否则进行爬取。
public static boolean ifExist(List<String> usedlink,String url)
- 根据提供的店家链接进行相应的信息提取
public void parserMethod(String url)
- 根据网页分析器找到的节点提取店家名字(后面有很多相似的分程序,一看就明白,就不在次赘述)
public void getProductName(NodeFilter n,Parser parser) throws ParserException
到此,整个爬虫程序的主体部分已经说明清楚。
优化部署部分
这部分主要是后期在优化程序和部署程序时对原程序做的修改,主要包括ProductTime.java和StoreTime.java两个类。他们分别是将爬虫的菜品信息爬取和店家信息爬取部署到服务器上实现爬虫程序的定时运行,实现了数据的定时自动更新。
服务端文档
服务端文档借助phpdoc工具自动生成齐全文档。
客户端文档
客户端文档借助javadoc文档自动生成齐全文档。
服务端代码规范
* 基于 Zend Framework 编码规范
1、缩进为一个 Tab 或者 4 个空格,按层次缩进。
2、require/require_once 以及 include/include_once 统一使用标准调用写法,比如:
require_once 'Hush/Page.php';
require_once 'Hush/Db.php';
3、一般类库的名称必须以 ZF 方式的命名,比如:Path_To_Class
除开特殊的 Page 类、Service 类以及 Dao 类文件,他们的命名规则分别如下:
Dao 类:Database_Tablename {} 类文件在 Dao 类库目录下
Page 类:XxxPage {} 类文件在页面类库目录下
Service 类:XxxService {} 类文件在 Service 类库目录下
4、一般变量以及函数的名称以骆驼命名法(首字母小写),比如:
$variableName = 1;
public function methodName()
而 private/protected 变量或函数以 _ 开头,比如:private function _methodName()
5、类声名和函数声名后的第一个 { 符号换行,比如:
Class_Name
{
public function methodName ()
{
// TODO : method process
}
}
6、每个文件顶部必须有该类的说明注释,比如:
<?php
/**
* XXX Dao
*
* @category XXX
* @package XXX_Dao
* @author zmpy
* @version $Id$
*/
7、每个类文件前必须有类定义说明,比如:
...
/**
* @abstract
* @package XXX_Dao
*/
class XXX_Dao
{
...
8、被调用类库文件函数名前必须有说明注释(页面类可省略,因为基本不会被调用),比如:
...
/**
* Load data by primary key id
*
* @param mixed $id Primary key value
* @param string $pk Primary key name
* @return array
*/
public function methodName ()
{
// TODO : method process
}
...
9、被调用类库文件后面的 php 结束符 ?> 可不用写。要写也可以,但是结束符后不要加任何字符。
客户端代码规范
1、缩进为一个 Tab 或者 4 个空格,按层次缩进。
2、包命名以com.app.takeout为前缀。包名的后续部分根据不同功能各自命名规范而不尽相同。但均为小写字母。
3、一般变量以及函数的名称以骆驼命名法(首字母小写),比如:
variableName = 1;
public void methodName()
5、layout 命名
layout xml 的命名必须以 全部单词小写,单词间以下划线分割,并且使用名词或名词词组,即使用 模块名_功能名称 来命名。
6、id 命名
layout 中所使用的id必须以全部单词小写,单词间以下划线分割,并且使用名词或名词词组,并且要求能够通过id直接理解当前组件要实现的功能。
7、资源命名
layout中所使用的所有资源(如drawable,style等)命名必须以全部单词小写,单词间以下划线分割,并且尽可能的使用名词或名词组,即使用 模块名_用途 来命名。如果为公共资源,如分割线等,则直接用用途来命名
sixsix团队“餐站”应用代码规范及开发文档的更多相关文章
- sixsix团队“餐站”应用M2阶段发布报告
一.新功能 客户端 搜索功能 我们在M2中实现了对地点的搜索菜品,可以直接在主页页面中的输入框输入用户喜欢的菜品,系统将返回与对应关键字所对应的选择,更加高效直观的满足客户的口味. 菜品图片加载 我们 ...
- 为了增强团队的协作和高效开发,提升代码质量,TGideas团队一起制订的代码规范。主要包括五部分内容:PC规范、移动端规范、性能优化、CP规范、其他项目规范
http://tguide.qq.com/main/index.htm
- 《团队-手机app便签-开发文档》
项目托管平台地址:https://github.com/Vcandoit/Notepad.git 我主要负责文件存储部分,文字部分使用sqlite保存. 因为我们想实现备忘录记录照片.语音的功能,所以 ...
- Forward团队-爬虫豆瓣top250项目-开发文档
项目地址:https://github.com/xyhcq/top250 我在本次项目中负责写爬虫中对数据分析的一部分,根据马壮分析过的html,我来进一步写代码获取数据,具体的功能及实现方法我已经写 ...
- 《Forward团队-爬虫豆瓣top250项目-开发文档》
码云地址:https://github.com/xyhcq/top250 模块功能:获取豆瓣top250网页的源代码,并分析. def getHTMLText(url,k): # 获取网页源代码 tr ...
- 前端规范之JS代码规范(ESLint + Prettier)
代码规范是软件开发领域经久不衰的话题,几乎所有工程师在开发过程中都会遇到或思考过这一问题.而随着前端应用的大型化和复杂化,越来越多的前端团队也开始重视代码规范.同样,前段时间,笔者所在的团队也开展了一 ...
- 项目Alpha冲刺(团队)-代码规范、冲刺任务与计划
课程名称:软件工程1916|W(福州大学) 作业要求:项目Alpha冲刺(团队)-代码规范.冲刺任务与计划 团队名称:SkyReach 作业目标:确定团队项目的代码规范.冲刺任务与计划 代码规范:隐流 ...
- 腾讯Alloy团队代码规范
概述 我个人很看重代码规范,因为代码是写给别人看的,按规范写别人才更容易理解.之前苦于没有代码规范的资料,现在在github上面看到了腾讯Alloy团队的代码规范,于是学习了一下,并记录下我自己还没怎 ...
- 团队开发前端VUE项目代码规范
团队开发前端VUE项目代码规范 2018年09月22日 20:18:11 我的小英短 阅读数 1658 一.规范目的: 统一编码风格,命名规范,注释要求,在团队协作中输出可读性强,易维护,风格一致 ...
随机推荐
- ORA-12538;ORA-12154;使用PL/SQL dve无法连接远程服务器上的oracle数据库,同时本机上也安装了一个oracle数据库
问题描述:本人使用PL/SQL dve连接远程服务器上的oracle数据库,一直是没有问题的.我想提高下自己在数据库方面的能力就在自己的笔记本上安装了一个oracle数据库实例,安装并配置好之后,使用 ...
- sql 查询重复行数据
1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select peopleId from ...
- nodejs中async使用
waterfall , parallel , series , eachSeries //var async = require('async'); /*** *① * 串行有关联 执行每个函数 ...
- 使用zip.js压缩文件和解压文件
zip.js官方网站为:https://stuk.github.io/jszip/ 在此说明,下面的例子基本上来自官方示例,大家可以做参考,官方示例地址为:https://stuk.github.io ...
- view 的用法
MATLAB提供了设置视点的函数view.其调用格式为: view(az,el)az是azimuth(方位角)的缩写,EL是elevation(仰角)的缩写.它们均以度为单位.系统缺省的视 ...
- Gazebo仿真
1.建议在本地Ubuntu 16.04下运行仿真程序.目前Gazebo模拟器的兼容性是一大问题,在虚拟机或配置较低的电脑上可能无法运行.如果你的显卡是N卡,建议安装Ubuntu下的显卡驱动. 2.运行 ...
- PAT A1140 Look-and-say Sequence (20 分)——数学题
Look-and-say sequence is a sequence of integers as the following: D, D1, D111, D113, D11231, D112213 ...
- docker常用命令汇总
生成镜像docker build -t="eureka" .打标记docker tag eureka:latest 172.16.120.194:5000/eureka:lates ...
- POJ2253(dijkstra堆优化)
https://vjudge.net/problem/POJ-2253 Freddy Frog is sitting on a stone in the middle of a lake. Sudde ...
- Java:内省(Introspector)
内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且 ...