استفاده از Steampipe برای ساخت داشبوردی که پرسشهای مربوط به API جستجوی Mastodon و لذتهای یکپارچهسازی مبتنی بر RSS را ترکیب میکند.
من مصمم بودم امروز #معرفی ماستودون را بنویسم. برای شروع، از جستجوی برچسب در داشبوردی که می سازم استفاده کردم.
ایده این بود که به تعداد زیادی #پستهای معرفی دیگر نگاهی بیندازیم تا احساس کنم که پست من چگونه باید پیش برود. هنگامی که به طور خاص برای هشتگ ها جستجو می کنید، 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 قدرتمند هستند و تجسم نحوه کار آنها اغلب یک چالش (حداقل برای من) است.
تابع 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 SQL باشد. کد> تابع.
خوب، برای راه حل عالی آماده اید؟ به یاد داشته باشید که 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 بتواند به تکرار آن کمک کند.
اکنون باید آن #مقدمه را بنویسم!
این مجموعه:
- خودمختاری، اندازه بسته، اصطکاک، هواکش و سرعت
- Mastodon، Steampipe و RSS
- مرور fediverse
- یک پایانه بلومبرگ برای Mastodon
- Mastodon UX خود را ایجاد کنید
- لیست ها و افراد موجود در Mastodon
- چند نفر در فید Mastodon من نیز امروز توییت کردند؟
- نشانیهای اینترنتی Mastodon واجد شرایط نمونه
- نمودارهای رابطه ماستودون
- کار با لیست های Mastodon
- تصاویری که مضر تلقی می شوند (گاهی اوقات)
- نقشه برداری فدیورس وسیع تر
- پروتکلها، APIها و قراردادها
- اخبار در fediverse
- نقشه برداری از افراد و برچسب ها در Mastodon
- تجسم نظارت سرور Mastodon
- جدول زمانی Mastodon برای تیم ها
- افزونه Mastodon اکنون در Steampipe Hub در دسترس است
پست های مرتبط
Mastodon، Steampipe و RSS
Mastodon، Steampipe و RSS
Mastodon، Steampipe و RSS