Перенос списков Mastodon

автор vadim


Моя первоначальная учетная запись Mastodon была на mastodon.social. Я выбрал его, потому что это самый большой экземпляр, им управляют разработчики службы, и он запускает эталонную реализацию программного обеспечения. Сначала я хотел испытать Fediverse, как и большинство людей, а затем подумать, стоит ли мигрировать на другой сервер, и если да, то на какой.

На прошлой неделе я перешел на social.coop, который, как и cosocial.ca, Дариус Каземи называет независимой социальной сетью, принадлежащей сообществу. Я не думаю, что аббревиатура COISMS подойдет, но бизнес-модель — это именно то, что я искал. Я не хочу пользоваться «бесплатными» услугами, которые превращают меня в продукт, который они продают. Я хочу платить за услугу, которая финансируется моими долларами, а не моими данными. Вот почему я несколько лет назад отказался от Gmail в пользу Fastmail, и именно поэтому я с удовольствием трачу 10 долларов в месяц (цена пары капучино) на поддержку людей, которые поддерживают свет в social.coop и поддерживают его. вежливость.

Инструкция по миграции с одного сервера предлагает два пути: Profile redirect и Profile move. Я выбрал первое, потому что предполагал, что сохраняю доступ через API к mastodon.social после миграции и, таким образом, иметь возможность использовать Steampipe для запроса обеих учетных записей. Зачем это делать? Вы не можете перенести свои сообщения со старого сервера на новый, только ваших подписчиков и (необязательно) ваших подписчиков, закладки, блоки и отключения звука. Steampipe может одновременно подключаться к двум разным серверам Mastodon, поэтому я решил, что могу запускать запросы к обоим.

Уроки выучены

Это оказалось неправильным предположением. я могу повторно активировать свой mastodon.social учетную запись, отключив перенаправление, но я не совсем понимаю последствия этого. Между тем, мои посты по-прежнему можно экспортировать, так что я всегда могу повторно получить их таким образом, если это необходимо.

Здесь было еще одно неверное предположение. Я думаю, что если бы я решил переместить свою учетную запись, а не перенаправить ее, мой профиль был бы перенесен на новый сервер. Вместо этого я должен был заполнить новый профиль. я создал @judell@social.coop но, когда я начал миграцию, я еще не заполнил профиль. Поэтому, когда подписчики были уведомлены, что judell@social.coop теперь следил за ними, не было ни фотографии, ни биографии, ни проверенного веб-сайта. Это заставило некоторых людей подумать, что это поддельный аккаунт, и заблокировать его. Это не было катастрофой, и я разговаривал с некоторыми из них, чтобы решить этот вопрос, но это была вынужденная ошибка, которой было легко избежать.

Вид отсюда

Вот сравнение еженедельной активности на двух серверах с помощью панели управления сервером.

еженедельная активность мастодонта в социальных сетях против социального кооператива IDG

Каково это – перейти на сервер, на котором только 1% потока происходит на mastodon.social? Не слишком отличается! Поскольку я переместил своих подписчиков и подписчиков, и поскольку я взаимодействую в основном с домашней временной шкалой и списками, опыт в основном такой же. Например, вот график отношения повышения между серверами на моей домашней временной шкале. Это выглядит так же, как это было раньше.

серверные районы из социального кооператива IDG

Замечательно иметь портативный социальный граф, который вы можете взять с собой, перемещаясь по федеральной сети. Основные отличия заключаются в том, что я встречаюсь с новыми людьми и провожу больше времени на местной временной шкале. На большом сервере вроде mastodon.social местная временная шкала похожа на пожарный шланг Twitter для тех, кто помнит, когда это еще можно было смотреть. Иногда я просматривал его, потому что он мог быть источником полезной интуиции, но в основном он был слишком случайным. Местная временная шкала на social.coop все еще несколько случайный, но я нахожу его более полезным — не только потому, что он представляет гораздо меньшее количество людей, но и потому, что люди, которые зарегистрировались, разделяют общий интерес к модели кооператива.

я хочу свои списки

Однако было одно большое препятствие. Вы можете экспортировать списки со старого сервера и импортировать их на новый сервер, но нет экспорта/импорта для учетных записей, которые вы назначили этим спискам. Поскольку я в значительной степени полагаюсь на списки для целенаправленной и целенаправленной навигации по потоку мастодонтов, мне действительно нужно было решить эту проблему. Я попробовал импортировать список масто-списков Элиота Нэша, но когда я попытался перенести свои сопоставления 460 человек/список, я столкнулся с ограничениями скорости API. Поэтому вместо этого я разработал решение на основе Steampipe, которое является полезной альтернативой, а также хорошим способом проиллюстрировать необходимые шаги.

Предположим, что я хочу снова выполнить миграцию из social.coop к fosstodon.org. Я экспортировал названия своих списков из social.coopи импортировал их в fosstodon.org. Теперь мне нужно заполнить эти списки. Решение SQL, которое я придумал, работает поэтапно, каждое из которых представляет собой общее табличное выражение (CTE), которое выполняет одну часть сложного преобразования, а затем передает результаты на следующий шаг.

Шаг 1. Соберите учетные записи, назначенные каждому социальный кооператив список.

Начнем с объединения двух таблиц для перечисления учетных записей, назначенных каждому списку.

  with accounts_by_list as (
  select 
    a.acct as old_account,
    a.id as old_account_id,
    l.id as old_list_id,
    l.title as title
  from
    social_coop.mastodon_my_list l
  join
     social_coop.mastodon_list_account a
  on
    l.id = a.list_id
)
select * from accounts_by_list

Выход, в accounts_by_list, фактически представляет собой временную таблицу, которую вы можете просмотреть, чтобы убедиться, что результаты соответствуют ожиданиям. Возможность проверки выходных данных каждой фазы конвейера CTE перед отправкой на следующую фазу является ключевым преимуществом этого подхода. Вложенные подзапросы гораздо сложнее отлаживать!

Шаг 2. Сопоставьте учетные записи социальный кооператив на счета fosstodon.org

На этом этапе происходят два преобразования. Если учетная запись представляет собой простое имя пользователя, скажем personAто это social.coop счет. На fosstodon.org тот же аккаунт будет представлен как personA@social.coop. И наоборот, если personB@fosstodon.org существует на social.coopэта учетная запись становится голым именем пользователя personB там. Все другие учетные записи (например, personC@hachyderm.io) проходят без изменений.

with accounts_by_list as (
  -- as above
),
adjusted_accounts_by_list as (
  select
    old_account,
    old_account_id,
    old_list_id,
    title,
    case 
      when old_account !~ '@' then old_account || '@social.coop' 
      when old_account ~ '@fosstodon.org' then replace(old_account, '@fosstodon.org', '')
      else old_account
    end as new_account
  from
     accounts_by_list
)
select * from adjusted_accounts_by_list

Шаг 3: Сопоставьте заголовки списка с новым сервером.

Имена списков одинаковы в обоих местах, но их идентификаторы различаются. Например, мой Fediverse список 1043 на social.coop и 6771 на fosstodon.org. Чтобы вызвать вызов API, который добавляет кого-то в список, нам нужно использовать последний идентификатор.

with accounts_by_list as (
  -- as above
),
adjusted_accounts_by_list as (
  -- as above
),
adjusted_list_ids as (
  select
    a.*,
    l.id as new_list_id
  from
    adjusted_accounts_by_list a
  join
    fosstodon.mastodon_my_list l
  on
    a.title = l.title
)
select * from adjusted_list_ids

Шаг 4: Сопоставьте идентификаторы учетных записей с новым сервером.

Как и списки, учетные записи на новом сервере также имеют разные идентификаторы, и они также необходимы для вызова API. Мы можем найти новые идентификаторы, присоединившись к new_account столбец из шага один с таблицей fosstodon.mastodon_my_following.

with accounts_by_list as (
  -- as above
),
adjusted_accounts_by_list as (
  -- as above
),
adjusted_list_ids as (
  -- as above
,
),
adjusted_account_ids as (
  select 
    a.*,
    f.id as new_account_id
  from
    adjusted_list_ids a
  join
    fosstodon.mastodon_my_following f
  on
    f.acct = a.new_account
)
select * from adjusted_account_ids

Шаг 5. Создайте вызовы API

Есть много способов снять шкуру с этой кошки. Поскольку вы можете использовать Steampipe в качестве компонента, вы можете использовать любой язык программирования с драйвером Postgres для выполнения этого запроса и вызывать API Mastodon с соответствующим списком и идентификаторами учетных записей.

И потом, конечно, всегда curl.

with accounts_by_list as (
  -- as above
),
adjusted_accounts_by_list as (
  -- as above
),
adjusted_list_ids as (
  -- as above
),
adjusted_account_ids as (
  -- as above
)
select
  'curl -X POST -H "Authorization: Bearer ***" https://fosstodon.org/api/v1/lists/' ||
  new_list_id ||
  '/accounts/?' ||
  'account_ids[]=' ||
  new_account_id ||
  '; sleep 1;' as command

Чтобы избежать дросселирования, я добавил sleep 1 к каждой строке. Я сохранил запрос в migrate-lists.sqlи экспортировал результат в файл.

steampipe query --output csv migrate-lists.sql > migrate.sh

Это было близко, но не совсем правильно. Вывод выглядел так:

command
"curl -X POST -H ""Authorization: Bearer ***"" https://fosstodon.org/api/v1/lists/6771/accounts/?account_ids[]=279462; sleep 1;"
"curl -X POST -H ""Authorization: Bearer ***"" https://fosstodon.org/api/v1/lists/6771/accounts/?account_ids[]=109283421559929728; sleep 1;"

Мне нужно удалить строку заголовка, удалить двойные кавычки с обоих концов каждой строки и дедуплицировать пары двойных кавычек. Для этого я обратился к ChatGPT (v4). Потребовалось несколько попыток, чтобы сделать это правильно, но достаточно скоро он создал работающий сценарий bash, который я очень рад, что мне не пришлось писать.

#!/bin/bash

# read the original script from migrate.sh and store it in an array
readarray -t original_script < migrate.sh

# remove the first line of the original script
modified_script=("${original_script[@]:1}")

# loop through the modified script array and replace double double-quotes with a single double-quote and remove double quotes at the beginning and end of each line
for (( i=0; i<${#modified_script[@]}; i++ )); do
    modified_script[$i]=$(sed 's/""https://www.infoworld.com/"/g' <<< "${modified_script[$i]}")
    modified_script[$i]=$(sed 's/^"//' <<< "${modified_script[$i]}")
    modified_script[$i]=$(sed 's/"$//' <<< "${modified_script[$i]}")
done

# print out the modified script with newlines
printf '%s\n' "${modified_script[@]}"

И это помогло. Теперь, когда мои списки полностью заполнены social.coopтеперь я читаю Mastodon со своего нового домашнего сервера таким же списочно-ориентированным способом, как и на старом.

Если вы перемещаете серверы и хотите перенести людей из своих списков, вам обязательно следует сначала попробовать masto-list-importer и рассмотреть этот метод как запасной вариант, если он не работает для вас. Я согласен с Элиотом Нэшем в том, что перенос списка должен быть встроен в пользовательский интерфейс Mastodon. Люди справедливо жалуются, что может быть трудно найти людей, за которыми вы хотите следить, и темы, которые вы хотите изучить. Вы можете следить за хэштегами, но это может быть слишком случайным. Назначение людей в тематические списки обеспечивает хороший баланс. Но только если эти назначения списка переносимы!

Эта серия:

  1. Автономность, размер пакета, трение, разветвление и скорость
  2. Mastodon, Steampipe и RSS
  3. Просмотр федиверса
  4. Терминал Bloomberg для Mastodon
  5. Создайте свой собственный Mastodon UX
  6. Списки и люди на Mastodon
  7. Сколько людей в моей ленте Mastodon также написали сегодня в Твиттере?
  8. URL-адреса Mastodon с указанием экземпляра
  9. Графики взаимоотношений мастодонтов
  10. Работа со списками мастодонтов
  11. Изображения считаются вредными (иногда)
  12. Картирование более широкой федеральной сети
  13. Протоколы, API и соглашения
  14. Новости в федерации
  15. Сопоставление людей и тегов в Mastodon
  16. Визуализация модерации сервера Mastodon
  17. Сроки Mastodon для команд
  18. Плагин Mastodon теперь доступен на Steampipe Hub.
  19. Перенос списков Mastodon
  20. Когда резиновая уточка возражает

Related Posts

Оставить комментарий