[Open API] Alading Bookstore Open API

Aladin Open API

키 인증 방식으로 일반 1일 호출 5000회 가능하다.

http://blog.aladin.co.kr/openapi/category/29154404?communitytype=MyPaper

TTB 가입 방법

여기 http://www.aladdin.co.kr/ttb/wjoinus.aspx 에서 TTB 가입한다. 승인 완료되면 TTB Key값이 발급된다.

TTB Key값은 http://www.aladin.co.kr/ttb/wblog_manage.aspx 이 페이지에서 조회하실 수 있습니다. 이 키값은 OPENAPI 키값으로 사용됩니다.

상품 API

여기 http://blog.aladin.co.kr/openapi/category/29154402?communitytype=MyPaper 설명되어 있다.

  • 제공 리스트 종류
  • 신간 전체 리스트
  • 주목한 만한 신간 리스트
  • 편집자 추천 리스트(카테고리로만 조회 가능 - 국내도서/음반/외서 만 지원)
  • 베스트셀러
  • 북플 베스트셀러(국내도서 만 조회 가능)

요청 URL : http://www.aladin.co.kr/ttb/api/ItemList.aspx

요청 URL샘플 :

1
http://www.aladin.co.kr/ttb/api/ItemList.aspx?ttbkey=TTBKey&QueryType=ItemNewAll&MaxResults=10&start=1&SearchTarget=Book&output=xml&Version=20131101

상품 json 형식

item array 밑에 결과 데이터가 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
{
"version": "20131101",
"logo": "http://image.aladin.co.kr/img/header/2011/aladin_logo_new.gif",
"title": "알라딘 베스트셀러 리스트 - 소설/시/희곡",
"link": "http://www.aladin.co.kr/shop/common/wbest.aspx?BestType=Bestseller&BranchType=1&CID=1&Year=2013&Month=11&Week=1&partner=openAPI",
"pubDate": "Tue, 05 Nov 2013 07:48:18 GMT",
"totalResults": 200,
"startIndex": 1,
"itemsPerPage": 10,
"query": "QueryType=BESTSELLER;CategoryId=1;Year=2013;Month=11;Week=1",
"searchCategoryId": 1,
"searchCategoryName": "소설/시/희곡",
"item": [
{
"title": "제3인류 1",
"link": "http://www.aladin.co.kr/shop/wproduct.aspx?ISBN=8932916373&partner=openAPI",
"author": "베르나르 베르베르 지음, 이세욱 옮김",
"pubDate": "2013-10-21",
"description": "베르나르 베르베르 특유의 상상력으로 축조한 장대한 스케일의 과학 소설. 남극. 저명한 고생물학자 샤를 웰즈의 탐사대가 17미터에 달하는 거인의 유골들을 발굴한다. 그러나 인류사를 다시 쓰게 만들 이 중대한 발견은 발굴 현장의 사고와 함께 곧바로 파묻히고 마는데…",
"isbn": "8932916373",
"isbn13": "9788932916378",
"itemId": 32136853,
"priceSales": 12420,
"priceStandard": 13800,
"mallType": "BOOK",
"stockStatus": "",
"mileage": 1250,
"cover": "http://image.aladin.co.kr/product/3213/68/coversum/8932916373_2.jpg",
"publisher": "열린책들",
"salesPoint": 72420,
"fixedPrice": true,
"customerReviewRank": 9,
"bestRank": 1,
"subInfo": {
"ebookList": [
{
"itemId": 32241318,
"isbn": "E893291637",
"priceSales": 8100,
"link": "http://www.aladin.co.kr/shop/wproduct.aspx?ISBN=E893291637&partner=openAPI"
}
],
"usedList": {
"aladinUsed": {
"itemCount": 0,
"minPrice": 0,
"link": "http://www.aladin.co.kr/shop/UsedShop/wuseditemall.aspx?ISBN=8932916373&TabType=2&partner=openAPI"
},
"userUsed": {
"itemCount": 9,
"minPrice": 8900,
"link": "http://www.aladin.co.kr/shop/UsedShop/wuseditemall.aspx?ISBN=8932916373&TabType=1&partner=openAPI"
}
}
}
},
{
"title": "제3인류 2",
"link": "http://www.aladin.co.kr/shop/wproduct.aspx?ISBN=8932916381&partner=openAPI",
"author": "베르나르 베르베르 지음, 이세욱 옮김",
"pubDate": "2013-10-21",
"description": "베르나르 베르베르 특유의 상상력으로 축조한 장대한 스케일의 과학 소설. 남극. 저명한 고생물학자 샤를 웰즈의 탐사대가 17미터에 달하는 거인의 유골들을 발굴한다. 그러나 인류사를 다시 쓰게 만들 이 중대한 발견은 발굴 현장의 사고와 함께 곧바로 파묻히고 마는데…",
"isbn": "8932916381",
"isbn13": "9788932916385",
"itemId": 32136901,
"priceSales": 12420,
"priceStandard": 13800,
"mallType": "BOOK",
"stockStatus": "",
"mileage": 1250,
"cover": "http://image.aladin.co.kr/product/3213/69/coversum/8932916381_2.jpg",
"publisher": "열린책들",
"salesPoint": 50880,
"fixedPrice": true,
"customerReviewRank": 10,
"bestRank": 2,
"subInfo": {
"ebookList": [
{
"itemId": 32241317,
"isbn": "E893291638",
"priceSales": 8100,
"link": "http://www.aladin.co.kr/shop/wproduct.aspx?ISBN=E893291638&partner=openAPI"
}
],
"usedList": {
"aladinUsed": {
"itemCount": 0,
"minPrice": 0,
"link": "http://www.aladin.co.kr/shop/UsedShop/wuseditemall.aspx?ISBN=8932916381&TabType=2&partner=openAPI"
},
"userUsed": {
"itemCount": 3,
"minPrice": 10500,
"link": "http://www.aladin.co.kr/shop/UsedShop/wuseditemall.aspx?ISBN=8932916381&TabType=1&partner=openAPI"
}
}
}
}
]
}

NodeJS / Process management

nodejs app을 단일 node 명령으로 실행후 백그라운드 혹은 시스템 데몬으로 다룰 수 있도록 해주는 프로세스 관리 유틸리티를 알아보자:

  1. nodemon
  2. pm2
  3. forever

1. nodemon

1
nodemon ./server.js localhost 8080

express app

nodemon으로 express 의 기본 템플릿을 시작시 bin/www 를 실행애 주어야 한다. app.js 만 실행시 www 에 명시한 포트가 인식 안된다.

1
$ nodemon bin/www

혹은 PORT 변수를 입력하고 실행한다.

1
$ PORT=3000 DB_USERNAME='mongo' DB_PASSWORD='' DB_SERVER='localhost' DATABASE='student' nodemon server.js

2. pm2 설치

pm2는 nodejs app을 실행하고 관리할 수 있는 전문적인 도구이다.
node.js 앱을 시스템 서비스로 등록하기 위해서 pm2 를 설치한다.

1
npm i -g pm2

예를 들어 express 앱이 있으면 다음 같이 pm2로 시작한다.

1
2
cd www-app
pm2 start -n "www-app" bin/www

pm2 log format

pm2 이전 버전은 시작시 timestamp를 로그에 저장하고 싶으면 시작시 --log-date-format 옵션을 이용

1
pm2 start app.js --log-date-format 'DD-MM HH:mm:ss.SSS'

시작 설정 파일에 log_date_format 옵션을 줄 수 있다.

1
"log_date_format"   : "DD-MM HH:mm:ss.SSS",

pm2 2.x 이후 부터는 log 의 형식을 --format 옵션을 지정할 수 있다.

1
pm2 logs --format

pm2 startup

startup 시 pm2 start 로 생성되는 .pm2 디렉토리의 pid 와 app.js 파일을 실행해 준다.

pm2 startup systemd 로 스타트를 하면 2개의 프로세스가 만들어 진다.

방법은,,,

  1. 먼저 앱을 시작해 둔다.
1
pm2 start -n "www-app" bin/www
  1. dump를 생성한다.

pm2로 현재 실행중인 프로세스 정보를 save로 덤프하게 저장한다. systemd 서비스 스크립을 작성하는데 유용하다.

1
pm2 save
  1. pm2 startup 명령

pm2 startup 명령은 pm2로 실행중인 프로세스를 systemd 서비스 유니트 파일로 제어 할 수 있다. 명령을 실행하면 sudo 명령으로 실행할 수 있는 스크립을 출력해 준다.

1
2
3
$ pm2 startup systemd
...
sudo env PATH=$PATH:/home/foo/.nvm/versions/node/v8.8.1/bin /home/foo/.nvm/versions/node/v8.8.1/lib/node_modules/pm2/bin/pm2 startup systemd -u foo --hp /home/foo

이 스크립을 실행해 주면 pm2-foo.service 서비스 유니 파일이 생성된다.

1
2
Target path
/etc/systemd/system/pm2-foo.service

이 서비스 파일을 활성화하고 시작해준다.

1
systemctl enable pm2-foo

이제 시스템을 재시작해도 pm2 로 실행중인 프로세스는 자동으로 시작된다.

3. forever

https://github.com/foreverjs/forever

백그라운드 로그 출력

nodejs app을 백그라운드로 실행하기 위해서 로그 정보를 생성할 수 있다.

The forever process will continue to run outputting log messages to the console.

1
forever -o out.log -e err.log my-script.js

Daemon으로 실행하기

forever 프로세스는 대상 프로세스를 백그라운드로 실행할 수 있는 데몬으로 동작이 가능하다. 이것은 nohup 같은 시스템 도구 없이도 가능다. 데몬 실행을 위해 -o -l, & -e 를 사용하도록 권장한다.

1
2
$ forever start -l forever.log -o out.log -e err.log my-daemon.js
forever stop my-daemon.js

그리고 -m 옵션으로 재시작 횟수를 지정할 수 있다.

here are several examples designed to test the fault tolerance of forever. Here’s a simple usage example:

1
$ forever -m 5 examples/error-on-timer.js

설정파일 지원

forever에 스크립트 경로와 함께 JSON 설정 파일을 전달해 스크립트의 구성요소를 제공할 수 있다. 예를 들어 아래 같은 앱 디렉토리에 developement.json 설정 파일이 있다고 하자,

1
2
3
4
.
├── forever
│ └── development.json
└── index.js

developement.json 설정 파일은 아래 같은 내용으로 구성할 수 있다:

1
2
3
4
5
6
7
8
9
// forever/development.json
{
// Comments are supported
"uid": "app",
"append": true,
"watch": true,
"script": "index.js",
"sourceDir": "/home/myuser/app"
}