اگر از یک سرور Mastodon به سرور دیگری منتقل میشوید و میخواهید افراد موجود در لیستهای خود را مهاجرت کنید، گزینههای کمی دارید. در اینجا راهی برای انجام آن با Steampipe و SQL وجود دارد.
حساب اصلی Mastodon من در mastodon.social بود. من آن را انتخاب کردم زیرا بزرگترین نمونه است، توسط توسعه دهندگان سرویس اداره می شود، و پیاده سازی مرجع نرم افزار را اجرا می کند. من میخواستم در ابتدا مانند اکثر مردم، فدیورس را تجربه کنم، سپس در نظر بگیرم که آیا به سرور دیگری مهاجرت کنم یا نه، و اگر چنین است، کدام یک.
هفته گذشته به social.coop مهاجرت کردم که مانند cosocial.ca، چیزی است که داریوش کاظمی آن را سایت رسانه اجتماعی مستقل متعلق به جامعه. فکر نمیکنم مخفف COISMS به کار رود، اما مدل کسبوکار همان چیزی است که من به دنبال آن بودم. من نمی خواهم از خدمات “رایگان” استفاده کنم که من را به محصولی که می فروشند تبدیل می کند. من میخواهم برای سرویسی بپردازم که با دلارهای من تأمین میشود، نه با دادههای من. به همین دلیل است که سالها پیش به نفع Fastmail به جیمیل کمک کردم، و به همین دلیل خوشحالم که ماهانه ۱۰ دلار خرج میکنم – قیمت چند کاپوچینو – برای حمایت از افرادی که چراغها را در social.coop روشن نگه میدارند. مدنیت.
دستورالعملهای برای مهاجرت از یک سرور دو مسیر ارائه میدهد: تغییر مسیر نمایه< /code> و
حرکت نمایه
. من اولی را انتخاب کردم، زیرا تصور میکردم پس از مهاجرت، دسترسی API به mastodon.social
را حفظ میکنم، و بنابراین میتوانم از Steampipe برای پرس و جوی هر دو حساب استفاده کنم. چرا این کار را انجام دهید؟ شما نمیتوانید پستهای خود را از سرور قدیمی به سرور جدید منتقل کنید، فقط دنبالکنندگان و (به صورت اختیاری) دنبالکنندگان، نشانکها، بلاکها و بیصدا کردنهایتان هستند. Steampipe میتواند همزمان به دو سرور مختلف Mastodon متصل شود، بنابراین فکر کردم که میتوانم درخواستهایی را علیه هر دو اجرا کنم.
درس های آموخته شده
معلوم شد که این یک فرض اشتباه است. من میتوانم با خاموش کردن تغییر مسیر، حساب mastodon.social
خود را دوباره فعال کنم، اما در مورد پیامدهای انجام این کار مبهم هستم. در همین حال هنوز امکان صادر کردن پستهای من وجود دارد، بنابراین در صورت نیاز همیشه میتوانم آنها را دوباره از این طریق دریافت کنم.
این هم یک فرض اشتباه دیگر. من فکر می کنم که اگر من تصمیم می گرفتم حساب خود را منتقل کنم، به جای تغییر مسیر، نمایه من به سرور جدید منتقل می شد. در عوض این بر عهده من بود که نمایه جدید را پر کنم. من @judell@social.coop
را ایجاد کرده بودم، اما وقتی مهاجرت را شروع کردم، هنوز نمایه را تکمیل نکرده بودم. بنابراین وقتی به فالوورها اطلاع داده شد که judell@social.coop
اکنون آنها را دنبال می کند، هیچ تصویر یا بیوگرافی یا وب سایت تأیید شده ای وجود نداشت. این باعث شد برخی افراد فکر کنند که این یک حساب جعلی است و آن را مسدود کنند. این یک فاجعه نبود، و من با چند نفر از آنها برای حل این موضوع صحبت کردهام، اما این یک خطای اجباری بود که اجتناب از آن آسان بود.
نمای اینجا
در اینجا یک مقایسه فعالیت هفتگی در دو سرور، از طریق داشبورد سرور.
حرکت به سروری با تنها ۱٪ جریانی که در mastodon.social
اتفاق میافتد چگونه است؟ زیاد متفاوت نیست! از آنجایی که من فالوورها و دنبالکنندگانم را جابهجا کردهام، و از آنجا که عمدتاً با خط زمانی خانه و فهرستها تعامل دارم، تجربه بیشتر یکسان است. برای مثال، نمودار تقویت روابط در اینجا آمده است. در میان سرورهای موجود در جدول زمانی خانه من. به نظر می رسد درست مانند قبل.
داشتن یک نمودار اجتماعی قابل حمل که می توانید در حین حرکت در فدیورس همراه داشته باشید فوق العاده است. تفاوت های اصلی این است که من با افراد جدید ملاقات می کنم و زمان بیشتری را در جدول زمانی محلی صرف می کنم. در سرور بزرگی مانند mastodon.social
، خط زمانی محلی مانند آتشهوس توییتر به نظر میرسد، برای کسانی که به یاد میآورند چه زمانی هنوز چیزی بود که میتوانستید تماشا کنید. من گهگاه به آن نگاه میکردم، زیرا میتوانست منبع شادی مفیدی باشد، اما عمدتاً خیلی تصادفی بود. جدول زمانی محلی در social.coop
هنوز هم تا حدودی تصادفی است، اما به نظر من مفیدتر است - نه تنها به این دلیل که جمعیت بسیار کمتری را نشان میدهد، بلکه به این دلیل که افرادی که ثبتنام کردهاند علایق مشترکی دارند. مدل قفسه.
من لیست های خود را می خواهم
اما یک مانع بزرگ وجود داشت. میتوانید لیستها را از سرور قدیمی صادر کرده و آنها را به سرور جدید وارد کنید، اما برای حسابهایی که به آن فهرستها اختصاص دادهاید، صادرات/وارداتی وجود ندارد. از آنجایی که من به شدت به فهرست ها برای پیمایش جریان Mastodon به روشی متمرکز و عمدی متکی هستم، این مشکلی بود که واقعاً باید برطرف می کردم. من masto-list-importer الیوت نش را امتحان کردم، اما وقتی سعی کردم ۴۶۰ نفر خود را انتقال دهم/ نگاشت لیست من به محدودیت های نرخ API رسیدم. بنابراین به جای آن، یک راه حل مبتنی بر Steampipe کار کردم که جایگزین مفیدی است، و همچنین راه خوبی برای نشان دادن مراحل مربوطه است.
فرض کنیم که میخواهم دوباره از social.coop
به fosstodon.org
مهاجرت کنم. من نام لیست های خود را از social.coop
صادر کرده و آنها را به fosstodon.org
وارد کرده ام. اکنون باید آن لیست ها را پر کنم. راه حل SQL که من به آن دست یافتم بر اساس مراحل انجام می شود، هر کدام یک عبارت جدول مشترک (CTE) است که بخشی از یک تبدیل پیچیده را انجام می دهد، سپس نتایج را به مرحله بعدی منتقل می کند.
مرحله ۱: حساب های اختصاص داده شده به هر فهرست social.coop را جمع آوری کنید.
ما با پیوستن به دو جدول شروع می کنیم تا حساب های اختصاص داده شده به هر لیست را برشماریم.
with accounts_by_list as ( select a.acct as old_account, a.id as old_account_id, l.id as old_list_id, l.title as title from social_coop.mastodon_my_list l join social_coop.mastodon_list_account a on l.id = a.list_id ) select * from accounts_by_list
خروجی در accounts_by_list
، در واقع یک جدول موقتی است که می توانید آن را مرور کنید تا مطمئن شوید نتایج مطابق انتظار است. توانایی تأیید خروجی هر فاز از یک خط لوله CTE، قبل از ارسال آن به فاز بعدی، مزیت کلیدی این رویکرد است. اشکال زدایی سوالات فرعی تو در تو بسیار سخت تر است!
مرحله ۲: حسابها را در social.coop به حسابهای fosstodon.org
نگاشت کنید
دو تبدیل در این مرحله اتفاق میافتد. اگر یک حساب یک نام کاربری ساده است، بگویید personA
، سپس یک حساب social.coop
است. در fosstodon.org
همان حساب به صورت personA@social.coop
نشان داده خواهد شد. برعکس، اگر personB@fosstodon.org
در social.coop
وجود داشته باشد، آن حساب به نام کاربری ساده personB
در آنجا تبدیل میشود. همه حسابهای دیگر (مانند personC@hachyderm.io
) بدون تغییر عبور میکنند.
with accounts_by_list as ( -- as above ), adjusted_accounts_by_list as ( select old_account, old_account_id, old_list_id, title, case when old_account !~ '@' then old_account || '@social.coop' when old_account ~ '@fosstodon.org' then replace(old_account, '@fosstodon.org', '') else old_account end as new_account from accounts_by_list ) select * from adjusted_accounts_by_list
مرحله ۳: عناوین لیست را به سرور جدید نگاشت کنید.
نام لیست ها در هر دو مکان یکسان است، اما شناسه آنها متفاوت است. برای مثال، فهرست Fediverse
من ۱۰۴۳
در social.coop
و ۶۷۷۱
در fosstodon.org< است. /code>. برای فراخوانی فراخوانی API که فردی را به فهرست اضافه می کند، نیاز داریم برای استفاده از شناسه دوم.
with accounts_by_list as ( -- as above ), adjusted_accounts_by_list as ( -- as above ), adjusted_list_ids as ( select a.*, l.id as new_list_id from adjusted_accounts_by_list a join fosstodon.mastodon_my_list l on a.title = l.title ) select * from adjusted_list_ids
مرحله ۴: شناسه های حساب را به سرور جدید نگاشت کنید.
همانند لیستها، حسابهای موجود در سرور جدید نیز دارای شناسههای متفاوتی هستند و این شناسهها نیز برای تماس API مورد نیاز هستند. میتوانیم شناسههای جدید را با پیوستن به ستون new_account
از مرحله اول با جدول fosstodon.mastodon_my_following
پیدا کنیم.
with accounts_by_list as ( -- as above ), adjusted_accounts_by_list as ( -- as above ), adjusted_list_ids as ( -- as above , ), adjusted_account_ids as ( select a.*, f.id as new_account_id from adjusted_list_ids a join fosstodon.mastodon_my_following f on f.acct = a.new_account ) select * from adjusted_account_ids
مرحله ۵: ایجاد تماس های API
راههای زیادی برای پوست این گربه وجود دارد. از آنجایی که میتوانید از Steampipe بهعنوان یک مؤلفه استفاده کنید، میتوانید از هر زبان برنامهنویسی با درایور Postgres استفاده کنید. برای اجرای این کوئری، و Mastodon API را با لیست و شناسه حساب مناسب فراخوانی کنید.
و البته، همیشه curl
وجود دارد.
with accounts_by_list as ( -- as above ), adjusted_accounts_by_list as ( -- as above ), adjusted_list_ids as ( -- as above ), adjusted_account_ids as ( -- as above ) select 'curl -X POST -H "Authorization: Bearer ***" https://fosstodon.org/api/v1/lists/' || new_list_id || '/accounts/?' || 'account_ids[]=' || new_account_id || '; sleep 1;' as command
برای جلوگیری از فشار، sleep 1
را به هر خط اضافه کردم. من درخواست را در migrate-lists.sql
ذخیره کردم و خروجی را به یک فایل صادر کردم.
steampipe query --output csv migrate-lists.sql > migrate.sh
نزدیک بود، اما کاملاً درست نبود. خروجی به این شکل بود:
command "curl -X POST -H ""Authorization: Bearer ***"" https://fosstodon.org/api/v1/lists/6771/accounts/?account_ids[]=279462; sleep 1;" "curl -X POST -H ""Authorization: Bearer ***"" https://fosstodon.org/api/v1/lists/6771/accounts/?account_ids[]=109283421559929728; sleep 1;"
من باید خط سرصفحه را حذف کنم، گیومه های دوتایی را در دو انتهای هر خط حذف کنم، و جفت گیومه های دوتایی را حذف کنم. برای آن به ChatGPT (v4) روی آوردم. چند تلاش طول کشید تا درست شود، اما به زودی یک اسکریپت bash تولید کرد که بسیار خوشحالم که مجبور به نوشتن نشدم.
#!/bin/bash # read the original script from migrate.sh and store it in an array readarray -t original_script < migrate.sh # remove the first line of the original script modified_script=("${original_script[@]:1}") # loop through the modified script array and replace double double-quotes with a single double-quote and remove double quotes at the beginning and end of each line for (( i=0; i<${#modified_script[@]}; i++ )); do modified_script[$i]=$(sed 's/""/"/g' <<< "${modified_script[$i]}") modified_script[$i]=$(sed 's/^"//' <<< "${modified_script[$i]}") modified_script[$i]=$(sed 's/"$//' <<< "${modified_script[$i]}") done # print out the modified script with newlines printf '%s\n' "${modified_script[@]}"
و این کار را انجام داد. با توجه به اینکه فهرستهای من اکنون به طور کامل در social.coop
پر شده است، من اکنون Mastodon را از سرور خانگی جدیدم به همان روشی که در سرور قبلی بودم، لیست محور میخوانم.
اگر سرورها را جابهجا میکنید و میخواهید افراد موجود در لیستهای خود را مهاجرت کنید، حتماً باید masto را امتحان کنید. -list-importer ابتدا، و اگر این روش برای شما کار نمی کند، روش اینجا را به عنوان بازگشتی در نظر بگیرید. من با الیوت نش موافقم که انتقال لیست باید در رابط کاربری Mastodon انجام شود. مردم به درستی شکایت می کنند که پیدا کردن افرادی که می خواهید دنبال کنید و موضوعاتی که می خواهید کشف کنید دشوار است. شما می توانید هشتگ ها را دنبال کنید، اما این می تواند بسیار تصادفی باشد. اختصاص دادن افراد به لیست های موضوعی تعادل خوبی ایجاد می کند. اما فقط در صورتی که آن تکالیف فهرست قابل حمل باشند!
این مجموعه:
- خودمختاری، اندازه بسته، اصطکاک، هواکش و سرعت
- Mastodon، Steampipe و RSS
- مرور fediverse
- یک پایانه بلومبرگ برای Mastodon
- Mastodon UX خود را ایجاد کنید
- لیست ها و افراد موجود در Mastodon
- چند نفر در فید Mastodon من نیز امروز توییت کردند؟
- نشانیهای اینترنتی Mastodon واجد شرایط نمونه
- نمودارهای رابطه ماستودون
- کار با لیست های Mastodon
- تصاویری که مضر در نظر گرفته می شوند (گاهی اوقات)
- نقشه برداری فدیورس وسیع تر
- پروتکلها، APIها و قراردادها
- اخبار در fediverse
- نقشه برداری از افراد و برچسب ها در Mastodon
- تجسم نظارت سرور Mastodon
- جدول زمانی Mastodon برای تیم ها
- افزونه Mastodon اکنون در Steampipe Hub در دسترس است
- مهاجرت کردن لیست های Mastodon
- وقتی اردک لاستیکی باز میگوید
پست های مرتبط
لیست های ماستودون مهاجرت
لیست های ماستودون مهاجرت
لیست های ماستودون مهاجرت