#fediuri

2026-01-09

@mo @vort3 есть github.com/timbray/fedi-uri, но кроме меня её никто, наверное, и не использует. Да и я использую некорректно, потому что мои скрипты просто преобразуют ссылки на посты относительно текущего инстанса (`mastodon.ml/@vort3@mastodon.so -> `fedi://vort3@mastodon.social/115866451719779659`), а по идее нужно брать ссылку на исходный пост и преобразовывать её (`mastodon.social/@vort3/1158664 -> `fedi://vort3@mastodon.social/115866451688358757`), при открытии же отправлять её в поиск своего инстанса.

mastodon.ml/@mintbug/113498275

#uri #fediuri

2025-03-17

@PseudoCube @flekso вот свой старый пост я кое-как откопал, а сам тред, в котором этот пост лежал, не подгружается. Я знаю, что интернет эфемерен, но не настолько же! Полезные треды теряются в никуда.

Я для чего со схемами uri развлекаюсь? (Смотри #fediuri) Я для чего ссылки на треды по заметкам раскидываю? Чтобы через полгода вернуться к теме, открыть заметку и обнаружить, что все ссылки битые?

Мне что, нужно разбираться, как парсить треды, и сохранять их содержимое локально?

#datahoarding

2025-03-05

mastodon.ml/@mintbug/114086408
Написал скрипт, который принимает https-ссылку на пост, получает ссылки на вложения с помощью #toot, преобразует https-ссылку в fedi-ссылку и сохраняет вложения в директорию с именами вида `<fedi-ссылка> <номер вложения>.ext` (см. иллюстрацию). Слеши в fedi-ссылке заменены на знак `∫`, потому что ~~а почему бы и нет~~ я ещё не настолько сошёл с ума, чтобы использовать слеши в именах файлов, поэтому их нужно на что-то заменить.

Запуск `fedi-save (wl-paste)` повесил на хоткей в #sway; открытие ссылки, содержащейся в имени файла (`fedi-save --open <path>`) повесил на хоткей в #yazi.

#datahoarding #fediuri

```fish
#!/usr/bin/env fish
argparse o/open -- $argv
or return

set dir ~/Downloads/fedi

function parse --argument-names uri
    string match -rg -- 'https?://([^/]+)/@([^/@]+)@?([^/]*)/?([[:digit:]]*)' $uri
end

function convert --argument-names instance user user_instance toot
    echo fedi:∫∫{$user}@(test $user_instance && echo $user_instance || echo $instance)∫$toot
end

function save --argument-names uri out
    aria2c --dir $dir --out=$out --continue=true $uri
end

if set -q _flag_open
    for path in $argv
        string replace --all -- ∫ / (string match -rg -- '.*(fedi:∫∫[^∫]+∫[[:digit:]]+).*' $path)
    end | fedi-hack --stdin
    return
end

set parts (parse $argv[1])
or return
set status_id $parts[4]
set name (convert $parts)

set count 0
for attachment in (toot status --json $status_id | jq -r '.media_attachments[] | .url')
    save $attachment $name(test $count -gt 0 && echo " $count" || echo)(path extension $attachment)
    set count (math $count + 1)
end
```файлики с автоматически сгенерированными именами
2025-03-01

Обновил скрипт fedi-hack. Ключ --replace нужен для того, чтобы делать в #nvim `:!fedi-hack --replace` и преобразовывать ссылки в #norg-файле из fedi в обычный https вид.

Оно превращает
```norg
- {fedi://Thunderlel@quietplace.xyz/113749364071239796} куранты
- {fedi://PseudoCube@shitpost.poridge.club/112652938439271252} альты
```
в
```norg
- {mastodon.ml/@Thunderlel@quietp куранты
- {mastodon.ml/@PseudoCube@shitpo альты
```

#uri #fediuri

```fish
#!/usr/bin/env fish
argparse s/show r/replace -- $argv
or return

set instance mastodon.ml

function convert --argument-names uri
    echo https://$instance/@(string replace @$instance '' (string replace fedi:// '' $uri))
end

if set -q _flag_show
    convert $argv[1]
else if set -q _flag_replace
    while read line
        if set link (string match -rg -- '{([^}]+)}' $line)
            string replace -- $link (convert $link) $line
        else
            echo $line
        end
    end
else
    open (convert $argv[1])
end
```
2025-02-16

Вариант в схемой `file` — полное уныние, поскольку нужно указывать полный путь. Второй вариант я могу кастовать в виде
```lua
vim.system({ "okular", "-p", "100", vim.fs.normalize("~/Books/book.pdf") })
```
И возникает вопрос, какой интерфейс выбрать. Конечно, я могу сделать команду редактора, как в первом посте. Но выглядит это костыльно. Плюс, каждый раз писать путь к книге не хочется. Поэтому пришла в голову идея сделать свою схему urn! Если кто-то видел решения этой или похожей задачи, отпишитесь. Придумывание собственной схемы uri выглядит очень уж дико. То ли дело реализация на коленке готовой спецификации <mastodon.ml/@mintbug/113498275>!

#uri #urn #fediuri

2024-11-17

1. захотел прикрутить алиас к #neorg'у при помощи того же github.com/phenax/neorg-hop-ex, чтобы заменить ссылки вида {mastodon.ml/@username@example. на {&fv @username@example.com} (fv ака fediverse), где fv — используемый на текущий момент инстанс
2. обнаружил, что ссылки вида mastodon.ml/@username@mastodon почему-то не пашут (приводят к бесконечной загрузке)
3. не стал разбираться, почему, а сразу пошёл искать схему uri
4. она таки есть: github.com/timbray/fedi-uri
5. покурил мануалы: wiki.archlinux.org/title/Deskt, specifications.freedesktop.org
6. воткнул ~/Documents/sync/education/shell/fish/fedi-hack.desktop (см. картинку 1)
7. воткнул ~/Documents/sync/education/shell/fish/fedi-hack (см. картинку 2)
```fish
ln -s ~/Documents/sync/education/shell/fish/fedi-hack.desktop ~/.local/share/applications/fedi-hack.desktop
ln -s ~/Documents/sync/education/shell/fish/fedi-hack ~/.local/bin/fedi-hack
```

Теперь пишу ссылки в виде {fedi://WildPowerHammer@mastodon.ml/113483960863802448}; доволен, как слон.

#uri #fediuri

[Desktop Entry]
Type=Application
Name=fedi
Exec=fedi-hack %u
Terminal=true
Icon=dev.geopjr.Tuba
MimeType=x-scheme-handler/fedi;#!/usr/bin/env fish
set instance mastodon.ml
set uri $argv[1]
open https://$instance/@(string replace @$instance '' (string replace fedi:// '' $uri))

Client Info

Server: https://mastodon.social
Version: 2025.07
Repository: https://github.com/cyevgeniy/lmst