利用Yahoo! Search API开发自已的搜索引擎-php版

 更新时间:2016年11月25日 16:07  点击:1853



<?php
// Yahoo Web Services PHP Example Code
// Rasmus Lerdorf
// www.111cn.net

$appid = ''YahooDemo'';
// 在这输入你申请的ID号

$service = array(''image''=>''http://api.search.yahoo.com/ImageSearchService/V1/imageSearch'',
                 ''local''=>''http://api.local.yahoo.com/LocalSearchService/V1/localSearch'',
                 ''news''=>''http://api.search.yahoo.com/NewsSearchService/V1/newsSearch'',
                 ''video''=>''http://api.search.yahoo.com/VideoSearchService/V1/videoSearch'',
                 ''web''=>''http://api.search.yahoo.com/WebSearchService/V1/webSearch'');
?>
<html>
<head><title>PHP Yahoo Web Service Example Code</title></head>
<body>
<form action="YahooSearchExample.php" method="GET">
Search Term: <input type="text" name="query" /><br />
Zip Code: <input type="text" name="zip" /> (for local search)<br />
<input type="submit" value=" Go! " />
<select name="type">
<?php foreach($service as $name => $val) {
    if(!empty($_REQUEST[''type'']) && $name == $_REQUEST[''type''])
      echo "<option SELECTED>$name</option>n";
    else echo "<option>$name</option>n";
} ?>
</select>
</form>
<?php
function done() {?>
</body></html>
<?php
exit;
}

if(empty($_REQUEST[''query'']) || !in_array($_REQUEST[''type''],array_keys($service))) done();

// Ok, here we go, we have the query and the type of search is valid
// First build the query
$q = '

控制 php 类的实例化次数!为了保证服务器资源的有效利用,而且一个类比方说模板啊,数据库什么的,在一个页面内只需要实例化一次!也就是在内存中只运行一个实例!那么为了避免重复实例化,那么控制 php 类的实例化次数,是很有必要的!方法其实很简单:就是给类一个外部接口,私有化(private)构造函数,抛弃可以在类外部使用new实例化该类的方法!以下,就是我给出的一个例子,相信大家一看就明白了!( PHP5 以上版本! )

<?php
class test{
   const name = ''test'';
   public static $havenew = false;
   public $name = ''我被限制为只能实例化一次了!'';
   private function __construct(){
  
   }
   function __destruct(){
    self::$havenew = false;
   }
   public function inter(){
    if(self::$havenew){
     echo ''类 ''.self::name.'' 已被实例化!'';
     return NULL;
    }else{
     self::$havenew = true;
     return new self;
    }
   }
}
$class1 = test::inter();
var_dump($class1);
echo ''<br />'';
$class2 = test::inter();
var_dump($class2);
?>

这里都是实例通过test里inter()这个方法实例化对象的!因为构造本身不可以直接访问,所以也不存在可以使用new 来实例化!

今天终于将PHP配置好了,以前也配置过,可以用但是总会有一点毛病什么的,现在完全的解决了。请注意是开发环境不是运行环境!开发环境和运行环境有很大区别的,不能说谁更严格,只能说两者的要求不同,开发环境注重开发效率,怎么方便怎么来,安全性一般,而运行环境注重安全性,注重运行效率,怎么快怎么来,怎么安全怎么来。
下面介绍下方法:Apache+php+mysql+EMS SQL manager+Zend Studio
这样做的目的只有一个:尽量的提高效率,减少简单重复的事情发生。
总体上如果不看Zend studio那么剩下的就是一个完整的PHP运行环境,为了方便我们在zend studio中最好将PHP文件或者你的站点保存到你的apache的htdocs目录下
然后按照Apache+php+mysql在windows下的安装与配置图解(最新版) 配置PHP的基本环境
这个是个Zend Studio的截图,相信看很明白,主要说的是右侧的output区域,这个区域可以看出来你的PHP页的运行效果,基本和在WEB服务器运行一样,如果运行后没有错,这个区域就会正常显示,然后看代码区的上面一点,点Browser,然后看到有点象浏览器,没错就是浏览器,假设你已经配置好了Apache+PHP+mysql+EMS Sql Manager,然后输入localhost/test.php,这样是不是很方便?
最后注意一点,安装apache时,如果有IIS的话,可能你的80端口已经被占用,使用8080端口好了,如果没有IIS,也没有其他WEB服务器,但是就是显示错误,那么很可能是迅雷占用了你的80端口,这个软件使用的频率应该说比IIS要多很多,一定注意,实在发现不了是什么软件可以用一些查看端口占用情况的软件,百度里很多的。 

新功能:
 1、AMF3支持:包含了RemoteObject,你可以尽情用在Flex2上。
 2、JSON(Javascrīpt Object Notation,轻量级的数据交换格式)支持:附加到gateway.php,现在json.php将使你更好的在Flash中使用自己的JSON服务。这里有两个例子:MochiKit 和 Spry。XML-RPC 同样被支持。
 3、一个新的浏览器。值得一提的是例程MochiTest同样是可以使用在JSON模式的例程。所以你可以自己证实它的确可以同时运行在AMP和JSON模式下。
 4、$this->methodTable的最后。 从现在开始是可以被忽略的。所有的Methods都可以间接的使用默认值。

安装Amfphp 1.9 beta 2

目前amfphp1.9的最新版是amfphp1.9 beta2,可以到 http://www.5etdemi.com/uploads/amfphp-1.9.beta.20070126.zip下载。将其解压缩到硬盘,拷贝到apache的web目录下。键入http://localhost:8080/amfphp/gateway.php,会出现amfphp网关的一个说明文件。AMFPHP基本的安装已经完成。

四、安装AMF扩展

最新版的AMFPHP加入了一个AMF扩展:它是用C写了一个AMF协议的解码和编码器,执行效率大大提升。尤其是大的数据源的时候,用php编码可能会超时而不能完成的操作,用AMF扩展就可以完成。 安装比较简易:

1. 下载

到http://www.teslacore.it/projects/amfext/amfext-0.8.7a-bin.zip下载,将php_amf.dll解压缩到PHP根路径下ext中。

2. 配置

打开php.ini,加上下面这一行:extension=php_amf.dll

我们不需要对AMFPHP 本身做任何修改或者配置。系统会自动监测那个扩展是否存在,存在就会自动应用,否则就会使用PHP的解码和编码。

好了,将其web共享,别名为flashservices。支持Amfphp的Web应用就配置好了。我们只需要将写好远程服务类放到Amfphp根目录services中就可以在Flash和Flex中访问了。

五、本地化设置

因为PHP默认的编码语言是ISO-8859-1,要使前面配置的Web应用支持简体中文,最好的方法是打开Amfphp根路径下的gateway.php,将 $gateway->setCharsetHandler("utf8_decode", "ISO-8859-1", "ISO-8859-1");修改为$gateway->setCharsetHandler("iconv", "GBK", "GBK");即可。要解决MySQL中的中文乱码问题,请用mysql_query("set names ''gbk''");

 

我们先来看一段代码。

<?php
for ($i=10; $i>0; $i--)
{
    echo $i;
    flush();
    sleep(1);
}
?>

按照php手册里的说法

    该函数将当前为止程序的所有输出发送到用户的浏览器。

上面的这段代码,应该隔一秒钟输出一次$i。但是实际中却不一定是这样。有可能是等了10秒钟后,所有的输出同时呈现出来。

好,我们来改一下这段代码,改成

<?php
ob_end_clean();//修改部分
for ($i=10; $i>0; $i--)
{
    echo $i;
    flush();
    sleep(1);
}
?>

嘿,加了这一句ob_end_clean();,居然就OK了。实际上,我们把ob_end_clean()换成ob_end_flush()也一样OK。

我再来改一改。

<?php
for ($i=10; $i>0; $i--)
{
    echo $i;
    ob_flush();//修改部分
    flush();
    sleep(1);
}
?>

运行一下,是不是发现$i也隔一秒输出一次了?这是为什么呢?
别急,我们来看看php.ini。

打开php.ini,搜索output_buffering,我们会看到类似这样的设置 output_buffering = 4096。正如它的名字output_buffering一样,这个设置的作用就是把输出缓冲一下,缓冲大小为4096bytes.

在我们的第一段代码里,之所以没有按预期的输出,正是因为这个output_buffering把那些输出都缓冲了。没达到4096bytes或者脚本结束,输出是不会被发送出去的。

而第二段代码中的ob_end_clean()和ob_end_flush()的作用,就是终止缓冲。这样就不用等到有4096bytes的缓冲之后才被发送出去了。

第三段代码中,用了一句ob_flush(),它的作用就是把缓冲的数据发送出去,但是并不会终止缓冲,所以它必须在每次flush()前使用。

如果不想使用ob_end_clean(),ob_end_flush()和ob_flush(),我们就必须把php.ini里的 output_buffering设得足够小,例如设为0。需要注意的是,如果你打算在脚本中使用ini_set(” output_buffering”,”0″)来设置,那么请停下来吧,这种方法是不行的。因为在脚本一开始的时候,缓冲设置就已经被载入,然后缓冲就开始了。

可能你会问了,既然ob_flush()是把缓冲的数据发送出去,那么为什么还需要用flush()???直接用下面这段代码不行吗??

<?php
for ($i=10; $i>0; $i--)
{
    echo $i;
    ob_flush();
    sleep(1);
}
?>

请注意ob_flush()和flush()的区别。前者是把数据从PHP的缓冲中释放出来,后者是把不在缓冲中的或者说是被释放出来的数据发送到浏览器。所以当缓冲存在的时候,我们必须ob_flush()和flush()同时使用。

那是不是flush()在这里就是不可缺少的呢?不是的,我们还有另外一种方法,使得当有数据输出的时候,马上被发送到浏览器。下面这两段代码就是不需要使用flush()了。(当你把output_buffering设为0的时候,连ob_flush()和ob_end_clean()都不需要了)

<?php
ob_implicit_flush(true);
for ($i=10; $i>0; $i--)
{
    echo $i;
    ob_flush();
    sleep(1);
}
<
[!--infotagslink--]

相关文章

  • vue+高德地图实现地图搜索及点击定位操作

    这篇文章主要介绍了vue+高德地图实现地图搜索及点击定位操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-09
  • vscode搭建STM32开发环境的详细过程

    这篇文章主要介绍了vscode搭建STM32开发环境的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-05-02
  • 安卓开发之Intent传递Object与List教程

    下面我们一起来看一篇关于 安卓开发之Intent传递Object与List的例子,希望这个例子能够为各位同学带来帮助。 Intent 不仅可以传单个的值,也可以传对象与数据集合...2016-09-20
  • php微信公众账号开发之五个坑(二)

    这篇文章主要为大家详细介绍了php微信公众账号开发之五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-02
  • 如何设计一个安全的API接口详解

    在日常开发中,总会接触到各种接口,前后端数据传输接口,第三方业务平台接口,下面这篇文章主要给大家介绍了关于如何设计一个安全的API接口的相关资料,需要的朋友可以参考下...2021-08-12
  • 站内搜索关键词变亮方法

    我们这个做法是把搜索结果出来,与搜索关键词相同的替换成高亮的字, 我们会用到str_replace(你找的关键字,你找的关键字,$str); 就这么容易了,好了下面我们来看一...2016-11-25
  • 微信开发生成带参数的二维码的讲解

    在微信公众号平台开发者那里,在“账号管理”那里,有一项功能是“生成带参数的二维码”,通过这儿生成的二维码,只要通过微信扫一扫之后,会把事件自动推送到微...2016-05-19
  • 怎么对百度网页搜索的检索指标进行评估

    用户为满足自己某种需求而来到搜索引擎的,判断用户的需求是做好网站的开始。只有准确地判断出用户需求,了解用户搜索的目的,才能合理地衡量出一个网站结果的质量好,做好搜...2016-10-10
  • 分享我对JS插件开发的一些感想和心得

    这篇文章主要给大家分享我对JS插件开发的一些感想和心得的相关资料,需要的朋友可以参考下...2016-02-09
  • Chrome插件开发系列一:弹窗终结者开发实战

    从这一节开始,我们将从零开始打造我们的chrome插件工具库,第一节我们将讲一下插件开发的基础知识并构建一个简单但却很实用的插件,在构建之前,我们先简单的了解一下插件以及插件开发的基础知识...2020-10-03
  • php搜索csv表格中是否存在指定数据

    php搜索csv中的数据原理是打开csv文件,然后一行行搜索指定的内容是否包含在我们读取这代码中,如果是返回true。 //搜索csv中指定内容 代码如下 复制代码...2016-11-25
  • 基于element-ui封装可搜索的懒加载tree组件的实现

    这篇文章主要介绍了基于element-ui封装可搜索的懒加载tree组件的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-05-23
  • Cocos2d-x UI开发之CCControlColourPicker控件类使用实例

    这篇文章主要介绍了Cocos2d-x UI开发之CCControlColourPicker控件类使用实例,本文代码中包含大量注释来讲解CCControlColourPicker控件类的使用,需要的朋友可以参考下...2020-04-25
  • pycharm 如何取消连按两下shift出现的全局搜索

    这篇文章主要介绍了pycharm 如何取消连按两下shift出现的全局搜索?下面小编就为大家介绍一下解决方法,还等什么?一起跟随小编过来看看吧...2021-01-16
  • Angular2搜索和重置按钮过场动画

    这篇文章主要介绍了Angular2搜索和重置按钮过场动画,需要的朋友可以参考下...2017-05-27
  • 详解微信开发中snsapi_base和snsapi_userinfo及静默授权的实现

    这篇文章主要介绍了详解微信开发中snsapi_base和snsapi_userinfo及静默授权的实现的相关资料,需要的朋友可以参考下...2017-03-13
  • Java开发SpringBoot集成接口文档实现示例

    这篇文章主要为大家介绍了Java开发SpringBoot如何集成接口文档的实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步...2021-10-28
  • Drupal8模块开发之区块和表单教程

    前页我们讲了 Drupal8模块开发之路由、控制器和菜单链接教程 ,现在我们将学习进一步开发Drupal8模块,区块和表单。 上一教程:Drupal8模块开发之路由、控制器和菜单链...2016-11-25
  • 24个ES6方法解决JS实际开发问题(小结)

    这篇文章主要介绍了24个ES6方法解决JS实际开发问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-01
  • Unity3D游戏开发数据持久化PlayerPrefs的用法详解

    在本篇文章里小编给大家整理了关于Unity3D游戏开发之数据持久化PlayerPrefs的使用的相关知识点内容,需要的朋友们参考下。...2020-06-25