تبدیل URL های سرور خارجی به URL های سرور خانگی، داشبورد Mastodon را بسیار مفیدتر می کند. افزونه Mastodon Steampipe اکنون این کار را برای شما انجام می دهد.
در فهرستها و افراد موجود در Mastodon نشان دادم چگونه یک ستون لیست را به برگه زیر مرورگر Mastodon که در حال ساختن هستم اضافه کردم. . این گامی در جهت مدیریت آسانتر و قدرتمندتر لیست بود. این به من امکان میدهد ببینم افرادی که دنبال میکنم به لیستها اختصاص داده شدهاند یا خیر، و در نظر بگیرم چه کسانی باید در یک لیست (یا شاید در یک لیست دیگر) باشند.
امروز، هنگامی که شروع به استفاده جدی از آن هزینه جدید کردم، چالش جدیدی را کشف کردم. به منظور اختصاص دادن شخصی به یک لیست، یا تغییر انتساب فهرست، روی پیوند در ستون account_url کلیک کردم تا نمایه آن شخص در برنامه وب Mastodon باز شود. این برای حسابهای موجود در سرور خانگی من، mastodon.social خوب بود. آدرس اینترنتی حسابی مانند https://mastodon.social/@burningbird Shelley Powers، من را به نمایه Shelley میآورد. سرور خانگی که در آن مدیر لیست در دسترس است.
اما اگر شخص دیگری را دنبال میکنم، مانند وارد کانینگهام در https://mastodon.radio/@k9ox، URL حساب من را به نمایه Ward در آن سرور می برد که مدیر لیست در آن در دسترس نیست. برای تخصیص وارد به فهرستی، باید URL حساب او را ضبط میکردم، آن را در کادر جستجو در برنامه وب سرور اصلی خود جایگذاری میکردم و سپس روی پیوند حاصل کلیک میکردم: https://mastodon.social/@k9ox@mastodon.radio.
بهسرعت قدیمی شد، بنابراین برگه زیر را تنظیم کردم تا طعم دوم URL را نشان دهد که من آن را URL واجد شرایط نمونه مینامم.
Steampipe چند راه برای انجام این تنظیم ارائه می دهد. به عنوان کاربر داشبورد، میتوانید از توابع بیان منظم Postgres برای انجام این کار استفاده کنید. تبدیل در پرس و جوی SQL که نمای را هدایت می کند. اما شما ترجیح می دهید مجبور نباشید. اگر افزونه این کار را برای شما انجام دهد بسیار بهتر است، بنابراین SQL فقط می تواند به شما مراجعه کند. به ستونی به نام instance_qualified_url
.
من روش دوم را انتخاب کردم. شما به عنوان نویسنده یک افزونه Steampipe می خواهید زندگی را تا حد امکان برای کاربران این افزونه آسان کنید. هنگامی که شما نویسنده افزونه و داشبورد هستید، همانطور که من در این مورد هستم، می توانید از یک چرخه خوب لذت ببرید. همانطور که داشبورد تکامل می یابد، راه هایی برای بهبود افزونه کشف می کنید، که منجر به استفاده بیشتر از داشبورد می شود، که فرصت های بیشتری را برای بهبود افزونه پیشنهاد می کند. من از تکامل همزمان این دو مؤلفه بسیار لذت برده ام!
افزودن یک ستون جدید به جدول Steampipe
برای ایجاد تغییر، ساختاری را گسترش دادم که ستونهای جداول نگاشت شده از Account API را تعریف میکند. . یک پلاگین Steampipe ستون ها را با استفاده از لیستی از ساختارهایی مانند این تعریف می کند.
..., { Name: "url", Type: proto.ColumnType_STRING, Description: "URL for the account.", }, ...,
این ساختار می گوید: “وقتی نام یک فیلد سطح بالا در پاسخ API URL است، به Steampipe بگویید که یک ستون پایگاه داده با آن نام و با نوع Postgres text ایجاد کند.
.”
همچنین میتوانید مقادیر را در پاسخهای API تغییر دهید تا ستونهای جدیدی را که در پاسخهای API ظاهر نمیشوند ترکیب کنید. این ساختاری است که برای این مورد اضافه کردم.
..., { Name: "instance_qualified_account_url", Type: proto.ColumnType_STRING, Description: "Account URL prefixed with my instance.", Transform: transform.FromValue().Transform(instanceQualifiedAccountUrl), }, ...
این یکی می گوید: “پاسخ API را به تابع تبدیل instanceQualifiedAccountUrl
ارسال کنید و از نتیجه آن به عنوان مقدار ستون استفاده کنید.
این تابع است.
func instanceQualifiedAccountUrl(ctx context.Context, input *transform.TransformData) (interface{}, error) { url := input.Value.(*mastodon.Status).Account.URL qualifiedUrl := qualifiedUrl(ctx, url) return qualifiedUrl, nil }
کار واقعی را به عملکرد دیگری واگذار می کند.
func qualifiedUrl(ctx context.Context, url string) string { plugin.Logger(ctx).Debug("instanceQualifiedUrl", "server", homeServer, "url", url) re := regexp.MustCompile(`https://([^/]+)/@(.+)`) matches := re.FindStringSubmatch(url) if len(matches) == 0 { return url } person := matches[1] server := matches[2] qualifiedUrl := fmt.Sprintf("%s/@%s@%s", homeServer, server, person) plugin.Logger(ctx).Debug("instanceQualifiedUrl", "qualifiedUrl", qualifiedUrl) schemelessHomeServer := strings.ReplaceAll(homeServer, "https://", "") qualifiedUrl = strings.ReplaceAll(qualifiedUrl, "@"+schemelessHomeServer, "") plugin.Logger(ctx).Debug("qualifiedUrl", "qualifiedUrl", qualifiedUrl) return qualifiedUrl }
چرا؟ دو مجموعه مختلف از تعاریف ستون نیاز به تبدیل یکسان دارند. instanceQualifiedAccountUrl
با پاسخهایی از Account
API کار میکند. اما نشانیهای وب حساب در API وضعیت نیز ظاهر میشوند که نمایشهای جدول زمانی را هدایت میکند. آنها از یک تابع تبدیل متفاوت، instanceQualifiedStatusUrl
استفاده میکنند تا همان تبدیل را برای پاسخ API متفاوت انجام دهند.
از نشانیهای اینترنتی حساب تا نشانیهای اینترنتی وضعیت
ستون instanceQualifiedAccountUrl
مشکل اصلی را حل کرد. من توانستم کلاه نویسنده پلاگین خود را حذف کنم، کلاه نویسنده داشبورد خود را بگذارم و در همه برگه هایی که آنها را نمایش می دهند به URL های حساب به عنوان URL های واجد شرایط برای نمونه مراجعه کنم. اکنون هر پیوندی به نمایهای منتهی میشود که من از طریق لنز mastodon.social مشاهده میکنم و به من امکان میدهد مستقیماً از مدیر فهرست برنامه وب استفاده کنم، بدون روش کپی/پیست/جستجو. p>
هر چند رقص شاد من زیاد طول نکشید. به تازگی به آن اصطکاک کپی/پیست/جستجو حساس شدهام، وقتی سعی میکنم به مواردی که در نمای جدول زمانی نمایش داده میشوند پاسخ بدهم، متوجه شدم که هنوز هم اتفاق میافتد. این یک نمونه اخیر است: https://techpolicy.social/@mnot/109610641523489182.
این نشانی اینترنتی نمایش داده شده در داشبورد است. وقتی روی آن کلیک میکنم، روی سرور Mark فرود میآیم و میتوانم مورد را مشاهده کنم، اما اگر بخواهم پاسخ بدهم با عملیات کپی/پیست/جستجوی وحشتناکی مواجه میشوم.
مشکلی نیست! من از یک تبدیل مشابه استفاده خواهم کرد! نه خیلی سریع. من می توانم یک URL مانند https://mastodon.social/@mnot@techpolicy.social/1096106415238 ایجاد کنم اما به جایی نمی رسد.
اگر عملیات کپی/پیست کردن/جستجو را انجام دهم، روی یک نشانی اینترنتی مشابه اما متفاوت قرار میگیرم: https://mastodon.social/@mnot@techpolicy.social/109610641692667630. ساختار مشابهی دارد اما شناسه توت متفاوتی دارد. این نشانی وب نیز همان آدرسی است که در جدول زمانی اصلی برنامه وب ظاهر میشود، به همین دلیل است که میتوانم مستقیماً از آن نمای پاسخ بدهم.
من اینجا از عمق خودم خارج شدهام، بنابراین فقط با درخواست کمک به پایان میرسانم. منطقی است که یک سرور خانگی شناسه خود را به آیتمی که از یک سرور خارجی واکشی شده است اختصاص دهد و برنامه وب از آن شناسه استفاده کند. اما من راهی برای دریافت مستقیم آن شناسه از API نمی بینم. من گمان میکنم که میتوان آن را از طریق جستجو به دست آورد، اما انجام این کار برای هر مورد در یک جدول زمانی، بودجه محدود درخواستهای API را به سرعت تمام میکند (فقط ۳۰۰ مورد در هر پنج دقیقه).
بنابراین، تنبل ماستودون، آیا من اینجا گیر کرده ام یا راهی برای تبدیل URL های وضعیت خارجی به URL های وضعیت نسبی نمونه وجود دارد؟
به روز رسانی: حل شد!
بعد از چت با Jari Pennanen دوباره نگاهی انداختم و متوجه شدم شناسه مورد نیاز در API موجود است پس از همه، من فقط از آن استفاده نمی کردم (فیس پالم). و در واقع دو طعم از ID وجود دارد – یکی برای کفش اصلی، دیگری برای تقویت کننده. ستونهای هر دو مورد اینجا اضافه میشوند و از توییک استفاده میشود. آنها اینجا.
در اینجا نتیجه است.
از اینکه اردک لاستیکی من هستید، متشکرم! نشانیهای اینترنتی توت و وبلاگ مجدد واجد شرایط برای نمونه، این داشبورد را بسیار مفیدتر کرده است.
این مجموعه:
- خودمختاری، اندازه بسته، اصطکاک، هواکش و سرعت
- Mastodon، Steampipe و RSS
- مرور fediverse
- یک پایانه بلومبرگ برای Mastodon
- Mastodon UX خود را ایجاد کنید
- لیست ها و افراد موجود در Mastodon
- چند نفر در فید Mastodon من نیز امروز توییت کردند؟
- نشانیهای اینترنتی Mastodon واجد شرایط نمونه
- نمودارهای رابطه ماستودون
- کار با لیست های Mastodon
- تصاویری که مضر تلقی می شوند (گاهی اوقات)
- نقشه برداری فدیورس وسیع تر
- پروتکلها، APIها و قراردادها
- اخبار در fediverse
- نقشه برداری از افراد و برچسب ها در Mastodon
- تجسم نظارت سرور Mastodon
- جدول زمانی Mastodon برای تیم ها
- افزونه Mastodon اکنون در Steampipe Hub در دسترس است
پست های مرتبط
نشانیهای اینترنتی Mastodon واجد شرایط برای نمونه
نشانیهای اینترنتی Mastodon واجد شرایط برای نمونه
نشانیهای اینترنتی Mastodon واجد شرایط برای نمونه