Ari*_*dee 5 python twitter json data-mining google-sheets
我使用 Twitter 进行数据挖掘。因此,我从 Twitter 获取值 create_at 并将其保存在 Excel 文件中,然后将 Excel 文件发送到 Google Sheet,但无法发送它。
它有这样的错误:
response = service.spreadsheets().values().append(
File "C:\Users\What Name\AppData\Local\Programs\Python\Python38-32\lib\site-
packages\googleapiclient\discovery.py", line 830, in method
headers, params, query, body = model.request(
File "C:\Users\What Name\AppData\Local\Programs\Python\Python38-32\lib\site-
packages\googleapiclient\model.py", line 161, in request
body_value = self.serialize(body_value)
File "C:\Users\What Name\AppData\Local\Programs\Python\Python38-32\lib\site-
packages\googleapiclient\model.py", line 274, in serialize
return json.dumps(body_value)
File "C:\Users\What Name\AppData\Local\Programs\Python\Python38-32\lib\json\__init__.py", line 231,
in dumps
return _default_encoder.encode(obj)
File "C:\Users\What Name\AppData\Local\Programs\Python\Python38-32\lib\json\encoder.py", line 199, in
encode
chunks = self.iterencode(o, _one_shot=True)
File "C:\Users\What Name\AppData\Local\Programs\Python\Python38-32\lib\json\encoder.py", line 257, in
iterencode
return _iterencode(o, 0)
File "C:\Users\What Name\AppData\Local\Programs\Python\Python38-32\lib\json\encoder.py", line 179, in
default
raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type datetime is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
或者这段代码可能有问题?
response = service.spreadsheets().values().append(
File "C:\Users\What Name\AppData\Local\Programs\Python\Python38-32\lib\site-
packages\googleapiclient\discovery.py", line 830, in method
headers, params, query, body = model.request(
File "C:\Users\What Name\AppData\Local\Programs\Python\Python38-32\lib\site-
packages\googleapiclient\model.py", line 161, in request
body_value = self.serialize(body_value)
File "C:\Users\What Name\AppData\Local\Programs\Python\Python38-32\lib\site-
packages\googleapiclient\model.py", line 274, in serialize
return json.dumps(body_value)
File "C:\Users\What Name\AppData\Local\Programs\Python\Python38-32\lib\json\__init__.py", line 231,
in dumps
return _default_encoder.encode(obj)
File "C:\Users\What Name\AppData\Local\Programs\Python\Python38-32\lib\json\encoder.py", line 199, in
encode
chunks = self.iterencode(o, _one_shot=True)
File "C:\Users\What Name\AppData\Local\Programs\Python\Python38-32\lib\json\encoder.py", line 257, in
iterencode
return _iterencode(o, 0)
File "C:\Users\What Name\AppData\Local\Programs\Python\Python38-32\lib\json\encoder.py", line 179, in
default
raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type datetime is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
为了修复该Object of type datetime is not JSON serializable错误,您需要将datetime对象中的所有对象实例转换为string.
但是,您的代码中还存在其他错误,这意味着仅此错误不会使您的程序运行。
datetime对象转换为string对象:在 python 中,您可以使用json.dumps()默认的字符串转换本机将 JSON 数据转换为字符串。
您可以通过在调用之前添加此行来完成此操作service.spreadsheets().values().append():
//rngData at this point has already been assigned
rngData = json.dumps(rngData, indent = 4, sort_keys = True, default = str)
Run Code Online (Sandbox Code Playgroud)
注意:这本身并不能修复您的代码!
调用 Google Sheets API 时,以服务器期望接收这些请求的方式发出请求非常重要。也就是说,按照文档提出请求非常重要。
我在一台 Linux 机器上,所以我无法测试 的输出格式,但是如果有关 Excel 属性的win32.Dispatch().Workbooks.Open().Worksheets().Range().CurrentRegion()Microsoft 文档可以作为依据,我可以放心地假设它的输出不是采用方法:Worksheet.Rangespreadsheets.values.append
数组(ListValue 格式):
已读取或要写入的数据。这是一个数组的数组,外部数组代表所有数据,每个内部数组代表一个主要维度。内部数组中的每一项对应一个单元格。
对于输出,将不包括空的尾随行和列。
对于输入,支持的值类型有:bool、string 和 double。空值将被跳过。要将单元格设置为空值,请将字符串值设置为空字符串。
我不是 100% 确定输出是否相同,但为了尝试模拟您正在尝试的内容,我使用 python 包xlrd从您提供的 Excel 文件中获取值,如下所示:
workbook = xlrd.open_workbook("twitter.xlsx")
sheet = workbook.sheet_by_index(0)
data = [sheet.row_values(rowx) for rowx in range(sheet.nrows)]
Run Code Online (Sandbox Code Playgroud)
并且,如您在评论中提供的屏幕截图所示(如下所示):
我也有同样的反应。向上滚动,错误是由于错误的请求造成的:
googleapiclient.errors.HttpError: <HttpError 400 when requesting https://sheets.googleapis.com/v4/spreadsheets/XXXXX/values/Sheet1%21A1:append?alt=json&valueInputOption=RAW returned "Invalid value at 'data.values' (type.googleapis.com/google.protobuf.ListValue)..."
Run Code Online (Sandbox Code Playgroud)
具体来说,Invalid value at 'data.values'。您需要遵守此方法的 Google Sheets API 请求规范。
spreadsheets.values.append| Sheets API - 响应正文spreadsheets.values| 表格 API - 资源:ValueRange| 归档时间: |
|
| 查看次数: |
30369 次 |
| 最近记录: |