REST APIでRedmineアクセス(4)
2025/06/15 |
[Prev]
|
最後は添付ファイル
ファイルをWikiへ添付
![]() import requests import json import os # ============================================================================== # File Upload # ============================================================================== # UploadのURL strUrlUpl = 'http://localhost:3000/uploads.json' # Upload時のrequests headers dicHeadUpl = { 'X-Redmine-API-Key': '8dc1f63aeうんぬん', 'Content-Type': 'application/octet-stream' } # Upload時のrequests params strPath = r'file\attached_file_0.png' # ファイルフルパス strFile = os.path.basename(strPath) # ファイルbasename dicParamUpl = { 'filename': strFile } # FileをBinaryデータとして読む with open(strFile, 'rb') as fh: binData = fh.read() # requests post実行 resUpload = requests.post(strUrlUpl, headers=dicHeadUpl, params=dicParamUpl, data=binData) print(f"request_upload_status=[{resUpload.status_code}]") # token情報json部をdicに変換 dicUpload = resUpload.json() jsoUpload = json.dumps(dicUpload, indent=2, ensure_ascii=False) print(f"Upload情報:\n{jsoUpload}") # File token取得 strToken = dicUpload['upload']['token'] # ============================================================================== # Wiki操作 # ============================================================================== # WikiページのURL strProjId = 'sandbox' strWikiId = 'Sub_page_0' strUrl = f"http://localhost:3000/projects/{strProjId}/wiki/{strWikiId}.json" # Wiki操作時のヘッダ dicHead = { 'X-Redmine-API-Key': '8dc1f63aeうんぬん', 'Content-Type': 'application/json' } # requests get実行 resWiki = requests.get(strUrl, headers=dicHead) print(f"request_get_status=[{resWiki.status_code}]") # Wikiデータ取得 dicWiki=resWiki.json() # wikiのdicデータにuploadsデータ追加(ファイル毎にtoken,filename,content_type設定) dicWiki['wiki_page']['uploads'] = [ { 'token': strToken, 'filename': strFile, 'content_type': 'image/png' } ] # 変更後表示 jsoWikiDisp = json.dumps(dicWiki, indent=2, ensure_ascii=False) print(f"変更後Wikiデータ:\n{jsoWikiDisp}") # dicデータをjson(requests put用)に変換 jsoWiki = json.dumps(dicWiki) # requests put実行 resWikiUpload = requests.put(strUrl, headers=dicHead, data=jsoWiki) print(f"request_put_status=[{resWikiUpload.status_code}]") >test6.py request_upload_status=[201] Upload情報: { "upload": { "id": 15, "token": "15.eff57e08dcbe28bca461c78b08962de04a99fbcb9c4d181ca4d29e7da42dcdc6" } } request_get_status=[200] 変更後Wikiデータ: { "wiki_page": { "title": "Sub_page_0", "parent": { "title": "Wiki" }, "text": "# Project: Sandobox: Sub wiki page [0]\r\n* サブWikiページ[0]\r\n* REST APIで追加した記述", "version": 4, "author": { "id": 5, "name": "Altmo Test" }, "comments": "", "created_on": "2025-06-13T04:36:33Z", "updated_on": "2025-06-14T15:25:25Z", "uploads": [ { "token": "15.eff57e08dcbe28bca461c78b08962de04a99fbcb9c4d181ca4d29e7da42dcdc6", "filename": "attached_file_0.png", "content_type": "image/png" } ] } } request_put_status=[204] ![]() ファイルをIssueへ添付
import requests import json import os # ============================================================================== # File Upload # ============================================================================== # UploadのURL strUrlUpload = 'http://localhost:3000/uploads.json' # Upload時のrequests header dicHeadUpload = { 'X-Redmine-API-Key': '8dc1f63aeうんぬん', 'Content-Type': 'application/octet-stream' } # Upload時のrequests params strPath = r'file\attached_file_1.png' strFile = os.basename(strPath) dicParamUpl = { 'filename': strFile } # FileをBinaryデータとして読む with = open(strPath, 'rb') as fh: binData = fh.read() # requests post実行 resUpload = requests.post(strUrlUpload, headers=dicHeadUpload, data=binData) print(f"request_upload_status=[{resUpload.status_code}]") # token情報json部をdicに変換 dicUpload = resUpload.json() jsoUpload = json.dumps(dicUpload, indent=2, ensure_ascii=False) print(f"Upload情報:\n{jsoUpload}") # File token取得 strToken = dicUpload['upload']['token'] # ============================================================================== # Issue操作 # ============================================================================== # IssueのURL strIssueId = '30' strUrl = f"http://localhost:3000/issues/{strIssueId}.json" # Issue操作時のヘッダ dicHead = { 'X-Redmine-API-Key': '8dc1f63aeうんぬん', 'Content-Type': 'application/json' } # 追加コメント(journal)データ dicJournal = { 'issue': { 'notes': '追加コメント', 'uploads': [ { 'token': strToken, 'filename': strFile, 'content_type': 'image/png' } ] } } # dicデータをjson(requests put用)に変換 jsoJournal = json.dumps(dicJournal) # requests put実行 resJournal = requests.put(strUrl, headers=dicHead, data=jsoJournal) print(f"request_put_status=[{resJournal.status_code}]") >test7.py request_upload_status=[201] Upload情報: { "upload": { "id": 14, "token": "14.025a008fa4218066d2440663f364fdcac70e5a04c58a7d39cee4431d669ea25d" } } request_put_status=[204] ![]() 添付ファイルを削除
import requests import json # ============================================================================== # Wiki情報取得 # ============================================================================== # WikiページのURL strProjId = 'sandbox' strWikiId = 'Sub_page_0' strUrl = f"http://localhost:3000/projects/{strProjId}/wiki/{strWikiId}.json" # Wiki操作時のヘッダ dicHead = { 'X-Redmine-API-Key': '8dc1f63aeうんぬん', 'Content-Type': 'application/json' } dicParam = { 'include': 'attachments' } # requests get実行 resWiki = requests.get(strUrl, headers=dicHead, params=dicParam) print(f"request_get_status=[{resWiki.status_code}]") # Wikiデータ取得 dicWiki=resWiki.json() # 表示用整形 jsoWiki = json.dumps(dicWiki, indent=2, ensure_ascii=False) print(jsoWiki) # 対象添付ファイルのURL取得(今回は一番最初の添付ファイル) strDelId = dicWiki['wiki_page']['attachments'][0]['id'] strUrlDel = f"http://localhost:3000/attachments/{strDelId}.json" print(f"file_url:[{strUrlDel}]") # delete実行 resDel = requests.delete(strUrlDel, headers=dicHead) print(f"request_delete_status=[{resDel.status_code}]") >test8.py request_get_status=[200] { "wiki_page": { "title": "Sub_page_0", "parent": { "title": "Wiki" }, "text": "# Project: Sandobox: Sub wiki page [0]\r\n* サブWikiページ[0]\r\n* REST APIで追加した記述", "version": 4, "author": { "id": 5, "name": "Altmo Test" }, "comments": "", "created_on": "2025-06-13T04:36:33Z", "updated_on": "2025-06-14T15:25:25Z", "attachments": [ { "id": 12, "filename": "attached_file_0.png", "filesize": 1300, "content_type": "image/png", "description": "", "content_url": "http://localhost:3000/attachments/download/12/attached_file_0.png", "author": { "id": 5, "name": "Altmo Test" }, "created_on": "2025-06-14T16:55:11Z" } ] } } file_url:[http://localhost:3000/attachments/12.json] request_delete_status=[204] 添付ファイルのcontent_type
import mimetypes # MIMEタイプ判定するファイルのリスト lstFiles = [ 'test0.txt', 'test1.xlsx', 'test2.pdf', 'test3.pptx', 'test4.png', 'test5.jpg', 'test6.zip' ] for strFile in lstFiles: strMime, strEncode = mimetypes.guess_type(strFile) # タプルの[0]がMIMEタイプ print(f"{strFile}:\t{strMime}") >test9.py test0.txt: text/plain test1.xlsx: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet test2.pdf: application/pdf test3.pptx: application/vnd.openxmlformats-officedocument.presentationml.presentation test4.png: image/png test5.jpg: image/jpeg test6.zip: application/x-zip-compressed 最後に
|
Copyright(C) 2025 Altmo
本HPについて |
[Prev]
|