Update main.py
Browse files
main.py
CHANGED
@@ -468,14 +468,9 @@ class CivitAICrawler:
|
|
468 |
def process_model(self, model_url: str):
|
469 |
"""指定されたモデルURLを処理する関数。"""
|
470 |
try:
|
471 |
-
# ===== 1) モデルID取得 & モデル情報 =====
|
472 |
model_id = model_url.rstrip("/").split("/")[-1]
|
473 |
model_info = self.get_model_info(model_id)
|
474 |
-
|
475 |
-
logger.error(f"No model info found for ID {model_id}")
|
476 |
-
return
|
477 |
-
|
478 |
-
# ===== 2) フォルダ名を決める =====
|
479 |
latest_version = model_info.get("modelVersions", [])[0]
|
480 |
model_file = next(
|
481 |
(file for file in latest_version["files"] if file.get('type') == 'Model'),
|
@@ -485,42 +480,55 @@ class CivitAICrawler:
|
|
485 |
latest_filename = model_file['name']
|
486 |
folder = os.path.splitext(latest_filename)[0]
|
487 |
else:
|
488 |
-
# 'Model'タイプファイルが無い場合
|
489 |
first_file = latest_version["files"][0]
|
490 |
latest_filename = first_file['name']
|
491 |
folder = os.path.splitext(latest_filename)[0]
|
492 |
logger.warning(f"No 'Model' type file found for model ID {model_id}. Using first file's name.")
|
493 |
-
|
494 |
os.makedirs(folder, exist_ok=True)
|
495 |
-
|
496 |
-
#
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
#
|
502 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
503 |
self.download_images(model_info["modelVersions"], folder)
|
504 |
self.save_html_content(model_url, folder)
|
505 |
self.save_model_info(model_info, folder)
|
506 |
-
|
507 |
-
#
|
508 |
encrypted_top_name = self.upload_folder_encrypted(folder)
|
509 |
-
|
510 |
-
#
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
with open(self.config.LIST_FILE, "a", encoding="utf-8") as f:
|
515 |
-
f.write(f"{
|
516 |
-
|
517 |
-
#
|
518 |
if os.path.exists(folder):
|
519 |
shutil.rmtree(folder)
|
520 |
-
|
521 |
except Exception as e:
|
522 |
logger.error(f"Unexpected error processing model ({model_url}): {e}")
|
523 |
|
|
|
524 |
async def crawl(self):
|
525 |
"""モデルを定期的にチェックし、更新を行う。"""
|
526 |
while True:
|
|
|
468 |
def process_model(self, model_url: str):
|
469 |
"""指定されたモデルURLを処理する関数。"""
|
470 |
try:
|
|
|
471 |
model_id = model_url.rstrip("/").split("/")[-1]
|
472 |
model_info = self.get_model_info(model_id)
|
473 |
+
|
|
|
|
|
|
|
|
|
474 |
latest_version = model_info.get("modelVersions", [])[0]
|
475 |
model_file = next(
|
476 |
(file for file in latest_version["files"] if file.get('type') == 'Model'),
|
|
|
480 |
latest_filename = model_file['name']
|
481 |
folder = os.path.splitext(latest_filename)[0]
|
482 |
else:
|
|
|
483 |
first_file = latest_version["files"][0]
|
484 |
latest_filename = first_file['name']
|
485 |
folder = os.path.splitext(latest_filename)[0]
|
486 |
logger.warning(f"No 'Model' type file found for model ID {model_id}. Using first file's name.")
|
487 |
+
|
488 |
os.makedirs(folder, exist_ok=True)
|
489 |
+
|
490 |
+
# model_list を読み込み
|
491 |
+
model_list = self.read_model_list()
|
492 |
+
|
493 |
+
# もし既に「同名(モデルページ名)がアップされている」かどうか確認したい場合の例:
|
494 |
+
# ※ 今回は modelpage_name(= model_info["name"]) をキーにするか、
|
495 |
+
# あるいは model_id (str) をキーにするか、運用に合わせて設定してください。
|
496 |
+
# 例として modelpage_name をキーとしてチェックする流れ:
|
497 |
+
modelpage_name = model_info.get("name", "Unnamed Model")
|
498 |
+
|
499 |
+
if modelpage_name in model_list.values():
|
500 |
+
# 既に同モデルページ名がアップロード済み → ここでスキップや上書きなどの処理を決定
|
501 |
+
logger.info(f"Model '{modelpage_name}' is already listed in model_list. Skipping re-upload.")
|
502 |
+
# もし「強制再アップロード」したくないなら return で処理終了:
|
503 |
+
# return
|
504 |
+
# あるいは「強制アップするがバージョンだけ追加」などいろいろ処理が可能
|
505 |
+
# ここではあえて続行するが、必要に応じて書き換えてください。
|
506 |
+
|
507 |
+
# ダウンロードや画像保存
|
508 |
+
existing_old_version_files = []
|
509 |
+
self.download_model(model_info["modelVersions"], folder, existing_old_version_files)
|
510 |
self.download_images(model_info["modelVersions"], folder)
|
511 |
self.save_html_content(model_url, folder)
|
512 |
self.save_model_info(model_info, folder)
|
513 |
+
|
514 |
+
# ========== rclone で暗号化フォルダをアップロード ==========
|
515 |
encrypted_top_name = self.upload_folder_encrypted(folder)
|
516 |
+
|
517 |
+
# 今回アップロードしたモデルの URL
|
518 |
+
model_hf_url = f"https://huggingface.co/{self.repo_ids['current']}/tree/main/{encrypted_top_name}"
|
519 |
+
|
520 |
+
# model_list.log に追記 → "modelpage_name: model_hf_url" 形式
|
521 |
with open(self.config.LIST_FILE, "a", encoding="utf-8") as f:
|
522 |
+
f.write(f"{modelpage_name}: {model_hf_url}\n")
|
523 |
+
|
524 |
+
# ローカルフォルダ削除
|
525 |
if os.path.exists(folder):
|
526 |
shutil.rmtree(folder)
|
527 |
+
|
528 |
except Exception as e:
|
529 |
logger.error(f"Unexpected error processing model ({model_url}): {e}")
|
530 |
|
531 |
+
|
532 |
async def crawl(self):
|
533 |
"""モデルを定期的にチェックし、更新を行う。"""
|
534 |
while True:
|