أتمتة المهام باستخدام TypeScript: كيف تتوقف عن القيام بالأعمال المملة يدويًا

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

لماذا TypeScript هي اللغة المثالية للأتمتة

\n

كل مطور قضى ساعات في إعادة تسمية 200 ملف يدويًا، أو جمع بيانات من عشرات الصفحات، أو تحويل JSON إلى التنسيق المطلوب. الروتين يقتل الإنتاجية والدافع. لكن هناك خبر سار: الأتمتة باستخدام TypeScript تحل هذه المشاكل بسرعة وبأناقة.

\n

TypeScript ليست مجرد إضافة فوق JavaScript. إنها كتابة صارمة للأنواع، كود قابل للقراءة، ونظام بيئي قوي لـ Node.js. إذا كنت تكتب بلغة Python ولكنك تبحث عن بديل للأتمتة، أو تعمل بالفعل مع TS وتريد استخراج أقصى استفادة منه، فهذه المقالة لك. سنستعرض حالات واقعية: من استخراج صفحات الويب إلى إنشاء أدوات CLI وجداول المهام.

\n\n

من أين تبدأ: إعداد البيئة

\n

قبل كتابة نصوص TypeScript، تحتاج إلى تجهيز البيئة. تأكد من تثبيت Node.js (الإصدار 18+) و npm.

\n
# تثبيت TypeScript بشكل عام\nnpm install -g typescript\n\n# تهيئة المشروع\nmkdir auto-ts && cd auto-ts\nnpm init -y\nnpm install typescript @types/node ts-node --save-dev\n
\n

أنشئ ملف tsconfig.json بالإعدادات الأساسية:

\n
{\n  "compilerOptions": {\n    "target": "ES2020",\n    "module": "commonjs",\n    "outDir": "./dist",\n    "rootDir": "./src",\n    "strict": true,\n    "esModuleInterop": true\n  },\n  "include": ["src/**/*"]\n}\n
\n

الآن يمكنك كتابة النصوص في مجلد src وتشغيلها عبر ts-node src/script.ts. هذا هو الأساس لأي أتمتة مهام ts.

\n\n

حالة 1: استخراج صفحات الويب تلقائيًا

\n

تخيل: تحتاج إلى جمع عناوين الأخبار من الصفحة الرئيسية لموقع إخباري. النسخ واللصق اليدوي من الماضي. سنكتب محللًا باستخدام TypeScript مع cheerio و axios.

\n
npm install axios cheerio\n
\n

لننشئ ملف src/parser.ts:

\n
import axios from 'axios';\nimport * as cheerio from 'cheerio';\n\ninterface NewsItem {\n  title: string;\n  link: string;\n}\n\nasync function parseNews(url: string): Promise<NewsItem[]> {\n  const { data } = await axios.get(url);\n  const $ = cheerio.load(data);\n  const news: NewsItem[] = [];\n\n  $('h2.news-title a').each((i, el) => {\n    news.push({\n      title: $(el).text().trim(),\n      link: $(el).attr('href') || '',\n    });\n  });\n\n  return news;\n}\n\n(async () => {\n  const items = await parseNews('https://example-news-site.com');\n  console.log(`تم العثور على ${items.length} خبر:`);\n  items.forEach(item => console.log(`- ${item.title}`));\n})();\n
\n

يمكن توسيع استخراج البيانات باستخدام TypeScript بسهولة: إضافة التسجيل إلى CSV، الإرسال إلى Telegram، أو الحفظ في قاعدة بيانات. كتابة الأنواع لـ NewsItem تجعل الكود موثوقًا وواضحًا.

\n\n

حالة 2: معالجة الملفات بشكل مجمع

\n

لنفترض أن لديك مجلدًا يحتوي على مئات ملفات CSV التي تحتاج إلى دمجها في ملف واحد، مع إزالة التكرارات. العمل اليدوي سيستغرق يومًا. الأتمتة باستخدام TypeScript ستنجزها في ثانية.

\n
npm install fs-extra papaparse\n
\n
import * as fs from 'fs-extra';\nimport * as path from 'path';\nimport Papa from 'papaparse';\n\ninterface Row {\n  [key: string]: string;\n}\n\nasync function mergeCSV(inputDir: string, outputFile: string): Promise<void> {\n  const files = (await fs.readdir(inputDir)).filter(f => f.endsWith('.csv'));\n  const allRows: Row[] = [];\n  const seen = new Set<string>();\n\n  for (const file of files) {\n    const content = await fs.readFile(path.join(inputDir, file), 'utf-8');\n    const parsed = Papa.parse<Row>(content, { header: true });\n    \n    for (const row of parsed.data) {\n      const key = JSON.stringify(row);\n      if (!seen.has(key)) {\n        seen.add(key);\n        allRows.push(row);\n                

المدونات

توصيات الكتب