第 12 章 SOAP Web 服务
Description: Python from novice to pro
Keywords: Python, Dive Into Python, tutorial, object-oriented, programming, documentation, book, free

# 深入 Python :Dive Into Python 中文版 Python 从新手到专家 [Dip_5.4b_CPyUG_Release] | Find:

## 第 12 章 SOAP Web 服务

第 11 章 关注 HTTP 上面向文档的web 服务。“输入参数” 是 URL，“返回值” 是需要你来解析的一个实际的 XML 文档。

本章将关注更加结构化的 SOAP web 服务。SOAP 不需要你直接与 HTTP 请求和 XML 文档打交道，而是允许你模拟返回原始数据类型的函数调用。正像你将要看到的，这个描述恰如其份；你可以使用标准 Python 调用语法通过 SOAP 库去调用一个函数，这个函数也自然会返回 Python 对象和值。但揭开这层面纱，SOAP 库实际上执行了一个多个 XML 文档和远程服务器参与的复杂处理过程。

SOAP 的贴切定义很复杂，不要误认为 SOAP 就是用于调用远程函数。有些人觉得应该补充上：SOAP 还允许单向异步的信息通过，以及面向文档的 Web 服务。有这样想法的人是正确的，SOAP 的确是这样，但却不止于此。但这一章的重点在于所谓的 “RPC-style” SOAP――调用远程函数获得返回结果。

## 12.1. 概览

你用 Google，对吧？它是一个很流行的搜索引擎。你是否希望能以程序化的方式访问 Google 的搜索结果呢？现在你能做到了。下面是一个用 Python 搜索 Google 的程序。

### 例 12.1. `search.py`

    from SOAPpy import WSDL

    # you'll need to configure these two values;
    # see http://www.google.com/apis/
    WSDLFILE = '/path/to/copy/of/GoogleSearch.wsdl'
    APIKEY = 'YOUR_GOOGLE_API_KEY'

    _server = WSDL.Proxy(WSDLFILE)
    def search(q):
        """Search Google and return list of {title, link, description}"""
        results = _server.doGoogleSearch(
            APIKEY, q, 0, 10, False, "", False, "", "utf-8", "utf-8")
        return [{"title": r.title.encode("utf-8"),
                 "link": r.URL.encode("utf-8"),
                 "description": r.snippet.encode("utf-8")}
                for r in results.resultElements]

    if __name__ == '__main__':
        import sys
        for r in search(sys.argv[1])[:5]:
            print r['title']
            print r['link']
            print r['description']
            print

你可以在较大的程序中以模块导入并使用它，也可以在命令行上运行这个脚本。在命令行上，需要把查询字符串作为命令行参数使用，之后就会打印出最前面的五个 Google 查询结果，包括：URL、标题和描述信息。

下面是以 “python” 作为命令行参数的查询结果。

### 例 12.2. `search.py` 的使用样例

    C:\diveintopython\common\py> python search.py "python"
    <b>Python</b> Programming Language
    http://www.python.org/
    Home page for <b>Python</b>, an interpreted, interactive, object-oriented,
    extensible<br> programming language. <b>...</b> <b>Python</b>
    is OSI Certified Open Source: OSI Certified.

    <b>Python</b> Documentation Index
    http://www.python.org/doc/
     <b>...</b> New-style classes (aka descrintro). Regular expressions. Database
    API. Email Us.<br> docs@<b>python</b>.org. (c) 2004. <b>Python</b>
    Software Foundation. <b>Python</b> Documentation. <b>...</b>

    Download <b>Python</b> Software
    http://www.python.org/download/
    Download Standard <b>Python</b> Software. <b>Python</b> 2.3.3 is the
    current production<br> version of <b>Python</b>. <b>...</b>
    <b>Python</b> is OSI Certified Open Source:

    Pythonline
    http://www.pythonline.com/

    Dive Into <b>Python</b>
    http://diveintopython.org/
    Dive Into <b>Python</b>. <b>Python</b> from novice to pro. Find:
    <b>...</b> It is also available in multiple<br> languages. Read
    Dive Into <b>Python</b>. This book is still being written. <b>...</b>

### 进一步阅读

- http://www.xmethods.net/ 是一个访问 SOAP web 服务的公共知识库。
- SOAP 规范相当可读，如果你喜欢这类东西的话。