sixsix團隊「餐站」應用代碼規範及開發文檔

  • 網絡爬蟲文檔

如下是咱們軟工小組關於網絡爬蟲部分代碼的的說明文檔。至於一些分功能的小函數或方法就不在此贅述,一看就能明白。下面就主要的函數進行說明。php

從整體上來講主要有三部分:店家信息爬取部分,菜品信息爬取部分,數據庫部分。下面就三個部分一個一個說明。java

數據庫部分

整個程序是用java實現的,因此數據庫部分主要由兩個類Db.java和Dbop.java組成。正則表達式

Db.java主要提供數據庫的接口,包含以下:數據庫

      • 靜態加載數據庫驅動

static {     json

       try {api

              Class.forName(dbClassName);//加載驅動服務器

              } catch (ClassNotFoundException e) {網絡

                   // TODO Auto-generated catch blockapp

                   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 編碼規範

一、縮進爲一個 Tab 或者 4 個空格,按層次縮進。

二、require/require_once 以及 include/include_once 統一使用標準調用寫法,好比:
require_once 'Hush/Page.php';
require_once 'Hush/Db.php';

三、通常類庫的名稱必須以 ZF 方式的命名,好比:Path_To_Class
除開特殊的 Page 類、Service 類以及 Dao 類文件,他們的命名規則分別以下:
Dao 類:Database_Tablename {} 類文件在 Dao 類庫目錄下
Page 類:XxxPage {} 類文件在頁面類庫目錄下
Service 類:XxxService {} 類文件在 Service 類庫目錄下

四、通常變量以及函數的名稱以駱駝命名法(首字母小寫),好比:
$variableName = 1;
public function methodName()
而 private/protected 變量或函數以 _ 開頭,好比:private function _methodName()

五、類聲名和函數聲名後的第一個 { 符號換行,好比:
Class_Name
{
public function methodName ()
{
// TODO : method process
}
}

六、每一個文件頂部必須有該類的說明註釋,好比:
<?php
/**
* XXX Dao
*
* @category XXX
* @package XXX_Dao
* @author zmpy
* @version $Id$
*/

七、每一個類文件前必須有類定義說明,好比:
...
/**
* @abstract
* @package XXX_Dao
*/
class XXX_Dao
{
...

八、被調用類庫文件函數名前必須有說明註釋(頁面類可省略,由於基本不會被調用),好比:
...
/**
* 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
}
...

九、被調用類庫文件後面的 php 結束符 ?> 可不用寫。要寫也能夠,可是結束符後不要加任何字符。

  • 客戶端代碼規範

一、縮進爲一個 Tab 或者 4 個空格,按層次縮進。

二、包命名以com.app.takeout爲前綴。包名的後續部分根據不一樣功能各自命名規範而不盡相同。但均爲小寫字母。

三、通常變量以及函數的名稱以駱駝命名法(首字母小寫),好比:
variableName = 1;
public void methodName()

五、layout 命名
layout xml 的命名必須以 所有單詞小寫,單詞間如下劃線分割,而且使用名詞或名詞詞組,即便用 模塊名_功能名稱 來命名。

六、id 命名
layout 中所使用的id必須以所有單詞小寫,單詞間如下劃線分割,而且使用名詞或名詞詞組,而且要求可以經過id直接理解當前組件要實現的功能。

七、資源命名layout中所使用的全部資源(如drawable,style等)命名必須以所有單詞小寫,單詞間如下劃線分割,而且儘量的使用名詞或名詞組,即便用 模塊名_用途 來命名。若是爲公共資源,如分割線等,則直接用用途來命名

相關文章
相關標籤/搜索