
علی در شبکهای اجتماعی، کانالهایی برای فوتبالیها دارد. او میخواهد برنامهی زمانبندی بازیهای فوتبال پیش رو را در کانالهایش بهصورت خودکار ارسال کند. همچنین، میخواهد پیش از شروع هر بازی، یک پیام یادآوری بهصورت خودکار بفرستد. برای این کار، او باید اطلاعات بازیها را داشته باشد. از شما میخواهیم برنامهای بنویسید که این اطلاعات را از صفحات وب جمعآوری کند.
جزئیات پروژه
پروژهی اولیه را از این لینک دانلود کنید. ساختار فایلهای پروژه بهصورت زیر است:
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
کلاس 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"))
- متد 
getMatchesرا طوری پیادهسازی کنید که با ارسال درخواست به آدرس واردشده در کانستراکتور، اطلاعات بازیها را در قالب یکListازMatchها برگرداند. 
نکته: تستهای نمونهی سؤال در کلاس WorldCupCrawlerSampleTest موجود هستند. با افزودن JUnit به classpath پروژه، میتوانید آنها را اجرا کنید. کلاسهای Server و HtttpHandler نیز جزو کلاسهای کمکی برای تست هستند.
آنچه باید آپلود کنید
پس از پیادهسازی موارد خواستهشده، فایل WorldCupCrawler.java را آپلود کنید.
ارسال پاسخ برای این سؤال