• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

利用百度接口

php 搞代码 3年前 (2022-01-23) 22次浏览 已收录 0个评论

我的图片爬完啦,下面的是我利用百度图片接口的代码!很简单哦~~~~拿去用吧,别谢我。。。哈哈!!!我纠结的就是解密那里,效率可能会低一些,我是一个字母一个字母的去找的!不知道还有没有更快速一些的办法,在这里也请教你们啦,如果有好的方法告诉我一下哈!

   /**    *  通过百度来搜索图片链接,然后下载(这里先在本地电脑进行测试,没有放到服务器上,因为我的服务器磁盘空间太小,由于是图片,怕存不下)    *  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<strlen($objUrl);$i++){            $temp = $map[$objUrl[$i]];            if($temp!=''){                $objUrl[$i] = $temp;            }        }        \Think\Log::write('获取到了一个objurl:'.$objUrl,'WARN');        return $objUrl;    } 

顺便赠送你一个检测403、404、500页面的代码:

   /**    *  判断是否为404\500\403页面    *  @param str本文来源gaodai#ma#com搞@@代~&码*网/搞gaodaima代码ing $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教程有兴趣的朋友有所帮助。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:利用百度接口
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址