웹서버
-> html과 그 외의 기타 자료 정보 - 공개, 공식제공 자료는 아니다.
hyml(image) 크롤링, 스크래핑
=> 가공해서 사용
: String, StringBuffer, StringBuilder
: Regular Expression(POSIX)
: Library(API) - JSoup
-> Open API - 공식제공 : 회원가입(api key)
: text - CSV / XML / JSON {} 객체, [] 배열
String, StringBuffer, StringBuilder - 문자열
Library(API) - 상수
: Library(API)
https://jsonlint.com/
json.org
URLConnection을 사용
public static void main(String[] args) {
// Parsing = 문서 분석
BufferedReader br = null;
try {
//영화 주간 박스 사이트 정보 가져옴
URLConnection conn = new URL("http://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchWeeklyBoxOfficeList.xml?key=f5eef3421c602c6cb7ea224104795888&targetDt=20230408").openConnection();
br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
//이 사이트의 데이터는 한 줄 => while 할 필요 없다
String line = br.readLine();
boolean flag = false;
//데이터의 공통된 부분 찾아서 줄바꿈 처리
line = line.replaceAll("><", ">\n<");
//split으로 배열 형식으로 나누기
String[] lines = line.split("\n");
for(String data : lines) {
if(data.trim().startsWith("<rank>") ) {
System.out.println(
data.trim()
.replaceAll("<rank>", "")
.replaceAll("</rank>", "")); //replaceAll로 rank를 지움
}
if(data.trim().startsWith("<movieNm>") ) {
System.out.println(
data.trim()
.replaceAll("<movieNm>", "")
.replaceAll("</movieNm>", "")); // " "
}
}
} catch (MalformedURLException e) {
System.out.println("[에러] : " + e.getMessage());
} catch (IOException e) {
System.out.println("[에러] : " + e.getMessage());
} finally {
if(br != null) try { br.close(); } catch(IOException e) {}
}
}
}
jsoup을 사용
public static void main(String[] args) {
// Parsing = 문서 분석
BufferedReader br = null;
try {
URLConnection conn = new URL("http://kobis.or.kr/kobisopenapi/webservice
/rest/boxoffice/searchWeeklyBoxOfficeList.xml?
key=f5eef3421c602c6cb7ea224104795888&targetDt=20230408").openConnection();
br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String data = br.readLine();
Document doc = Jsoup.parse(data);
Elements rankTags = doc.getElementsByTag("rank");
Elements nameTags = doc.getElementsByTag("movieNm");
for(int i = 0; i < rankTags.size(); i++) {
Element rankTag = rankTags.get(i);
System.out.println(rankTag.text());
Element nameTag = nameTags.get(i);
System.out.println(nameTag.text());
}
} catch (MalformedURLException e) {
System.out.println("[에러] : " + e.getMessage());
} catch (IOException e) {
System.out.println("[에러] : " + e.getMessage());
} finally {
if(br != null) try { br.close(); } catch(IOException e) {}
}
}
}
영화정보 추출하기
정수형/문자열 출력
public static void main(String[] args) {
// TODO Auto-generated method stub
String strJson= "[8, 9, 6, 2, 9]";
JSONParser parser = new JSONParser();
try {
JSONArray array = (JSONArray)parser.parse(strJson);
//배열 형식으로 전체 리스트
System.out.println(array);
//System.out.println(array.size());
//하나씩 출력
for(int i = 0; i < array.size(); i++) {
//json 기본 정수형 = long
long data = (Long)array.get(i);
System.out.println(data);
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String strJson= "[\"8\", \"9\", \"6\", \"2\", \"9\"]";
JSONParser parser = new JSONParser();
try {
JSONArray array = (JSONArray)parser.parse(strJson);
//배열 형식으로 전체 리스트
System.out.println(array);
//System.out.println(array.size());
//하나씩 출력
for(int i = 0; i < array.size(); i++) {
String data = (String)array.get(i);
System.out.println(data);
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
객체 출력
public static void main(String[] args) {
// 객체는 시작점이 중괄호
// 객체로 생성
String strJson= "{\"data1\" : \"value1\" , \"data2\" : \"value2\"}";
JSONParser parser = new JSONParser();
try {
JSONObject obj = (JSONObject)parser.parse(strJson);
// data1에 대한 값
String data1 = (String) obj.get("data1");
System.out.println(data1);
// data2에 대한 값
String data2 = (String) obj.get("data2");
System.out.println(data2);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
배열/객체 형식 출력
public static void main(String[] args) {
//문자형은 항상 ""
//[] = 동종 데이터 넣기
String strJson = "[{\"name\" : \"홍길동\", \"city\" : \"서울\"},
{\"name\" : \"박문수\", \"city\" : \"경기\"}]"; // 차례대로 추출
JSONParser parser = new JSONParser();
try {
JSONArray arr = (JSONArray)parser.parse(strJson);
System.out.println(arr.size());
for(int i = 0; i<arr.size(); i++) {
JSONObject object = (JSONObject)arr.get(i);
String name = (String)object.get("name");
System.out.println(name);
String city = (String)object.get("city");
System.out.println(city);
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
영화 정보 json으로 출력
public static void main(String[] args) {
// Parsing = 문서 분석
BufferedReader br = null;
try {
URLConnection conn = new URL(
"http://kobis.or.kr/kobisopenapi/webservice/
rest/boxoffice/searchWeeklyBoxOfficeList.json?
key=f5eef3421c602c6cb7ea224104795888&targetDt=20230408")
.openConnection();
br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = br.readLine();
//차례대로 분리할 것
JSONParser parser = new JSONParser();
JSONObject root = (JSONObject) parser.parse(line);
JSONObject boxOfficeResult = (JSONObject) root.get("boxOfficeResult");
JSONArray weeklyBoxOfficeList = (JSONArray) boxOfficeResult.get("weeklyBoxOfficeList");
for(int i = 0; i < weeklyBoxOfficeList.size(); i++) {
JSONObject weeklyBoxOffice = (JSONObject) weeklyBoxOfficeList.get(i);
System.out.printf("%s\t%s\t%s\n",
weeklyBoxOffice.get("rank"),
weeklyBoxOffice.get("movieCd"),
weeklyBoxOffice.get("movieNm"));
}
} catch (ParseException e) {
System.out.println("[에러] : " + e.getMessage());
} catch (MalformedURLException e) {
System.out.println("[에러] : " + e.getMessage());
} catch (IOException e) {
System.out.println("[에러] : " + e.getMessage());
} finally {
if (br != null)
try {
br.close();
} catch (IOException e) {
}
}
}
}
SeverSocket <- Socket
제공자용 소켓 <- Socket
1. 전송규약
2. 포트
TCP(Transmission Control Protocol) - 전화(확인/응답)
Http
UDP(User Diagram Protocol) - 방송/확인하지 않음(일방적)
서버연결끊기 : ctrl + c
C:\Users\KITCOOP>cd c:\Java\java-workspace\SocketEx01\bin
c:\Java\java-workspace\SocketEx01\bin>java pack2.TCPServerEx01
클라이언트 서버
단수 입력 구구단 계산실행
구구단 출력