package Airplane;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import com.google.gson.Gson;
import Airplane.FlightInfo;
public class FlightApp {
public static int getTotalCount(String depAirportId, String arrAirportId, long depPlandTime) {
try {
// 1번 주소 객체 만들기
URL url = new URL(
"http://openapi.tago.go.kr/openapi/service/DmstcFlightNvgInfoService/getFlightOpratInfoList?serviceKey=TYJuOuhQd%2BPQB9hRLr96SDnMNeegd0U3g9mOpBpumr6DwZ6sgto5MjcX%2F8rUKaIKC3AHWmO4gTEHK39cCxwLug%3D%3D&numOfRows=50&pageNo=1&depAirportId="
+ FlightInfoService.airPortId.get(depAirportId) + "&arrAirportId="
+ FlightInfoService.airPortId.get(arrAirportId) + "&depPlandTime=" + depPlandTime
+ "&_type=json");
// 2번 스트림 연결
HttpURLConnection con = (HttpURLConnection) url.openConnection();
// 3번 버퍼연결(문자열)
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
// FileWriter fr = new FileWriter("c:\\utils\\test.html"); //파일에 스트림을 연결한 것
// 4번 문자 더하기 (중요)
StringBuilder sb = new StringBuilder();
String input = "";
while ((input = br.readLine()) != null) {
sb.append(input);
}
System.out.println(sb.toString());
System.out.println();
br.close(); // 버퍼 닫기
con.disconnect(); // 스트림 닫기
// 5. 자바 오브젝트로 변환
Gson gson = new Gson();
FlightInfo flightInfo = gson.fromJson(sb.toString(), FlightInfo.class);
return flightInfo.getResponse().getBody().getTotalCount();
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
public static FlightInfo getFlightInfo(String depAirportId, String arrAirportId, long depPlandTime, int page) {
// 1번 주소 객체 만들기
try {
URL url = new URL(
"http://openapi.tago.go.kr/openapi/service/DmstcFlightNvgInfoService/getFlightOpratInfoList?serviceKey=BTERlPQquIzWPNPwhyG74H1Q%2FoDrHpnubL%2FXCu%2FHneA%2BYSKX%2FstOJrcTUGI7BZX%2BClPcZ8DgeT5h2SAfhqvr6w%3D%3D&numOfRows=50&pageNo="
+ page + "&depAirportId=" + FlightInfoService.airPortId.get(depAirportId) + "&arrAirportId="
+ FlightInfoService.airPortId.get(arrAirportId) + "&depPlandTime=20200407&_type=json");
// 2번 스트림 연결
HttpURLConnection con = (HttpURLConnection) url.openConnection();
// 3번 버퍼연결(문자열)
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
// FileWriter fr = new FileWriter("c:\\utils\\test.html"); //파일에 스트림을 연결한 것
// 4번 문자 더하기 (중요)
StringBuilder sb = new StringBuilder();
String input = "";
while ((input = br.readLine()) != null) {
sb.append(input);
}
System.out.println(sb.toString());
System.out.println();
br.close(); // 버퍼 닫기
con.disconnect(); // 스트림 닫기
Gson gson = new Gson();
FlightInfo flightInfo = gson.fromJson(sb.toString(), FlightInfo.class);
return flightInfo;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
FlightInfoService.setAirLineId();
FlightInfoService.setAirPortId();
for (String key : FlightInfoService.airPortId.keySet()) {// 여기 airportid가 flightinfoservice에 있는 airportid임
// keyset : 왼쪽에 있는 키값 다 뽑아줌
System.out.print(key + " ");
}
System.out.println();
System.out.println("출발지를 입력하세요.");
Scanner sc = new Scanner(System.in);
String depAirportId = sc.next(); // 김포
System.out.println("도착지를 입력하세요.");
String arrAirportId = sc.next();
System.out.println("출발일자를 입력하세요.");
String depPlandTimeTemp = sc.next();
long depPlandTime = Long.parseLong(depPlandTimeTemp);
Integer depPlandTimeInteger = Integer.parseInt(depPlandTimeTemp);
Double depPlanTimeDouble = Double.parseDouble(depPlandTimeTemp);
int page = 1;
String strTemp = depPlandTime + "";
String strTemp2 = depPlandTimeInteger.toString();
String strTemp3 = depPlanTimeDouble.toString();
int totalCount = getTotalCount(depAirportId, arrAirportId, depPlandTime);
int count = 0;
if (totalCount % 50 == 0) {
count = totalCount / 50;
} else {
count = totalCount / 50 + 1;
}
ArrayList<FlightInfo> flightInfos = new ArrayList<>();
for (int i = 0; i < count; i++) {
FlightInfo flightInfo = getFlightInfo(depAirportId, arrAirportId, depPlandTime, page);
page++;
flightInfos.add(flightInfo);
}
for (FlightInfo flightInfo : flightInfos) { // 122개-3번
List<Item> flightItems = flightInfo.getResponse().getBody().getItems().getItem();
// iterable(반복)
for (Item item : flightItems) { // foreach문
System.out.println("항공사 : " + item.getAirlineNm());
System.out.println("출발지 : " + item.getDepAirportNm());
System.out.println("도착지 : " + item.getArrAirportNm());
System.out.println("출발시간 : " + item.getDepPlandTime());
System.out.println("도착시간 : " + item.getArrPl
for each문
for(타입 변수 : 컬렉션 원형)
끝까지 다 반복할 거면 for each문을 사용한다.
주소분석
1. http
2. IP 주소
3. port :80
4, endpoint
5. 상세주소
6. 쿼리스트링
공공데이터 서버의 주소를 알게된다.
컴퓨터와 서버를 Stream으로 연결한 후,
BufferReader로 정보를 읽는다
---> request
다운받은 데이터 타입은 String!
Json을 자바 오브젝트로 변경
1. json스키마
2. gson
Hashmap에 넣는 것이 좋음
(계속해서 변화가 X)
DNS
도메인 : 나만의 특정한 범위
이름
서버 : 도메인 네임의 값(정보를 가지고 있기 때문에)
1급객체 : 제일 바깥에 나올 수 있는 객체이다.
ex. class
* 자바스크립트는 모든게 다 1급객체이다
윗 데이터를 String으로 받고 있기 때문에 getFlightInfo 가 오류가 뜬다
String 타입을 바꿔줘야한다.(원래는 long으로 그냥 받으면 됨^^;)
타입을 바꿔주면 오류가 사라진다.
* int 타입으로 바꾸려면
이렇게 작성하면 된다.
이 것들을 문자화 시키려면
1. 묵시적 형변환
2.
int를 integer로 바꿔주고 String 타입으로 변경한다.
* 자바 컬렉션
* 이미지 출처 : https://www.crocus.co.kr/1553
Java에서 Collection이란?
Collection 이란? Collection 객체는 여러 원소들을 담을 수 있는 자료구조를 뜻한다 배열이 가장 기본적인 자료구조이며, DTO 또한 자료를 담는 하나의 방식이라고 볼 수 있다. 자바에서의 자료구조 유형은 다음..
www.crocus.co.kr
Queue
FIFO : First In First out
뺄때 First out
먼저 들어온거 먼저 출력
중간에 데이터를 빼낼 수 없다.
Set
중복이 없는 데이터이다.
중복된 데이터가 안 들어간다.
SortedSet : Set의 자식 / Set의 기능을 가지면서 정렬해준다.
List
* 커피숍만들기 포스트 참고
https://saludar.tistory.com/100?category=842509
Java - 커피숍만들기, Linked List, ArrayList, Generic
<커피숍 만들기> - 필요한 것 : 손님, 바리스타, 메뉴판(메뉴목록이라는 object가 들어있다), 커피 * 모든 object 는 생명력이 있다고 생각해야 한다. ㄴ 모든 오브젝트는 역할(부모)을 가진다. ㄴ역할(부모)을 가..
saludar.tistory.com
* stack : FILO (First In Last Out)
먼저 들어온 데이터가 가장 늦게 빠져나간다.
꺼내면서 메모리를 소멸시켜버림
메서드 내부는 전부 Stack 구조로 이루어져 있음
Hash
엄청 중요하다
* 컬렉션 아님 주의
https://medium.com/@elamachain/hash-%ED%95%B4%EC%8B%9C%EB%9E%80-3c7891b81dd3
HASH 해시란?
블록체인이란 거래내역 등의 데이터가 ‘블록’이라고 하는 저장환경에 저장되어 누구라도 임의로 수정할 수 없고 누구나 변경의 결과를 열람할 수 있는 데이터 위변조 방지 기술입니다.
medium.com
참고사이트
해시란 : 암호화 사이트이다.
어떤 문자열(크기가 없다)을 더 짧은 길이의 값으로 변경하는 것을 말한다.
방대한 내용의 문장도 짧은 몇 개의 문자로 표현이 가능하다.
해시의 특징
1. 어떤 문자열이든 고정된 크기로 암호화 할 수 있다.
긴문자이든 짧은 문자이든 고정길이 문자열로 변환된다.
2. 복호화 불가
(커지면 커질수록 값을 만들 수 있는 경우의 수가 너무 많기 때문에)
3. 해시는 충돌할 수 있다.
4. 진위여부를 판단할 수 있다.
(같은 암호를 입력하면 같은 값이 나오는데 조금만 수정되도 해시값이 다르게 나오니까)
5. 해시화 한 후 값으로 해시를 찾을 수 있다.
* 복호화가 안되는 이유 :
숫자가 하나 있다고 가정 --> 60
60을 약분하면 1, 2, 3,4, 5, 6, 10,12, 15, 20, 30, 60
끝의 수끼리 곱하면 60이 만들어짐
? X ? = 60
경우의 수가 많아지기 때문에
?에 무슨 값이 들어갔는지 복호화 하기는 쉽지 않음
package Airplane;
import java.util.HashMap;
public class HashEx01 {
public static void main(String[] args) {
HashMap<String, String> auth =
new HashMap<>();
// 값을 넣을 거임
auth.put("아이디", "ssarmange");
auth.put("비밀번호", "1234");
System.out.println(auth.get("아이디"));
}
}
key 값에 아이디를 추가하면 데이터를 덮어씌어 버린다.
결과값
a값이 있는지 찾는 코드
public static coid main(Stringp[] args){
String addr = "a";
}
if(addr.contains("a")){
system.out.print("있어요");
}else{
system.out.print("없어요");
}
'Java programing > 프로그래밍 언어 활용' 카테고리의 다른 글
Java - 스레드1, 익명클래스 (0) | 2020.04.13 |
---|---|
코로나 마스크 앱 만들기 (0) | 2020.04.10 |
Java - OSI 계층 (0) | 2020.04.07 |
Java - json (0) | 2020.04.06 |
Java - 접근지정자, 자바 입출력 (0) | 2020.04.06 |