我正在编写一个python脚本,它将: 1)从企业数据库中提取GIS元数据2)将元数据从XML解析为纯文本3)将文本文件附加到Socrata中相应的已发布数据集(每月发布) 4)该脚本也将每月运行,以便企业数据集中的任何模式更改都会反映在附加的纯文本元数据文件中。
我已经能够使用一些代码发现的here成功地将文本元数据文件附加到已发布的苏格拉塔数据集。问题是,每次运行脚本时,都会添加一个附加附件。我想删除现有附件并添加新附件,或者用新附件的内容覆盖现有附件。
我对此做了大量的研究,但似乎找不到任何使用Socrata管理附件的文档。有什么建议吗?
发布于 2015-08-12 21:36:42
我最终弄明白了这一点。我必须更改几行代码,以清空Socrata Python库中attach_file函数中的附件:
def attach_file(self, filename):
metadata = self.metadata()
if not metadata.has_key('attachments'):
metadata['attachments'] = []至:
def attach_file(self, filename):
metadata = self.metadata()
metadata['attachments'] = [] #empty out metadata, regardless of existing metadata发布于 2016-09-13 09:49:56
最终使用相同的API,并能够使用以下代码替换附件:
def attach_file(self, filename, clear_metadata):
metadata = self.metadata()
if not metadata.has_key('attachments'):
metadata['attachments'] = []
# if the user wants to clear all existing attachments on dataset
if clear_metadata:
metadata['attachments'] = []
response = self.multipart_post('/assets', filename)
if not response.has_key('id'):
print "Error uploading file to assets service: no ID returned: %s" % response
return
attachment = {'blobId': response['id'],
'name': response['nameForOutput'],
'filename': response['nameForOutput']}
metadata['attachments'].append(attachment)
self._request("/views/%s.json" % self.id, 'PUT', {'metadata':metadata})
def multipart_post(self, url, filename, field='file'):
print("Running multipart_post")
authBase64 = base64.encodestring('%s:%s' % (self.username, self.password)).replace('\n', '')
datagen, headers = multipart_encode({field: open(filename, "rb")})
headers['X-App-Token'] = self.app_token
headers['Authorization'] = "Basic %s" % authBase64
print("url=" + url)
request = Request("%s%s" % (self.url, url), datagen, headers)
print(str(Request))
response = urlopen(request).read()
return json.loads(response)https://stackoverflow.com/questions/31942193
复制相似问题