From 1c8391d87e34d3f4f08208aed77c2f35190fbbef Mon Sep 17 00:00:00 2001 From: pierre geeraert Date: Thu, 3 Apr 2025 23:13:19 +0100 Subject: [PATCH] working and download all the photos --- reddit_downloader.sh | 65 ++++++++++++++++++++++++++++++++------------ 1 file changed, 47 insertions(+), 18 deletions(-) diff --git a/reddit_downloader.sh b/reddit_downloader.sh index 061a0ad..fd00a65 100755 --- a/reddit_downloader.sh +++ b/reddit_downloader.sh @@ -6,31 +6,60 @@ if [ -z "$1" ]; then exit 1 fi -# Inputs USER="$1" DEST_FOLDER="${2:-./${USER}_images}" +USER_AGENT="Mozilla/5.0 (compatible; RedditImageDownloader/1.0)" -# Make destination folder mkdir -p "$DEST_FOLDER" -# API URL for user submissions (last 100 posts) -REDDIT_URL="https://www.reddit.com/user/$USER/submitted/.json?limit=1000" +AFTER="" +BASE_URL="https://www.reddit.com/user/$USER/submitted/.json" -# Fetch posts with proper User-Agent -echo "Fetching posts from user $USER..." -RESPONSE=$(curl -s -A "Mozilla/5.0 (compatible; RedditImageDownloader/1.0)" "$REDDIT_URL") +echo "Fetching all image posts from user $USER..." -# Check if response is valid JSON -if ! echo "$RESPONSE" | jq empty 2>/dev/null; then - echo "Error: Failed to fetch data or parse JSON. Reddit may have blocked the request." - exit 1 -fi +while true; do + # Build URL with pagination + if [ -z "$AFTER" ]; then + URL="${BASE_URL}?limit=100" + else + URL="${BASE_URL}?limit=100&after=${AFTER}" + fi -# Download image posts -echo "$RESPONSE" | jq -r '.data.children[] | select(.data.url | test("\\.(jpg|jpeg|png|gif)$")) | .data.url' | while read -r image_url; do - FILENAME=$(basename "$image_url") - echo "Downloading $FILENAME..." - curl -s -A "Mozilla/5.0" -o "$DEST_FOLDER/$FILENAME" "$image_url" + # Fetch posts + RESPONSE=$(curl -s -A "$USER_AGENT" "$URL") + + # Validate JSON + if ! echo "$RESPONSE" | jq empty 2>/dev/null; then + echo "Error: Failed to fetch or parse JSON. Exiting." + break + fi + + # Extract image URLs + IMAGE_URLS=$(echo "$RESPONSE" | jq -r '.data.children[] | select(.data.url | test("\\.(jpg|jpeg|png|gif)$")) | .data.url') + + # Exit if no more images found + if [ -z "$IMAGE_URLS" ]; then + echo "No more images found on this page." + fi + + # Download images + echo "$IMAGE_URLS" | while read -r image_url; do + [ -z "$image_url" ] && continue + FILENAME=$(basename "$image_url") + if [ ! -f "$DEST_FOLDER/$FILENAME" ]; then + echo "Downloading $FILENAME..." + curl -s -A "$USER_AGENT" -o "$DEST_FOLDER/$FILENAME" "$image_url" + else + echo "Skipping existing file $FILENAME" + fi + done + + # Get 'after' token for pagination + AFTER=$(echo "$RESPONSE" | jq -r '.data.after') + if [ "$AFTER" == "null" ] || [ -z "$AFTER" ]; then + echo "Reached end of posts." + break + fi done -echo "Download completed. Images saved to $DEST_FOLDER" +echo "Download complete. Images saved to $DEST_FOLDER"