0

私は次のことを行う python スクリプトに取り組んでいます: 1) エンタープライズ データベースから GIS メタデータを取得する 2) XML からプレーン テキストにメタデータを解析する 3) テキスト ファイルを Socrata で対応する公開されたデータセット (毎月公開される) に添付する 4 ) スクリプトは毎月実行されるため、エンタープライズ データセットのスキーマの変更は Socrata の添付されたプレーン テキスト メタデータ ファイルに反映されます。

こちら にあるコードを使用して、公開された Socrata データセットにテキスト メタデータ ファイルを正常に添付できました。問題は、スクリプトが実行されるたびに、追加の添付ファイルが追加されることです。既存の添付ファイルを削除して新しい添付ファイルを追加するか、既存の添付ファイルを新しい添付ファイルの内容で上書きしたいと考えています。

私はこれについてかなりの量の調査を行いましたが、Socrata API を使用して添付ファイルを管理するためのドキュメントを見つけることができないようです。助言がありますか?

4

2 に答える 2

0

私はこれを理解することになりました。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
于 2015-08-12T13:36:41.713 に答える
0

同じ 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)
于 2016-09-13T01:49:56.150 に答える