diff --git a/torrent/generate_torrent.sh b/torrent/generate_torrent.sh new file mode 100644 index 0000000..7d34411 --- /dev/null +++ b/torrent/generate_torrent.sh @@ -0,0 +1,230 @@ +#!/usr/bin/env bash + +#set -euo pipefail + +TRACKER="https://leo-test.store/announce.php?passkey=6535616464613165323432306163343561333531" +PIECE_SIZE=22 + +INPUT="$1" +SEARCH_NAME="${2:-}" +TYPE="${3:-}" + +if [ ! -e "$INPUT" ] || [ -z "$SEARCH_NAME" ] || [ -z "$TYPE" ]; then + echo "Usage: $0 " + exit 1 +fi + +if [ -f "$INPUT" ]; then + NAME=$(basename "$INPUT") + NAME="${NAME%.*}" # remove extension +elif [ -d "$INPUT" ]; then + NAME=$(basename "$INPUT") +else + echo "Input does not exist: $INPUT" + exit 1 +fi + +TMDB_BEARER_TOKEN="eyJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJlOTIwMzJlMDk1NmEzMWEyZjQ4MDA4NGI0MTg4OTIyZCIsIm5iZiI6MTc5MDQzMjc5NS42NjcsInN1YiI6IjZhYjdkNjFiZDY5NmI1ZGFjNGM5NDRkMyIsInNjb3BlcyI6WyJhcGlfcmVhZCJdLCJ2ZXJzaW9uIjoxfQ.IjddKtQ5X62A63kYslH24Pxg_TFCzu-QpGak_Pemgr8" + +if [[ -z "$SEARCH_NAME" ]]; then + echo "Search name required" + exit 1 +fi + +TMDB_API="https://api.themoviedb.org/3" + +# -------------------------------------------------- +# Helper +# -------------------------------------------------- + +get_value() { + local value="$1" + + if [[ -z "$value" || "$value" == "null" ]]; then + echo "N/A" + else + echo "$value" + fi +} + +tmdb_get() { + local url="$1" + + curl -s \ + -H "Authorization: Bearer ${TMDB_BEARER_TOKEN}" \ + -H "accept: application/json" \ + "$url" +} + +# -------------------------------------------------- +# Search +# -------------------------------------------------- + +echo "Collect $TYPE Release Info" + +SEARCH_JSON=$(curl -s --get \ + -H "Authorization: Bearer ${TMDB_BEARER_TOKEN}" \ + -H "accept: application/json" \ + --data-urlencode "query=${SEARCH_NAME}" \ + --data-urlencode "language=de-DE" \ + "${TMDB_API}/search/${TYPE}") + +TOTAL_RESULTS=$(echo "$SEARCH_JSON" | jq -r '.total_results // 0') + +if [[ "$TOTAL_RESULTS" -eq 0 ]]; then + echo "No results found for: $SEARCH_NAME" + exit 1 +fi + +TMDB_ID=$(echo "$SEARCH_JSON" | jq -r '.results[0].id') + +# -------------------------------------------------- +# Details +# -------------------------------------------------- + +echo "Collect $TYPE Release Details" +DETAILS=$(tmdb_get \ + "${TMDB_API}/${TYPE}/${TMDB_ID}?language=de-DE") + +EXTERNAL=$(tmdb_get \ + "${TMDB_API}/${TYPE}/${TMDB_ID}/external_ids") + +# -------------------------------------------------- +# Shared fields +# -------------------------------------------------- + +TITLE=$(get_value "$(echo "$DETAILS" | jq -r '.title // .name')") +ORIGINAL_TITLE=$(get_value "$(echo "$DETAILS" | jq -r '.original_title // .original_name')") + +OVERVIEW=$(get_value "$(echo "$DETAILS" | jq -r '.overview') + +") + +IMDB_ID=$(get_value "$(echo "$EXTERNAL" | jq -r '.imdb_id')") + +FIRST_RELEASE=$(get_value "$(echo "$DETAILS" | jq -r '.release_date // .first_air_date')") + +STATUS=$(get_value "$(echo "$DETAILS" | jq -r '.status')") + +LANGUAGE=$(get_value "$(echo "$DETAILS" | jq -r '.original_language')") + +RATING=$(get_value "$(echo "$DETAILS" | jq -r '.vote_average')") + +VOTES=$(get_value "$(echo "$DETAILS" | jq -r '.vote_count')") + +GENRES=$(echo "$DETAILS" | jq -r ' + if (.genres | length > 0) + then [.genres[].name] | join(", ") + else "N/A" + end +') + +POSTER_PATH=$(echo "$DETAILS" | jq -r '.poster_path // empty') +BACKDROP_PATH=$(echo "$DETAILS" | jq -r '.backdrop_path // empty') + +POSTER_URL="N/A" +BACKDROP_URL="N/A" + +[[ -n "$POSTER_PATH" ]] && \ +POSTER_URL="https://image.tmdb.org/t/p/original${POSTER_PATH}" + +[[ -n "$BACKDROP_PATH" ]] && \ +BACKDROP_URL="https://image.tmdb.org/t/p/original${BACKDROP_PATH}" + + + +# --data-urlencode "api_key=AB" \ +# "https://api.themoviedb.org/3/search/tv" +echo "Collecting media info..." + +if [ -f "$INPUT" ]; then +MEDIA_FILE="$INPUT" +else +MEDIA_FILE=$(find "$INPUT" -type f \( \ +-iname "*.mkv" -o \ +-iname "*.mp4" -o \ +-iname "*.avi" -o \ +-iname "*.mov" -o \ +-iname "*.m4v" -o \ +-iname "*.ts" \ +\) | head -n1) +fi + +MEDIAINFO_OUTPUT=$(mediainfo "$MEDIA_FILE") + +ENCODER_SETTINGS=$(mediainfo "$MEDIA_FILE" \ + | grep -iE "Encoded library settings|Writing library|encoding settings" \ + || true) + +VIDEO_CODEC=$(mediainfo "$MEDIA_FILE" \ + | grep "^Format" \ + | head -n1 \ + | cut -d':' -f2-) + +SIZE=$(du -sh "$MEDIA_FILE" | awk '{print $1}') + +MD5=$(md5sum "$MEDIA_FILE" | awk '{print $1}') +SHA256=$(sha256sum "$MEDIA_FILE" | awk '{print $1}') + +echo Generate nfo file + +cat > "${NAME}.nfo" <