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