iOS 앱에서 웹페이지 링크와 제목 긁어오는 방법에 대해 질문드립니다.


블로터, 비석세스와 같은 온라인 뉴스 사이트에서 기사의 제목과 그 링크를 긁어와서 사용자에게 보여주는 앱을 만들고자 합니다.

그런데, 인터넷에서 아무리 찾아보아도 웹사이트의 내용을 정기적으로(기사가 업데이트 될때마다) 긁어와서 iOS앱에서 볼 수 있게 해주는 방법은 나오지 않더군요.

이런 경우에 사용할 수 있는 방법이나 함수, 라이브러리 등이 있으면 알려주세요. 감사합니다.

  • 2016년 04월 06일에 작성됨

조회수 260


2 답변


(1) 정기적으로는 아니지만 앱을 켤 때 마다 기사를 긁어서 보여주는 방법

아래 코드와 같이 원하는 url에서 html을 가져와서 새로운 기사가 있는지 확인하면 되겠네요.

if let url = NSURL(string: "https://www.bloter.net") {
    do {
        let contents = try NSString(contentsOfURL: url, usedEncoding: nil)
        print(contents)//contents를 분석해서 새로운 기사의 링크를 뽑아낸다.
    } catch {
        // contents could not be loaded
    }
} else {
    // the URL was bad!
}

출처

읽어온 HTML파일을 파싱해서 쓰면 됩니다. 블로터의 메인페이지 html을 보니까 아래와 같이 article이라는 태그로 기사를 묶어 놨으니 파싱하기는 어렵지 않을겁니다.

<article class="latestPost most-popular excerpt " itemscope="" itemtype="http://schema.org/BlogPosting"></article>

하지만 기사를 긁어오는 사이트에서 어느날 갑자기 기사의 html구조를 바꿀수도 있지요. 기사를 읽어오는 로직이 모두 앱에 들어있다면 어느날 갑자기 그 앱이 동작하지 않게 되는 문제가 생깁니다. 특히 상용 iOS앱이라면 검수를 거쳐야 사용자에게 배포할 수 있기 때문에 최소 몇일은 그 앱을 사용자가 못쓰게 되는 문제가 있습니다. 그래서 별도 서버가 필요한데요.


(2) 별도 서버를 구성하는 방법

별도 서버를 구성하고 거기서 정기적으로 새로운 기사가 있는지 확인해서 미리 데이터를 준비해 놓는 방법입니다. 항상 정해진 형식으로 앱에 데이터를 전달할 수 있는 장점이 있습니다. 그리고 읽어오려는 사이트의 html구성이 달라지더라도 즉시 서버에 반영해서 변경이 가능하져.

단점은 서버를 별도로 구성하는 노력이 필요하다는 겁니다. 서버를 어떻게 만들지는 선호하는 언어/프레임워크가 뭔지에 따라 옵션이 너무 다양합니다. 이 부분이 궁금하시면 별도 질문으로 올려주시는게 좋겠네요.

  • 2016년 04월 06일에 작성됨


html을 그대로 가져오는 방법은 최후의 선택이 되어야 합니다.

블로그나 어느정도 깨인? 사이트는 rss feed를 제공합니다. 고정적인 링크이며 xml 형식으로 되어 있어 한번 열어보면 이해 갈 만한 구조로 되어 있을 것이고, 이 형식을 거의 계속 사용할 수 있습니다

비석세스 같은 경우도 http://kr.besuccess.com/feed/ 이런 링크를 제공하네요. 윗분의 코드를 이용하여 이 url에 접근해서 xml을 분석하면 원하는 결과를 얻으실 수 있을 것 같네요.

  • 2016년 04월 06일에 작성됨

  • rss feed를 구체적으로 어떤 식으로 위의 분이 말씀하신 것처럼 긁어올 수 있을지 여쭤봐도 될까요?? xml이나 rss에 관해서는 한번도 코드를 짜본적이 없어서ㅠㅠ     이덕행   2016.4.6 15:52     
  • rss 가져오기나 xml 분석에 대한 샘플은 검색해봐도 제법 많이 보일거에요. 코드는 제가 가진 것이 없으니 방향 제시 정도가 한계네요.    박종진   2016.4.6 16:38     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close