구글 설문조사 양식
해당 설문조사 URL에 접속하면
위의 그림과 같이
설문조사 이름, 설문조사 설명, 설문조사 질문 리스트가 존재한다.
이때 질문에도 카테고리가 있는데, 크게 라디오버튼, 체크박스, 텍스트로 이루어져 있다.
또한 별 표시(*)가 있는 질문은 필수질문이다.
설문조사 이름, 설명, 질문 리스트(질문텍스트, 카테고리, 카테고리 서브텍스트, 필수문항 포함) 데이터를 뽑아오도록 하자
일단 Google, GoogleQuestion 클래스를 생성했다.
public class Google {
private String name; // 설문조사 이름
private String description; // 설명
private List<GoogleQuestion> googleQuestions; // GoogleQuestion 리스트
}
public class GoogleQuestion {
String questionText; // 질문 내용
String category; // 질문 카테고리(ex. 라디오, 체크박스, 텍스트)
boolean required; // 필수 문항 : true
String[] questionChoices; // 서브 질문 배열
|
메인 !!!
설명은 주석 참고 바람
(한페이지당 하나의 질문으로 구성되어있는 설문조사는 불가능)
public class GoogleSurveyParsing {
public static void main(String[] args) throws IOException {
Google google = new Google();
String GOOGLE_SURVEY_URL = "대상URL";
Document doc = Jsoup.connect(GOOGLE_SURVEY_URL).get();
Element element = doc.selectFirst(".freebirdFormviewerViewHeaderTitleRow"); // 설문조사 이름 select
google.setName(element.text());
element = doc.selectFirst(".freebirdFormviewerViewHeaderDescription"); // 설문조사 설명 select
google.setDescription(element.text());
Elements boxElements = doc.select(".freebirdFormviewerViewNumberedItemContainer"); // 각 질문 container
List<GoogleQuestion> googleQuestionList = new ArrayList<>();
for(Element e : boxElements) {
// 질문 내용 & 필수항목 데이터
GoogleQuestion googleQuestion = new GoogleQuestion();
String questionText = e.selectFirst(".freebirdFormviewerComponentsQuestionBaseTitle").text(); // 질문내용 select
googleQuestion.setQuestionText(questionText);
if(questionText.charAt(questionText.length() - 1) == '*') { // 질문텍스트의 마지막 문자가 '*'이면 필수 문항에 해당
googleQuestion.setRequired(true);
}
// 질문 카테고리 데이터
String category = "";
// 라디오 버튼 클래스명
if (e.getElementsByClass("freebirdFormviewerViewItemsRadiogroupRadioGroup").size() > 0) category = "라디오";
// 체크박스 클래스명
if (e.getElementsByClass("freebirdFormviewerComponentsQuestionCheckboxRoot").size() > 0) category = "체크박스";
// 텍스트 클래스명
if (e.getElementsByClass("freebirdFormviewerComponentsQuestionTextRoot").size() > 0) category = "장문형";
googleQuestion.setCategory(category);
// 서브 질문 데이터
Elements elements = e.select(".docssharedWizToggleLabeledPrimaryText"); // 서브 질문 텍스트 뽑기
String[] subChoices = new String[elements.size()]; // 서브 질문 개수만큼 배열 선언
int num = 0;
for (Element eSub : elements) {
subChoices[num++] = eSub.text();
}
googleQuestion.setQuestionChoices(subChoices);
googleQuestionList.add(googleQuestion);
google.setGoogleQuestions(googleQuestionList);
}
System.out.println(google.getName());
System.out.println(google.getDescription());
for(int i = 0; i < google.getGoogleQuestions().size(); i++){
System.out.println("==============================================================================================================================================================================================");
GoogleQuestion googleQuestion = googleQuestionList.get(i);
System.out.println(googleQuestion.questionText);
System.out.println("카테고리 : " + googleQuestion.category);
System.out.println(googleQuestion.required?"(필수)":"(선택)");
for(int j = 0; j < googleQuestion.getQuestionChoices().length; j++)
System.out.println(" " +googleQuestion.questionChoices[j]);
}
}
}
프로젝트 하면서, 구글 설문조사의 url을 입력하면 파싱을 통해서 해당 데이터들을 데이터베이스에 저장해야하는 과제가 생겼다.
그래서 객체 클래스들을 따로 생성해서 만들었다.
구글 설문조사도 이렇게 데이터를 뽑아올 수 있을 거란 생각은 못했는데, 이번 기회에 할 수 있어서 매우 뿌듯 😀