ساعت
۹۰۱۲۳۴۵۶۷۸۹۰۹۰۱۲۳۴۵۶۷۸۹۰
ساعت
دقیقه
۹۰۱۲۳۴۵۶۷۸۹۰۹۰۱۲۳۴۵۶۷۸۹۰
دقیقه
ثانیه
۹۰۱۲۳۴۵۶۷۸۹۰۹۰۱۲۳۴۵۶۷۸۹۰
ثانیه

معدن جام

علی در شبک‌های اجتماعی، کانال‌هایی برای فوتبالی‌ها دارد. او می‌خواهد برنامه‌ی زمان‌بندی بازی‌های فوتبال پیش رو را در کانال‌هایش به‌صورت خودکار ارسال کند. همچنین، می‌خواهد پیش از شروع هر بازی، یک پیام یادآوری به‌صورت خودکار بفرستد. برای این کار، او باید اطلاعات بازی‌ها را داشته باشد. از شما می‌خواهیم برنامه‌ای بنویسید که این اطلاعات را از صفحات وب جمع‌آوری کند.

جزئیات پروژه

پروژه‌ی اولیه را از این لینک دانلود کنید. ساختار فایل‌های پروژه به‌صورت زیر است:

world-cup-crawler
├── www
│   ├── ahmad-bin-ali-stadium.html
│   ├── al-bayt-stadium.html
│   ├── al-janoub-stadium.html
│   ├── al-thumama-stadium.html
│   ├── education-city-stadium.html
│   ├── index.html
│   ├── khalifa-international-stadium.html
│   ├── lusail-iconic-stadium.html
│   └── stadium-974.html
├── Country.java
├── HttpHandler.java
├── Match.java
├── Server.java
├── Stadium.java
├── Team.java
├── WorldCupCrawler.java
└── WorldCupCrawlerSampleTest.java
Plain text

کلاس Country

هر نمونه از این کلاس، بیانگر یک کشور است. هر Country دارای یک name از نوع String بوده که بیانگر نام کشور است. این کلاس از قبل به‌طور کامل پیاده‌سازی شده است.

کلاس Stadium

هر نمونه از این کلاس، بیانگر یک استادیوم است. هر Stadium دارای ویژگی‌های زیر است:

  • نام (name) از نوع String
  • کشور (country) از نوع Country
  • ظرفیت (capacity) از نوع int

این کلاس از قبل به‌طور کامل پیاده‌سازی شده است.

کلاس Team

هر نمونه از این کلاس، بیانگر یک تیم است. هر Team دارای یک name از نوع String بوده که بیانگر نام کشور است. این کلاس از قبل به‌طور کامل پیاده‌سازی شده است.

کلاس Match

هر نمونه از این کلاس، بیانگر یک مسابقه است. هر Match دارای ویژگی‌های زیر است:

  • زمان بازی (time) از نوع Date
  • گروه (group) از نوع String
  • تیم میزبان (team1) از نوع Team
  • تیم میزبان (team2) از نوع Team
  • استادیوم (stadium) از نوع Stadium

این کلاس از قبل به‌طور کامل پیاده‌سازی شده است.

کلاس WorldCupCrawler

این کلاس، وظیفه‌ی استخراج اطلاعات بازی‌ها از صفحات وب را برعهده دارد. عملیات استخراج داده‌ها باید تا حد امکان با استفاده از چند thread انجام شود تا سرعت بیشتری داشته باشد. این کلاس در کانستراکتور خود یک آبجمت از نوع URL دریافت می‌کند که بیانگر آدرس صفحه‌ی لیست بازی‌ها است. نمونه‌ای از صفحه‌ی لیست بازی‌ها در فایل www/index.html موجود است.

  • متد استاتیک getStadium این کلاس را طوری پیاده‌سازی کنید که با دریافت یک URL، اطلاعات یک استادیوم را از URL داده‌شده استخراج کرده و در قالب یک آبجکت از نوع Stadium برگرداند. نمونه‌ای از نحوه‌ی فراخوانی این متد:
WorldCupCrawler.getStadium(new URL("http://localhost/al-bayt-stadium.html"))
Java
  • متد getMatches را طوری پیاده‌سازی کنید که با ارسال درخواست به آدرس واردشده در کانستراکتور، اطلاعات بازی‌ها را در قالب یک List از Matchها برگرداند.

نکته: تست‌های نمونه‌ی سؤال در کلاس WorldCupCrawlerSampleTest موجود هستند. با افزودن JUnit به classpath پروژه، می‌توانید آن‌ها را اجرا کنید. کلاس‌های Server و HtttpHandler نیز جزو کلاس‌های کمکی برای تست هستند.

آن‌چه باید آپلود کنید

پس از پیاده‌سازی موارد خواسته‌شده، فایل WorldCupCrawler.java را آپلود کنید.


ارسال پاسخ برای این سؤال
فایلی انتخاب نشده است.