보통 JSON/XML 파일 및 데이터를 읽는 작업이 자주있습니다.예전에 샘플링으로 JSON 관련 포스팅을 다룬적이 있습니다.2014/10/06 - [코드저장소/java] - JSON 라이브러리를 이용하여 object생성과 문자열을 object형으로 변환해보기이번포스팅은 XML 파일 및 xml API 통신으로 받은 데이터를읽어오는 샘플링을 진행해보도록 하겠습..
자바라이브러리의 twitter4j를 이용하여 타임라인 목록을 출력해보도록 하겠습니다.다운로드는 2가지 방법이 존재합니다. 1. JAR파일 다운로드 http://twitter4j.org/en/index.html위 사이트를 가셔서 twitter4j-x.x.x.zip파일을 다운로드 받으십니다.받으신 다음 압축해제를 하신 후 lib 디렉토리에 존재하는twitter..
이번시간에는 opencsv를 이용하여 CSV 파일을 생성해보도록 하겠습니다.공공기관 사이트를 주로 작업을 하다보니 엑셀다운로드외에 팀버너스리의 데이터 개방 형식(?) 이라고엑셀다운로드 상위파일인 csv 파일다운로드도 제공해야한다는클라이언트 요구에 의해 만들어본걸 공유해보고자 포스팅하게되었습니다.샘플코드이므로 단순히 다운로드 로직은 제외하고 csv 파일쓰는 ..
보통 JSON/XML 파일 및 데이터를 읽는 작업이 자주있습니다.
예전에 샘플링으로 JSON 관련 포스팅을 다룬적이 있습니다.
2014/10/06 - [코드저장소/java] - JSON 라이브러리를 이용하여 object생성과 문자열을 object형으로 변환해보기
이번포스팅은 XML 파일 및 xml API 통신으로 받은 데이터를
읽어오는 샘플링을 진행해보도록 하겠습니다.
JDK 1.7로 진행을 합니다.
하위 버전에 해당 라이브러리가 존재하지 않을경우
xml-apis 관련 jar파일 및 maven dependency를 추가해주셔야 할것입니다.
이클립스에서 자바프로젝트 생성 후 src디렉토리에 test 패키지 생성 후
내부에 text.xml을 하나 생성한 다음 다음과 같은 샘플코드를 작성해보았습니다.
1 2 3 4 5 6 7 8 9 10 11 | <? xml version = "1.0" encoding = "UTF-8" ?> < root > < blog > < title > <![CDATA[개발로짜]]> </ title > </ blog > < blog > < title > <![CDATA[국이]]> </ title > </ blog > </ root > |
이어서 test 패키지내부에 Test.java 클래스파일을 생성하여 다음과 같이 샘플코드를 작성해보았습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | public class Test { public static void main(String ar[]) { try { DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); Document xml = null ; //XML DOCUMENT 획득 xml = documentBuilder.parse(ClassLoader.getSystemResource( "test/test.xml" ).toURI().toString()); //Root엘리먼트 획득 Element element = xml.getDocumentElement(); //Root엘리먼트의 자식 노드목록 획득(blog xml 태그) NodeList list = element.getChildNodes(); //자식노드가 1개이상일경우 if (list.getLength() > 0 ) { //반복문 이용 for ( int i= 0 ; i<list.getLength(); i++) { //blog xml태그의 자식태그 한번 더 획득 NodeList childlist = list.item(i).getChildNodes(); //마찬가지로 자식노드 1개이상일경우 if (childlist.getLength() > 0 ) { for ( int j= 0 ; j<childlist.getLength(); j++) { //blog xml 태그내에 존재하는 태그들의 태그명 + 태그에 속하는 내용 출력 System.out.println( "XML태그명:" +childlist.item(j).getNodeName()+ ",XML값:" +childlist.item(j).getTextContent()); } } } } } catch (Exception e) { e.printStackTrace(); } } } |
코드 작성 후 실행을 해본결과 이클립스 콘솔에 하단과 같이 출력되었습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | XML태그명: #text,XML값: XML태그명:title,XML값:개발로짜 XML태그명: #text,XML값: XML태그명:link,XML값:http: //hellogk .tistory.com XML태그명: #text,XML값: XML태그명: #text,XML값: XML태그명:title,XML값:국이 XML태그명: #text,XML값: XML태그명:link,XML값:http: //guklife .tistory.com XML태그명: #text,XML값: |
태그명에 존재하지도 않는 "#text" 태그가 출력되었습니다.
위 태그는 white-space(공백) 을 노드의 일부로 인식을 하여 출력하는데
이부분은 제외해야 하므로 조건문을 하나 더 추가하여 다시 한번 출력해보도록 하겠습니다.
기존 System.out.println 부분에 다음과 같은 조건을 추가적용 해주세요
1 2 3 | if (Node.TEXT_NODE !=childlist.item(j).getNodeType()){ System.out.println(childlist.item(j).getNodeName()+ ":" +childlist.item(j).getTextContent()); } |
1 2 3 4 | title:개발로짜 link:http: //hellogk .tistory.com title:국이 link:http: //guklife .tistory.com |
#text white-space 부분은 제외하고 출력이 되었습니다.
이어서 외부 url의 일명:API 통신을 이용하여 데이터를 출력해보도록 하겠습니다.
네이버블로그 RSS도 XML 규격으로 만들어져있으므로 RSS로 진행 해보도록 하겠습니다.
호출 RSS URL : http://blog.rss.naver.com/w3labs.xml (미래웹기술연구소 네이버 블로그 RSS 샘플)
브라우저로 RSS 규격을 확인해보도록 하겠습니다.
rss태그가 ROOT ELEMENT이고
자식첫번째 노드는 channel 태그인대 이태그는 한개만 존재하며
자식노드를 한번 더 들어가 item 태그에 존재하는
title / description 태그의 값들을 콘솔로 출력해보도록 하겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | public static void main(String ar[]) { try { DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); Document xml = null ; //XML DOCUMENT 획득 //Root엘리먼트 획득 Element element = xml.getDocumentElement(); //Root엘리먼트의 channel 자식태그는 1개이므로 item(0)으로 획득 Node channelNode = element.getElementsByTagName( "channel" ).item( 0 ); //channel태그내에 존재하는 자식태그 획득 NodeList list = channelNode.getChildNodes(); for ( int i= 0 ; i<list.getLength(); i++) { //image,link,title.. 여러개 태그 중 item 태그만 획득 if (list.item(i).getNodeName().equals( "item" )) { //item 태그의 자식노드 획득 NodeList list2 = list.item(i).getChildNodes(); for ( int j= 0 ;j<list2.getLength();j++) { //자식태그가 title/description일경우에만 태그명 + 값을 출력 if (list2.item(j).getNodeName().equals( "title" ) || list2.item(j).getNodeName().equals( "description" )){ String content = list2.item(j).getTextContent(); //줄바꿈이 되어있으므로 \n replaceall content = content.replaceAll( "\n" , "" ); System.out.println( "========== 출력시작 =================" ); System.out.println( "name:" +list2.item(j).getNodeName()); System.out.println( "value:" +content); System.out.println( "========== 출력종료 =================" ); } } } } } catch (Exception e) { e.printStackTrace(); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | ========== 출력시작 ================= name:title value:Sencha Ext JS Training ! 9월 부터는 Ext JS 5 강좌를 시작합니다.! ========== 출력종료 ================= ========== 출력시작 ================= name:description value:9월 ExtJS 5 Training 5일과정반응형 레이아웃, 접근성 지원, 플랫테마, 태블릿 지원, 센차 터치 차트 내장등 한층 업그레이드된 ExtJS 5 를 경험하세요!수강정보날짜 : 2014년 9월 15일(월) ~ 9월 19일(금) 10:00 ~ 18:00장소 :지하철 2호선 홍대입구역 5분거리 (서울시 마포구 서교동 352-31 희승빌딩 2층)비용 : 150만원 (부가세 별도)문의 : 미래웹기술연구소edu@miraeweb.com070-4259-2739Ext JS 5 런칭 기념! 수강생 전원에게 5만원권 백화점 상품권을 드립니다.주요내용OverviewSetup & SettingGetting StartDevuggingApplication StructureClass SystemComponent ClassLayouts & ContainerDom HandlingEventModel, Store and For....... ========== 출력종료 ================= ========== 출력시작 ================= name:title value:센차 아키텍트 3.1의 릴리즈를 발표하다 ========== 출력종료 ================= ========== 출력시작 ================= name:description value:센차 아키텍트 3.1의 릴리즈를 발표하다 2014년 8월 7일|애런 콘랜 센차와 아키텍트 팀 전체를 대표해 뿌듯한 마음으로 센차 아키텍트 3.1의 릴리즈를 발표합니다. 센차 아키텍트 3.1에는 여러 가지 새로운 기능이 생겼고, 그 중에서도 주목할 만한것은 Ext JS 5 지원입니다. Ext JS 5가 릴리즈되고얼마 되지 않았지만, 우리는 센차 아키텍트가 Ext JS 5의 새로운 기능을 동등하게 사용하도록 지원하기 시작했습니다. 센차 아키텍트 3.1 조기 액세스 프로그램(EAT: Early Access Program)에참여해주신 모든 분의 노고에 한분 한분 감사드리고 싶습니다. 센차 아키텍트의 Ext JS 5 지원 센차 아키텍트 3.1에....... ========== 출력종료 ================= ========== 출력시작 ================= name:title value:What's New in Ext JS 5.0.1 ========== 출력종료 ================= ========== 출력시작 ================= name:description value:Ext JS 5.0.1의 새로운 기능 2014년 8월 7일|돈 그리핀 오늘, 흥분되는 마음으로 Ext JS 5.0.1의 최종 안정화 버전을 발표합니다!이번 유지 관리 릴리즈에는 센차 커뮤니티의 피드백을 바탕으로 다수의 개선점이 포함되어 있습니다. 어떤 변화들이 있는지 살펴보겠습니다. 접근성 Ext JS 4.2.2부터는 “ext-aria” 패키지를 릴리즈해 접근성에 대한지원을 개선했습니다 (WAI-ARIA1.0표준에 설명된 것과 같이). 애플리케이션의 접근성을 높이는도구를 제공하는 데 중요한 단계이기도 했지만 테스팅 파트너와 얼리 어탭터의 피드백을 통해 배운 점도 많았습니다. Ext JS 5에서는 그 피드백들을 통합해 더 나은 솔....... ========== 출력종료 ================= ========== 출력시작 ================= name:title value:<센차 Ext JS 5>하나로 통합된 플랫폼에서 데스크톱과 모바일 애플리케이션 개발의 능률을 높인다. ========== 출력종료 ================= . . . . |
위와같이 정상적으로 "제목 + 설명"에 대한 결과가 출력되었습니다 .
by 개발로짜
[JAVA 샘플] 트위터 앱생성 + twitter4j를 이용하여 타임라인(Timeline) 목록 출력하기 (3) | 2014.11.20 |
---|---|
JAVA opencsv를 이용하여 csv 파일생성하기 (2) | 2014.10.24 |
자바 zxing를 이용하여 QR코드 생성 + 색상코드(hex,rgb,안드로이드그래픽색상) 적용법 (2) | 2014.10.16 |
자바 다운로드 유틸을 만들어서 웹서버에 등록되있는 파일을 다운로드 하자 (5) | 2014.10.07 |
자바 POI를 이용한 엑셀(xls,xlsx)에 들어있는 데이터들 읽어오기 (8) | 2014.10.07 |
자바라이브러리의 twitter4j를 이용하여 타임라인 목록을 출력해보도록 하겠습니다.
다운로드는 2가지 방법이 존재합니다.
http://twitter4j.org/en/index.html
위 사이트를 가셔서 twitter4j-x.x.x.zip파일을 다운로드 받으십니다.
받으신 다음 압축해제를 하신 후 lib 디렉토리에 존재하는
twitter4j-core-x.x.x.jar 파일을 본인의 lib 디렉토리내에 include 해주도록 합니다.
1 2 3 4 5 | < dependency > < groupId >org.twitter4j</ groupId > < artifactId >twitter4j-core</ artifactId > < version >4.0.2</ version > </ dependency > |
위처럼 twitter4j 관련 dependency를 pom.xml 에 추가해주도록 합니다.
이어서 consumer key, consumer secret, accesstoken 등을 받기 위하여
앱을 하나 생성해보도록 하겠습니다.
1. 트위터에 접속하여 앱생성하고자 하는 아이디로 로그인을 합니다.
"URL 접속 후 Create New App" 버튼 클릭을 합니다.
3. 하단 네모친 박스에 필수값들을 입력합니다.
1) Name : 앱의 이름을 작성
2) Description : 앱에 대한 설명인대 최소 10자이상 작성해주세요
3) Website : 실제 동작될 도메인을 작성해주시면 되는데
저는 로컬도메인을 사용하고자 하는데 "http://localhost:포트번호" 로는 접속이 안되는거 같습니다.
그래서 "http://127.0.0.1:포트번호" 로 작성하였습니다.
4) Callback URL : 타임라인 글쓰기와 같은 POST 기능을 사용할때 필요한거 같긴한대...
그냥 단순히 타임목록을 가져오고자 하므로 생략하도록 하겠습니다.
4. 약관동의
3번에 대한 작성이 완료된 후 스크롤을 하단으로 내리면
약관동의 하는 부분이 있는데 체크 해주신 다음
"Create your Twitter application" 버튼을 클릭합니다.
5. 기본앱 생성완료
위와같이 앱이 생성되었습니다.
이어서 access token 값을 생성해야 하므로
Keys and Access Tokens 탭을 클릭하여 액세스토큰을 만들도록 합니다.
6. Access Token 생성하기
이동하신 탭에서 하단에 Toekn Actions 영역을 보시면 "Create my access token" 버튼을 클릭합니다.
7. Access Token 생성완료
그럼 위처럼 Toekn Actions는 사라지고
Access Token / Access Token Secret 값이 생성된것을 확인 할 수 있겠습니다.
그럼 샘플코드를 적용하기 위하여 간단한 예를 들어보도록 하겠습니다.
JAVA프로젝트 생성후 다운로드 받은 JAR파일을 해당 프로젝트에 INCLUDE 한 후
Java Build Path -> Libraries -> Add Jars 로 JAR파일 INCLUDE해주었습니다.
※ 웹프로젝트는 lib 디렉토리 혹은 pom.xml에 dependency를 등록하셨다면 별도로 include 해주실 필요는 없습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public static void main(String ar[]) { try { AccessToken accesstoken = new AccessToken( "Access Token" , "Access Token Secret" ); Twitter twitter = TwitterFactory.getSingleton(); twitter.setOAuthConsumer( "Consumer Key (API Key)" , "Consumer Secret (API Secret)" ); twitter.setOAuthAccessToken(accesstoken); User user = twitter.verifyCredentials(); List<Status> list = twitter.getUserTimeline(); System.out.println( "타임라인 계정:" +user.getScreenName()); for (Status status : list) { System.out.println( "작성자:" +status.getUser().getScreenName()); System.out.println( "타임라인내용:" +status.getText()); } } catch (Exception e) { e.printStackTrace(); } } |
AccessToken 객체생성할때 필요 parameter와
setOAuthConsumer 필요 parameter들은
access token 생성한 "Keys and Access Tokens" 탭내에 모두 존재하므로
각각의 값들을 대입해주도록 합니다.
정상적으로 트위터 API 를 이용하여 타임라인의 목록이 출력되었습니다.
DEFAULT 20개의 타임라인 글밖에 나오지 않습니다.
더보기 및 한페이지에 글목록 수를 조절하고자 하신다면
twitter4j의 "Paging" 객체를 호출 후 기존 코드인 getUserTimeline() 메서드의
parameter로 넘겨주시면 되겠습니다.
페이징을 처리하고 싶으시다면
하단코드를 기존코드에 일부 적용해주시면 되겠습니다.
1 2 3 | //Paging(페이지번호,한페이지당출력글갯수) Paging page = new Paging ( 1 , 50 ); List<Status> list = twitter.getUserTimeline(page); |
by 개발로짜
JAVA 샘플 - org.w3c.dom을 이용한 XML파일 및 RSS API 파싱하여 데이터 읽어보기 (0) | 2014.11.25 |
---|---|
JAVA opencsv를 이용하여 csv 파일생성하기 (2) | 2014.10.24 |
자바 zxing를 이용하여 QR코드 생성 + 색상코드(hex,rgb,안드로이드그래픽색상) 적용법 (2) | 2014.10.16 |
자바 다운로드 유틸을 만들어서 웹서버에 등록되있는 파일을 다운로드 하자 (5) | 2014.10.07 |
자바 POI를 이용한 엑셀(xls,xlsx)에 들어있는 데이터들 읽어오기 (8) | 2014.10.07 |
이번시간에는 opencsv를 이용하여 CSV 파일을 생성해보도록 하겠습니다.
공공기관 사이트를 주로 작업을 하다보니 엑셀다운로드외에
팀버너스리의 데이터 개방 형식(?) 이라고
엑셀다운로드 상위파일인 csv 파일다운로드도 제공해야한다는
클라이언트 요구에 의해 만들어본걸 공유해보고자 포스팅하게되었습니다.
샘플코드이므로 단순히 다운로드 로직은 제외하고 csv 파일쓰는 로직만을 다루도록 하겠습니다.
엑셀파일 쓰기/읽기 및 파일다운로드는 다음 링크를 참조해주세요
2014/10/07 - [코드저장소/java] - 자바 다운로드 유틸을 만들어서 웹서버에 등록되있는 파일을 다운로드 하자
2014/10/07 - [코드저장소/java] - 자바 POI를 이용한 엑셀(xls,xlsx)에 들어있는 데이터들 읽어오기
2014/10/07 - [코드저장소/java] - POI라이브러리를 이용하여 엑셀파일(xls,xlsx) 에 데이터 넣어서 파일로 만들기
제일먼저 Open csv 라이브러리를 다운로드 받도록 하겠습니다.
http://sourceforge.net/projects/opencsv/
opencsv-3.0.jar 파일이 최종버전인거 같네요.
저는 JAVA PROJECT를 생성한후 JAR파일을 INCLUDE 해준다음 진행하였습니다.
아마 보통은 웹프로젝트로 작업을 많이 하시니
Dynamic Web Project 로 진행하시는 분들은 lib
디렉토리 내에 jar 파일을 넣어주시면 되겠고
Maven으로 프로젝트 진행하시는 분들은 pom.xml에
1 2 3 4 5 | < dependency > < groupId >net.sf.opencsv</ groupId > < artifactId >opencsv</ artifactId > < version >2.3</ version > </ dependency > |
dependency를 추가해주시면 되실거 같습니다.
Maven에 올라온 최종버전은 2.3이네요;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | package opencsv; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import au.com.bytecode.opencsv.CSVWriter; public class Test { public static void main(String ar[]) { //========가상의 DB조회리스트======== Map<String, Object> hmap = null ; ArrayList<Map<String, Object>> list = new ArrayList<Map<String,Object>>(); hmap = new HashMap<String, Object>(); hmap.put( "one" , 1 ); hmap.put( "two" , "한글1" ); list.add(hmap); hmap = new HashMap<String, Object>(); hmap.put( "one" , 11 ); hmap.put( "two" , "한글22" ); list.add(hmap); hmap = new HashMap<String, Object>(); hmap.put( "one" , 111 ); hmap.put( "two" , "한글3" ); list.add(hmap); //========가상의 DB조회리스트======== try { /** * csv 파일을 쓰기위한 설정 * 설명 * D:\\test.csv : csv 파일저장할 위치+파일명 * EUC-KR : 한글깨짐설정을 방지하기위한 인코딩설정(UTF-8로 지정해줄경우 한글깨짐) * ',' : 배열을 나눌 문자열 * '"' : 값을 감싸주기위한 문자 **/ CSVWriter cw = new CSVWriter( new OutputStreamWriter( new FileOutputStream( "D:\\test.csv" ), "EUC-KR" ), ',' , '"' ); try { for (Map<String, Object> m : list) { //배열을 이용하여 row를 CSVWriter 객체에 write cw.writeNext( new String[] { String.valueOf(m.get( "one" )),String.valueOf(m.get( "two" ))}); } } catch (Exception e) { e.printStackTrace(); } finally { //무조건 CSVWriter 객체 close cw.close(); } } catch (Exception e) { e.printStackTrace(); } } } |
샘플 코드를 구현 후 실행해보았습니다.
실행결과 D드라이브의 test.csv란 파일이 생성되었습니다.
엑셀과 메모장으로 확인해보도록 하겠습니다.
메모장 실행
엑셀 실행
실행결과 정상적으로 CSV 파일이 생성되었습니다.
위 코드를 응용하셔서 사용하시면 되겠습니다.
by 개발로짜
JAVA 샘플 - org.w3c.dom을 이용한 XML파일 및 RSS API 파싱하여 데이터 읽어보기 (0) | 2014.11.25 |
---|---|
[JAVA 샘플] 트위터 앱생성 + twitter4j를 이용하여 타임라인(Timeline) 목록 출력하기 (3) | 2014.11.20 |
자바 zxing를 이용하여 QR코드 생성 + 색상코드(hex,rgb,안드로이드그래픽색상) 적용법 (2) | 2014.10.16 |
자바 다운로드 유틸을 만들어서 웹서버에 등록되있는 파일을 다운로드 하자 (5) | 2014.10.07 |
자바 POI를 이용한 엑셀(xls,xlsx)에 들어있는 데이터들 읽어오기 (8) | 2014.10.07 |
내 블로그 - 관리자 홈 전환 |
Q
Q
|
---|---|
새 글 쓰기 |
W
W
|
글 수정 (권한 있는 경우) |
E
E
|
---|---|
댓글 영역으로 이동 |
C
C
|
이 페이지의 URL 복사 |
S
S
|
---|---|
맨 위로 이동 |
T
T
|
티스토리 홈 이동 |
H
H
|
단축키 안내 |
Shift + /
⇧ + /
|
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.