این پروژه یک کلاینت غیررسمی برای API وبسایت dana.medu.ir است که از طریق مهندسی معکوس کلاینت وب توسعه داده شده است. هدف اصلی این پروژه، فراهم کردن یک رابط برنامهنویسی (API Wrapper) تمیز و قابل استفاده در محیط Node.js برای دسترسی به اطلاعات دانشآموزی، مانند کارنامه (کارنامه نهایی)، است.
- احراز هویت امن: با استفاده از کوکی (
cookie) وclient-idاستخراج شده از نشست (session) کاربر، به صورت امن به API متصل میشود. - رمزگشایی خودکار: پاسخهای رمزنگاری شده سرور را با پیادهسازی الگوریتم
AESو کلید مشتقشده ازclient-id(همانند کلاینت اصلی) به صورت خودکار رمزگشایی میکند. - رابط کاربری ساده: ارائه متدهای ساده و قابل فهم برای دریافت اطلاعات پیچیده، مانند
getReportCard(). - کلاسهای کمکی: شامل کلاس
ReportCardبرای دسترسی آسان و پردازش اطلاعات کارنامه (مانند محاسبه معدل). - بدون وابستگیهای اضافی: فقط به
axiosوcrypto-jsنیاز دارد.
خروجی اسکریپت example.js که کارنامه را با استایلدهی در ترمینال نمایش میدهد:
ابتدا، پکیجهای مورد نیاز را نصب کنید:
npm install axios crypto-js chalk@4.1.2برای استفاده از این کتابخانه، ابتدا باید اطلاعات احراز هویت خود را از وبسایت dana.medu.ir استخراج کنید.
چگونه اطلاعات خود را پیدا کنیم؟
- وارد حساب کاربری خود در
dana.medu.irشوید. - ابزار توسعهدهندگان مرورگر خود را باز کنید (معمولاً با کلید F12).
- به تب
Network(شبکه) بروید. - صفحه را رفرش کنید و یکی از درخواستهای
get-data-sourceرا پیدا کنید. - در بخش
Headersدرخواست، مقادیرcookieوclient-idرا کپی کنید.
سپس، میتوانید از کتابخانه مانند مثال زیر استفاده کنید:
const { DanaClient } = require('./dana-api.js');
// اطلاعات احراز هویت خود را اینجا قرار دهید
// توصیه میشود از متغیرهای محیطی استفاده کنید
const credentials = {
cookie: 'sid=s%3A...', // کوکی کپی شده
clientId: 'lwc77byu-...', // کلاینت آیدی کپی شده
};
const dana = new DanaClient(credentials);
async function fetchReportCard() {
try {
// شناسهی دوره امتحان نهایی (برای مثال خرداد ۱۴۰۳)
const implPath = 'EXMlosj07z63gdPL6IM3';
const reportCard = await dana.getReportCard(implPath);
console.log(`دانش آموز: ${reportCard.getStudentFullName()}`);
console.log(`مدرسه: ${reportCard.getSchoolName()}`);
console.log("--- نمرات ---");
reportCard.getGrades().forEach(course => {
console.log(`${course.title}: ${course.finalGrade || 'N/A'}`);
});
console.log(`\nمعدل کل: ${reportCard.calculateGPA()}`);
} catch (error) {
console.error(`خطا: ${error.message}`);
}
}
fetchReportCard();فایل example.js در این ریپازیتوری، یک مثال کاملتر با خروجی رنگی و زیبا ارائه میدهد.
این پروژه یک ابزار غیررسمی است و به هیچوجه به وزارت آموزش و پرورش وابستگی ندارد. این ابزار تنها برای اهداف آموزشی و نمایش تواناییهای فنی در زمینه مهندسی معکوس و توسعه نرمافزار ایجاد شده است. مسئولیت استفاده از این کد کاملاً بر عهده کاربر است.
این پروژه تحت لایسنس MIT منتشر شده است.
