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?

SIGNATE CLIでまとめてファイルダウンロードする

0
Posted at

はじめに

SIGNATE CLIを更新(ver0.10.4)したら、ファイルのダウンロードがひとつひとつ指定しなければできなくなっていました(自分がやり方知らないだけかもしれませんが)。
昔は一括でできたのに、なぜこんな改悪をしたのかわかりませんが、AIに壁打ちしてまとめてダウンロードするシェルスクリプトを書いてもらったので公開します。

スクリプト

スクリプトのファイル名は「download_signate.sh」とします。
なお、実施環境はUbuntuです。bashで実行してください。
不要な行とかもありますが、消すのも面倒だったのでそのまま掲載します。

#!/bin/bash

if [ -z "$1" ]; then
    echo "⚠️ ERROR: COMPETITION_KEYが指定されていません。"
    echo "Usage: bash $0 <COMPETITION_KEY>"
    exit 1
fi

# 最初の引数を COMPETITION_KEY に設定
COMPETITION_KEY="$1"

echo "== 🔍 Running signate task-list... =="
signate task-list --competition_key="$COMPETITION_KEY"
mapfile -t PUBLIC_KEYS < <(signate task-list --competition_key="$COMPETITION_KEY" | grep -v 'public_key' | grep -v '-'  | awk 'NR=1 {print $1;}')

# 抽出結果の表示
if [ "$PUBLIC_KEYS" -eq 0 ]; then
    echo "== ⚠️ ERROR: public_key could not be found or extracted. =="
    exit 1
fi

ALL_FILE_PUBLIC_KEYS=()
ALL_FILE_NAMES=()

for TASK_KEY in "${PUBLIC_KEYS[@]}"; do
    echo "== 📥 Downloading task with public_key: $KEY =="

    for TASK_KEY in "${PUBLIC_KEYS[@]}"; do
    echo "--- Getting file list for Task Key: $TASK_KEY ---"

    # 2. signate file-list コマンドを実行し、結果からキーとファイル名を抽出
    while read -r LINE; do
        
        # 'awk'でスペース区切りの最初のフィールド($1=ファイルキー)と2番目のフィールド($2=ファイル名)を取得
        FILE_KEY=$(echo "$LINE" | awk '{print $1}')
        FILE_NAME=$(echo "$LINE" | awk '{print $2}')

        # 抽出されたキーとファイル名が空でないことを確認して配列に追加
        if [[ -n "$FILE_KEY" && -n "$FILE_NAME" ]]; then
            echo "  Found and downloading: $FILE_NAME (Key: $FILE_KEY)"
            signate download  --task_key="$TASK_KEY" --file_key="$FILE_KEY"

            if [ $? -ne 0 ]; then
                # エラーが発生しても処理は継続します
                echo "  ⚠️ ERROR: Failed to download $FILE_NAME (Key: $FILE_KEY). Continuing..."
            fi
        fi

    done < <( \
        signate file-list --task_key="$TASK_KEY" | \
        grep -v 'public_key' | \
        grep -v '-' \
    )
    done
done

実行方法

SIGNATE CLIがインストールされていなければインストールしてください。signateへのアカウント登録などもする必要がありますが、ここでは省略します。

pip install signate

コンペのpublic_keyを確認します

signate competition-list

ダウンロードしたいpublic_keyを保存し、次のようにスクリプトを実行してください。

bash download_signate_file.sh  <コンペのpublic_key> 

なお、コンペの登録は事前にしてください。そうしないとスクリプト上でエラーになります
image.png

終わりに

こんなスクリプトを使わないくてもいいように、公式の方でまとめてダウンロードできるようにしてほしいです。

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?