ShinJaehun / checkjjaek

4 stars 1 forks source link

다음카카오 API #14

Open ShinJaehun opened 6 years ago

ShinJaehun commented 6 years ago

http://t1.daumcdn.net/thumb/R72x100/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbook%2FKOR9788966188994%3Fmoddttm=20180801213635 http:// 앞 부분은 모두 버리고... http://t1.daumcdn.net/book/KOR9788966188994?moddttm=20180801213635

파이썬에서 https://stackoverflow.com/questions/38801188/how-to-convert-the-3a-and-2f-to-and-in-the-url-in-python

url decode 뭐 이런 걸로 검색해보면 될 것 같다... https://stackoverflow.com/questions/2733007/urldecode-in-ruby

이렇게 하면 되는 거 같은데... image_path = url.match(/(http.+){2}/)

http://rubular.com/ 에서 체크 패턴 : /(http.+){2}/ http://t1.daumcdn.net/thumb/R150x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbook%2FKOR9788966188994%3Fmoddttm=20180801213635

match group http%3A%2F%2Ft1.daumcdn.net%2Fbook%2FKOR9788966188994%3Fmoddttm=20180801213635

이렇게 잡히는데... 어째서 image_path = url.match(/(http.+){2}/) 이건 걍 full match가 되는 걸까?

ShinJaehun commented 6 years ago

카카오 책 검색 API에서 제공하는 response 키로 변경 author => authors : 이건 array of string인데... 따로 테이블을 만들어서 받아야 하나? 일단 join으로 받고 있음 https://stackoverflow.com/questions/3500814/ruby-array-to-string-conversion

image => thumbnail

book 테이블에 아래 내용 추가

contents translators category datetime url

ShinJaehun commented 6 years ago

http://mrjjang.tistory.com/48

이렇게 하면 가로 비율에 맞춤 R150x0 이면 가장 적당한 사이즈라고 생각함 : 실제 내가 책짹에서 사용하는 book image size도 width: 150

http://t1.daumcdn.net/thumb/R150x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbook%2FKOR9788966188994%3Fmoddttm=20180801213635

원본 이미지 => 요것만 DB에 저장해서 http%3A%2F%2Ft1.daumcdn.net%2Fbook%2FKOR9788966188994%3Fmoddttm=20180801213635

실제 보여주는 과정에서는 helper를 이용해서 앞에 thumb를 붙여 보여주면 좋을 것 같다...

book show 페이지에서는 이미지를 좀 더 크게 보여줘도 될 거 같애

ShinJaehun commented 6 years ago

page와 size 설정

ShinJaehun commented 6 years ago

pagination 직접 구현하기

ShinJaehun commented 6 years ago

헐 대박 카카오 API V3로 변경되면서 이 문제가 깔끔하게 해결되었다. 역쉬 재범님한테 부탁한 게 효과가 있구만!

=================================================================

다음 책 검색 API 문제 발견

안녕하세요. 다음 책 검색 API를 이용해서 웹 앱을 개발하고 있습니다. 포럼에서 논의된 주제이긴 합니다만 아직 문제가 해결된 거 같지는 않군요.

책검색시 60개 이상 검색이 안됩니다. 해결 방법이 없나요?

실제 제가 개발중인 웹 앱에서도 50건 이상 조회시 400 Bad Request가 떠서 문제를 발견할 수 있었습니다. 다음은 정상적인 response입니다. 10건씩 50페이지까지는 정상적으로 조회됩니다.

shinjaehun@longinus:~$ curl -v -X GET "https://dapi.kakao.com/v2/search/book?query=%ec%9e%90%eb%b0%94&size=10&page=50" -H "Authorization: KakaoAK ****" | grep total
Note: Unnecessary use of -X or --request, GET is already inferred.
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                             Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 203.217.239.16...
* TCP_NODELAY set
* Connected to dapi.kakao.com (203.217.239.16) port 443 (#0)
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
} [5 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* TLSv1.2 (IN), TLS handshake, Server hello (2):
{ [111 bytes data]
* NPN, negotiated HTTP1.1
{ [5 bytes data]
* TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [3773 bytes data]
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
{ [333 bytes data]
* TLSv1.2 (IN), TLS handshake, Server finished (14):
{ [4 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
} [70 bytes data]
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
} [1 bytes data]
* TLSv1.2 (OUT), TLS handshake, Unknown (67):
} [36 bytes data]
* TLSv1.2 (OUT), TLS handshake, Finished (20):
} [16 bytes data]
* TLSv1.2 (IN), TLS change cipher, Client hello (1):
{ [1 bytes data]
* TLSv1.2 (IN), TLS handshake, Finished (20):
{ [16 bytes data]
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server did not agree to a protocol
* Server certificate:
*  subject: C=KR; ST=Jeju-do; L=Jeju-si; O=Kakao Corp.; CN=*.kakao.com
*  start date: Oct 11 00:00:00 2017 GMT
*  expire date: Dec 10 23:59:59 2018 GMT
*  subjectAltName: host "dapi.kakao.com" matched cert's "*.kakao.com"
*  issuer: C=US; O=thawte, Inc.; CN=thawte SSL CA - G2
*  SSL certificate verify ok.
} [5 bytes data]
> GET /v2/search/book?query=%ec%9e%90%eb%b0%94&size=10&page=50 HTTP/1.1
> Host: dapi.kakao.com
> User-Agent: curl/7.55.1
> Accept: */*
> Authorization: KakaoAK ****
> 
{ [5 bytes data]
< HTTP/1.1 200 OK
< Server: nginx
< Date: Tue, 14 Aug 2018 15:59:44 GMT
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
< Connection: keep-alive
< Vary: Accept-Encoding
< X-Request-Id: 0f907620-9fdb-11e8-9f8b-572e416550ba
< 
{ [7897 bytes data]
100  7878    0  7878    0     0   7878      0 --:--:-- --:--:-- --:--:-- 57926
* Connection #0 to host dapi.kakao.com left intact
{"documents":[{"authors":["MICHAEL C.DACONTA 외"],"barcode":"KOR9788980544363","category":"컴퓨터/IT","contents":"자바를 이용해 XML 애플리케이션 만드는 방법을 설명한 책. 애플리케이션 내부에서의 데이터 교환에서부터 여러 시스템 간의 데이터 교환까지를 아우르는 XML의 데이터 변화 방식 등을 체계...","datetime":"2001-04-20T00:00:00.000+09:00","ebook_barcode":"","isbn":"8980544367 9788980544363","price":16000,"publisher":"정보문화사(+인포북)","sale_price":14400,"sale_yn":"Y","status":"정상판매","thumbnail":"http://t1.daumcdn.net/thumb/R72x100/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbook%2FKOR9788980544363%3Fmoddttm=20161216060322","title":"자바 2를 이용한 XML 활용","translators":["전승협 외"],"url":"http://book.daum.net/detail/book.do?bookid=KOR9788980544363"},{"authors":["허진경"],"barcode":"KOR1400000215098","category":"컴퓨터/IT","contents":"저자는 지난 10년간 기업체 강의 노하우를 통해 과거의 자바 버전에서부터 현재 자바7까지의 기술을 이 책 한권에 담고자 노력했습니다. 자바 프로그래밍 언어 하나를 배우기 위해 이제 여러...","datetime":"2012-03-22T00:00:00.000+09:00","ebook_barcode":"","isbn":"8924004778 9788924004779","price":22300,"publisher":"퍼플","sale_price":22300,"sale_yn":"Y","status":"정상판매","thumbnail":"http://t1.daumcdn.net/thumb/R72x100/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbook%2Fimage%2FKOR1400000215098%3Fmoddttm=20180626080127","title":"한권으로 마스터하는 자바프로그래밍","translators":["허진경"],"url":"http://book.daum.net/detail/book.do?bookid=KOR1400000215098"},{"authors":["박성준","최경남"],"barcode":"KOR9788979145885","category":"컴퓨터/IT","contents":"모바일 플랫폼 위피의 한 규격인 자바 미들렛을 기반으로 모바일 자바 게임 프로그래밍을 안내한다. 초보자들에게 꼭 필요한 기본 이론만 쉽게 설명하고, 기능을 하나씩 추가하는 예제를...","datetime":"2008-07-21T00:00:00.000+09:00","ebook_barcode":"","isbn":"8979145888 9788979145885","price":22000,"publisher":"한빛미디어","sale_price":22000,"sale_yn":"Y","status":"정상판매","thumbnail":"http://t1.daumcdn.net/thumb/R72x100/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbook%2FKOR9788979145885%3Fmoddttm=20180427194554","title":"모바일 자바 게임 프로그래밍: 위피 미들렛 기반","translators":[],"url":"http://book.daum.net/detail/book.do?bookid=KOR9788979145885"},{"authors":["조성문"],"barcode":"KOR9788909082662","category":"컴퓨터/IT","contents":"","datetime":"2003-03-10T00:00:00.000+09:00","ebook_barcode":"","isbn":"8909082666 9788909082662","price":23000,"publisher":"교학사","sale_price":12000,"sale_yn":"N","status":"가격 확인 중","thumbnail":"http://t1.daumcdn.net/thumb/R72x100/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbook%2FKOR9788909082662%3Fmoddttm=20160928051427","title":"자바로 만들어 보는 무선 인터넷 게임","translators":[],"url":"http://book.daum.net/detail/book.do?bookid=KOR9788909082662"},{"authors":["이상민"],"barcode":"KOR9788979147124","category":"컴퓨터/IT","contents":"Blog2Book 시리즈『자바 개발자도 쉽고 즐겁게 배우는 테스팅 이야기』. 테스팅이 무엇인지 잘 모르는 독자들도 쉽게 학습할 수 있도록 다양한 테스트 기법을 설명하였고, 자바 개발자들...","datetime":"2009-12-18T00:00:00.000+09:00","ebook_barcode":"DGT4808979147124","isbn":"8979147120 9788979147124","price":22000,"publisher":"한빛미디어","sale_price":19800,"sale_yn":"Y","status":"정상판매","thumbnail":"http://t1.daumcdn.net/thumb/R72x100/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbook%2FKOR9788979147124%3Fmoddttm=20180427194554","title":"자바 개발자도 쉽고 즐겁게 배우는 테스팅 이야기","translators":[],"url":"http://book.daum.net/detail/book.do?bookid=KOR9788979147124"},{"authors":["에릭 해쳐 외"],"barcode":"KOR9788980545148","category":"컴퓨터/IT","contents":"Java 프로젝트에서 가장 널리 사용되고 있는 빌드 도구인 ANT는 크로스 플랫폼적이며 확장성 있고, 간결하며 빠르다. 이 책은 ANT를 강력하고 창조적으로 사용할수 있는 다양한 방법과...","datetime":"2003-06-15T00:00:00.000+09:00","ebook_barcode":"","isbn":"8980545142 9788980545148","price":30000,"publisher":"인포북","sale_price":19000,"sale_yn":"Y","status":"정상판매","thumbnail":"http://t1.daumcdn.net/thumb/R72x100/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbook%2FKOR9788980545148%3Fmoddttm=20150529083918","title":"자바의 또 다른 멋진 도구 ANT","translators":[],"url":"http://book.daum.net/detail/book.do?bookid=KOR9788980545148"},{"authors":["RICHARD HIGHTOWER 외"],"barcode":"KOR9788955507874","category":"컴퓨터/IT","contents":"","datetime":"2003-02-01T00:00:00.000+09:00","ebook_barcode":"","isbn":"8955507879 9788955507874","price":27000,"publisher":"사이텍미디어","sale_price":5000,"sale_yn":"Y","status":"정상판매","thumbnail":"http://t1.daumcdn.net/thumb/R72x100/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbook%2FKOR9788955507874%3Fmoddttm=20161005060342","title":"자바 툴을 이용한 EXTREME PROGRAMMING","translators":["권기현"],"url":"http://book.daum.net/detail/book.do?bookid=KOR9788955507874"},{"authors":["최석만"],"barcode":"KOR9788986817140","category":"컴퓨터/IT","contents":"엔진 개발에 도움이 될만한 몇 가지의 인터넷 프로그래밍 언어를 쉽고 간단하게 다룬 책 이 책에서는 인터넷 활용에서 HTML 태그, 그리고 자바 스크립트와 자바까지 전체적으로 다루고 있다.","datetime":"2002-02-28T00:00:00.000+09:00","ebook_barcode":"","isbn":"8986817144 9788986817140","price":20000,"publisher":"삼진","sale_price":18000,"sale_yn":"Y","status":"정상판매","thumbnail":"http://t1.daumcdn.net/thumb/R72x100/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbook%2FKOR9788986817140%3Fmoddttm=20160928051744","title":"인터넷 프로그래밍 : 인터넷 활용에서 자바까지","translators":[],"url":"http://book.daum.net/detail/book.do?bookid=KOR9788986817140"},{"authors":["MIKE COHN 외"],"barcode":"KOR9788976274168","category":"컴퓨터/IT","contents":"그래픽 인터페이스, 쓰레드, 이벤트와 예외 처리, 데이터베이스, 소켓 Native 메쏘드, Observer, HTML로 구성된 쉽고, 빠르게 찾아볼 수 있는 Class와 Interface의 참고서!","datetime":"1998-02-21T00:00:00.000+09:00","ebook_barcode":"","isbn":"8976274164 9788976274168","price":28000,"publisher":"정보문화사","sale_price":25200,"sale_yn":"N","status":"가격 확인 중","thumbnail":"http://t1.daumcdn.net/thumb/R72x100/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbook%2FKOR9788976274168%3Fmoddttm=20150604075700","title":"자바 레퍼런스(프로그래머를위한)(S/W포함)","translators":["김융현"],"url":"http://book.daum.net/detail/book.do?bookid=KOR9788976274168"},{"authors":["윤경구"],"barcode":"KOR9788972806691","category":"컴퓨터/IT","contents":"기초가 약한 자바 개발자에게도 튼튼한 기초를 제공하기 위해 문법을 압축해서 다루고, 자바 소프트웨어 개발자로서 만나게 되는 여러가지 문제들의 해결책을 제시하였다. 자바 워드...","datetime":"2003-02-20T00:00:00.000+09:00","ebook_barcode":"","isbn":"8972806692 9788972806691","price":37000,"publisher":"대림","sale_price":33300,"sale_yn":"Y","status":"정상판매","thumbnail":"http://t1.daumcdn.net/thumb/P72x100/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbook%2FKOR9788972806691%3Fmoddttm=20161109151545","title":"자바 2 SDK 1.4 시작 그리고 완성","translators":[],"url":"http://book.daum.net/detail/book.do?bookid=KOR9788972806691"}],"meta":{"is_end":false,"pageable_count":1000,"total_count":15752}}

다음과 같이 51페이지부터는 정상적으로 동작하지 않습니다.

shinjaehun@longinus:~$ curl -v -X GET "https://dapi.kakao.com/v2/search/book?query=%ec%9e%90%eb%b0%94&size=10&page=51" -H "Authorization: KakaoAK ****" | grep total
Note: Unnecessary use of -X or --request, GET is already inferred.
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                             Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 203.217.239.16...
* TCP_NODELAY set
* Connected to dapi.kakao.com (203.217.239.16) port 443 (#0)
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
} [5 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* TLSv1.2 (IN), TLS handshake, Server hello (2):
{ [111 bytes data]
* NPN, negotiated HTTP1.1
{ [5 bytes data]
* TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [3773 bytes data]
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
{ [333 bytes data]
* TLSv1.2 (IN), TLS handshake, Server finished (14):
{ [4 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
} [70 bytes data]
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
} [1 bytes data]
* TLSv1.2 (OUT), TLS handshake, Unknown (67):
} [36 bytes data]
* TLSv1.2 (OUT), TLS handshake, Finished (20):
} [16 bytes data]
* TLSv1.2 (IN), TLS change cipher, Client hello (1):
{ [1 bytes data]
* TLSv1.2 (IN), TLS handshake, Finished (20):
{ [16 bytes data]
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server did not agree to a protocol
* Server certificate:
*  subject: C=KR; ST=Jeju-do; L=Jeju-si; O=Kakao Corp.; CN=*.kakao.com
*  start date: Oct 11 00:00:00 2017 GMT
*  expire date: Dec 10 23:59:59 2018 GMT
*  subjectAltName: host "dapi.kakao.com" matched cert's "*.kakao.com"
*  issuer: C=US; O=thawte, Inc.; CN=thawte SSL CA - G2
*  SSL certificate verify ok.
} [5 bytes data]
> GET /v2/search/book?query=%ec%9e%90%eb%b0%94&size=10&page=51 HTTP/1.1
> Host: dapi.kakao.com
> User-Agent: curl/7.55.1
> Accept: */*
> Authorization: KakaoAK ****
> 
{ [5 bytes data]
< HTTP/1.1 400 Bad Request
< Server: nginx
< Date: Tue, 14 Aug 2018 15:59:52 GMT
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
< Connection: keep-alive
< X-Request-Id: 146c5ba0-9fdb-11e8-9cce-9d048d23a5ca
< 
{ [76 bytes data]
100    65    0    65    0     0     65      0 --:--:-- --:--:-- --:--:--   706
* Connection #0 to host dapi.kakao.com left intact
shinjaehun@longinus:~$

문제는 검색 건 수가 아니라 page 인 것 같습니다. size=50&page=50 도 정상적으로 동작하는데 51페이지를 조회하는 순간 400 Bad Request 오류가 발생합니다. 해결을 부탁드립니다...