0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

kintone で JavaScript / CSS ファイルを全部ダウンロードする Python プログラム

Last updated at Posted at 2024-12-09

kintone で JavaScript / CSS ファイルを全部ダウンロードする Python プログラムを作りました。

参考にしたページは以下です。

ファイルをダウンロードする - cybozu developer network
https://cybozu.dev/ja/kintone/docs/rest-api/files/download-file/

pythonでkintoneアプリのレコードデータを取得する方法(1レコード)
https://qiita.com/guitar_ell_r/items/573e80d6b573278ac5b2
 

05_file_download.py
import base64
import urllib.request
import json
from pathlib import Path

appno = 123
#appno = 124
#appno = 125
#appno = 126

uri = "https://sample.cybozu.com/k/v1/app/customize.json"

username_password = "UserName:YourPassWord"
auth_header = base64.b64encode(username_password.encode())

headers = {
    "Host": "sample.cybozu.com:443",
    "X-Cybozu-Authorization": auth_header,
    "Content-Type": "application/json",
}

body = {
    "app": appno,
}

req = urllib.request.Request(
            url=uri,
            data=json.dumps(body).encode(),
            headers=headers,
            method="GET",
            )

response = urllib.request.urlopen(req)
res_dict = json.load(response)

for file_type in ['js', 'css']:
    if file_type in res_dict.get("desktop", {}):
        for file_data in res_dict["desktop"][file_type]:
            file_info = file_data.get("file", {})
            name = file_info.get("name", "名前なし")
            size = file_info.get("size", "サイズ不明")
            fileKey = file_info.get("fileKey", "ファイルキーなし")

            #if not name[:3].isdigit() or int(name[:3]) < 100:
            #    continue
            #if Path(name).suffix == '.css':
            #    continue

            #print(f"{fileKey}")
            uri2 = "https://sample.cybozu.com/k/v1/file.json"
            headers2 = {
                "X-Cybozu-Authorization": auth_header,
                "Content-Type": "application/json",
            }
            body2 = {
                "fileKey": fileKey,
            }
            req2 = urllib.request.Request(
                        url=uri2,
                        data=json.dumps(body2).encode(),
                        headers=headers2,
                        method="GET",
                        )
            
            with urllib.request.urlopen(req2) as response2:
                response_body = response2.read().decode("utf-8")
                newline_count = response_body.count("\r\n")
                size2 = str(int(size) - newline_count)
                print(f"{name}, {size}, {size2}")
                with open(name, "w", encoding="utf-8") as f:
                    f.write(response_body)

ファイルダウンロードと同時に、ファイル名、ファイルサイズも表示していますが、改行が CRLF と LF がまちまちで、ローカルPCに保存しているファイルと比較するために、CRLF をカウントしてその数を引き算したサイズも表示しています。PCでGitを使用しているので、そこで勝手に変換されてしまうようです。

 
以下は、ローカルPCで保存している同ファイルのサイズを表示するためのプログラムです。CRLF でも LF として見えるように、改行をカウントしてその数を引き算したサイズを表示しています。

02_file_local.py
import os

# フォルダパスを指定
folder_path = r'/mnt/c/Repos/App/123'
#folder_path = r'/mnt/c/Repos/App/124'
#folder_path = r'/mnt/c/Repos/App/125'
#folder_path = r'/mnt/c/Repos/App/126'

# フォルダ内のファイルを取得
files = os.listdir(folder_path)

for file in files:
    file_path = os.path.join(folder_path, file)

    # ファイルのみ処理(ディレクトリを除外)
    if os.path.isfile(file_path):
        # ファイルサイズを取得
        size = os.path.getsize(file_path)

        # ファイル内容を読み込み
        with open(file_path, 'r', encoding='utf-8', errors='ignore') as f:
            file_content = f.read()

        # 改行の数をカウント
        newline_count = file_content.count('\n')

        # 改行を引いたサイズ
        size -= newline_count

        # ファイル名の先頭3文字を判定
        #if not file[:3].isdigit() or int(file[:3]) < 100:
        #    # 表示しない
        #    continue
        # 拡張子が 'css' の場合は表示しない
        #elif file.endswith('.css'):
        #     continue
        #else:
        #    # ファイル名とサイズを出力
        print(f"{file}, {size}")

 
以下は、単に kintone の JavaScript / CSS ファイル一覧を表示するプログラムです。

01_file_list.py
import base64
import urllib.request
import json
from pathlib import Path

appno = 123
#appno = 124
#appno = 125
#appno = 126

uri = "https://sample.cybozu.com/k/v1/app/customize.json"

username_password = "UserName:YourPassWord"
auth_header = base64.b64encode(username_password.encode())

headers = {
    "Host": "sample.cybozu.com:443",
    "X-Cybozu-Authorization": auth_header,
    "Content-Type": "application/json",
}

body = {
    "app": appno,
}

req = urllib.request.Request(
            url=uri,
            data=json.dumps(body).encode(),
            headers=headers,
            method="GET",
            )

response = urllib.request.urlopen(req)
res_dict = json.load(response)

for file_type in ['js', 'css']:
    if file_type in res_dict.get("desktop", {}):
        for file_data in res_dict["desktop"][file_type]:
            file_info = file_data.get("file", {})
            name = file_info.get("name", "名前なし")
            size = file_info.get("size", "サイズ不明")

            #if not name[:3].isdigit() or int(name[:3]) < 100:
            #    continue
            #if Path(name).suffix == '.css':
            #    continue

            print(f"{name}, {size}")
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?