شرط بندی فوتبال : افکار نوشتن یک اسکریپت Google App


سایت شرط بندی فوتبال
بهترین سایت شرط بندی
سایت شرط بندی معتبر فوتبال

اخیراً یکی از دوستانم یک برنامه ساده را درخواست کرده است که می تواند داده های گرفته شده از چند سرویس آنلاین را با هم مرتبط کند. من تصمیم گرفتم که بهترین راه برای این کار استفاده از صفحه گسترده گوگل به عنوان میزبان ، قرار دادن کد در قسمت اسکریپت صفحه گسترده باشد. من در Google App Script تخصصی ندارم ، اما این تمرین منجر به چند مشاهده شد ، که احساس می کنم مجبورم آنها را به اشتراک بگذارم.

Google Sheets یک بستر عالی برای افراد غیر برنامه نویس است

اگر من این اسکریپت را برای اهداف خودم می نوشتم ، هرگز استفاده از Google Sheets را در نظر نمی گرفتم. من فقط آن را به عنوان یک اسکریپت خط فرمان می نویسم. اما هر زمان که شما برنامه ای را می نویسید ، باید در مورد نحوه استقرار آن فکر کنید. در این مورد دوست من ، اگرچه کاملاً با مهارت شنیداری و بصری آشنا است ، برنامه نویسی نیست که هر روز از خط فرمان استفاده کند. همچنین وی از ویندوز استفاده می کند ، محیطی که من دیگر با آن آشنا نیستم. (به من گفته اند که خط فرمان آن بهتر شده است ، اما نوار آنقدر کم بود که بتواند کرم ها از آن جا پرش کنند.) با این حال ، او مانند بسیاری از کاربران کامپیوتر همیشه از Google Sheets استفاده می کند.

صفحات گسترده توجه بسیاری از ما برنامه نویسان حرفه ای را به خود جلب می کنند ، که اغلب مشاهده می کنند بسیاری از مشاغل به چند صفحه گسترده اکسل متکی هستند. وقتی این را می گوییم ، چشم هایمان را می چرخانیم ، چنین صفحات گسترده ای اغلب دارای کد پیچیده ، مدولار کم ، بدون آزمایش ، بدون کنترل نسخه هستند و بدون هیچ گونه مدیریتی روی کامپیوترهای کاربران می نشینند. صفحات گسترده معمولاً مجبور به انجام وظایفی می شوند که مرتب نشده اند و معمولاً مانند پایگاه داده های هم ردیف ، جدول هایی که روابط آنها شبکه ای از VLOOKUP های درهم است ، عمل می کنند.

اما این صفحات گسترده به دلایلی بسیار مورد استفاده قرار می گیرند. استعاره جدولی یک روش ساده و در عین حال موثر برای مدیریت داده های ساخت یافته است. با استفاده از
برنامه نویسی مصور، کاربران می توانند نتایج را بلافاصله هنگام کار در فرمول های خود مشاهده کنند. Google Sheets اشتراک گذاری صفحات گسترده با سایر افراد را آسان می کند و داشتن مکان مشترک برای ذخیره داده های مشترک را برای چندین نفر آسان می کند. من بعنوان شخصی که به طور ذاتی موانع مبتنی بر مهارت را دوست ندارد ، من اغلب ناامید شده ام که توسعه دهندگان نرم افزار بیشتر درگیر کاری نیستند که سایر متخصصان با صفحه گسترده خود انجام می دهند.

مانند بسیاری از موارد دیگر ، صفحه گسترده محیط طبیعی را برای دوستم برای انجام این کار ایجاد می کند. برگه های Google به من اجازه می دهد منوی جدیدی ایجاد کنم و اسکریپت ها را به راحتی به موارد منو متصل کنم ، بنابراین او می تواند اسکریپت های من را به راحتی اجرا کند ، داده های تولید شده توسط اسکریپت ها را ببیند و داده های اضافی را مستقیماً به یک صفحه اضافه کند. ما به راحتی می توانیم یک صفحه را به اشتراک بگذاریم بنابراین در صورت بروز مشکل می توانم اسکریپت ها را به روز کنم یا به داده ها نگاه کنم. او لازم نیست هیچ نرم افزاری را روی دستگاه خود نصب کند یا آن را به روز نگه دارد.

اگر من توسط یک اتوبوس مورد سو استفاده قرار بگیرم ، او به راحتی می تواند برگه را با شخص دیگری به اشتراک بگذارد ، که می تواند ورق را به راحتی ویرایش و اجرا کند. از آنجا که کد جاوا اسکریپت است ، برای کار برنامه نویسان زبان کاملاً شناخته شده ای است.

سخت ترین قسمت احراز هویت است

“منطق تجارت” در متن ها بسیار آسان بود. لیست اعضای موجود در کانال Slack خود را با اعضای ثبت شده در Patreon یا در لیست جداگانه خود مقایسه کنید. سپس از این مقایسه برای تولید لیست افرادی برای افزودن یا حذف از Slack استفاده کنید. تمام آنچه که لازم بود این بود که ایمیل ها را از لیست ها بیرون بکشید و چند عمل تفاوت را انجام دهید.

بخش اصلی دریافت لیست ها بود ، نه به معنای واکشی آنها از REST URL (که باز هم آسان است) ، بلکه برای جلب رضایت خدماتی است که اسکریپت برای دریافت این داده ها مجاز است. هر دو سرویس از OAuth برای مرتب سازی احراز هویت استفاده می کنند ، اما این استاندارد حتی با کتابخانه ای که اسکریپت های Google App ارائه می دهد هیچ نشانه ای از تمیز کردن و پخش آن نیست.

در پایان من به احراز هویت نیمه اجتناب و کاملاً اجتناب کردم. Slack مکانیسم خوبی دارد که با استفاده از آن می توانید برنامه ای برای دسترسی به داده های Slack ایجاد کنید ، مجوزهای لازم را به آن بدهید و یک رمز دسترسی ساده در وب سایت خود به شما می دهد. برای این نرم افزار فقط می توانم آن رمز دسترسی را در اسکریپت قرار دهم. معمولاً این یک عمل امنیتی ضعیف است ، اما در این حالت اسکریپت همان صفحه داده ای است که بارگیری می کند (و این داده ها به شدت حساس نیستند). بیشترین پیچیدگی را که OAuth ارائه داد ، قدم برد.

داده های Patreon هم برای احراز هویت و هم حساس تر از اطلاعات ناخوشایندتر بودند. بنابراین در اینجا من یک احراز هویت را انجام دادم. وب وب Patreon به کاربر اجازه می دهد تا داده ها را در یک فایل CSV بارگیری کند. بنابراین من از دوستم می خواهم این کار را انجام دهد و داده ها را به صفحه گسترده وارد کند.

در اینجا یک فرصت واقعی برای Google وجود دارد تا کل جریان احراز هویت را ساده کند. من باید بتوانم فقط یک روش واکشی را در یک سرویس از راه دور فراخوانی کنم ، و زیرساخت ها جریان احراز هویت را مرتب کنند بدون اینکه خودم بخواهم آنها را بررسی و برنامه ریزی کنم.

مستندات Google غیر صفر است

این در مورد بهترین چیزی است که می توانم در مورد آن بگویم. لیستی از تمام کلاسها و روشهای آنها وجود دارد. با خواندن از طریق آنها معمولاً می توانم چیزی را کشف کنم. اما چیز دیگری غیر از این نیست ، و حتی یک کار ساده مانند این من را به مکان های ناخوشایندتری نسبت به آنچه می خواهم هدایت کرد.

سازماندهی صفحه گسترده

من با صفحات گسترده برنامه ریزی نمی کنم (من داده های کلی و رسم نمودار را در R انجام می دهم) بنابراین من آنقدر تجربه ندارم که بتوانم نظرات قاطعی در مورد شکل صفحه گسترده با ساختار خوب داشته باشم. ممکن است جایی در مورد چگونگی طراحی گسترده صفحه گسترده شما توصیه شده باشد ، اما من نتوانستم آن را پیدا کنم (اگر کسی مقاله خوبی می داند ، به من اطلاع دهید).

با توجه به این کمبود ، من با غریزه همیشگی ام رفتم. اولین غریزه این است که داده ها را با حداقل دستکاری در فروشگاه محلی بارگیری کنید. بنابراین اسکریپت من برای بارگیری داده ها از slack کاری بیش از انتخاب زمینه های مورد نظر من و ریختن آنها در یک صفحه صفحه گسترده نبود. به همین ترتیب صفحه من از داده های Patreon یک بارگذاری ساده از پرونده CSV را از Patreon فرض می کند. هر دو این صفحات برای پاک کردن و جایگزینی کل صفحه هنگام تازه سازی ساخته شده اند. صفحه سوم فقط شامل لیستی از موارد استثنائی است که توسط دست نگهداری می شود. هر سه این صفحات ، داده های خالص داده ها ، یک جدول واحد ، عناوین در ردیف 1 ، بدون فرمول هستند. اسکریپت مقایسه از این سه صفحه داده خوانده می شود ، منطق کاربرد (ساده) را انجام می دهد و دو لیست را به یک صفحه خروجی جداگانه منتقل می کند.

این بسیار است که من می خواهم از پرونده های متنی جداگانه در یک برنامه خط فرمان استفاده کنم. به کاربر امکان می دهد داده های بارگیری نشده را مشاهده کند. من می توانم منطق برنامه را بدون بارگیری هر بار اجرا (و آزمایش) کنم. من می توانم یک برگه با داده های آزمون تنظیم کنم. یک جریان واضح و یک طرفه داده بین ورق ها و کد وجود دارد.

از appendRow برای افزودن ردیف ها استفاده نکنید

اولین باری که کد را برای بارگیری از slack اجرا کردم دلگیر کننده بود ، زیرا به طرز وحشتناکی اجرا می شد. ممکن است فقط هزار ردیف وجود داشته باشد ، اما با سرعت تقریباً یک ثانیه به صفحه گسترده اضافه شدند. ما می توانستیم تحمل کنیم اما خیلی خوب نبود. من اطمینان داشتم که باید راهی سریعتر برای این کار وجود داشته باشد.

با شکار در اطراف API ، دیدم که بسیاری از عملیات صفحه گسترده به تعیین دامنه در صفحه گسترده بستگی دارد. من با استفاده از یک ردیف جدید اضافه می کردم
Sheet.appendRow، اما اگر محدوده ای را تعریف کنم (که می تواند کل صفحه باشد) ، می توانم استفاده کنم Range.setValues بجای. هنگامی که من این کار را کردم ، اضافه کردن ردیف ها به طور فوری انجام شد. من هیچ نکته ای در اسناد یا جای دیگری در وب برای آزمایش این مورد پیدا نکردم ، این مهم از آنجاست که کمبود این نوع اسناد مانع استفاده گسترده مردم از این سیستم عامل است.

به جستجوی API اجازه دهید چندین مقدار را جستجو کند

همانطور که در بالا ذکر کردم ، به دلیل مشکلات موجود در احراز هویت ، در نهایت از رابط REST برای داده های Patreon استفاده نکردم. اما دلیل دیگری برای حمایت از بارگیری CSV وجود داشت. Patreon API منبعی را شامل می شد که به من می گوید همه افرادی که طرفدار یک کمپین هستند ، برای این افراد شناسه Patreon و نام آنها را به من می دهد. اما برای بررسی صحیح لیست slack ، به ایمیل آنها نیز احتیاج داشتم. که من می توانم با گرفتن یک منبع نمایه شده توسط شناسه ، به دنبال آن باشم. با این حال لازم است که این کار را برای چند صد نفر انجام دهم ، و برای هر یک از آنها یک GET جداگانه لازم دارم.

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

من دوست دارم منطق برنامه را از صفحه گسترده IO جدا کنم

روش دستیابی به داده ها از صفحه گسترده استفاده از ستون و سطرهای مرسوم صفحه گسترده است (به عنوان مثال سلول “B22” یا دامنه “A2: E412”). این برای بسیاری از وظایف اسکریپت نویسی منطقی است ، زیرا برنامه نویسان در مورد دستکاری سلولهای صفحه گسترده به این مسئله فکر می کنند.

من تمایل دارم که چیزها را متفاوت ببینم ، داده هایم را به صورت ساختارهای اصلی داده های جاوا اسکریپت ترجیح می دهم ، به ویژه اینکه می توانم از JavaScript استفاده کنم خط لوله جمع آوری
اپراتورهای موجود در آنها

با توجه به این ، این عملکرد مفیدی بود که من برای استخراج داده ها از یک صفحه و برگرداندن آنها به صورت آرایه ای از اشیا جاوا اسکریپت نوشتم.

extractData(sheetName, firstCol, lastCol, mapper) {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName)
  const numRows = sheet.getLastRow()
  const range = `${firstCol}1:${lastCol}${numRows}`
  return sheet.getRange(range).getValues().map(mapper)
}

سپس می توانم از آن با کدی مانند این استفاده کنم:

const mapper = row => ({email: row[3], name: row[0], slackId: row[1]})
slackData = this.extractData("raw-slack-download", "A", "D", mapper)

هنگامی که آن را وارد آرایه کردم ، فهمیدم که نتایج آسان است ، اگرچه مجبور شدم یک مطلب ساده بنویسم Array.difference عملکردی که من به آن دسترسی نداشتم لوداش.

محیط توسعه قابل درک است

برای نوشتن جاوا اسکریپت ، من فقط یک مورد منو را در صفحه گسترده انتخاب می کنم و در یک ویرایشگر متن خام تایپ می کنم. این خانه راحت نیست که من به آن عادت کرده ام ، اما برای یک شب اقامت خوب است.

اگر کار پیچیده تری انجام می دادم ، در مورد ایجاد یک محیط بهتر تحقیق می کردم. یک احتمال این است که ببینم آیا می توانم اسکریپت را با استفاده از حالت عالی Tramp Emacs ویرایش کنم (که اجازه می دهد فایل های از راه دور را ویرایش کنید ، مثل اینکه آنها محلی هستند.) هنوز هم یک راه بهتر برای همگام سازی فایل های محلی با google drive ، به من اجازه می دهد تا آنها را حفظ کنم کد منبع در repo git. اما برای یک کار ساده مانند این ، حدود 150 خط کد ، ارزش بررسی این مسئله را نداشت که آیا این امکان وجود دارد.

خلاصه

میزبانی یک برنامه ساده در صفحه گسترده Google یک سیستم عامل جذاب برای طیف وسیعی از کارهای ساده است. این به کاربران امکان می دهد بدون نیاز به نصب چیزی روی دستگاه خود ، کد را اجرا کنند ، داده ها را در یک محیط آشنا وارد کنند و از اشتراک آسان با همکاران پشتیبانی کنند. این یک پلتفرم نیست که من درباره آن بحث های زیادی می شنوم ، اما باید یکی از آنها را بخاطر بسپارم. به طور خاص ، برای هر کاری که یک اسکریپت پوسته ساده باشد ، اما کاربران شما با پنجره های کنسول و فایل های متنی راحت نیستند.



سایت شرط بندی
سایت پیشبینی
سایت شرط بندی معتبر

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *