现在的位置: 首页 > 综合 > 正文

如何在 Google Gadget 中显示击球统计数据

2013年04月02日 ⁄ 综合 ⁄ 共 1960字 ⁄ 字号 评论关闭

在本文中,我们通过编写有趣的棒球击球记录程序程序展示了如何使用这三个 Google Code API。本文的编排以及应用程序代码的灵感均来自 Joseph Adler 的杰作 Baseball Hacks(参见 参考资料)。
我们使用了三个 Google Code API:Google Chart API、Google Spreadsheets Data API 和
Google Gadgets API。我们不打算详尽介绍这些 API,但希望我们的介绍恰到好处,能激起您的兴趣。更详细的内容可以参考
Google 文档和教程。我们的目的是构建一个 Google Gadget
来显示美国棒球联盟球队的最新击球数据。为实现此目的,我们需要以下三个步骤。

首先,从一个棒球网站下载当前的棒球数据并将
这些数据存储于以逗号分隔的文本文件。其次,使用 Google Spreadsheets Data API 将这些数据上传到 Google
电子数据表。第三,编写一个 Google Gadget 来从此电子数据表读取这些数据并利用 Google Chart API
以条形图显示这些数据。



回页首

从 Web 上获取数据

第一步是下载数据。我们的代码基于 Baseball Hacks 中的 “Hack #25: Spider Baseball Sites for Data”。我们在本文中不打算详细介绍它,因为在此书中已有很多的解释。(我们的代码存于 get_all_teams_hitting.pl Perl 程序和 GetStats.pm Perl 模块,均包括在本文的 示例代码下载 中)。但有以下几点值得一提。


先,虽然针对比赛结果(即积分表)的 RSS 和 Atom 提要有很多,但针对实时的球员积分数据的 RSS 和 Atom
提要好像没有。如果有的话,就需要从这些 Web 提要中获取数据。然而,我们却不得不从 HTML
页面获取数据。这样做不是很好,而且不可靠。比如,如果 HTML
的格式突然变了,代码很容易崩溃。第二点是在没有得到站点主人的同意之前不要从其站点获取数据。请先查看站点的
“使用条款”。第三,如果可以从该站点获取数据,也不要太过分。在连续对页面进行单击的空隙间,请留出一两秒的停顿。这不仅是个礼貌之举,而且,如果不这
么做,您很可能会被拒之站外。(我们进行了测试,没有停顿的代码会遭到拒绝)。



回页首

以编程的方式向 Google 电子数据表上传数据

我们或取 HTML 页、下载数据并将其存储在以逗号分隔的各个文本文件中,每个队一个文件,我们希望将这些数据存储在一个 Google
电子数据表中以供 Google Gadget 随后访问。Google Spreadsheets Data API
让您能够按行或按单元格添加、更改和删除 Google 电子数据表的内容。Google Spreadsheet Data API 对
Java™、.NET、PHP 和 Python 都可用。我们使用的是 Python,因为我们更喜欢它。

清单 1 中,Python 代码循环遍历这组以逗号分隔的文本文件,然后调用向电子数据表上传数据的代码。(我们还使用了另一个数据文件 MLBTeams.csv,其中包含了这些球队的列表)。

清单 1. upload_all_teams_hitting.py 的片段

				
mlb_teams = open('../../data/MLBTeams.csv')
try:
lines = mlb_teams.readlines( );
finally:
mlb_teams.close( )

# Skip header.
for line in lines[1:]:
line = line.rstrip();
if line != '':
parts = line.split(",")
curr_wksht_id = parts[1].rstrip()
teamAbbrev = parts[0].rstrip()
print "Updating: " + teamAbbrev
infile = "../../tempData/" + teamAbbrev + "Hitting.txt"

uploader = Uploader(user, pw, infile)
if curr_key != '':
uploader.set_spreadsheet(curr_key)
if curr_wksht_id != '':
uploader.set_worksheet(curr_wksht_id)
uploader.prompt_delete_old_rows_and_add_new_rows()

以编程的方式与 Google 电子数据表交互的方式有两种:基于行的提要和基于单元格的提要。在这个应用程序中,由于我们通常都只按行删除旧数据并按行添加新数据,所以我们主要使用基于行的提要。

下面是我们使用的 gdata.spreadsheet 方法和字段:

本文转自IBM Developerworks中国

      请点击此处查看全文

 

抱歉!评论已关闭.