Списки и люди на Mastodon

автор vadim


Я и не думал использовать списки мастодонтов, пока не прочитал Разочарование со списками глава книги Мартина Фаулера «Исследуя мастодонта», в которой он пишет:

Мне нравятся списки, потому что они позволяют мне разделить мою временную шкалу на темы, о которых я хочу читать в разное время. Они разочаровывают, потому что инструменты для управления ими в Твиттере очень ограничены, поэтому настроить среду, которую я хотел бы, гораздо сложнее. У 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

Этот запрос управляет новой версией Следующий вкладка

мастодонт следующие со списками IDG

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

Чтобы обеспечить лучший способ поиска людей, включенных в списки, я расширил Список 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

Результатом является список / люди стол справа.

расширенный вид списка IDG

Я знаю, что некоторым не понравится эта модель программирования SQL-forward. Но для тех, кто захочет, я хотел показать несколько подробных примеров, чтобы дать вам представление о том, что возможно на пересечении Mastodon и Steampipe.

Если вы не разбираетесь в SQL (как и я в течение очень долгого времени), вот вам вывод: что касается SQL, то это не так уж и страшно. Да, есть соединения, да, есть array_agg который транспонирует столбец в список. Это не SQL для начинающих. Но многие умеют пользоваться join и array_agg таким образом, многие другие могли бы легко научиться, и в настоящее время с господством SQL это навыки, которые стоит иметь.

Эта серия:

  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.

Related Posts

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