들어가며
- 앞서 정해진 데이터를 DB 에 insert 하였다면 이제는 내가 필요로 하는 데이터를 DB 에 넣어야 한다.
- 내가 한 프로젝트에선 여러 영화 사이트의 API 를 사용하여 영화 정보를 수집 저장 하였다.
- 이번 시간에는 GET, POST 방식으로 API 를 호출 하는 방법을 알아 보도록 하겠다.
Build.Gradle 에 Jsoup dependencies 추가하기
- 앞서 maria DB 의 dependencies 를 추가 한 것 처럼 Jsoup 도 사용하기 위해 추가해 주어야 한다.
- 다음 코드를 build.gradle 의 dependencies 에 추가 해 준다.
- 그 후 build.gradle 을 run 해 준다.(우클릭 후 run)
implementation("org.jsoup:jsoup:1.15.4")
Build.Gradle 에 Json dependencies 추가하기
- Json 은 유용한 데이터 구조이며 여기선 API 를 호출 할때 넘길 데이터를 Json 형식으로 넘기기 때문에 추가 해 주었다.
- 다음 코드를 build.gradle 의 dependencies 에 추가 해 준다.
- 그 후 build.gradle 을 run 해 준다.(우클릭 후 run)
Utils 디렉토리에 API 호출을 위한 파일 추가
- API 호출은 여러 부분에서 사용될 유용한 기능 이기 때문에 Utils 에 저장 한 후 불러 사용하였다.
GET 방식으로 API 호출하는 코드
- GET 방식으로 API 를 호출 하는 코드는 다음과 같다.
- jsoup 에 url 을 넘겨 conn 를 받고 이를 get 방식으로 호출 한다.
package com.example.runjob_blog.Utils
import org.json.JSONObject
import org.jsoup.Jsoup
class request_API {
companion object {
fun useGETApi(url: String): String{
val conn = Jsoup.connect(url)
.ignoreContentType(true)
val doc = conn.get().text()
return doc
}
}
}
POST 방식으로 API 호출하는 코드
- POST 방식으로 API 를 호출 하는 코드는 다음과 같다.
- url 과 넘길 데이터가 담긴 ParmList 를 jsoup 을 통해 넘겨 주며 post 로 호출 하면 된다.
- 이때 userAgent 와 넘길 ParmList 는 실제 웹사이트의 개발자 모드에 가면 쉽게 찾을 수 있는데 이는 아래에서 서술 하겠다.
package com.example.runjob_blog.Utils
import org.json.JSONObject
import org.jsoup.Jsoup
class request_API {
companion object {
val userAgent: String =
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
fun runPOSTApi(): String{
val url = "https://www.lottecinema.co.kr/LCWS/Movie/MovieData.aspx"
val paramList = HashMap<String, Any>()
paramList["MethodName"] = "GetMoviesToBe"
paramList["channelType"] = "MW"
paramList["osType"] = "Chrome"
paramList["osVersion"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36"
paramList["multiLanguageID"] = "KR"
paramList["division"] = 1
paramList["moviePlayYN"] = "Y"
paramList["orderType"] = 5
paramList["blockSize"] = 1000
paramList["pageNo"] = 1
paramList["memberOnNo"] = ""
val result = usePOSTApi(url, paramList)
return result
}
fun usePOSTApi(url: String, paramList: HashMap<String, Any>): String{
val conn = Jsoup.connect(url)
.userAgent(userAgent)
.data("paramList", JSONObject(paramList).toString())
.ignoreContentType(true)//에러나면 추가
val doc = conn.post().text()
return doc
}
}
}
Parmlist 와 userAgent
- 우선 이번에는 "롯데 시네마" 의 "영화 리스트" 를 반환하는 API 를 사용하므로 해당 사이트로 이동 해 준 후 "F12" 버튼을 이용해 개발자 모드를 열어 준다.
- 이후 "Network 탭으로 이동 한 후 "ctrl + r" 버튼으로 새로 고침 해 준다.
- 그 후 아래 리스트에서 API 를 사용하는 부분을 찾아 준다.
- 다음의 respose 가 영화의 리스트를 응답 하니 이 url 인것으로 추측 할 수 있따.
- 여기서 header 로 이동하면 userAgent 를 알 수 있다.
- 또 Payload 탭으로 이동하면 paramlist 를 알 수 있다.
실행 하기
- 모든 프로그램을 완성 했으니 실행을 해 보겠다.
- controller 에 GET 과 POST 호출 하는 함수를 호출하는 코드를 추가 하였다.
package com.example.runjob_blog.Controller
import com.example.runjob_blog.Service.testService
import com.example.runjob_blog.Utils.request_API
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
@RestController
@RequestMapping("/test")
class BlogTestController(
val testService: testService
) {
@GetMapping("/DBsave")
fun DBsave(){
testService.saveTest()
}
@GetMapping("/get")
fun GET_API(): String{
val result = request_API.useGETApi("https://movie.daum.net/api/premovie?page=1&size=100")
return result
}
@GetMapping("/post")
fun POST_API(): String{
val result = request_API.runPOSTApi()
return result
}
}
결과
'Runjob(런잡 프로젝트) > SpringBoot + Kotlin' 카테고리의 다른 글
[SpringBoot + Kotlin] @scheduled로 스케줄 처리 및 corn 설정 (0) | 2023.04.24 |
---|---|
[SpringBoot + Kotlin] Jsoup 을 이용한 웹 크롤링 (0) | 2023.04.23 |
[SpringBoot + Kotlin] JPA Repositor를 이용해 DB 에 원하는 데이터 저장 (0) | 2023.04.19 |
[SpringBoot + Kotlin] Controller 를 통해 request 보내기(실행하기) (0) | 2023.04.19 |
[SpringBoot + Kotlin] DB 생성하고 연동(Intellij 사용) (0) | 2023.04.15 |