🔧 ممکنه گاهی اوقات بخواید از apache2 به صورت تستی در پروژهای خود استفاده کنید (مثلا رو localhost). ولی مشکل اصلی اینه که موقع تست پروژه همش باید فایلای کانفیگ رو دستکاری کنین و کلی زمان میبره😔
دستورات زیر رو بزنید تا مشکل حل بشه:
🔘 حالا هرجایی که نیاز داشتید پروژتون رو انلاین کنید دستور زیرو بزنید
و پروژه رو روی http://localhost:81 باز کنید.
دستورات زیر رو بزنید تا مشکل حل بشه:
cat > /etc/apache2/sites-available/port81.conf << EOL
<VirtualHost *:81>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog \${APACHE_LOG_DIR}/port81_error.log
CustomLog \${APACHE_LOG_DIR}/port81_access.log combined
</VirtualHost>
EOL
echo "Listen 81" >> /etc/apache2/ports.conf
echo '
port81-setup() {
if [ -z "$1" ]; then
echo "Usage: port81-setup /path/to/document/root"
return 1
fi
DOCROOT=$(realpath "$1")
sudo sed -i "s|DocumentRoot.*|DocumentRoot \"$DOCROOT\"|" /etc/apache2/sites-available/port81.conf
sudo sed -i "s|<Directory.*|<Directory \"$DOCROOT\">|" /etc/apache2/sites-available/port81.conf
sudo a2ensite port81.conf
sudo systemctl restart apache2
echo "Port 81 document root set to $DOCROOT"
echo "http://localhost:81"
}' >> ~/.bashrc
source ~/.bashrc
🔘 حالا هرجایی که نیاز داشتید پروژتون رو انلاین کنید دستور زیرو بزنید
port81-setup .
و پروژه رو روی http://localhost:81 باز کنید.
👍3
آقا یه ریپازیتوری تو گیتهاب بود که تمامی متودها و تایپهای توی
core.telegram.org/bots/api
رو به شکل json اسکرپ میکرد
پیداش نمیکنم، کسی داره؟
core.telegram.org/bots/api
رو به شکل json اسکرپ میکرد
پیداش نمیکنم، کسی داره؟
core.telegram.org
Telegram Bot API
The Bot API is an HTTP-based interface created for developers keen on building bots for Telegram. To learn how to create…
ژوپیتـر اِیپیآی | Jupiter API
آقا یه ریپازیتوری تو گیتهاب بود که تمامی متودها و تایپهای توی core.telegram.org/bots/api رو به شکل json اسکرپ میکرد پیداش نمیکنم، کسی داره؟
GitHub
GitHub - Sysbot-org/tgscraper: A PHP library used to extract JSON data (and auto-generate PHP classes) from Telegram bot API documentation…
A PHP library used to extract JSON data (and auto-generate PHP classes) from Telegram bot API documentation page. - Sysbot-org/tgscraper
ژوپیتـر اِیپیآی | Jupiter API
https://github.com/Sysbot-org/tgscraper
البته اینو باید خودتون فورک کنید از طریق گیتهاب اکشن جنریت کنید
یا هم به صورت دستی می تونید این کارو انجام بدید
چون دیتایی که توش هست بروز نیست
یا هم به صورت دستی می تونید این کارو انجام بدید
چون دیتایی که توش هست بروز نیست
ژوپیتـر اِیپیآی | Jupiter API
البته اینو باید خودتون فورک کنید از طریق گیتهاب اکشن جنریت کنید یا هم به صورت دستی می تونید این کارو انجام بدید چون دیتایی که توش هست بروز نیست
مثلا من چون فرصت نداشتم از طریق باینری اجراش کنم، فورکش کردم workflow مربوط به gh-pages رو دستی ران کردم:
https://github.com/LordDeveloper/tgscraper
یه برنچ جدید ساخت
https://github.com/LordDeveloper/tgscraper/tree/gh-pages
https://github.com/LordDeveloper/tgscraper
یه برنچ جدید ساخت
https://github.com/LordDeveloper/tgscraper/tree/gh-pages
GitHub
GitHub - LordDeveloper/tgscraper: A PHP library used to extract JSON data (and auto-generate PHP classes) from Telegram bot API…
A PHP library used to extract JSON data (and auto-generate PHP classes) from Telegram bot API documentation page. - LordDeveloper/tgscraper
ژوپیتـر اِیپیآی | Jupiter API
00:00 ❤️
❤️❤️:❤️❤️
❓آقا برای شما سابقه داشته یه ربات به خصوصی خراب بشه و با عوض کردن توکنو هرکاری نشه اطلاعات کاربرای گروه کانالو درست گرفت؟ اطلاعات قدیمی یا اشتباه بده؟
یه چند وقته اینطور شده با توکن ربات دیگه تو همون کانال میزنم درسته
یه چند وقته اینطور شده با توکن ربات دیگه تو همون کانال میزنم درسته
👎4
یک سرور هلند اسپکترا ۲۷ روزه موجوده رم ۴ و ۲ هسته زیر قیمت
دوستان کسی nft username یا گیفت برای خرید خواست پیوی پیام بده.
telegramobjectfield.py
1.1 KB
📦 این فیلد ها مخصوص کتابخونه peewee بوده و شما میتوانید با استفاده از اون اشیا json و یا اشیا telethon رو با استفاده از tlobjectfield یا اشیا aiogram رو با استفاده از telegramobjectfield در دیتابیس ذخیره کنید.
کاملا پردازش ها مثل نوع داده جداگانه خودکار هست و شما فقط کافیه مستقیم ورودی بدید یا مستقیم خروجی بگیریدش
✏️ @av_id
کاملا پردازش ها مثل نوع داده جداگانه خودکار هست و شما فقط کافیه مستقیم ورودی بدید یا مستقیم خروجی بگیریدش
✏️ @av_id
❤3🐳1
🔍 وقتی برای اسکرپ با Inspect سایت کار میکنیم، گاهی نیاز داریم خروجی توابعی مثل fetch رو دیباگ کنیم.
اما مشکل اینجاست که ابزار مستقیم و مشخصی نداریم که بفهمیم این خروجی کجا استفاده شده یا چطور ازش رد شده. 😕
برای حل این موضوع باید این کار رو انجام بدیم:
1️⃣ اول سورس رو در Inspect باز کنیم و اسکریپت مورد نظرمون رو override میکنیم و اگر فایلها Minify یا Build شده بودن، اونها رو Beautify کنیم. اسکریپت مورد نظر منظور بخشیه که کد استفاده شده و یا اگه تابع گلوبال مثل fetch هست اولین اسکریپتی که فراخوانی میشه باید باشه
2️⃣ بعد متغیر یا تابع مورد نظرمون و Proxy کنیم.
3️⃣ با این روش وقتی خروجی داده میشه، میتونیم با اضافه کردن debugger داخل Proxy، دیباگر رو فعال کنیم و توی Call Stack ببینیم که چطوری و کجا از این خروجی استفاده شده. 👀
مثال:
💡 با این روش، کنترل کاملی روی خروجی توابع داریم و میتونیم راحتتر مشکلها رو ردیابی کنیم!
اما مشکل اینجاست که ابزار مستقیم و مشخصی نداریم که بفهمیم این خروجی کجا استفاده شده یا چطور ازش رد شده. 😕
برای حل این موضوع باید این کار رو انجام بدیم:
1️⃣ اول سورس رو در Inspect باز کنیم و اسکریپت مورد نظرمون رو override میکنیم و اگر فایلها Minify یا Build شده بودن، اونها رو Beautify کنیم. اسکریپت مورد نظر منظور بخشیه که کد استفاده شده و یا اگه تابع گلوبال مثل fetch هست اولین اسکریپتی که فراخوانی میشه باید باشه
2️⃣ بعد متغیر یا تابع مورد نظرمون و Proxy کنیم.
3️⃣ با این روش وقتی خروجی داده میشه، میتونیم با اضافه کردن debugger داخل Proxy، دیباگر رو فعال کنیم و توی Call Stack ببینیم که چطوری و کجا از این خروجی استفاده شده. 👀
مثال:
const originalFetch = window.fetch;
window.fetch = function (...args) {
console.log("[fetch]", args[0]);
return originalFetch(...args).then(response => {
const url = response.url || (args[0] && args[0].toString());
if (url.includes("heavyweight")) {
console.log("[Intercepted fetch]", url);
['text', 'json', 'blob', 'arrayBuffer', 'formData'].forEach(method => {
const original = response[method].bind(response);
response[`_${method}`] = original;
response[method] = function (...mArgs) {
console.log(`[${method}()] called on heavyweight URL`);
debugger; // دیباگر اینجا متوقف میشه
return original(...mArgs);
};
});
if (response.body && typeof response.body.getReader === 'function') {
const originalGetReader = response.body.getReader.bind(response.body);
response.body.getReader = function(...readerArgs) {
const reader = originalGetReader(...readerArgs);
console.log("ReadableStream.getReader() called");
const originalRead = reader.read.bind(reader);
reader.read = async function(...readArgs) {
const result = await originalRead(...readArgs);
console.log("ReadableStream chunk read:", result);
debugger; // توقف روی هر chunk خوانده شده
return result;
};
debugger;
return reader;
};
}
}
return response;
});
};
💡 با این روش، کنترل کاملی روی خروجی توابع داریم و میتونیم راحتتر مشکلها رو ردیابی کنیم!
❤5
کانفیگ با لوکیشن اوکراین کسی داره برای دو سه ساعت؟
❤1