程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 手把手教你做關鍵詞匹配項目(搜索引擎)---- 第十二天,教你做第十二天

手把手教你做關鍵詞匹配項目(搜索引擎)---- 第十二天,教你做第十二天

編輯:關於PHP編程

手把手教你做關鍵詞匹配項目(搜索引擎)---- 第十二天,教你做第十二天


第十二天

起點:

1. 手把手教你做關鍵詞匹配項目(搜索引擎)---- 第一天

回顧:

11.手把手教你做關鍵詞匹配項目(搜索引擎)---- 第十一天

上回說到,關鍵詞應用需求為:

通過淘寶API取到的寶貝標題以及寶貝屬性,匹配出適合該寶貝的關鍵詞.

初期考慮以下因素:

適合人群的匹配 :男裝 (匹配出來的關鍵詞不能有女)  女裝(匹配出來的關鍵詞不能有男) 情侶裝(男女適用)  童裝(?)

 

淘寶API取出的寶貝屬性字段:

小帥帥想了很久,總算想出來了一個解決方案,方案如下:

 

<?php
class SelectorItem {

    private $item;

    public function __construct($item){
        $this->item = $item;
    }

    public function __get($name){
        if(isset($this->item->$name)){
            return $this->item->$name;
        }
        return null;
    }

    public static function createFromApi($num_iid){
        $client = new TopClient();
        $client->appkey = 'xx';
        $client->secretKey = 'xx';

        $req = new ItemGetRequest();
        $req->setFields('props_name,property_alias,detail_url,cid,title');
        $req->setNumIid($num_iid);
        $resp = $client->execute($req);

        if(isset($resp->code)){
            # error handle
            throw new Exception($resp->msg, $resp->code);
        }
        return new self($resp->item);
    }
}

$selectorItem = SelectorItem::createFromApi($_REQUEST["num_iid"]);
Logger::trace($selectorItem->props_name);
$blackCharList = array();
$coreCharList = array();
$matchTitle = $selectorItem->title.$selectorItem->props_name;
if(preg_match('/男裝/', $matchTitle)){

    $coreCharList = array(
        "男裝"
    );

    $blackList = array(
      "女"
    );
}else if(preg_match('/女裝/', $matchTitle)){

    $coreCharList = array(
        "女裝"
    );

    $blackList = array(
        "男"
    );
}else if(preg_match('/情侶裝/', $matchTitle)){

    $coreCharList = array(
        "情侶裝",
        "男裝",
        "女裝"
    );

}else if(preg_match('/童裝/',$matchTitle)){
    $coreCharList = array(
        "童裝",
        "兒童裝",
        "女童裝",
        "男童裝"
    );
}

$where = array();
foreach($coreCharList as $char){
    $where[] = " word LIKE '%$char%'";
}

foreach($blackCharList as $char){
    $where[] = " word NOT LIKE '%$char%'";
}

if(count($where)>0){
    $sql = "SELECT * FROM keywords WHERE ".implode(' AND ',$where);
    Logger::trace($sql);
    //search database
}

小帥帥很高興的把代碼拿給於老大時,小帥帥被於老大批了,原因很簡單:

1.  沒有考慮未來變化因素

2.  if 太多

小帥帥被批了,心裡很不高興,但還是不得不去請教於老大的高招。

於老大給了一個方向給他。

1. 學習設計模式消除過多的if,以及如何去解耦。

 

設計模式(Design pattern)是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 毫無疑問,設計模式於己於他人於系統都是多贏的;設計模式使代碼編制真正工程化;設計模式是軟件工程的基石脈絡,如同大廈的結構一樣。[來自百度百科]

 

小帥帥只好去了解設計模式了。

 

附:

SelectorItem 裡面的 __get 函數,稱為Magic Methods
如:
$selectorItem->title 其實會調用 __get('title')


 




  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved