퀵바


강호정담

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



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

우왕 짜증나........
한 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
회원가입

강호정담 게시판
번호 제목 글쓴이 날짜 조회
211770 문피아는 말을 참 이쁘게함... +2 Lv.91 슬로피 14.01.01 1,674
211769 [갑오년]근하신년, 행복하세요. +3 믌고기 14.01.01 1,246
211768 혹시 박건작가 아는분 없나요. +6 Lv.32 포필 14.01.01 1,526
211767 남자들에게 지리는 첫 경험. +9 Lv.25 시우(始友) 14.01.01 1,936
211766 해 봤던 아르바이트중에 제일 재밌었던게 뭐에요? +31 Lv.35 성류(晟瀏) 14.01.01 1,913
211765 느낌이 안 사네요......... +5 Personacon 엔띠 14.01.01 1,693
211764 이영도 작가 신작 정보가 알라딘에 올라왔군요. +5 Lv.8 showdown 14.01.01 2,055
211763 환불 받아보신분 있나요? +5 Lv.50 대왕고래 14.01.01 1,769
211762 음.....운영자님께.(불량사용자) +3 Lv.22 pascal 14.01.01 1,975
211761 이제 그만 볼 것 같네요... +12 Personacon 아나키즘 14.01.01 1,854
211760 너와 그녀와 그녀의 사랑(미리니름 왕창) +4 Personacon 적안왕 14.01.01 2,307
211759 역시 내부 개발이었을까요. +18 Lv.11 멈춰선다 14.01.01 2,268
211758 서울역에서 분신자살...댓글들 +8 Lv.1 [탈퇴계정] 14.01.01 2,291
211757 영화 호빗을 보고.... +4 Lv.60 레마 14.01.01 1,580
211756 세상에는 다양한 게임이 많다는 것을 +8 Personacon 적안왕 14.01.01 1,918
211755 문피아도 좋아지겠죠? +8 Personacon 블랙라벨 14.01.01 2,405
211754 제비뽑기 갑 +4 Lv.64 하렌티 14.01.01 1,832
211753 영문법 쇼크의 저자 정형정씨 통찰력이 대단하네요. +14 Lv.99 곽일산 14.01.01 10,999
211752 와 기자가 꿀직업이네요 +1 Lv.54 영비람 14.01.01 2,144
» 모바일페이지, 앱 제작의 기술적 문제에 대해........ +11 Personacon 엔띠 14.01.01 2,864
211750 앱출시 지연 공지를 자세히 읽어보니 +8 Lv.1 [탈퇴계정] 14.01.01 2,648
211749 아버지께서 올해 환갑이신데... +6 Lv.25 시우(始友) 14.01.01 2,136
211748 산 타고 이제 내려가는 중 입니다. +1 Personacon 밤의꿈 14.01.01 2,118
211747 여러분 헤피뉴이어에용ㄱ +2 Personacon 유령[幽靈] 14.01.01 1,783
211746 미래에는 굳이 도넛을 빙글빙글 돌리지 않아도 인공중력... +14 Lv.96 강림주의 14.01.01 3,922
211745 새해 복 많이 받으세요 +3 Personacon []샤우드[] 14.01.01 2,040
211744 대륙은 이제야 1월 1일! 사방에 폭죽 난리가 아닙니다. +6 Lv.40 지하™ 14.01.01 1,950
211743 혹시 이런 경험 있으세요? +8 Lv.1 [탈퇴계정] 14.01.01 1,924
211742 래벨 업,, +1 Lv.90 나그네임 14.01.01 1,762
211741 새해 복 많이 받으세요 +1 Personacon 자공 14.01.01 1,700

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

신고
@genre @title
> @subject @time