generate torrent script
This commit is contained in:
1 parent
77ac4654bb
commit
e0a7968757
1 file changed
+230
@@ -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 <input-file> <search-name> <movie/tv>"
|
||||||
|
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" <<EOF
|
||||||
|
==================================================
|
||||||
|
RELEASE INFORMATION
|
||||||
|
==================================================
|
||||||
|
|
||||||
|
Title : $NAME
|
||||||
|
Size : $SIZE
|
||||||
|
|
||||||
|
File:
|
||||||
|
$MEDIA_FILE
|
||||||
|
|
||||||
|
Video Codec:
|
||||||
|
$VIDEO_CODEC
|
||||||
|
|
||||||
|
Encoder Settings:
|
||||||
|
$ENCODER_SETTINGS
|
||||||
|
|
||||||
|
--------------------------------------------------
|
||||||
|
MEDIAINFO
|
||||||
|
--------------------------------------------------
|
||||||
|
|
||||||
|
$MEDIAINFO_OUTPUT
|
||||||
|
|
||||||
|
--------------------------------------------------
|
||||||
|
CHECKSUMS
|
||||||
|
--------------------------------------------------
|
||||||
|
|
||||||
|
MD5:
|
||||||
|
$MD5
|
||||||
|
|
||||||
|
SHA256:
|
||||||
|
$SHA256
|
||||||
|
|
||||||
|
--------------------------------------------------
|
||||||
|
TORRENT
|
||||||
|
--------------------------------------------------
|
||||||
|
|
||||||
|
Private Torrent : Yes
|
||||||
|
|
||||||
|
Generated with:
|
||||||
|
mktorrent
|
||||||
|
mediainfo
|
||||||
|
|
||||||
|
==================================================
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo "Created:"
|
||||||
|
echo " ${NAME}.torrent"
|
||||||
|
echo " ${NAME}.nfo"
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Creating torrent..."
|
||||||
|
|
||||||
|
mktorrent \
|
||||||
|
-p \
|
||||||
|
-l "$PIECE_SIZE" \
|
||||||
|
-a "$TRACKER" \
|
||||||
|
-o "${NAME}.torrent" \
|
||||||
|
"$INPUT"
|
||||||
|
|
||||||
Reference in new issue
Block a user