どういうときに便利か
CloudSignの締結済データを全てHubbleなど別プロダクトに突っ込みたい日が、人生にはある。
とりあえず思考停止でいい感じのファイル名で全件ダウンロードしてくれる。
他用途への応用は利くか
利く。リクエストよしなに変えてほしい。
公式ドキュメントはどれか
実際のコードが欲しい。
どうぞ。
import os
import requests
class CloudSignAPI:
def __init__(self, client_id):
self.api_base_url = {'root': 'https://api.cloudsign.jp'}
self.client_id = client_id
self.access_token = self.get_access_token()
def get_headers(self):
return {"Authorization": f"Bearer {self.access_token}"}
def get_access_token(self):
headers = {}
data = {"client_id": self.client_id}
response = requests.post('{root}/token?client_id={client_id}'.format(**self.api_base_url, **data))
if response.status_code == 200:
return response.json()["access_token"]
else:
response.raise_for_status()
def get_documents(self):
url = f"{self.api_base_url['root']}/documents?status=2"
response = requests.get(url, headers=self.get_headers())
if response.status_code == 200:
json_response = response.json()
documents = json_response["documents"]
total_documents = json_response["total"]
print(json_response["total"])
print(json_response["page"])
for page in range(2, int(total_documents/100)+2): #1から始まり、1は完了済
page_url = f"{url}&page={page}"
page_response = requests.get(page_url, headers=self.get_headers())
if page_response.status_code == 200:
page_json_response = page_response.json()
print(page_json_response["page"])
page_documents = page_json_response["documents"]
documents.extend(page_documents)
else:
page_response.raise_for_status()
return {"documents": documents}
else:
response.raise_for_status()
def download_certificate(self, document_id, document_title):
dir_path = "./certificates"
url = f"{self.api_base_url['root']}/documents/{document_id}/certificate"
response = requests.get(url, headers=self.get_headers())
if response.status_code == 200:
file_name = f"{dir_path}/cert_{document_id}_{document_title}.pdf"
with open(file_name, "wb") as f:
f.write(response.content)
return file_name
else:
response.raise_for_status()
def download_file(self, document_id, file_id, document_title, file_name):
dir_path = "./attached_files"
url = f"{self.api_base_url['root']}/documents/{document_id}/files/{file_id}"
response = requests.get(url, headers=self.get_headers())
if response.status_code == 200:
file_name = f"{dir_path}/file_{document_id}_{file_id}.pdf"
with open(file_name, "wb") as f:
f.write(response.content)
return file_name
else:
response.raise_for_status()
if __name__ == "__main__":
CLIENT_ID = "[INSERT_YOUR_API_CLIENT_ID]"
cloud_sign_api = CloudSignAPI(CLIENT_ID)
# Get document list
documents = cloud_sign_api.get_documents()
# Download files and certificates for each document
for document in documents["documents"]:
document_id = document["id"]
document_title = document["title"]
document_status = document["status"]
print(f"Downloading {document_id}: {document_title} Status:{document_status}")
# Download and save the certificate
downloaded_certificate_file_name = cloud_sign_api.download_certificate(document_id, document_title)
print(f"Downloaded certificate for {downloaded_certificate_file_name}")
# Download and save the file(s) associated with the document
for file in document["files"]:
file_id = file["id"]
file_name = file["name"]
downloaded_file_name = cloud_sign_api.download_file(document_id, file_id, document_title, file_name)
print(f"Downloaded file for {downloaded_file_name} - {file_name} in {document_title}")
余談
- ChatGPT-4.0でコード書きはじめた。セミナー聞きながら共同作業で1.5時間くらい。ほんと良い時代だ…
- GASへの移植もChatGPT-4.0で2プロンプトほどで達成できた。
- 当社は絶賛採用中です!採用一覧リンク
- エンジニアはもちろん。
- コーポレートでコード書ける人も、絶対活躍できる職場です。
- 自部署で言えば、経理や経営企画を採用したいこの頃です。