定制Opera的内置搜索

转自:Opera Browser Wiki

Opera整合搜索引擎的确是相当人性化的设计,我们不必一遍又一遍花时间登陆那些引擎的首页,也不必像IE那样装上许多我们不知道会起什么作用的工具栏,就可以方便地使用搜索引擎。

如果你对Opera“原装”的搜索引擎感到不满(这种情况在我们非西方用户使用英文版时非常普遍),那么您完全可以自己定义Opera搜索引擎列表。

Opera整合引擎的列表及参数基本都在 search.ini 文件。这个文件一般在opera安装目录下,是文本格式,可以用文本编辑器打开(包括UltraEdit,UEStudio05,Vim,记事本……)。就是说,我们如果要对搜索引擎列表进行修改,手段就是修改这个search.ini文件。

事实上已经有一个Opera search.ini Editor的软件可以通过图形界面编辑 search.ini 文件。但是作为对修改添加引擎的详细说明,手动编辑的具体介绍是十分必要的。

记住编辑前,先备份你的search.ini文件。

首先我们来分析文件结构。打开一个 search.ini 文件,我们看到如下文件结构:

  1. INIOpera Preferences version 2.0
  2. ; Do not edit this file while Opera is running
  3. ; This file is stored in UTF-8 encoding
  4.  
  5. [Version]
  6. File Version=6
  7.  
  8. [Search Engine 1]
  9. Name=&Google
  10. URL=""http://www.google.com/search?q=%s&sourceid=opera&num=%i&ie=utf-8&oe=utf-8""
  11. Query=
  12. Key=g
  13. Is post=0
  14. Has endseparator=0
  15. Encoding=utf-8
  16. Search Type=0
  17. Verbtext=17063
  18. Position=-1
  19. Nameid=0
  20.  
  21. [Search Engine 2]
  22. ……………………
  23.  
  24. [Search Engine 3]
  25. ……………………
  26.  
  27. ………………………………………………

分析文件结构,我们把:

  1. Opera Preferences version 2.0
  2. ; Do not edit this file while Opera is running
  3. ; This file is stored in UTF-8 encoding

部分叫做文件头,它说明的信息很简单,文件是opera属性文件2.0版,用UTF-8编码存储,在Opera运行时不要编辑该文件。文件头对搜索引擎列表没有影响,只是对整个文件一个简单的介绍。任何操作都尽量不要修改。

文件头下面的结构是:

  1. [Version]
  2. File Version=6
  3.  
  4. [Search Engine 1]
  5. ……………………
  6.  
  7. [Search Engine 2]
  8. ……………………
  9.  
  10. [Search Engine 3]
  11. ……………………

那么,显然[Version]标题下面是说列表格式的版本,一般不要更改。
在Opera 8中,File Version=6。
在Opera 9中,File Version=7。

而剩下的每个[Search Engine 数字]标题都对应一个搜索引擎。我们将通过修改此类标题下面的各项参数来定义一个搜索引擎。

以默认的第一个搜索引擎google为例,分别讲述每个参数的作用:(为了方便讲述,我在前面加了行号,在文件里面是不应该有的)

  1. [Search Engine 1]
  2.  Name=&Google
  3.  URL=""http://www.google.com/search?q=%s&num=%i""
  4.  Query=
  5.  Key=g
  6.  Is post=0
  7.  Has endseparator=0
  8.  Encoding=utf-8
  9.  Search Type=0
  10.  Verbtext=17063
  11.  Position=-1
  12.  Nameid=0

格式很明了,前部分是属性名称,等号后面是设定的参数。

分行解释:

  1. [Search Engine 1]

方括号里面最后的数字决定了引擎的在opera程序界面中的显示顺序,比如说你在“首选项”里看到的,还有右键单击个人栏点“显示搜索”也能看到。

需要注意的是,在英文版中的”Super Search”功能(官方翻译为“搜索各引擎”)中,使用的是[Search Engine 1]和[Search Engine 2]所定义的引擎。而且作为[Search Engine 1]然后[Search Engine 2]然后[Search Engine 3]…………从小到大的顺序不能打乱,[]里面不能加空格,否则从打乱或错误处往后的引擎不会显示在程序界面中。

最多定义到50个搜索引擎(包括翻译引擎之类),就是[Search Engine 1]到[Search Engine 50],多了的程序不予识别。

  1. Name=&Google

这里等号后面是程序界面中会显示的搜索引擎的名称,比方说搜索框。你当然可以随心所欲填写干扰别人正常使用,但最好你记得每个名称真正对应什么引擎。

这里的”&”符号代表符号后面紧接的一个字母是这个引擎的快捷键,但符号”&”不会在程序界面中显示出来。拿&google当例子,”&”后面的”g”键就成了某些对话框中Google引擎的快捷键。而且在某些对话框中,Google的G字母下面会出现下划线。如果你不想(尤其在定义一些中文名称时),完全可以不要这个符号,只是少了快捷键,并不影响搜索效果。

  1. URL=""http://www.google.com/search?q=%s&sourceid=opera&num=%i&ie=utf-8&oe=utf-8""

这一行是定义搜索的核心部分,等号后面是搜索引擎的接受搜索请求的格式。这里牵扯到一个问题,就是什么样的引擎可以被整合到Opera,这个问题在附录有说明。

这里存在两个变量(后面解释),就是%s和%i。%s代表你要搜索的字词,%i代表你需要的每页返回的搜索结果数。

这样再解释等号后面的网址就是:

http://www.google.com/search?q=要搜索的字符&sourceid=opera&num=每页返回结果数&ie=utf-8&oe=utf-8

比如你在搜索框输入Truth然后回车,在得到搜索结果以后,会发现地址栏变成:

http://www.google.com/search?q=Truth&sourceid=opera&num=0&ie=utf-8&oe=utf-8

和URL相比%s变成了Truth,%i变成了0。

这是因为,搜索引擎大同小异,要搜索,我们只需要定义两个值,一个是搜什么关键词,一个是每页显示多少结果。这两个值不可能每次搜索都一样(每天搜索自己名字自恋的人除外),所以我们把它定义成未知数x和y。开始提到的所谓变量,可以理解为未知数。未知数x就是%s,y就是%i。%s是个字符串,%i是个数字。格式规定,只能用%s,%i表示(符合C程序习惯),而不能用x、y,但基本一个意思。

我们在搜索的时候,在搜索框或个人栏上搜索框输入的字符就是%s的值;在右键搜索中,涂黑选定的字符是%s的值;而%i的值可以在首选项设定,如果没有设定过,它的值默认是0,也就是按网站默认的每页结果数显示。

所以在例子中地址栏出现了%s变成了Truth,%i变成了0的变化。

至于&ie=utf-8&oe=utf-8和&sourceid=opera,说的是编码格式和用户识别,不用专门设定,也不是每个引擎都一样,你甚至可以把这些都删掉,不影响使用。

其实问号后面&符号之间的字符串位置可以颠倒,比方说:

http://www.google.com/search?q=%s&sourceid=opera&num=%i&ie=utf-8&oe=utf-8

http://www.google.com/search?q=%s&ie=utf-8&oe=utf-8&sourceid=opera&num=%i

效果是一样的。

注意:在Opera6.x中,%s必须放在%i的前面,不然用这个引擎搜索会导致程序崩溃。

  1. Query=

只有当行6是Is post=1的时候,这一行等号后面才需要填东西。Google和大部分引擎的行6是Is post=0,所以后面留空,此时留空不留空都一样,程序不读这一行。

如果行6是Is post=1,那么这里按格式填URL后面需要提交的那部分。

拿Amazon.de来说
行3和行4就应该是:

URL=http://www.amazon.de/exec/obidos/search-handle-form/ Query=url=index%3Dbooks-de&field-keywords=%s&size=%i

当你搜索的时候,Query中的内容将不会显示在地址栏,搜索完了地址栏还是http://www.amazon.de/exec/obidos/search-handle-form/

  1. Key=g

这是设定关键字的地方,比如这里设定了g做google的关键字,那么在地址栏输入“g Truth”就是在搜索”Truth”。

只有在Linux里面,大小写字母不一样,Key=g和Key=G是不一样的。在Windows里面,大小写字母一样,可以用单词作关键字,比方说把搜狐引擎添加以后设定Key=sohu,你可以在地址栏输入“sohu fishest”来搜索“Fishest”这个词。

如果这些引擎关键字有一样的,那么关键字就等于没有,谁用都无效。

如果关键字留空了,只有”Key=”那么这个引擎以及排在后面所有的引擎都不能直接显示在程序界面例如个人栏上。这个特性实现了隐藏后面众多翻译引擎的功能,但也可能是一个Bug。

  1. Is post=0

当引擎用HTTP GET取得关键词的时候,Is post=0;当引擎不允许GET查询需要post关键词,Is post=1,这种情况比较少见。

  1. Has endseparator=0

这个参数有两个值,表示显示引擎列表的时候,这个引擎后面有没有分隔符,0是没有,-1是有。这个可以从搜索框拉出的下拉菜单看到。也可以右键单击个人栏-显示搜索。

  1. Encoding=utf-8

搜索引擎用的编码格式。这里Google用的是UTF-8。在后文和附录里有详细说明。

  1. Search Type=0

一些固定的搜索类型代表含义

Search Type 2: 搜索各引擎
Search Type 12: 页内搜索 (搜索页面中的文字)
Search Type 50: 字典
Search Type 51: 百科全书
Search Type 52: 货币转换
Search Type 100: 英语翻法语
Search Type 100 到 116: 翻译XX语为XX语
Search Type 117: 西班牙语翻法语

下面是按照官方文件分析出的结果,并没有被严格规定,但在编辑时推荐使用:

Search Type 3:电子商务/产品搜索
Search Type 5:软件下载
Search Type 7:图像搜索
Search Type 8:视频搜索
Search Type 9:音乐搜索
Search Type 10:讨论组
Search Type 13:新闻搜索

下面是非官方定义的搜索类型,推荐使用:

Search Type 11:Flash搜索
Search Type 14:歌词搜索

Search Type可以重复,一般你加入的搜索引擎可以设Search Type=0。

当然你也可以用这个设定定义个人栏上每个搜索框后面的小图标,Search Type=X用buttons.ini文件SearchX?条目下的图标。这样你能用最多16个图标。[Search00?]到[Search15?]。一个图标可以重复使用。

  1. Verbtext=17063

搜索引擎在程序界面显示的标题,例如各处搜索框没有被激活的时候。17063对应语言文件中的字符串,17063在中文语言包就是:”搜索 %s”。

  1. Position=-1

当搜索引擎不在个人栏显示的时候,Position=-1;当此搜索引擎在个人栏显示,Position=它的位置。

  1. Nameid=0

它用来取代Name的值,后面对应一个语言包里的字符串,比如说&Google就是Nameid=17171,这里是0,程序界面上就显示Name的引擎名称。

关于search.ini文件本身:

1.如果你没有search.ini文件,或者这个文件是空的,Opera将只显示Google,Alltheweb和页内搜索三项。(可能是个Bug)

2.如果你的search.ini文件里加了超过三个搜索引擎,Opera就不会自动增加其他内置引擎(比如页内搜索)。

3.每次修改完个人栏关闭Opera的时候,Opera会修改Search.ini文件。不要在Name和Nameid上作修改,会出现显示不正常的BUG。

那么我们怎么添加搜索引擎呢?
下面以添加百度为例讲解。

1.判断百度能不能被添加。

到百度首页搜索一个词,用“孤波”作例子。地址栏得到:

http://www1.baidu.com/baidu?word=%B9%C2%B2%A8

很显然,我们看到简单的?xx=xx的结构,而且很明显word是指关键词,等号后面的%B9%C2%B2%A8(汉字编码后一般显示成几个百分号跟16进制数间隔排列的形式)是汉字“孤波”的编码后的值,就是说这个位置显然就是%s。我们还可以判断出百度是使用GET来获取关键词的,可以被Opera整合,而且Is post=0。

如果地址栏是http://………….ger1或http://…………/……/之类其他没有?xx=xx结构的,一般是Post得到关键词,可以通过分析网页源码得到url和query信息。

2.得到URL=http://www1.baidu.com/baidu?word=%s

3.辨别百度汉字编码格式(附录有字符集的说明)。

如果你搜索英语的话,字符即不那么重要,几乎所有字符即都和英语字符集兼容。而目前汉语字符集流行的是UTF-8和GB-2312,Opera支持gbk字符集,gbk兼容GB-2312,所以中文引擎选字符集就是选gbk和UTF-8。

一个简单的判断方法是,在gbk中一个汉字编码对应%XX%XX–两个百分号两个16进制数,而UTF-8里面则是每个汉字对应%XX%XX%XX–三个百分号三个十六进制数。

我们用两个字得到%B9%C2%B2%A8,可判断出应该用gbk编码。

综合以上信息,关闭Opera,修改search.ini的[Search Engine 2]条目为:

  1. Name=百度
  2. URL=""http://www1.baidu.com/baidu?word=%s""
  3. Query=
  4. Key=b
  5. Is post=0
  6. Has endseparator=0
  7. Encoding=gbk
  8. Search Type=1
  9. Verbtext=17063
  10. Position=-1
  11. Nameid=0

(这里改了原来Search Engine 2,你可以在原来基础上添加,但是编码“2”也要相应改变)

启动Opera,可以使用了。

Leave a Reply

You must be logged in to post a comment.