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


當小帥帥醒過來時,才意識到原來這個項目不是一般的蛋疼啊。
小帥帥不知道如何下手,就屁顛屁顛的跑到小于(技術總監(jiān))旁邊(0 有技術總監(jiān)真好,強大的靠山,反正有人背黑鍋 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($curl);echo $result;
小帥帥非常高興,因為學到了新的知識。小帥帥又犯愁了,內(nèi)容是取到了,怎么取里面的關鍵詞?
小帥帥又屁顛屁顛的跑到小于(技術總監(jiān)),去請教。
說道:于老大,curl我已經(jīng)弄懂了,我取道淘寶的首頁了,下面怎么辦?
于老大瞄了一眼代碼,很不樂意的說道:恩,寫是寫好了,怎么看著這么別扭。
小帥帥心里就不樂意了,想到我寫的明明這么好,又簡單使用,怎么別扭了。
于老大就把以前的代碼翻出來,隨手扔給小帥帥,說到:你先去看懂這份代碼,用這份代碼重新寫一份?
文件內(nèi)容:
/** * cURL 常用操作封裝 * * @author oShine */class ExtendedCurl{    /**     * 返回 JSON 內(nèi)容為對象     */    const JSON_OBJECT = 0;    /**     * 返回 JSON 內(nèi)容為數(shù)組     */    const JSON_ARRAY = 1;    /**     * cURL Handle     *     * @var resource     */    PRivate $curl;    /**     * 當前(默認) cURL 參數(shù)     *     * @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 參數(shù)     */    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;    }    /**     * 發(fā)送 GET 請求并返回解析后的 JSON 內(nèi)容     *     * @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);    }    /**     * 發(fā)送 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);    }    /**     * 發(fā)送 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;    }    /**     * 發(fā)送 POST 請求并返回解析后的 JSON 內(nèi)容     *     * @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);    }    /**     * 發(fā)送 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;    }} 小帥帥心里十分不樂意,心里恨不得要揍揍于老大,但又不得不屈服他的淫威之下,只得答應說到:好的,我先回去琢磨琢磨一下。
小帥帥 從此郁悶了一天。 拿著天書式的武林秘籍去修煉去了。
新聞熱點
疑難解答