利用百度介面

來源:互聯網
上載者:User
我的圖片爬完啦,下面的是我利用百度圖片介面的代碼!很簡單哦~~~~拿去用吧,別謝我。。。哈哈!!!我糾結的就是解密那裡,效率可能會低一些,我是一個字母一個字母的去找的!不知道還有沒有更快速一些的辦法,在這裡也請教你們啦,如果有好的方法告訴我一下哈!

   /**    *  通過百度來搜尋圖片連結,然後下載(這裡先在本地電腦進行測試,沒有放到伺服器上,因為我的伺服器磁碟空間太小,由於是圖片,怕存不下)    *  1.先取出我的車輛的id 和 modelname    *  2.利用百度搜尋圖片的介面擷取圖片JSON資訊    *  3.解析JSON ,遍曆裡面的data ,拿到objUrl    *  4.對objUrl 進行解密    *  5.檢測解密後的objUrl 的可用性    *  6.擷取可用的objUrl 圖片到本地    */     public function getImageFromBaidu(){     // 這個是我自己的業務方法,你可以根據自己的需要去調整,但是裡面也有需要注意的地方        // 開啟關閉瀏覽器不插斷要求        ignore_user_abort(true);        set_time_limit(0);                $carList = M('car')->field('id,modelname')->select();        foreach($carList as $car){            \Think\Log::write('即將擷取'.$car['modelname'].'的圖片資料','WARN');            // 請求介面,拿到JSON資料            $jsonResult = $this->useBaiduSearch($car['modelname']);            if($jsonResult == null || $jsonResult == '')             {                \Think\Log::write($car['modelname'].'的JSON擷取失敗','WARN');                continue;            }                    $jsonResult = str_replace("'",'"',$jsonResult);  // 返回來的json資料一定記得將裡面的 單引號 替換成雙引號!php4 以上對json資料要求比較嚴格

            $jsonResult = preg_replace('/,\s*([\]}])/m', '$1', $jsonResult);            $jsonArray = json_decode($jsonResult,true);            // 迴圈裡面的data 部分,因為他是stdclass 類型,所以需要 ->            foreach($jsonArray['data'] as $data){                $objUrl = $data['objURL'];                if(!$objUrl){                    \Think\Log::write('objUrl 不可用','WARN');                    continue;                }                // 對objUrl 進行解密                $objUrl = $this->decodeObjUrl($objUrl);                                // 測試這個url是否可用                if($this->http_status($objUrl))                    continue;                // 如果可用,進行下載                $result = getImage($objUrl,'','./Uploads/'.$car['modelname'].'/');                if(!$result){                    \Think\Log::write($objUrl.'擷取失敗','WARN');                }            }            \Think\Log::write($car['modelname'].'的圖片資料擷取完畢','WARN');            sleep(1);        }    }             /*     *   使用百度圖片搜尋介面擷取圖片json內容資料    *   @param string $word 搜尋關鍵詞    *   @return json    */    public function useBaiduSearch($word=''){   // 這個才是真正請求的JSON資料,你可以根據自己的語言進行變換,介面地址就是baseUrl,裡面的$word 即為關鍵詞        if($word == '') return null;
        // 下面這個是我利用的url,如果你用時不好用了,你可以參考我前面的文章 “尋找百度圖片搜尋介面--one two three”,自己再找下        $baseUrl = 'http://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&fp=result&ie=utf-8&oe=utf-8&word='                .$word.'&pn=30&rn=30&gsm=700001e&1457697756442=';        return file_get_contents($baseUrl);    }
    /**    *  解密objUrl    *  @param string $objUrl 要解密的objUrl     *  @return string 解密後的objUrl
    *  這裡的解密密碼,來自百度js檔案,如果有改動,也請參考前面的文章,自行尋找    */    public function decodeObjUrl($objUrl = ''){        if($objUrl == '') return '';        // 這裡的解密對照以百度js裡面的為準        \Think\Log::write('準備解密一個objurl:'.$objUrl,'WARN');        $map = array(            'w' => "a", 'k'=> "b", 'v'=> "c", '1'=> "d",            'j'=> "e", 'u'=> "f", '2'=> "g", 'i'=> "h",            't'=> "i", '3'=> "j", 'h'=> "k", 's'=> "l",            '4'=> "m", 'g'=> "n", '5'=> "o", 'r'=> "p",            'q'=> "q", '6'=> "r", 'f'=> "s", 'p'=> "t",            '7'=> "u", 'e'=> "v", 'o'=> "w", '8'=> "1",            'd'=> "2", 'n'=> "3", '9'=> "4", 'c'=> "5",            'm'=> "6", '0'=> "7", 'b'=> "8", 'l'=> "9",            'a'=> "0",            '_z2C$q'=> ":",            '_z&e3B'=> ".",            'AzdH3F'=> "/"        );                $objUrl = str_replace('_z2C$q',$map['_z2C$q'],$objUrl);        $objUrl = str_replace('_z&e3B',$map['_z&e3B'],$objUrl);        $objUrl = str_replace('AzdH3F',$map['AzdH3F'],$objUrl);                for($i=0;$i順便贈送你一個檢測403、404、500頁面的代碼:
   /**    *  判斷是否為404\500\403頁面    *  @param string $url 即將請求的頁面    *  @return bool    */    public function http_status($url) {        $ch = curl_init();        curl_setopt($ch, CURLOPT_URL, $url);        curl_setopt($ch, CURLOPT_HEADER, 1);        curl_setopt($ch, CURLOPT_NOBODY, 1);        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        curl_setopt($ch, CURLOPT_TIMEOUT, 5);        $status = curl_exec($ch);                curl_close($ch);        $have404 = strpos($status,'Location: /Error/404.html');        $have500 = strpos($status,'Location: /Error/500.html');        $have403 = strpos($status,'Location: /Error/403.html');        if($have404 || $have500 || $have403){            \Think\Log::write('發生錯誤啦:'.$have403.':'.$have404.':'.$have500,'WARN');            return true;        }         return false;    }
ok!完活,最後再配上我抓到的圖片的幾張:



以上就介紹了利用百度介面,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.