Tagged in: terminal

2026 på det mørke nettet?

I går kveld synte eg eldstesonen Youtube ufiltrert. Berre med å gå til framsida der, vart me møtte av to videoar som var reklame, men utgav seg for å vera søkeresultat. «Enshittification» (Doctorow) heiter det på godt norsk.

Går me attende kun nokre få år (2023), var ståa ein annan.

Ikkje berre har søkeresultata vorte dårlegare, men dei har og vorte færre.

Så kva gjer ein stakkars småbarnsfar med 60 studiepoeng i IKT i læring og ein mangeårig interesse for EDB? Lagar eit lite shellscript. Eg har ikkje stålkontroll, men kan nok til å få til dette. Og det er gøy!

Sidan eg har Linux på alle mine datamaskinar (det er nokre…..), har eg som regel oppe eit svart terminalvindu likevel. Eg har og installert videoframsynaren mpv, og youtube-dl (ca…).

Og det er på den måten at eg heilt reklamefritt, og doomscrollefritt, utan eit einaste bilete å freista meg med, kan søka på youtube.com frå terminalvindauget mitt.

Eg får opp 25 resultat pr. side, og skriv så inn talet fremt, og trykker på enter.

Godt nytt år på den «mørke» webben. 😉

Ps. og for Kjetil sin del;

#!/usr/bin/env bash

# Get the user's query for the YouTube search
read -rp "Search YouTube: " QUERY
echo "Searching…"

# Get the search results from yt-dlp
RESULTS=$(yt-dlp --flat-playlist -J "ytsearch100:${QUERY}" 2>/dev/null)

# Check if results are returned
if [ -z "$RESULTS" ]; then
    echo "No results."
    exit 1
fi

# Build array manually (POSIX-safe)
ITEMS=()
while IFS= read -r line; do
    ITEMS+=("$line")
done <<EOF
$(echo "$RESULTS" |
    jq -r '.entries[] | select(.channel_id != null) |
    "\(.channel)\t\(.channel_id)\t\(.title)\t\(.url)"')
EOF

TOTAL=${#ITEMS[@]}
PAGE=0
PAGE_SIZE=25

# Start a loop to paginate the results
while true; do
    START=$((PAGE * PAGE_SIZE))
    END=$((START + PAGE_SIZE))

    # If we reach the end of the results, exit
    if [ "$START" -ge "$TOTAL" ]; then
        echo "No more results."
        break
    fi

    # Display the results for the current page
    echo
    echo "=== Results $((START+1)) to $((END < TOTAL ? END : TOTAL)) of $TOTAL ==="

    i=$START
    while [ "$i" -lt "$END" ] && [ "$i" -lt "$TOTAL" ]; do
        IFS=$'\t' read -r CHANNEL CHANNEL_ID TITLE URL <<< "${ITEMS[$i]}"
        printf "%3d) %-40s (%s)\n" $((i+1)) "$CHANNEL" "$TITLE"
        i=$((i+1))
    done

    echo
    read -rp "Enter number to play, n=next page, q=quit: " CHOICE

    case "$CHOICE" in
        q|Q)
            exit 0
            ;;
        n|N)
            PAGE=$((PAGE+1))
            ;;
        ''|*[!0-9]*)
            echo "Invalid input."
            ;;
        *)
            INDEX=$((CHOICE - 1))
            if [ "$INDEX" -lt 0 ] || [ "$INDEX" -ge "$TOTAL" ]; then
                echo "Invalid selection."
                continue
            fi

            # parse the chosen item
            IFS=$'\t' read -r CHANNEL CHANNEL_ID TITLE URL <<< "${ITEMS[$INDEX]}"

            # Open the selected URL in mpv
            echo "Opening: $TITLE"
            mpv --ytdl-format="bv*[height<=?720][fps<=?30][vcodec!=?vp9]+ba/best[height<=?720]" "$URL" &
            ;;
    esac
done