upload from backup

This commit is contained in:
qwjyh 2025-06-08 16:00:40 +09:00
parent 556577bcd5
commit 40583f7bf2
3 changed files with 34 additions and 17 deletions

42
main.py
View file

@ -1,9 +1,10 @@
from datetime import datetime
import os import os
import re
import time import time
from datetime import datetime
from pathlib import Path
from zoneinfo import ZoneInfo from zoneinfo import ZoneInfo
import pyperclip
import requests import requests
from dotenv import load_dotenv from dotenv import load_dotenv
@ -13,6 +14,7 @@ API_TOKEN = os.environ["API_TOKEN"]
EMOJI_FOLDER_ID = "a8qkigygjv" EMOJI_FOLDER_ID = "a8qkigygjv"
MAX_CHECK_NEW_FILE = 10 MAX_CHECK_NEW_FILE = 10
TIMEZONE = ZoneInfo("Asia/Tokyo") TIMEZONE = ZoneInfo("Asia/Tokyo")
FILES_SRC = Path(os.environ["FILES_SRC"])
def admin_emoji_list(since_id: str | None = None, until_id: str | None = None): def admin_emoji_list(since_id: str | None = None, until_id: str | None = None):
@ -21,9 +23,9 @@ def admin_emoji_list(since_id: str | None = None, until_id: str | None = None):
"limit": 100, "limit": 100,
} }
if since_id is not None: if since_id is not None:
request_body["since_id"] = since_id request_body["sinceId"] = since_id
if until_id is not None: if until_id is not None:
request_body["until_id"] = until_id request_body["untilId"] = until_id
return requests.post( return requests.post(
"https://misskey.qwjyh.net/api/admin/emoji/list", "https://misskey.qwjyh.net/api/admin/emoji/list",
headers={ headers={
@ -49,6 +51,23 @@ def drive_files_upload_from_url(url: str):
) )
def drive_files_create(file_path: str | os.PathLike, name: str):
return requests.post(
"https://misskey.qwjyh.net/api/drive/files/create",
headers={
# "Content-Type": "multipart/form-data",
"Authorization": f"Bearer {API_TOKEN}",
},
files={
"file": open(file_path, "rb"),
},
data={
"folderId": EMOJI_FOLDER_ID,
"name": name,
},
)
def check_file_exists(emoji: dict) -> bool: def check_file_exists(emoji: dict) -> bool:
r = requests.get(emoji["url"]) r = requests.get(emoji["url"])
return r.status_code == requests.codes.ok return r.status_code == requests.codes.ok
@ -82,17 +101,24 @@ def admin_emoji_update(emoji_id: str, new_file_id: str):
def main(): def main():
print(f"{API_TOKEN=}") print(f"{API_TOKEN=}")
print("Hello from misskey-update-emoji-files!") print("Hello from misskey-update-emoji-files!")
r = admin_emoji_list() r = admin_emoji_list(until_id="9h9zv01kcr")
print(f"out body={r.json()}") print(f"out body={r.json()}")
r.raise_for_status() r.raise_for_status()
for emoji in r.json(): for emoji in r.json():
file_exists = check_file_exists(emoji) file_exists = check_file_exists(emoji)
if not file_exists: if not file_exists:
print(f"{emoji=}") print(f"{emoji=}")
pyperclip.copy(emoji['name']) m = re.search(r"[\da-f\-]+$", emoji["url"])
if m is None:
raise Exception(f"Failed to get file name from URL: {emoji['url']}")
source_file = FILES_SRC / m.group()
if not source_file.exists():
raise Exception(f"file doesn't exist: {source_file=}")
print(f"Uploading file from {source_file}")
before_upload = datetime.now(tz=TIMEZONE) before_upload = datetime.now(tz=TIMEZONE)
new_url = input("enter new file url:") r = drive_files_create(source_file, emoji["name"])
r = drive_files_upload_from_url(new_url) print(f"{r=}")
r.raise_for_status() r.raise_for_status()
for i_get_file_iter in range(MAX_CHECK_NEW_FILE): for i_get_file_iter in range(MAX_CHECK_NEW_FILE):
time.sleep(1) time.sleep(1)

View file

@ -6,7 +6,6 @@ readme = "README.md"
requires-python = ">=3.13" requires-python = ">=3.13"
dependencies = [ dependencies = [
"bpython>=0.25", "bpython>=0.25",
"pyperclip>=1.9.0",
"python-dotenv>=1.1.0", "python-dotenv>=1.1.0",
"requests>=2.32.3", "requests>=2.32.3",
] ]

8
uv.lock generated
View file

@ -151,7 +151,6 @@ version = "0.1.0"
source = { virtual = "." } source = { virtual = "." }
dependencies = [ dependencies = [
{ name = "bpython" }, { name = "bpython" },
{ name = "pyperclip" },
{ name = "python-dotenv" }, { name = "python-dotenv" },
{ name = "requests" }, { name = "requests" },
] ]
@ -159,7 +158,6 @@ dependencies = [
[package.metadata] [package.metadata]
requires-dist = [ requires-dist = [
{ name = "bpython", specifier = ">=0.25" }, { name = "bpython", specifier = ">=0.25" },
{ name = "pyperclip", specifier = ">=1.9.0" },
{ name = "python-dotenv", specifier = ">=1.1.0" }, { name = "python-dotenv", specifier = ">=1.1.0" },
{ name = "requests", specifier = ">=2.32.3" }, { name = "requests", specifier = ">=2.32.3" },
] ]
@ -173,12 +171,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293, upload-time = "2025-01-06T17:26:25.553Z" }, { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293, upload-time = "2025-01-06T17:26:25.553Z" },
] ]
[[package]]
name = "pyperclip"
version = "1.9.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/30/23/2f0a3efc4d6a32f3b63cdff36cd398d9701d26cda58e3ab97ac79fb5e60d/pyperclip-1.9.0.tar.gz", hash = "sha256:b7de0142ddc81bfc5c7507eea19da920b92252b548b96186caf94a5e2527d310", size = 20961, upload-time = "2024-06-18T20:38:48.401Z" }
[[package]] [[package]]
name = "python-dotenv" name = "python-dotenv"
version = "1.1.0" version = "1.1.0"