henry_flower: A melancholy wolf (Default)
henry_flower ([personal profile] henry_flower) wrote2024-12-16 03:43 pm

Reddit замість fortune(1)

Пан @vak нещодавно знайшов дотепну заміну fortune(1), де парсячи реддітовського джейсона окремого ком'юніті, можна собі ув терміналі друкувати ~свіжі жарти.

У коментарях там мументально переписали пáйфона на шелл, тому мінімальний скрипта, з доданими очікуваннями на деякі помилки, виглядає ось так:

lolreddit in xterm

Якщо реддіт вертає не зовсім того джейсона, який ми очікували, ми друкуємо нічого. w3m потрібен щоб перетворювати & і друзів на відповідні символи.

Скрипта має 2 недоліки:

  1. джейсона завантажується кожного разу, а реддіт часто вертає 429;
  2. жарти беруться лише з 1го ком'юніті.

Завантажування можна закешити і перевіряти застарілість кешу на кожному запуску. jq вміє самотужки парсити окремо кожний файловий аргумента. Переписати скрипта ліпше за все як мейкфайла, тому шо лише дурень пише на баші те, шо може зробити Мейка (ніхто так не каже):

#!/usr/bin/make -sf

r := showerthoughts CrazyIdeas oneliners
update := 600

wits := /tmp/reddit-wisdom/all.txt
age := $(shell expr `date +%s` - `date -r $(wits) +%s 2>/dev/null || echo 0`)
$(shell [ $(age) -gt $(update) ] && rm -f /tmp/reddit-wisdom/*)

all: $(wits)
    sort -R < $< | head -1 | w3m -dump -T text/html

$(wits): $(patsubst %, /tmp/reddit-wisdom/%.json, $(r))
    jq -r '.data?.children[]?.data | "\"\(.title)\" -- \(.author)" | gsub("\\n"; " ")' $^ > $@

/tmp/reddit-wisdom/%.json:
    mkdir -p $(dir $@)
    echo Fetching r/$*
    curl -sf 'https://www.reddit.com/r/$*/top.json?sort=top&t=week&limit=100' > $@

.DELETE_ON_ERROR:

(Ув fbsd потрібно встановити gmake та відредагувати shebang.) cowsay з lolcat'ом я прибрав. Завантажений джейсона застаріває кожні 600 секунд, але IRL краще виставити 48 годин.

$ ./reddit-wisdom
Fetching r/showerthoughts
Fetching r/CrazyIdeas
Fetching r/oneliners
"We’re constantly playing a tug of war against companies by paying YouTube to
not show ads while they pay YT to show them. " -- SillySlothySlug
$ ./reddit-wisdom
"make a law where everybody gives money to me" -- Due_Intention_2473

$ wc -l < /tmp/reddit-wisdom/all.txt
186

Найскладніше тут знайти слушні ком'юніті, які мають цікаві тайтлс постів. showerthoughts інколи буває NSFW.

vak: (Default)

[personal profile] vak 2024-12-16 06:39 pm (UTC)(link)
Скрипти то цікава розвага. 😀