Play는 netty의 비동기 라이브러리를 사용하기 때문에이를 매우 간단하게 수행 할 수 있습니다.
클라이언트 측에서는 Play 서버에 요청 (jQuery의 $.ajax
이 익숙한 경우 작동)을 원할 것입니다. 재생 서버가 비동기 적으로 URL을 요청한 다음 응답을 구문 분석합니다.
case class ScrapedPage(title: String, desc: String, image: String)
def scrape(url: String) = Action {
// Perhaps: check if you've already scraped this page from your db? If not:
Async {
WS.url(url).get().map { response =>
val scrapedPage = parsePage(response.body)
// Store this data into your database... then,
Ok(
Json.obj("title" -> scrapedPage.title, "desc" -> scrapedPage.desc, "image" -> scrapedPage.image)
)
}
}
}
def parsePage(body: String): ScrapedPage = ???
콜백에서 클라이언트는이 데이터를 유용한 방식으로 UI에 채울 수 있습니다.
이 데이터를 데이터베이스에 저장하려면 구현은 사용중인 데이터베이스/액세스 계층에 따라 달라집니다. 이것은 너무 복잡해서는 안됩니다.
페이지를 구문 분석 할 때 몇 가지 옵션이 있습니다. jsoup을 확인하십시오. CSS/jQuery style selector syntax을 사용하여 DOM을 쿼리 할 수 있습니다. 제목, 메타 태그 및 이미지를 그런 식으로 붙잡을 수 있습니다.