第三天
小王(運營總監)看到小丁丁整天都在淘寶、百度、魔方、拍拍上面淘關鍵詞,每天花費的時間好長,工作效率又低,拿著這個借口來找到我。
說到:小帥帥,你看小丁丁每天都在淘寶、百度、魔方、拍拍上面淘關鍵詞花費的時間好長,你能不能幫幫忙,看看能不能讓系統自己做啦,這樣可以節省好多人力,帶來的效益多高。(0 其實就是為了掩飾他們懶惰 0)
小帥帥一聽到可以帶來的效益好高,王總還求著我呢 ,馬上 兩眼冒著星光,是該好好體現, 解決這個問題就可以體現出我的價值。
小帥帥拍著胸膛保證到:王總,這個小KS啦,馬上幫你辦到。 ( 0 程序員就是這麼可愛,樂於挑戰,樂於接受,從不需要高額的回報 0 )
小王拍了拍小帥帥: 好小伙子,好好加油,等你的好消息。
小帥帥從此樂呵了一整天。從沒去想想這是多麼蛋疼的一項任務。
關鍵詞來源示例圖:


當小帥帥醒過來時,才意識到原來這個項目不是一般的蛋疼啊。
小帥帥不知道如何下手,就屁顛屁顛的跑到小於(技術總監)旁邊(0 有技術總監真好,強大的靠山,反正有人背黑鍋 0)。
說到:於老大,剛才王總給了這個任務給我,我不曉得怎麼辦好,能否高抬貴嘴,指導下。
於老大瞄了一眼,說到:你是用php做的吧,php做就復雜點咯,知道curl、html dom解析嗎?
小帥帥,說到:不太懂耶,沒用過,看起來好高深的樣子。
於老大鄙視了一番:這有什麼高深的,很簡單的,百度一下咯。(老大就是老大,什麼事情在他眼裡都是簡單的,好崇拜的對象)
於老大在baidu搜索框裡面輸入 php curl,查出了結果讓小帥帥去了解。
php curl手冊: http://cn2.php.net/manual/zh/book.curl.php
小帥帥查看玩手冊後,隨手寫了一份:
#請求淘寶首頁
$curl = curl_init();
curl_setopt_array($curl,array(
CURLOPT_FAILONERROR => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_CONNECTTIMEOUT => 15,
CURLOPT_TIMEOUT => 60,
//CURLOPT_COOKIESESSION => 1,
CURLOPT_URL => "http://www.taobao.com"
));
$result = curl_exec($this->curl);
echo $result;
小帥帥非常高興,因為學到了新的知識。小帥帥又犯愁了,內容是取到了,怎麼取裡面的關鍵詞?
小帥帥又屁顛屁顛的跑到小於(技術總監),去請教。
說道:於老大,curl我已經弄懂了,我取道淘寶的首頁了,下面怎麼辦?
於老大瞄了一眼代碼,很不樂意的說道:恩,寫是寫好了,怎麼看著這麼別扭。
小帥帥心裡就不樂意了,想到我寫的明明這麼好,又簡單使用,怎麼別扭了。
於老大就把以前的代碼翻出來,隨手扔給小帥帥,說到:你先去看懂這份代碼,用這份代碼重新寫一份?
文件內容:
/**
* cURL 常用操作封裝
*
* @author oShine
*/
class ExtendedCurl
{
/**
* 返回 JSON 內容為對象
*/
const JSON_OBJECT = 0;
/**
* 返回 JSON 內容為數組
*/
const JSON_ARRAY = 1;
/**
* cURL Handle
*
* @var resource
*/
private $curl;
/**
* 當前(默認) cURL 參數
*
* @var array
*/
private $options = array(
CURLOPT_FAILONERROR => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_CONNECTTIMEOUT => 15,
CURLOPT_TIMEOUT => 60,
//CURLOPT_COOKIESESSION => 1,
);
/**
* 最後一次請求的錯誤信息
*
* @var null|string
*/
private $error = null;
/**
* @var int
*/
private $httpCode = null;
/**
* @param array $defaultOptions
* @internal param array $options 可選的覆蓋默認 cURL 參數
*/
public function __construct(array $defaultOptions = array())
{
$this->curl = curl_init();
if (!empty($defaultOptions)) {
$this->options = $defaultOptions;
}
}
/**
* 設置 cURL 多個選項
*
* @param array $options
*/
public function setOptions(array $options)
{
foreach ($options as $key => $value) {
$this->setOption($key, $value);
}
}
/**
* 設置 cURL 單個選項
*
* @param $key
* @param $value
*/
public function setOption($key, $value)
{
$this->options[$key] = $value;
}
/**
* 發送 GET 請求並返回解析後的 JSON 內容
*
* @param $url
* @param array $data
* @param int $type
* @return null|object|array
*/
public function getJson($url, array $data = array(), $type = self::JSON_ARRAY)
{
$content = $this->get($url, $data);
return json_decode($content, $type);
}
/**
* 發送 GET 請求
*
* @param $url
* @param array $data
* @return null|string
*/
public function get($url, array $data = array())
{
if (!empty($data)) {
if (false === strpos($url, '?')) {
$url .= '?';
} else {
$url .= '&';
}
$url .= http_build_query($data);
}
$options = array(
CURLOPT_URL => $url,
);
return $this->request($options);
}
/**
* 發送 cURL 請求
*
* @param array $options
* @return mixed
*/
private function request(array $options = array())
{
$this->setOptions($options);
curl_setopt_array($this->curl, $this->options);
$result = curl_exec($this->curl);
$errorNo = curl_errno($this->curl);
$response = curl_getinfo( $this->curl );
if ($errorNo) {
$this->error = '[' . $errorNo . '] ' . curl_error($this->curl);
} else {
$this->error = null;
}
if(isset($response['http_code'])){
$this->httpCode = $response['http_code'];
}
return $result;
}
/**
* 發送 POST 請求並返回解析後的 JSON 內容
*
* @param $url
* @param array $data
* @param int $type
* @return null|object|array
*/
public function postJson($url, array $data = array(), $return = self::JSON_ARRAY)
{
$content = $this->post($url, $data);
return json_decode($content, $return);
}
/**
* 發送 POST 請求
*
* @param $url
* @param array $data
* @return null|string
*/
public function post($url, array $data = array())
{
$options = array(
CURLOPT_URL => $url,
CURLOPT_POST => 1,
);
if (!empty($data)) {
if ($this->isMultiPart($data)) {
$options[CURLOPT_POSTFIELDS] = $data;
} else {
$options[CURLOPT_POSTFIELDS] = http_build_query($data);
}
}
return $this->request($options);
}
private function isMultiPart($data)
{
foreach ($data as $value) {
if ('@' == $value[0])
return true;
}
return false;
}
/**
* 判斷最後一次請求是否有錯誤
*
* @return bool
*/
public function hasError()
{
return null !== $this->error;
}
/**
* 獲取最後一次請求的錯誤信息
*
* @return null|string
*/
public function getError()
{
return $this->error;
}
public function getHttpCode()
{
return $this->httpCode;
}
}
小帥帥心裡十分不樂意,心裡恨不得要揍揍於老大,但又不得不屈服他的淫威之下,只得答應說到:好的,我先回去琢磨琢磨一下。
小帥帥 從此郁悶了一天。 拿著天書式的武林秘籍去修煉去了。
現在 百度推廣有精確、短語、廣泛三種匹配方式,,一般來說黃金組合匹配方式是:廣泛匹配+搜索詞報告+否定關鍵詞。流量來說的話就是 廣泛>短語>精確啦,可以根據你們呢的實際情況進行設置!
如果要精確匹配,需要ABC都帶引號。