热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

利用百度接口

:本篇文章主要介绍了利用百度接口,对于PHP教程有兴趣的同学可以参考一下。
我的图片爬完啦,下面的是我利用百度图片接口的代码!很简单哦~~~~拿去用吧,别谢我。。。哈哈!!!我纠结的就是解密那里,效率可能会低一些,我是一个字母一个字母的去找的!不知道还有没有更快速一些的办法,在这里也请教你们啦,如果有好的方法告诉我一下哈!

   /**
    *  通过百度来搜索图片链接,然后下载(这里先在本地电脑进行测试,没有放到服务器上,因为我的服务器磁盘空间太小,由于是图片,怕存不下)
    *  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教程有兴趣的朋友有所帮助。

推荐阅读
  • JavaScript 跨域解决方案详解
    本文详细介绍了JavaScript在不同域之间进行数据传输或通信的技术,包括使用JSONP、修改document.domain、利用window.name以及HTML5的postMessage方法等跨域解决方案。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 随着Linux操作系统的广泛使用,确保用户账户及系统安全变得尤为重要。用户密码的复杂性直接关系到系统的整体安全性。本文将详细介绍如何在CentOS服务器上自定义密码规则,以增强系统的安全性。 ... [详细]
  • 本文详细介绍如何安装和配置DedeCMS的移动端站点,包括新版本安装、老版本升级、模板适配以及必要的代码修改,以确保移动站点的正常运行。 ... [详细]
  • 搭建个人博客:WordPress安装详解
    计划建立个人博客来分享生活与工作的见解和经验,选择WordPress是因为它专为博客设计,功能强大且易于使用。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 本文详细介绍了如何在Oracle VM VirtualBox中实现主机与虚拟机之间的数据交换,包括安装Guest Additions增强功能,以及如何利用这些功能进行文件传输、屏幕调整等操作。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 近期尝试从www.hub.sciverse.com网站通过编程手段获取数据时遇到问题,起初尝试使用WebBrowser控件进行数据抓取,但发现使用GET方法翻页时,返回的HTML代码始终相同。进一步探究后了解到,该网站的数据是通过Ajax异步加载的,可通过HTTP查看详细的JSON响应。 ... [详细]
  • 解决PHP项目在服务器无法抓取远程网页内容的问题
    本文探讨了在使用PHP进行后端开发时,遇到的一个常见问题:即在本地环境中能够正常通过CURL获取远程网页内容,但在服务器上却无法实现。我们将分析可能的原因并提供解决方案。 ... [详细]
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • 从CodeIgniter中提取图像处理组件
    本指南旨在帮助开发者在未使用CodeIgniter框架的情况下,如何独立使用其强大的图像处理功能,包括图像尺寸调整、创建缩略图、裁剪、旋转及添加水印等。 ... [详细]
  • 本文探讨了在一个物理隔离的环境中构建数据交换平台所面临的挑战,包括但不限于数据加密、传输监控及确保文件交换的安全性和可靠性。同时,作者结合自身项目经验,分享了项目规划、实施过程中的关键决策及其背后的思考。 ... [详细]
  • HTML:  将文件拖拽到此区域 ... [详细]
author-avatar
我是刘平2010_327
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有