使用gdata.spreadsheet.text_db.DatabaseClient时解决CreateDatabase经常失败的问题

41 阅读1分钟

CreateDatabase通常在Google数据API上失败。以下是试图创建一个新的电子表格的测试程序:

huake_00183_.jpg

import gdata.spreadsheet.text_db
import getpass
import atom
import gdata.contacts
import gdata.contacts.service
import smtplib
import time

password = getpass.getpass()
client = gdata.spreadsheet.text_db.DatabaseClient(username='jmv@gmail.com',password=password)
database = client.CreateDatabase('My Test Database')
table = database.CreateTable('addresses', ['name','email',
http://www.jshk.com.cn/mb/reg.asp?kefu=xiaoding;//爬虫IP免费获取;
    'phonenumber', 'mailingaddress'])
record = table.AddRecord({'name':'Bob', 'email':'bob@example.com', 
    'phonenumber':'555-555-1234', 'mailingaddress':'900 Imaginary St.'})

# Edit a record
record.content['email'] = 'bob2@example.com'
record.Push()

问题是它只会在五次运行中成功一次左右。在其他四次运行中,会收到以下错误:

Traceback (most recent call last):
  File "./test.py", line 13, in <module>
    database = client.CreateDatabase('My Test Database')
  File "/home/jmvidal/share/progs/googleapps/google_appengine/glassboard/gdata/spreadsheet/text_db.py", line 146, in CreateDatabase
    db_entry = self.__docs_client.UploadSpreadsheet(virtual_media_source, name)
  File "/home/jmvidal/share/progs/googleapps/google_appengine/glassboard/gdata/docs/service.py", line 304, in UploadSpreadsheet
    return self._UploadFile(media_source, title, category, folder_or_uri)
  File "/home/jmvidal/share/progs/googleapps/google_appengine/glassboard/gdata/docs/service.py", line 144, in _UploadFile
    converter=gdata.docs.DocumentListEntryFromString)
  File "/home/jmvidal/share/progs/googleapps/google_appengine/glassboard/gdata/service.py", line 1151, in Post
    media_source=media_source, converter=converter)
  File "/home/jmvidal/share/progs/googleapps/google_appengine/glassboard/gdata/service.py", line 1271, in PostOrPut
    'reason': server_response.reason, 'body': result_body}
gdata.service.RequestError: {'status': 404, 'body': '<HTML>\n<HEAD>\n<TITLE>Not Found</TITLE>\n</HEAD>\n<BODY BGCOLOR="#FFFFFF" TEXT="#000000">\n<H1>Not Found</H1>\n<H2>Error 404</H2>\n</BODY>\n</HTML>\n', 'reason': 'Not Found'}

这个错误消息表明服务器返回了404错误,即“未找到”。

解决方案:

一位热心人士告诉我这是一个gdata中的已知错误。不过,我找到了一种解决方法,那就是在调用CreateDatabase之前增加一个休眠时间,如下所示:

import gdata.spreadsheet.text_db
import getpass
import atom
import gdata.contacts
import gdata.contacts.service
import smtplib
import time

password = getpass.getpass()
client = gdata.spreadsheet.text_db.DatabaseClient(username='jmv@gmail.com',password=password)
time.sleep(10)
database = client.CreateDatabase('My Test Database')
table = database.CreateTable('addresses', ['name','email',
    'phonenumber', 'mailingaddress'])
record = table.AddRecord({'name':'Bob', 'email':'bob@example.com', 
    'phonenumber':'555-555-1234', 'mailingaddress':'900 Imaginary St.'})

# Edit a record
record.content['email'] = 'bob2@example.com'
record.Push()

休眠时间10秒后,调用CreateDatabase成功率将大大提高。