۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

Mastodon، Steampipe و RSS

استفاده از Steampipe برای ساخت داشبوردی که پرسش‌های مربوط به API جستجوی Mastodon و لذت‌های یکپارچه‌سازی مبتنی بر RSS را ترکیب می‌کند.

استفاده از Steampipe برای ساخت داشبوردی که پرسش‌های مربوط به API جستجوی Mastodon و لذت‌های یکپارچه‌سازی مبتنی بر RSS را ترکیب می‌کند.

من مصمم بودم امروز #معرفی ماستودون را بنویسم. برای شروع، از جستجوی برچسب در داشبوردی که می سازم استفاده کردم.

جستجوی برچسب ماستودون کاتی نیکل در mod3

ایده این بود که به تعداد زیادی #پست‌های معرفی دیگر نگاهی بیندازیم تا احساس کنم که پست من چگونه باید پیش برود. هنگامی که به طور خاص برای هشتگ ها جستجو می کنید، API جستجوی Mastodon این اطلاعات را برمی گرداند.

"hashtags": [
    {
      "name": "introduction",
      "url": "https://mastodon.social/tags/introduction",
      "history": [
        {
          "day": "1574553600",
          "uses": "10",
          "accounts": "9"
        },
        // ...
      ]
    },

نسخه اول داشبورد، که فقط با این داده ها کار می کند، فقط نام برچسب های مطابق با عبارت جستجو را همراه با URL های مربوطه فهرست کرده است. این درخواست اولیه بود.

select 
  name,
  url
from 
  mastodon_search_hashtag 
where 
  query = 'introduction'

که فهرستی از پیوندها را ایجاد کرد، مانند https://mastodon.social/tags/introduction، به صفحات اصلی برای انواع تگ. اینها لینک های مفیدی هستند! هر کدام به صفحه ای می رود که در آن می توانید ببینید چه کسی به برچسب پست می کند.

برای اینکه این نما کمی مفیدتر باشد، من روی عنصر سوم پاسخ API، history، در یک درخواست تجدید نظر شده ضربه زدم.

with data as (
  select 
    name,
    url,
    ( jsonb_array_elements(history) ->> 'uses' )::int as uses
  from 
    mastodon_search_hashtag 
  where 
    query = 'introduction'
)
select
  name,
  url,
  sum(uses)
from
  data
group by
  name, url
order by
  sum desc

این نتایج به من کمک می کند تصمیم بگیرم از کدام نوع استفاده کنم.

+-------------------+---------------------------------------------------+------+
| name              | url                                               | sum  |
+-------------------+---------------------------------------------------+------+
| introduction      | https://mastodon.social/tags/introduction         | 1816 |
| introductions     | https://mastodon.social/tags/introductions        | 218  |
| introductionpost  | https://mastodon.social/tags/introductionpost     | 19   |
| introductionfr    | https://mastodon.social/tags/introductionfr       | 6    |

اما هنوز باید از صفحه هر پیوند دیدن کنم تا نحوه استفاده از آن را بررسی کنم. خوب است که زمینه بیشتری را در داشبورد نمایان کنم، و من یک راه خوب برای انجام آن پیدا کردم، اما ابتدا اجازه دهید یک دقیقه روی پرس و جوی اصلاح شده تمرکز کنیم. ویژگی‌های JSON قدرتمند هستند و تجسم نحوه کار آنها اغلب یک چالش (حداقل برای من) است.

زبان Gleam در اولین نسخه پایدار موجود است

تابع jsonb_array_elements() Postgres چیزی است که تابع بازگشتی مجموعه نامیده می شود. در اینجا نمایش JSON Postgres از فهرست ساختارهای history بازگشتی از Mastodon API را باز می‌کند. در ساده‌ترین شکل، فراخوانی تابع jsonb_array_elements(history) یک جدول موقت با داده‌های هر برچسب، در روز تولید می‌کند.

select
  name,
  jsonb_array_elements(history) as history
from
  mastodon_search_hashtag 
where 
  query = 'introduction'
+--------------------------------+----------------------------------------------------+
| name                           | history                                            |
+--------------------------------+----------------------------------------------------+
| introduction                   | {"accounts":"16","day":"1670371200","uses":"19"}   |
| introduction                   | {"accounts":"250","day":"1670284800","uses":"269"} |
| introduction                   | {"accounts":"259","day":"1670198400","uses":"274"} |
| introduction                   | {"accounts":"253","day":"1670112000","uses":"270"} |
| introduction                   | {"accounts":"245","day":"1670025600","uses":"269"} |
| introduction                   | {"accounts":"345","day":"1669939200","uses":"383"} |
| introduction                   | {"accounts":"307","day":"1669852800","uses":"339"} |
| introductionsfr                | {"accounts":"0","day":"1670371200","uses":"0"}     |
| introductionsfr                | {"accounts":"0","day":"1670284800","uses":"0"}     |
| introductionsfr                | {"accounts":"0","day":"1670198400","uses":"0"}     |
| introductionsfr                | {"accounts":"0","day":"1670112000","uses":"0"}     |
| introductionsfr                | {"accounts":"0","day":"1670025600","uses":"0"}     |

history یک ستون JSONB است که یک شی را با سه فیلد نگه می‌دارد. جستار اصلاح شده از اپراتور نمایه سازی JSON Postgres ->> برای دسترسی به آن شی و افزایش تعداد استفاده های روزانه در ستون خود استفاده می کند، بنابراین می تواند هدف یک SUM تابع.

خوب، برای راه حل عالی آماده اید؟ به یاد داشته باشید که https://mastodon.social/tags/introduction صفحه اصلی آن نوع تگ است. . در آنجا می توانید پست های معرفی افرادی را که از این برچسب استفاده می کنند مشاهده کنید. این پست ها معمولاً شامل برچسب های دیگری می شوند. در داشبورد نشان داده شده در بالا می توانید ببینید که کتی نیکلز از این موارد استفاده می کند: #موسیقی #هنر #سواری #طبیعت #حیوانات. برچسب ها در پست معرفی او ظاهر می شوند.

جستجوی برچسب ماستودون کاتی نیکل در برنامه

من بلافاصله ندیدم چگونه آنها را برای استفاده در داشبورد ضبط کنم. سپس به یاد آوردم که کلاس های خاصی از صفحه Mastodon دارای فیدهای RSS متناظر هستند، و تعجب کردم که آیا صفحات برچسب اعضای یکی از این کلاس ها هستند. مطمئناً آنها هستند، و https://mastodon.social/tags/introduction.rss یک چیز. آن پیوند، که با برچسب زدن .rss بر روی URL پایه ایجاد شده است، زمینه اضافی مورد نظر من را فراهم می کند. در اینجا نسخه نهایی پرس و جو است.

with data as (
  select 
    name,
    url,
    ( jsonb_array_elements(history) ->> 'uses' )::int as uses
  from 
    mastodon_search_hashtag 
  where 
    query = 'introduction'
  ),
  uses as (
    select 
      name,
      url || '.rss' as feed_link,
      sum(uses) as recent_uses
    from 
      data 
    group 
      by connection, name, url
  )
  select
    u.name,
    r.guid as link,
    to_char(r.published, 'YYYY-MM-DD') as published,
    r.categories
  from
    uses u
  join
    rss_item r
  on 
    r.feed_link = u.feed_link
  where
    recent_uses > 1
  order by 
    recent_uses desc, published desc
)

مواد تشکیل دهنده جدید، با حسن نیت از فید RSS، راهنما هستند، که به معرفی فردی مانند Kathy's پیوند دارد. منتشر شد، که روزی است که مقدمه ظاهر شد. و دسته‌ها که دارای برچسب‌های استفاده شده در پست مقدمه است. شیرین! اکنون می‌توانم داشبورد را اسکن کنم تا بفهمم کدام مقدمه را می‌خواهم بررسی کنم.

سه پرسش اول از افزونه Steampipe برای Mastodon و به ویژه جدول code>mastodon_search_hashtag که Mastodon API را برای جستجوی برچسب ها در خود محصور می کند. نسخه نهایی با جدول rss_item به جدول می پیوندد که توسط افزونه RSS، با استفاده از URL پایه مشترک به عنوان پایه اتصال.

این من را از بسیاری جهات خوشحال می کند. هنگامی که وبلاگ سپهر برای اولین بار در اوایل دهه ۲۰۰۰ ظهور کرد، برخی از ما متوجه شدیم که پروتکل RSS قادر است بسیار بیشتر از ارائه فید به RSS خوان ها باشد. دیگر پروتکل داغ جدید در آن دوران خدمات وب XML بود. به‌عنوان یک تحلیلگر InfoWorld، قرار بود از این فناوری به‌عنوان یک فناوری در سطح سازمانی استقبال کنم، اما نمی‌توانستم متوجه شوم که RSS همچنان راهی عالی برای انتقال داده‌ها بین سیستم‌های همکار است. این همیشه درست بوده است، و من دوست دارم چگونه این مثال به ما یادآوری کند که هنوز هم درست است.

من به همان اندازه خوشحالم که نشان می دهم چگونه Steampipe این تمرین مدرن را در یکپارچه سازی مبتنی بر RSS فعال می کند. Steampipe در اصل موتوری برای نگاشت نتایج از نقاط پایانی JSON API به جداول SQL بود. با این حال، با گذشت زمان، دیدگاه خود را در مورد آنچه که یک API را تشکیل می دهد، گسترش داده است. می‌توانید از Steampipe برای درخواست فایل‌های CSV، یا فایل‌های Terraform یا -همانطور که در اینجا می‌بینیم- فیدهای RSS استفاده کنید. داده ها در انواع طعم ها وجود دارد. Steampipe این تفاوت‌ها را خلاصه می‌کند و همه طعم‌ها را در یک فضای مشترک قرار می‌دهد تا بتوانید با استفاده از SQL درباره آنها استدلال کنید.

و در نهایت، بودن در تقاطع Mastodon، Steampipe و RSS در این لحظه فوق‌العاده فوق‌العاده است. من به راحتی اعتراف می کنم که نوستالژی یک عامل است. اما RSS 20 سال پیش همه چیز را کاملاً باز کرد، Mastodon اکنون این کار را انجام می دهد، و من دوست دارم RSS بتواند به تکرار آن کمک کند.

اکنون باید آن #مقدمه را بنویسم!

این مجموعه:

  1. خودمختاری، اندازه بسته، اصطکاک، هواکش و سرعت
  2. Mastodon، Steampipe و RSS
  3. مرور fediverse
  4. یک پایانه بلومبرگ برای Mastodon
  5. Mastodon UX خود را ایجاد کنید
  6. لیست ها و افراد موجود در Mastodon
  7. چند نفر در فید Mastodon من نیز امروز توییت کردند؟
  8. نشانی‌های اینترنتی Mastodon واجد شرایط نمونه
  9. نمودارهای رابطه ماستودون
  10. کار با لیست های Mastodon
  11. تصاویری که مضر تلقی می شوند (گاهی اوقات)
  12. نقشه برداری فدیورس وسیع تر
  13. پروتکل‌ها، APIها و قراردادها
  14. اخبار در fediverse
  15. نقشه برداری از افراد و برچسب ها در Mastodon
  16. تجسم نظارت سرور Mastodon
  17. جدول زمانی Mastodon برای تیم ها
  18. افزونه Mastodon اکنون در Steampipe Hub در دسترس است

شاید به این مطالب علاقمند باشید