علی در شبکهای اجتماعی، کانالهایی برای فوتبالیها دارد. او میخواهد برنامهی زمانبندی بازیهای فوتبال پیش رو را در کانالهایش بهصورت خودکار ارسال کند. همچنین، میخواهد پیش از شروع هر بازی، یک پیام یادآوری بهصورت خودکار بفرستد. برای این کار، او باید اطلاعات بازیها را داشته باشد. از شما میخواهیم برنامهای بنویسید که این اطلاعات را از صفحات وب جمعآوری کند.
جزئیات پروژه
پروژهی اولیه را از این لینک دانلود کنید. ساختار فایلهای پروژه بهصورت زیر است:
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
را آپلود کنید.
ارسال پاسخ برای این سؤال