Я и не думал использовать списки мастодонтов, пока не прочитал Разочарование со списками глава книги Мартина Фаулера «Исследуя мастодонта», в которой он пишет:
Мне нравятся списки, потому что они позволяют мне разделить мою временную шкалу на темы, о которых я хочу читать в разное время. Они разочаровывают, потому что инструменты для управления ими в Твиттере очень ограничены, поэтому настроить среду, которую я хотел бы, гораздо сложнее. У Mastodon также есть списки, к сожалению, его текущие инструменты управления столь же плохи.
Это казалось хорошим вызовом для Steampipe. Чтобы решить эту проблему, мне сначала нужно было добавить в плагин несколько новых таблиц для инкапсуляции API-интерфейсов списков: mastodon_list и mastodon_list_account. Я сохраню эту историю для другого раза. Здесь я просто покажу, что вместе они позволяют выполнять подобные запросы.
select
l.title as list,
array_agg(a.username order by a.username) as people
from
mastodon_list l
join
mastodon_list_account a
on
l.id = a.list_id
group by
l.title
+--------------+--------------------------------------+
| list | people |
+--------------+--------------------------------------+
| Academic | ____, ______, ____, ___ |
| Education | ___, ______ ___, ______ |
| Energy | ___, ______, ____ __ |
| Fediverse | ____ __, |
| Humor | ____, ____ __, ____ __ |
| Journalism | ___ __, ___ ____, ___, ______ |
| Library | __ |
| Net | ___ __, _____, ___ __, __ __, ____ |
| Science | __, ____ __, ______ |
| Software | ____ __, ______, ____ __ |
+--------------+--------------------------------------+
Это полезное представление, и теперь я включил его, но оно не отвечало конкретной потребности Мартина.
Чтобы управлять этими списками, мне действительно нужен дисплей, который показывает каждую учетную запись, на которую я подписан, в таблице со своими списками. Таким образом, я могу легко увидеть, в каком списке находится каждая учетная запись, и обнаружить любые учетные записи, которых нет в списке.
Для этого мне нужно было добавить список колонка к Следующий вкладка
Это был исходный запрос.
select
url,
case when display_name="" then username else display_name end as person,
to_char(created_at, 'YYYY-MM-DD') as since,
followers_count as followers,
following_count as following,
statuses_count as toots,
note
from
mastodon_following
order by
person
Новая версия фиксирует приведенное выше объединение mastodon_list и mastodon_list_accountи присоединяется к этому mastodon_following (люди, за которыми я следую) таблица. Это левое соединение, а это значит, что я всегда буду получать всех людей, за которыми я слежу. Если вас нет в списке, ваш список столбец будет нулевым.
with data as (
select
l.title as list,
a.*
from
mastodon_list l
join
mastodon_list_account a
on
l.id = a.list_id
),
combined as (
select
d.list,
f.url,
case when f.display_name="" then f.username else f.display_name end as person,
to_char(f.created_at, 'YYYY-MM-DD') as since,
f.followers_count as followers,
f.following_count as following,
f.statuses_count as toots,
f.note
from
mastodon_following f
left join
data d
on
f.id = d.id
)
select
*
from
combined
order by
person
Этот запрос управляет новой версией Следующий вкладка
Это довольно скудно, я только начал добавлять людей в списки. И, честно говоря, я не уверен, что захочу продолжать это курирование, это то, что может стать обузой, мне нужно еще немного поиграть, прежде чем я совершу. Между тем, сортировка по умолчанию ставит на первое место людей, не включенных в список, чтобы их было легко найти.
Чтобы обеспечить лучший способ поиска людей, включенных в списки, я расширил Список tab несколькими способами. Он включал раскрывающийся список списков, по которым можно было фильтровать домашнюю временную шкалу. Теперь в этом раскрывающемся списке есть количество людей в каждом списке.
input "list" {
type = "select"
width = 2
sql = <<EOQ
with list_account as (
select
l.title
from
mastodon_list l
join
mastodon_list_account a
on
l.id = a.list_id
),
counted as (
select
title,
count(*)
from
list_account
group by
title
order by
title
)
select
title || ' (' || count || ')' as label,
title as value
from
counted
order by
title
EOQ
}
Я также использовал этот запрос, чтобы расширить Список вкладка
select
l.title as list,
array_to_string( array_agg( lower(a.username) order by lower(a.username)), ', ') as people
from
mastodon_list l
join
mastodon_list_account a
on
l.id = a.list_id
group by
l.title
Результатом является список / люди стол справа.
Я знаю, что некоторым не понравится эта модель программирования SQL-forward. Но для тех, кто захочет, я хотел показать несколько подробных примеров, чтобы дать вам представление о том, что возможно на пересечении Mastodon и Steampipe.
Если вы не разбираетесь в SQL (как и я в течение очень долгого времени), вот вам вывод: что касается SQL, то это не так уж и страшно. Да, есть соединения, да, есть array_agg
который транспонирует столбец в список. Это не SQL для начинающих. Но многие умеют пользоваться join
и array_agg
таким образом, многие другие могли бы легко научиться, и в настоящее время с господством SQL это навыки, которые стоит иметь.
Эта серия:
- Автономность, размер пакета, трение, разветвление и скорость
- Mastodon, Steampipe и RSS
- Просмотр федиверса
- Терминал Bloomberg для Mastodon
- Создайте свой собственный Mastodon UX
- Списки и люди на Mastodon
- Сколько людей в моей ленте Mastodon также написали сегодня в Твиттере?
- URL-адреса Mastodon с указанием экземпляра
- Графики взаимоотношений мастодонтов
- Работа со списками мастодонтов
- Изображения считаются вредными (иногда)
- Картирование более широкой федеральной сети
- Протоколы, API и соглашения
- Новости в федерации
- Сопоставление людей и тегов в Mastodon
- Визуализация модерации сервера Mastodon
- Сроки Mastodon для команд
- Плагин Mastodon теперь доступен на Steampipe Hub.