WEB开发网
开发学院软件开发Python Python Web 服务开发人员: 现实世界,第一部分 阅读

Python Web 服务开发人员: 现实世界,第一部分

 2007-03-29 12:42:00 来源:WEB开发网   
核心提示: 下载 Google API 工具集,它不包含任何 Python,Python Web 服务开发人员: 现实世界,第一部分(2),但是包括了很好的封装库和 Java 以及 .NET(使用 C# 和 Visual Basic) 的示例,在下载的工具集中包含一些我们可以立即使用的 GoogleS

下载 Google API 工具集。它不包含任何 Python,但是包括了很好的封装库和 Java 以及 .NET(使用 C# 和 Visual Basic) 的示例。在下载的工具集中包含一些我们可以立即使用的 GoogleSearch WSDL 文件和 Google API 参考手册(采用 HTML 格式)。正如您在 清单2的 WSDL 文件中看到的,Google API 提供了三种操作:

doGoogleSearch( ) ,用于执行通过 Google 的 Web 查询(目前,该服务不支持搜索图形或者组)。

doGetCachedPage( ) ,它将检索 Web 页面,在它的 Web-crawlers 遇到 Web 页面时,由 Google 来进行缓存。

doSpellingSuggest( ) ,它将返回所提交的术语清单的正确拼写。

同时也请注意返回的 GoogleSearchResult 是复杂类型。

现在开始

对于第一次登陆 Google,我们将编写 Python 客户端程序来直接构造 XML 字符串形式的 SOAP 请求,并且使用 Python httplib 模块来发送一个 HTTP 消息(参见 清单3)。我们将搜索两个词“spotted owl”,请求不超过 10 个的结果项('maxResults')并以第一个开头('start', zero-indexed)——而且,我们将不使用任何过滤器和限制条件。将搜索限制在特定的语言('lr')并从结果中过滤掉成人内容是可能的。要获得关于这些方面的其他详细信息,请参见 Google Web API 参考文档(参见 参考资料)。这里,您可以开始看到连接到服务的简单性。

清单3. 使用 httplib 对 API 的直接 XML 访问

import sys, httplib
_post = '/search/beta2'
_host = 'api.google.com'
_port = 80
# envelope_template is a simple string template that matches the required
# Google API SOAP envelope as described in the WSDL
envelope_template = """<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
 <SOAP-ENV:Body>
  <ns1:doGoogleSearch xmlns:ns1="urn:GoogleSearch"
     SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
   <key xsi:type="xsd:string">%s</key>
   <q xsi:type="xsd:string">%s</q>
   <start xsi:type="xsd:int">%d</start>
   <maxResults xsi:type="xsd:int">%d</maxResults>
   <filter xsi:type="xsd:boolean">%s</filter>
   <restrict xsi:type="xsd:string">%s</restrict>
   <safeSearch xsi:type="xsd:boolean">%s</safeSearch>
   <lr xsi:type="xsd:string">%s</lr>
   <ie xsi:type="xsd:string"></ie>
   <oe xsi:type="xsd:string"></oe>
  </ns1:doGoogleSearch>
 </SOAP-ENV:Body>
</SOAP-ENV:Envelope>"""
# Google search options - for populating the envelope-template
_license_key = 'INSERT YOUR KEY HERE'
_query = 'spotted owl'
_start = 0
_maxResults = 10
_filter = 'false'
_restrict = ''
_safeSearch = 'false'
_lang_restrict = ''
# populate the outbound SOAP envelope
envelope = envelope_template%( _license_key, _query,
                _start, _maxResults,
                _filter, _restrict,
                _safeSearch, _lang_restrict )
# now, we open an HTTP connection, set required headers, and send the SOAP envelope
envlen = len(envelope)
http_conn = httplib.HTTP(_host, _port)
http_conn.putrequest('POST', _post)
http_conn.putheader('Host', _host)
http_conn.putheader('Content-Type', 'text/xml; charset="utf-8"')
http_conn.putheader('Content-Length', str(envlen))
http_conn.putheader('SOAPAction', '')
http_conn.endheaders()
http_conn.send(envelope)
# fetch HTTP reply headers and the response
(status_code, message, reply_headers) = http_conn.getreply()
response = http_conn.getfile().read()
# dump raw xml
print "----------------------------------------"
print "send headers:\n", http_conn.headers
print "----------------------------------------"
print "send body:\n", envelope
print "----------------------------------------"
print "  status code: ", status_code
print "status message: ", message
print " reply headers:\n", reply_headers
print "----------------------------------------"
print "response body:\n", response

上一页  1 2 3 4 5 6  下一页

Tags:Python Web 服务

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接