a

آپلود نیو فولدر اکسترکت تغییر قالب تست نصب افزونه..چطور composer install رو در سرور اجرا کنیم؟میتونیم composer.phar رو دانلود کنیم و php composer.phar رو اجرا کنیم.نشد ستاپش یکم کار داره الان سرم درد میکنه، فولدر وندور رو دستی آپلود می کنم.ارور گرفتم. WP_DEBUG رو آن میکنم.کلیپ. چرا اینهمه وقت تلف میکنم واسه دیدن کلیپ هایی که هزار بار دیدم.;gd\ هک social network رو هزار بار دیدم.به منظر مغز دنبال تریگری چیزی میگرده. آخه وقتی میشه خیلی راحت مشکلات رو با کمی فکر و تحلیل حل کرد، چرا انقدر باید انجامشون رو به تعویق بندازم.اینستاگرام فید.ماینر.فوتر. گوگل مپ.تیکر. ریموت ریکوست. میتونیم یه کرون جاب تنظیم کنیم که هر 5 الی 10 دقیقه سایت رو باز کنه تا کش پر بشه.میتونیم ریموت ریکوست رو به تاخیر بندازیم یعنی هنگامی که php اولین نسخه صفحه رو پردازش میکنه، درخواست به سرور خارجی ارسال نشه. یه لودینگ نشون میدیم و با آجاکس درخواست رو به سرور خودمون ارسال میکنیم، که یه هندلر درخواست رو به سرور خارجی ارسال میکنه، html تیکر رو آماده می کنه و ارسال میکنه و ما html رو پرینت میکنیم و لودینگ رو برمیداریم.اینجوری حداقل صفحه سریع لود میشه و فقط بخشی از صفحه مدتی طول میکشه.نمایش قیمت بیتکوین، اتر و چند سکه دیگه به صورت یک ticker یا marquee.همچنین صفحه سینگل برای هر کوین و نمایش نمودار قیمت.Cryptoliveنمیدونم چقدر طول میکشه اگه میتونستم خودم یه افزونه مینوشتم.برای نمایش قیمت کوین ها، یه لیست از آیدی های هر از یک کوین ها می خوایم یه چیزی مثل BTC ETH و اینجور حرفا.آیدی رو میفرستیم به یه سایتی مثل coincap.io تا اطلاعات قیمت کوین ها رو بگیریم.همچنین برای بروزرسانی لحظه ای هم میتونیم از ws.coincap.io استفاده کنیم.تا حالا با websocket کار نکردم ولی برای بروزرسانی قیمت ها باید ازش استفاده کنیم. به عنوان جایگزین اجاکس.coinmarketcapcryptocompareذخیره کوین ها در دیتابیس و استفاده از کرون جاب برای آپدیت دیتابیس.نمایش صفحه سینگل کوین ها با نمودار هفتگی، ماهیانه، روزانه و ....مهمترین مسئله سرعتشه که خیلی کنده. یا باید مدت زمان آپدیت رو کمتر کنم یا با کرون جاب زود به زود آپدیتش کنم.یک گزینه: Premium Cryptocurrency Widgetsگزینه ای که الان استفاده می کنیم: Massive Cryptocurrency Widgetshttps://www.coingecko.com/APIhttps://docs.coincap.io/دوپلیکیت انتریtrying to create record with a primary key that already exists.massive cryptodefines constants, plugin path and plugin url.Creates a new instance of the plugin and stores it in the $massiveCrypto variable.یک اینستنس جدید از نوع MassiveCryptoData میسازه و داخل متغیر $data ذخیرش میکنهاین کلاس یک لیست بلند بالا از فونت ها رو تعریف کنه که توسط متغیر $fonts قابل دسترسیه. سوال اینجاست که تعریف این همه فونت کار ضروریه؟بعد ما برای نمایش قیمت کوین ها یا نمایش چارت به این همه فونت نیاز نداریم. خود تم قالب کافیه مگه اینکه فونت ها آیکون فونت باشن که البته بعید میدونم.سعی میکنم تمام فونت ها رو پاک کنم.فونت ها رو پاک کردم. پلاگین همچنان به خوبی به کار خودش ادامه میده.یک پراپرتی با عنوان changelly تعریف کرده که داخل اون دو کی fiat و crypto رو تعریف کرده.در fiat سه واحد پول دلار، یورو و پوند رو تعریف کرده و در crypto از بیت کوین و اتریوم بگیر تا همه رو تعریف کرده با این مقادیر BTC = Bitcoin و ETH = Ethereum الی غیره.یک پراپرتی تعریف کرده با عنوان config که در اون تنظیماتی چون فرمت اعداد، نمودارها، css دلخواه، api و api key که اشاره میکنه به coingecko و api intervalیک پراپرتی داریم به عنوان options و یدونه دیگه با عنوان providers.خارج از کلاس، در کلاس اصلی، تنظیمات پیش فرض رو با تنظیمات واقع در دیتابیس که احتمالا توسط یوزر ست شده رو ادقام می کنیم و همچنین چند تا متغیر می سازیم برای دسترسی به اطلاعات در کلاس اصلی.جدولی که اطلاعات رو می خوایم درش ذخیره کنیم رو مشخص می کنیم: wp_prefix_mcw_coinsشب بخیر$this->initشورتکود mcrypto رو رجیستر میکنیم.اسکریپت فرانت و بک رو رجیستر میکنیم. اسکریپت های بک شامل کالر پیکر و select field و اینجور چیزاست.در فرانت گوگل فونت ها رو اضافه می کنیم (که ما غیر فعال کردیم و هیچ گوگل فونتی اضافه نمیشه)بقیه اسکریپت ها برای نمایش ویجت ها استفاده میشه.همچنین لوکال اسکریپت ها رو هم رجیستر می کنیم که توسط متغیر mcw قابل دسترسی هستش.یک فیلتر رجیستر میکنه با عنوان mcw_get_coinlinks که احتمالا لینک کوین ها رو توسطش populate میکنه.یک اکشن هم اضافه میکنه با عنوان mcw_fetch_coins که احتمالا کل کوین ها رو توسطش populate میکنه.برای handle کردن شورتکود یک آبجکت از نوع MassiveCrypto_Shortcodes ایجاد میکنه.کانفیگ شورتکد رو طبق تنظیمات عمومی پلاگین ست میکنه و atts شورتکد رو ست میکنه.طبق آی دی داده شده به شورتکد، پست مربوطه رو میگیره.یک فیلتر جدید اپلای میکنه برای تغییر دادن آپشن های شورتکد با عنوان mcw_get_optionsهمچنین توسط $this->getcurrencies لیست کورنسی ها رو میگیره.دیگه رشته از دستم خارج شد.اون وسط مستا یه درخواست میبینم به...api.blocksera.com/v1/tickers/weekly?coins=...&limit=168احتمالا برای گرفتن اطلاعات قیمت هفتگی کوین ها استفاده میشه.این درخواست فقط زمانی ارسال میشه که استایل تیکر از نوع Design 2 باشه. چون Design 1 نمودار هفتگی رو نشون نمیده.یک درخواست عادی به api.blocksera/v1/tickers یک لیست بلند بالا از اطلاعات کوین ها رو در اختیار قرار میده. اطلاعاتی مثل...id: bitcoin name: Bitcoin symbol: btc image: images.coingecko.com/coins/images... current_price: 8634 market_cap_rank: 1 ...یه درخواست به api.blocksera/v1/tickers/weekly?coins=bitcoin اطلاعات قیمت کوین در هفته گذشته قرار میده و میتونیم از متغیر limit استفاده کنیم تا تعداد روزها رو مشخص کنیم:bitcoin: [ 8771.12,8706.99,8604.92,8637.13,8679.88 ]یه درخواست از سمت سرور ارسال میکنم به این اندپوینت ببینم اومدن درخواست چقدر طول میکشه.با file_get_contents هیچ اطلاعاتی نیومد. از curl استفاده می کنم.با استفاده از curl اطلاعات خیلی سریع و بدون وقفه اومد.یک درخواست میبینم به https://api.blocksera.com/v1/exrates که به نظر قیمت دلار رو در currency های مختلف نشون میده. یه json برمیگردونه برای تبدیل قیمت دلار به واحدهای دیگر. این درخواست هم سریع انجام میشه.درخواستی که احتمال میدم باتل نک باشه درخواست به https://api.blocksera.com/v1/tickers هستش. این درخواست به خاطر حجم بالا بسیار طول مکیشه.الان یه درخواست از بروز ارسال کردم، بسیار طول کشید و قبل از اینکه تموم بشه، متوقفش کردم.کلا همه ی درخواست هایی که به api.blocksera.com میشه این هاست:https://api.blocksera.com/v1/tickershttps://api.blocksera.com/products?category=wordpresshttps://api.blocksera.com/v1/exrateshttps://api.blocksera.com/v1/tickers/weekly?coins=https://api.blocksera.com/updatesزمانی که تنظیمات api روی coinmarketcap تنظیم شده باشه، درخواست برای گرفتن اطلاعات کوین ها به https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest?limit=5000 ارسال میشه که یه API KEY میخواد.خب چطور مشکل رو حل کنیم؟به نظر میاد باتل نک، درخواست به https://api.blocksera.com/v1/tickers باشه.همچنین درخواست به https://api.blocksera.com/v1/tickers/weekly?coins=اگه تعداد کوین ها زیاد باشه.یه چک میکنم ببینم درخواست به https://api.blocksera.com/v1/tickers/weekly?coins با چه کوین هایی انجام میشه.شروع پروسه گرفتن اطلاعات هفتگی کوین ها در متد get_weekly در آبجکت اصلی انجام میشه. این متد هنگامی که از شورتکد ticker با Design 2 استفاده کنیم ارسال میشه.در $options['coins] کوین هایی که میخوایم اطلاعاتشون رو بگیریم ذخیره میشه بنابراین درخواستمون زیاد طول نمیکشه.یک query آماده میکنه برای گرفتن اطلاعات کوین ها. که در این بین اطلاعات زمانی که قیمت هفتگی کوین ها expire میشه هم وجود داره. از این اطلاعات برای invalidate کردن کش استفاده میکنه تا زمانی که باید remote request دوباره انجام بشه رو مشخص کنه.براساس این اطلاعات مشخص میکنه که، کی قیمت هفتگی کوین expire شده.مثلا برای درخواستی که bitcoin فرستادم نوشته 2020-05-04 08:13:11strtotime('-1 hours')این یعنی یک ساعت پیشبه نظر میرسه هر یک ساعت یک بار، قیمت هفتگی کوین ها رو آپدیت میکنه.کوین هایی که منقضی شدند رو در یک لیست ذخیره میکنه و درخواست رو به endpoint ارسال میکنه. اگه درخواست اوکی بود، قیمت هفتگی و expire جدید رو برای اون کوین در database ذخیره میکنه.بریم سراغ باتل نک اصلی که قطعا https://api.blocksera.com/v1/tickers هستش.در جدول wp_mcw_coins بیش از 7000 هزار رکورد وجود. هر رکورد اطلاعات مربوط به یک کوین رو نشون میده.مسلما این جدول باید مدام بروز بشه تا اطلاعات قیمت کنونی کوین ها و غیره مدام آپدیت بشه.مشکل اصلی زمانیه که بخوایم مثلا هر روز یا هر ساعت چند بار این جدول رو آپدیت بکنیم. خود گرفتن دریسپانس از endpoint چندین دقیقه طول میکشه، حالا زمان ذخیره کردن این ها در جدول به کنار.یک ارور duplicate entry هم مدام در error_log ذخیره میشه که نشون میده پلاگین میخواد اطلاعات رو ذخیره کنه. این error_log هر بار حجمش به بالای 4 5 مگ میرسه.میتونیم درخواست رو مستقیم به coingecko بفرستیم. coingecko رایگان هستش و اجازه میده که تنها اطلاعات برخی کوین ها رو دریافت کنیم. برخلافت blocksera که اجازه فیلتر نمیده.سوال اینجاست که کدوم موارد رو فیلتر بکنیم.شروع فرایند گرفتن اطلاعات کوین ها از متد fetch_coins آغاز میشه.این متد ابتدا داده mcw-datetime رو از ترنزینت میگیره و در متغیر cache تغیره میکنه.زمانی که پلاگین اکتیویت میشه ابتدا جدول mcw_coins رو ایجاد میکنه و زمانی که deactivate میشه این اطلاعات رو پاک میکنهdelete_transient('mcw-datatime'); delete_transient('mcw-currencies'); delete_transient('mcw-data-time');هنگام هندل کردن شورتکد ticker اطلاعات کوین هایی که قراره در تیکر نمایش داده بشن رو از جدول میکشه بیرون و در $options['mcw_data'] ذخیره میکنه.هنگام نمایش ticker هیچ درخواستی به خارج ارسال نمیشه و فقط html تیکر رندر میشه، بنابراین فقط باید ببینیم درخواست به API چه زمان هایی انجام میشه.قبل از نمایش هر یک از شورتکد ها، پلاگین اکشن mcw_fetch_coins رو اجرا میکنه که نتیجش میشه درخواست به fetch_coinsابتدا تاریخ کش رو میگیره از ترنزینت.یک مقدار هم هست با عنوان api_interval که به صورت پیش فرض روی 900 قرار داره. حالا نمیدونم 900 ثانیه است، یا دقیقه یا ساعت.اگه درخواست اوکی باشه، json رو پارس میکنه و تیبل رو truncate میکنه.با پاک شدن اطلاعات table نباید ارور duplicate بده نمیدونم این یکی مشکل از کجاسبت.اطلاعات json که از endpoint دریافت میشه نزدیک به 5 مگه.اطلاعات رو برای ذخیره سازی در پایگاه داده آماده میکنه.و در نهایت اطلاعات رو در جدول mcw_coins ذخیره میکنه.باید بفهمیم interval به چه شکل کار میکنه. یعنی هر چند لحظه یک بار این فرایند رو انجام میده.مقدار mcw-datatime رو هر بار روی زمان کنونی تنظیم میکنه.ذخیر سازی اطلاعات در جدول حدود 4 الی 5 ثانیه طول میکشه.پلاگین این عملایت رو هر 15 دقیقه انجام میده.یه کار الان به ذهنم میرسه. انجین جدول رو از Myisam به innodb تغییر بدم.کل اطلاعات رو یک بار پاک کنم.کش رو invalidate کنم و ببینم چقدر طول میکشه اطلاعات دوباره پر بشه.