컴퓨터잡동사니

새로 오픈한 음식점, 미용실 등과 같은 업체의 정보를 가장 빠르게 받고 싶다는 요구사항을 받아서 개발을 시작.

 

 

네이버에서는 '새로 오픈했어요' 라는 코너를 네이버 검색 시에 제공하고 있다.

 

 

 

'신현리 맛집' 검색결과

__________________________________________________________________________________________________________________

 

__________________________________________________________________________________________________________________

 

 

 

 

이는 검색어 규칙을 '지역명 + 업종' 으로 검색하면 네이버에서 표시해주는 코너로 새로 사업자등록을 한지 90일이 지나지 않은 사업자만 표시해주는 곳이다.

 

 

 

 

 

__________________________________________________________________________________________________________________

 

 

https://help.naver.com/support/contents/contents.nhn?serviceNo=607&categoryNo=16664

(네이버 스마트플레이스 고객센터)

__________________________________________________________________________________________________________________

 

 

 

 

 

이를 이용하면 편하게 새로 생긴 업체를 찾을 수 있을 것 같다.

 

 

 

본격적으로 API를 찾기 시작!

 

 

처음에는 데스크탑용 페이지를 찾아가면서 API 를 찾아보려 했지만, 역시 데스크톱페이지는 API 를 쓰고있지 않았다.

 

HTML 파싱을 해야하나.. 그럼 속도가 느릴텐데 라고 생각했다가 모바일에서는 뭔가 다르지 않을까 싶어서 한번 해봤는데 대박! 찾았다.

 

 

크롬의 개발자도구에서 모바일 모드를 통해서 진입한 후 목록에서 '더보기' 를 눌러보면!!

__________________________________________________________________________________________________________________

 

 

 

 

빙고! json 수신 완료

 

------------------             요청 URL         ------------------------------------------

https://m.store.naver.com/sogum/api/businesses?filterId=s11556055&filterOpening=true&query=%EC%8B%A0%ED%98%84%EB%A6%AC%20%EB%A7%9B%EC%A7%91&start=1&display=1000

 

------------------             응답 JSON   (너무 길어서 중간 생략함)      ---------------------

 

{

   "query": {

      "select": "1",

      "item": [

         {

            "rank": "1",

            "region_keyword": "홍대",

            "region_type": "favor",

            "region_info": {

               "name": "홍익대학교",

               "fkey": "2880",

               "x": "1269255395",

               "y": "375512063",

               "spot_id": "11556055",

               "bmap": "0",

               "coordinates": {

                  "coordinate": [

                     {

                        "x": "126.9157455",

                        "y": "37.5484201"

                     },

                     {

                        "x": "126.9276845",

                        "y": "37.5475051"

                     },

                     {

                        "x": "126.9309495",

                        "y": "37.5558133"

                     },

                     {

                        "x": "126.9239635",

                        "y": "37.5602861"

                     },

                     {

                        "x": "126.9140217",

                        "y": "37.5545948"

                     },

                     {

                        "x": "126.9140217",

                        "y": "37.5545948"

                     }

                  ]

               }

            },

            "biz_type": "category",

            "biz": "맛집",

            "coordinate_mode": "0"

         },

         {

            "rank": "2",

            "region_keyword": "",

            "region_type": "none",

            "region_info": "",

            "biz_type": "unknown",

            "biz": "홍대 맛집",

            "coordinate_mode": "0"

         }

      ],

      "type": "local",

      "petrol": "0",

      "global_menu": "0"

   },

   "total": 130,

   "items": [

      {

         "id": "1502423166",

         "name": "서교 스테이크",

         "businessCategory": "restaurant",

         "dbType": "drt",

         "category": "스테이크,립",

         "desc": "",

         "hasBooking": false,

         "x": "126.9212626",

         "y": "37.5499536",

         "distance": "5369.93",

         "imageSrc": "http://ldb.phinf.naver.net/20180322_179/1521695761033kKIJh_JPEG/fQynU9LFJN48GcSgnS_0T7Rt.JPG.jpg",

         "imageCount": 9,

         "virtualPhone": "0507-1324-7222",

         "phone": "02-3144-7222",

         "routeUrl": "http://m.map.naver.com/viewer/route.nhn?ename=%EC%84%9C%EA%B5%90%20%EC%8A%A4%ED%85%8C%EC%9D%B4%ED%81%AC&ex=126.9212626&ey=37.5499536&edid=1502423166",

         "streetViewUrl": "http://m.map.naver.com/viewer/panorama.nhn?street=on&pinType=site&pinId=1502423166",

         "street_panorama": "tSqDUipWSxYt00UA8GSHDg==,83.61,0.00,126.9211295,37.5499386,120",

         "roadAddr": "서울 마포구 어울마당로 56",

         "commonAddr": "서울 마포구",

         "addr": "서교동 408-8",

         "blogCafeReviewCount": "2",

         "bookingReviewCount": "0",

         "moreUGCReviewsPath": "/restaurants/fsasReviews?id=1502423166&name=%EC%84%9C%EA%B5%90%20%EC%8A%A4%ED%85%8C%EC%9D%B4%ED%81%AC&category=restaurant",

         "moreFsasReviewsPath": "/restaurants/fsasReviews?id=1502423166&name=%EC%84%9C%EA%B5%90%20%EC%8A%A4%ED%85%8C%EC%9D%B4%ED%81%AC&category=restaurant",

         "priceCategory": "2만원 대"

      },

      {

         "id": "1015799929",

         "name": "신봉자 푸드스테이션",

         "businessCategory": "restaurant",

         "dbType": "drt",

         "category": "종합분식",

         "desc": "",

         "hasBooking": false,

         "x": "126.9214822",

         "y": "37.5530217",

         "distance": "5243.18",

         "imageSrc": "http://ldb.phinf.naver.net/20180112_5/1515763454068cFyK9_JPEG/Lwn1D0hx7I6BHYRJENrvwsAN.jpg",

         "imageCount": 2,

         "phone": "02-451-8615",

         "routeUrl": "http://m.map.naver.com/viewer/route.nhn?ename=%EC%8B%A0%EB%B4%89%EC%9E%90%20%ED%91%B8%EB%93%9C%EC%8A%A4%ED%85%8C%EC%9D%B4%EC%85%98&ex=126.9214822&ey=37.5530217&edid=1015799929",

         "streetViewUrl": "http://m.map.naver.com/viewer/panorama.nhn?street=on&pinType=site&pinId=1015799929",

         "street_panorama": "9WeVDpcjgJ66WbETrwScqQ==,34.39,0.00,126.9214391,37.5529587,120",

         "roadAddr": "서울 마포구 양화로16길 33 나동",

         "commonAddr": "서울 마포구",

         "addr": "서교동 357-3",

         "blogCafeReviewCount": "9",

         "bookingReviewCount": "0",

         "moreUGCReviewsPath": "/restaurants/fsasReviews?id=1015799929&name=%EC%8B%A0%EB%B4%89%EC%9E%90%20%ED%91%B8%EB%93%9C%EC%8A%A4%ED%85%8C%EC%9D%B4%EC%85%98&category=restaurant",

         "moreFsasReviewsPath": "/restaurants/fsasReviews?id=1015799929&name=%EC%8B%A0%EB%B4%89%EC%9E%90%20%ED%91%B8%EB%93%9C%EC%8A%A4%ED%85%8C%EC%9D%B4%EC%85%98&category=restaurant"

      }

   ],

   "nlu": {

      "queryType": "restaurant",

      "queryResult": {

         "type": "맛집",

         "spot": "홍익대학교:2880:1269157455^375484201^1269276845^375475051^1269309495^375558133^1269239635^375602861^1269140217^375545948^1269140217^375545948:0:09440115:1269255395^375512063:09440115:11556055",

         "q": "홍대 맛집",

         "keyword": "홍대 맛집",

         "showLocationBarFlag": false,

         "spotQuery": "홍대",

         "ptn0": "맛집",

         "queryType": "restaurant",

         "priority": "high",

         "repSpot": "홍익대학교",

         "spotId": "11556055",

         "selectedSpotIndex": 0,

         "selectedSpot": {

            "name": "홍익대학교",

            "index": 0

         },

         "otherSpots": [],

         "location": {

            "x": "126.9783880",

            "y": "37.5666100",

            "default": false,

            "longitude": "126.9783880",

            "latitude": "37.5666100"

         },

         "dbKeyword": {

            "isDefault": true,

            "name": "홍대맛집",

            "type": "restaurant",

            "getType": "search",

            "viewType": "1col",

            "useFilter": true,

            "hasComponents": false

         },

         "dbQuery": {

            "isDefault": true,

            "name": "홍대맛집",

            "type": "restaurant",

            "getType": "search",

            "viewType": "1col",

            "useFilter": true,

            "hasComponents": false

         }

      },

      "user": {},

      "deviceInfo": {

         "os": "pc",

         "ie": "0",

         "version": 0

      }

   }

}

 

__________________________________________________________________________________________________________________

 

 

숨겨진 URL의 규칙은 간단했다

 

- host URL

https://m.store.naver.com/sogum/api/businesses

 

- request field

filterOpening : true

query : %EC%8B%A0%ED%98%84%EB%A6%AC%20%EB%A7%9B%EC%A7%91

start : 1

display : 1000

 

- request field 설명

filterOpening : 이게 true 로 설정되어야 '새로 오픈했어요' 카테고리가 적용된다!

query : 지역명 + 업종이다. 위 예제에서는 '신현리 맛집' 이다.

https://meyerweb.com/eric/tools/dencoder/

위 사이트를 통해서 원하는 검색어를 입력 후 'encode' 버튼을 누르면 인코딩 된 값이 나온다.

 

start : 표시할 리스트의 첫시작 인덱스이다. 간단하게 말해서 전체 업체가 20개가 있는데 이 start가 5라고 하면 5번째업체부터 리스트를 보여준다. 즉 앞에 1부터 4까지의 4개 업체가 생략된다.

display : 표시할 전체 갯수이다. 네이버 api 에서는 이 값의 리미트가 1000으로 셋팅되어있어서 최대 1000개로 적으면 된다.

 

 

이걸 postman 을 통해서 조회해보자

 

 

__________________________________________________________________________________________________________________

 

 

__________________________________________________________________________________________________________________

 

나이스하다!

 

이제 이걸 토대로 DB 저장하고, 스케쥴러 돌려가면서 확인해보면 된다!

 

 

http://hwi0910.tistory.com/1

 

 

 

about author

PHRASE

Level 60  라이트

미(美)는 천재의 한 형식이다. 실지로 아무런 설명도 필요하지 않기 때문에 천재보다도 더욱 높은 것이다. -오스카 와일드

댓글 ( 4)

댓글 남기기

작성