퀵바


강호정담

우리 모두 웃어봐요! 우리들의 이야기로.



작성자
Personacon 엔띠
작성
14.01.01 09:49
조회
2,865

우왕 짜증나........
한 20분 걸려서 다 작성했더니 금칙어 있다고 증발........
예전 문피아는 붙여넣기하면 되는 거였는데..........

--

지금부터 언급할 기술적 내용은, 사실 저도 100% 이해하고 있는 부분이 아니기에 뭔가 어설픈 해설을 동반할 것이며 현재 문피아 사이트는 아래 예시로 들 사이트와는 전혀 다른 언어로 만들어졌다고 예상되기에, 아래 기술은 전혀 적용하지 못할 가능성이 높습니다. 허나 기본적으로 모바일페이지와 앱을 고려했다면, 아래 기술을 적용할 수 있다는 조건 하에 그것의 제작은 그리 어렵지 않다는 것을 보여드리기 위함입니다.

그럼 일단은 해설 이전에 본문 전체를 보여드리겠습니다.
(layout.xml도 있지만 별로 중요하지 않기에 보여드리지 않겠습니다.)


(유알엘-이 금칙어라고 해서, 원래 영어로 써진 모든 부분을 ‘유알엘’로 치환하였습니다.)



public class MainActivity extends Activity {
 
 TextView hello;
 TextView txtText, txtDate, txtTemp;
 LinearLayout layout1;
 ImageView Imgicon;
 String strText, strDate, strTemp, strImg;
 
 Map<String,String> map=new HashMap<String,String>();

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  
  hello=(TextView)findViewById(R.id.hello);
  txtDate=(TextView)findViewById(R.id.txtDate);
  txtTemp=(TextView)findViewById(R.id.txtTemp);
  txtText=(TextView)findViewById(R.id.txtText);
  layout1=(LinearLayout)findViewById(R.id.layout1);
  Imgicon=(ImageView)findViewById(R.id.imgview);
  
  
  try {
   String str유알엘="http://weather.yahooapis.com/forecastrss?w=1132599&u=c";
   Log.i("test", "----------------------------------1");
   유알엘 유알엘=new 유알엘(str유알엘);
   Log.i("test", "----------------------------------2");
   InputStream is=유알엘.openStream();
   
   XmlPullParserFactory f=XmlPullParserFactory.newInstance();
   XmlPullParser parser=f.newPullParser();
   parser.setInput(is, "euc-kr");
   
   int event=parser.getEventType();
   myparsing(event, parser);
   hello.setText(map.get("text"));
   hello.setTextSize(15);
   if(is!=null){
    is.close();
   }
   
   txtDate.append(map.get("date"));
   txtText.append(map.get("text"));
   txtTemp.append(map.get("temp"));
   strImg=map.get("code");
   
   //String imgsrc="http://l.yimg.com/a/i/us/we/52/"+strImg+".gif";
   
   //getImage(imgsrc);
   
  } catch (Exception e) {
   e.printStackTrace();
  }
 }//oncreate
 //이미지 스트림을 연갈하여 얻어와서 이미지뷰에 보여주고 이미지뷰를 동적으로 layout1에 추가하는 메소드
/* public void getImage(String imgsrc) throws Exception{
  유알엘 유알엘=new 유알엘(imgsrc);
  
  InputStream is=유알엘.openStream();
  BufferedInputStream bis=new BufferedInputStream(is);
  //유알엘에 있는 이미지를 얻어서 바이트 배열에 내보낸다
  //데이터 목적지 : 바이트 배열 == ByteArrayOutputStream 이용
  ByteArrayOutputStream baos=new ByteArrayOutputStream();
  BufferedOutputStream bos=new BufferedOutputStream(baos);
  
  byte ba[]=new byte[1024];
  int n=0;
  while((n=bis.read(ba))!=-1){
   bos.write(ba, 0, n);
   bos.flush();
  }//while
  final byte[] imgData=baos.toByteArray();
  
  if(bos!=null){
   bos.close();
  }
  if(bis!=null){
   bis.close();
  }
  if(baos!=null){
   baos.close();
  }
  if(is!=null){
   is.close();
  }
  
  Bitmap bitmap=BitmapFactory.decodeByteArray(imgData, 0, imgData.length);//바이트배열 , 시작값, 길이
  
  Drawable image=new BitmapDrawable(bitmap);
  //이미지뷰를 생성해서 Drawable 객체와 연결한다
  this.Imgicon=new ImageView(this);
  Imgicon.setLayoutParams(new LinearLayout.LayoutParams(80, 80));
  Imgicon.setScaleType(ImageView.ScaleType.CENTER);
  Imgicon.setImageDrawable(image);
  layout1.addView(Imgicon);
  
 }//getimage
*/ 
 
 //사용자 정의 메소드 - xml을 파싱한다
 public void myparsing(int event, XmlPullParser parser) throws IOException, XmlPullParserException{
  while(event!=parser.END_DOCUMENT){
   switch(event){
   case XmlPullParser.START_TAG:{
    //시작 엘리먼트를 열거
    String ename=parser.getName();
    //Log.i("test", "ename : "+ename);
    if(ename.equals("yweather:condition")){
     //text라는 속성값 얻기
     String text=parser.getAttributeValue(null, "text");
     //Log.i("test", "text : "+text);
     String temp=parser.getAttributeValue(null, "temp");
     //Log.i("test", "temp : "+temp);
     String date=parser.getAttributeValue(null, "date");
     //Log.i("test", "date : "+date);
     String code=parser.getAttributeValue(null, "code");
     //Log.i("test", "imgSrc=http://l.yimg.com/a/i/us/we/52/"+code+".gif");
     map.put("text", text);
     map.put("temp", temp);
     map.put("date", date);
     map.put("code", code);
    }//if
   } break;
   }//switch
   
   event=parser.next();//이걸 안 하면 무한루프
  }//while
 }//myparsing
}


--------
대략적으로 이것이 무엇을 하는 내용이냐면, xml파서를 이용하여 http://weather.yahooapis.com/forecastrss?w=1132599&u=c 사이트에서 오늘의 기온을 가져오는 코드입니다.

일단은 브라우저로 http://weather.yahooapis.com/forecastrss?w=1132599&u=c에 들어가보시기 바랍니다.
이미 망해버린 야후이지만, 오늘의 날씨가 뜰 겁니다. 현재 기온에 대해서는 영어로 대충의 날씨, 기온, 그리고 위에는 그림이 있습니다. 그 아래로는 향후 5일간의 날씨가 텍스트로 보입니다.
그럼 다시, 이번에는 크롬으로 http://weather.yahooapis.com/forecastrss?w=1132599&u=c에 들어가보시기 바랍니다.
네. 자동으로 소스보기처럼 보입니다. 이 사이트의 내부구조가 훤히 보입니다. 이렇게 사이트를 만들면 보안문제라던가 발생할 것 같지만... 대신 직관적인 구조로 접근성은 대단히 높습니다. 그럼 지금부터 위 소스의 일부를 따와서 해설을 하도록 하겠습니다.


String str유알엘="http://weather.yahooapis.com/forecastrss?w=1132599&u=c";
유알엘 유알엘=new 유알엘(str유알엘);

> 해당 사이트에 접속을 합니다.

if(ename.equals("yweather:condition")){
 String text=parser.getAttributeValue(null, "text");
 String temp=parser.getAttributeValue(null, "temp");
 String date=parser.getAttributeValue(null, "date");
 String code=parser.getAttributeValue(null, "code");
 map.put("text", text);
 map.put("temp", temp);
 map.put("date", date);
 map.put("code", code);
}//if

> yweather:condition가 있는 부분에 접속하여(크롬페이지에서 yweather:conditionㄹ글 검색해보시기 바랍니다) 그 안에서 속성이 text, temp, date, code인 내용을 가져와 개인이 만든 레이아웃에 붙입니다.


내용이 더더욱 복잡하여 저도 전혀 모르는 내용이라 언급은 하지 않겠지만, 위 코드에는 이미지를 따오는 소스도 이미 포함되어 있습니다. 현재 문피아의 코드가 접근성을 고려하지 않은 것인지 보안에 너무 치중한 것인지 무슨 이유인지는 모르지만....... 기본적으로 위 사이트와 같은 구조로 되어 있다는 조건이 붙으면, 본문이 들어가 있는 태그값을 찾아 추적하고 본문이 포함된 속성만 따와서 map에 put하면 끝납니다.
'단순하게' 글보기 기능만을 포함하는 앱이나 모바일 페이지를 만든다고 하면... 위와 같은 언어로 기술되어 있다는 조건 하에 저도 이틀 내로 만들 겁니다. 현재 문피아 사이트 자체가 모바일 페이지와 앱으로의 접근성을 그다지 고려하지 않은 것과 같은 코드로 된 것 같아서 정확한 언급은 힘들지만... 아무튼 기본 사이트의 구조만 쉽다면 모바일 페이지나 앱은 그다지 어렵지 않은 기술로 만들 수 있습니다.


Comment ' 11

  • 작성자
    Personacon 적안왕
    작성일
    14.01.01 09:56
    No. 1

    그런데 왜 아직 안나오느냐...
    그건 세계 x대 미스테리로 꼽혀야한다봐요.

    찬성: 0 | 반대: 0

  • 작성자
    Lv.45 앵속각
    작성일
    14.01.01 10:09
    No. 2

    안나오는이유(추측)
    1.모바일페이지나 앱이 수익에 도움이 안된다는 생각.
    2.만드는데 뭐 이리 비싸. 김군(직원)아 니 컴 좀알제? 니가 만들어라. 업무종료후에 틈틈히 해라. 김군생각=잔업수당도 안주면서 뭘 만들어. 집에 보내줘....


    찬성: 0 | 반대: 0

  • 답글
    작성자
    Personacon 엔띠
    작성일
    14.01.01 10:12
    No. 3

    제 생각은 리뉴얼하면서, 앱이나 모바일페이지의 접근을 크게 생각 안 했다고 밖에.......
    정말 그런거라면 진짜 고수가 와도 안 되는건 안 되는거거든요.
    어쩌면 모바일페이지와 앱의 접근성을 위해 문피아 사이트를 다시 짜고 있을 지도 모릅니다.

    찬성: 0 | 반대: 0

  • 답글
    작성자
    Lv.45 앵속각
    작성일
    14.01.01 10:19
    No. 4

    그럴수도 있겠군요. 하지만 다시 짠데도 이렇게 오래 걸리지는 않겠지요. 외부용역을 줬다면 이건 계약위반이죠. 외부용역이라면 목숨걸고 시간내로 만들어 올겁니다. 일단 납품해놓고 문제를 고치던가하겠지요.

    찬성: 0 | 반대: 0

  • 작성자
    Lv.83 로봇타자기
    작성일
    14.01.01 10:24
    No. 5

    문피아 운영진은 작가 혹은 독자일 수는 있으나 운영자나 경영자는 아닌 듯하네요. 하긴 운영진이 이러니 프리미엄 작가들이 한 달 동안 무통보 잠수를 타도 통제를 못하죠.. 본인들이 그러니..

    찬성: 0 | 반대: 0

  • 작성자
    Lv.45 앵속각
    작성일
    14.01.01 10:56
    No. 6

    지금 상황이면 담당직원은 경위, 시말서는 필수이고 견책이상의 징계감이지요.

    찬성: 0 | 반대: 0

  • 작성자
    Lv.25 시우(始友)
    작성일
    14.01.01 11:32
    No. 7

    이참에 엔띠님이 보기좋게 문피아 앱을 만들어보시는건 어떤지요? 그래서 나도 만드는데 문피아가 못만들다니 이런 허접한 싸이트 다들 버리시고 저한테로 오십시요!! 이러는겁니다.ㅋㅋ 우왕, 멋있지 않나요?

    찬성: 0 | 반대: 0

  • 답글
    작성자
    Personacon 엔띠
    작성일
    14.01.01 11:34
    No. 8

    위에 적혀있지만...
    저렇게 간단한 구조가 아니라면 불가......
    현재 문피아 구조는 대단히 복잡해보입니다............

    찬성: 0 | 반대: 0

  • 작성자
    Lv.41 별작
    작성일
    14.01.01 15:10
    No. 9

    그런데 얘네는 왜 못 만드는 걸까요? 컴맹만 모였나?

    찬성: 0 | 반대: 0

  • 작성자
    Lv.18 글도둑
    작성일
    14.01.01 16:20
    No. 10

    아 역시 자바는 쓸데없이 복잡한 구조... 일단 각설하고..

    xml 파싱을 한다고 보안적인 누수가 생기는것은 아닙니다.
    보안 누수가 생길정도로 잘못 만들면야 당연히 문제가 생기구요.
    [밀리안아서가 대표적인 예]

    그렇다면 파싱을 만드는건 쉬운가?
    만드는것 자체는 어렵지 않습니다.
    n 스크린 처럼 어디든 데이터를 호환하게~ 만드는것도 아니고 모바일용으로만 파싱을 따로 만드는게 요즘 추세니깐요.

    단지 문피아 에서 파싱구조를 만들려면 정리 할것이 많아 보입니다.

    찬성: 0 | 반대: 0

  • 작성자
    Lv.76 석박사
    작성일
    14.01.01 18:25
    No. 11

    이건 웹 프로그래미잉라는 것을 전혀 고려하지 않아서 틀렸습니다. 설명을 원하시면 해드리겠지만, 일단은 웹페이지가 구조적으로 어떻게 돌아가는지에 대해 전혀 고려하지 않으셔서 틀리셨다고만 말씀 드리겠습니다.

    찬성: 0 | 반대: 0


댓글쓰기
0 / 3000
회원가입

강호정담 게시판
번호 제목 글쓴이 날짜 조회
211620 앱 없어도 되니까 모바일 페이지라도 만들면 안될까요. +6 Lv.28 망고망구 13.12.28 1,573
211619 철도 요금 상한제 폐지하네요. +7 Lv.19 명인k 13.12.28 2,065
211618 무협 배경에 무슨 나라가 있나요? +10 Lv.11 파테 13.12.28 1,639
211617 사람은 운동을 해야 합니다. -ㅅ- +3 Lv.18 꿈의도서관 13.12.28 1,511
211616 갑자기 실검 6위에 문피아가 떳네요...;; +13 Lv.20 진곰이 13.12.28 2,025
211615 왜 문피아가 네이버 실검에 ... +5 Lv.98 whoareyo.. 13.12.28 1,922
211614 문피아 접속 잘되시나요? +14 Lv.7 서풍랑 13.12.28 2,108
211613 그냥 궁병과 기사이야기가 나오는 잡담. +18 Lv.18 터베 13.12.28 2,488
211612 N사 웹툰의 은근히 괜찮은 작품을 추천합니다. +7 Lv.10 요하네 13.12.28 1,643
211611 스마트폰 이런것도 마음에 드는군요. Personacon 페르딕스 13.12.28 1,324
211610 의외의 인물이 주인공이었던 작품 있으셨나요 +12 Lv.1 [탈퇴계정] 13.12.27 1,334
211609 어째서 일부 학자들은 늦게 자고 늦게 일어나는가 +7 Lv.96 강림주의 13.12.27 1,454
211608 코레일 대체인력 뽑는거 뭐랄까... +4 Lv.97 윤필담 13.12.27 1,416
211607 할만한 온라인게임은 정녕 없는가. +37 Lv.13 Vermagic 13.12.27 2,985
211606 마땅한 레시피가 없으니 직접 개발할 수밖에. +7 Personacon 엔띠 13.12.27 1,250
211605 궁수랑 기사를 비교하시면..;;; +11 Lv.39 청청루 13.12.27 1,084
211604 그런데 왜 궁수에 대한걸 풀템 기사랑 비교하는거죠.. +22 Lv.50 궤도폭격 13.12.27 1,836
211603 정말 미스테리한 일 +2 Lv.31 호호홍 13.12.27 1,237
211602 온라인 fps게임 추천좀요. +6 Lv.99 flybird 13.12.27 1,131
211601 서점에 생각보다 무협이 별로 없군요. +5 Lv.13 Vermagic 13.12.27 1,280
211600 무료체험.. 혹시? +4 Lv.31 눈솔 13.12.27 1,590
211599 폰이 오래되서 울리질 않네요. +4 Lv.97 윤필담 13.12.27 962
211598 2013년도 얼마 안남았는데...?뷰어 물건너 간거죠? +14 Lv.49 무명마검 13.12.27 1,469
211597 '브렛 필 직격탄' 최희섭-김주형 생존할까 +1 Personacon 윈드윙 13.12.27 1,218
211596 크고...아름답습니다. +12 Lv.18 터베 13.12.27 1,882
211595 상담원이_뿔났다.txt +4 Personacon 엔띠 13.12.27 1,475
211594 궁수의 곡사가 비효율적이라니..--; +20 Lv.89 네크로드 13.12.27 2,114
211593 3페이지에 궁병 이야기가 나와서 각궁 및 애기살 잡담. +4 Lv.18 터베 13.12.27 1,974
211592 기분 나쁘다... +3 Personacon 엔띠 13.12.27 1,127
211591 레포데2 놓칠뻔했네요. +2 Lv.54 야채별 13.12.27 1,326

신고 사유를 선택하세요.
장난 또는 허위 신고시 불이익을 받을 수 있으며,
작품 신고의 경우 저작권자에게 익명으로 신고 내용이
전달될 수 있습니다.

신고
@genre @title
> @subject @time