Metadata-Version: 2.1
Name: xingapi
Version: 1.1.1
Summary: python version of xingapi
Home-page: https://github.com/jeakwon/xingapi
Author: Jea Kwon
Author-email: onlytojay@gmail.com
License: UNKNOWN
Keywords: xingapi
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.2
Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Requires-Python: >=3
Description-Content-Type: text/markdown
Requires-Dist: pywin32
Requires-Dist: pandas

# xingapi for python users

## Installation
```
pip install xingapi
```

## eBest xingAPI com guide
[이베스트 xingAPI 가이드(링크)](http://www.ebestsec.co.kr/apiguide/guide.jsp?cno=200)

## Requirements
- python 32bit environment
- xingAPI installation
- DevCenter installation
- Download res files

## Usage

### 1. Session
#### 1) 기본사용법
```python
import xingapi as xa

session = xa.Session()
session.login(id='아이디', pw='비밀번호', cert='공인인증비밀번호')
```

#### 2) account.txt를 활용하는법
account.txt를 아래와같이 생성하여 현재터미널위치에 두고
```
아이디
비밀번호
공인인증비밀번호
```

아래스크립트를 실행
```python
import xingapi as xa

with open('account.txt') as f:
    id, pw, cert = f.read().split()

session = xa.Session()
session.login(id, pw, cert)
```

### 2. Query 사용법
#### 1) 기본적인 사용예시
삼성전자(005930)의 주식 분별 주가 조회('t1302)를 예로 들어보겠다
```python
query = xa.Query('t1302')
data = query(shcode='005930', cnt=900)
```
xa.Query 오브젝트 생성시 trcode를 입력
오브젝트를 다시 `__call__`할 때, 필드이름과, 필드값을 keyword=value 페어로 전달한다
반환된 데이터는 { 블록이름1 : 블록데이터1, 블록이름2 : 블록데이터2 } 의 `dict` 형태로 
반환되고, 블록데이터는 `pandas.DataFrame` 오브젝트이다.

#### 2) 한줄로도 가능
```python
df = xa.Query('t1302')(shcode='005930', cnt=900)['t1310OutBlock1']
```

#### 3) 조회/연속조회
```python
query = xa.Query('t1302')
data1 = query.call(shcode='005930', cnt=100).data
data2 = query.nextcall(cts_time='1558080001').data

query = xa.Query('t1302')
data3 = query.nextcall(shcode='005930', cnt=100, cts_time='1558080001').data
```
DevCenter에서 TR 확인창을 사용하면 조회버튼/다음조회버튼이 있다
`xa.Query.call(**input_kwargs)`함수는 조회버튼에 해당하며, 오브젝트 자신을 반환한다.
`xa.Query.nextcall(**input_kwargs)`함수는 다음조회버튼에 해당하며, 역시 오브젝트 자신을 반환한다.

nextcall(다음조회)의 경우 `data3`처럼 call(조회)에 사용한 키값과 함께 사용해도 되지만,
call(조회)를 한 경우엔 `data2`처럼 다음조회 에사용할 새로운 키값만 입력해도 동작한다.

#### 4) 연속조회 (자동 끝까지)
```python
query = xa.Query('t1302')
data = query.call(shcode='005930', cnt=100).next(keypairs={'time':'cts_time'})
```
위에서 사용한 `call(조회)`, `nextcall(연속조회)`를 조합한 `next`함수를 이용하면
`query.isnext` 가 False가 될때까지 스스로 반복한다.
여기서 keypairs란 InBlock에 다시 넣어줄 필드이름과, OutBlock에서 가져올 필드 값의 필드이름을 이야기한다. 예를들어 `t1302`의 경우 InBlock의 `time`key 에 OutBlock의 `cts_time`의 value를 가져와야하므로 keypairs={'time':'cts_time'} 로전달한다.

#### 5) 연속조회 (자동 주어진 횟수만큼만)
```python
query = xa.Query('t1302')
data = query.call(shcode='005930', cnt=100).next(keypairs={'time':'cts_time'}, total=5)
```
`total`을 명시해주면 다음조회의 반복회수를 몇번까지 할 것인지 정해준다.
과거 데이터가 양이 너무 많은 경우, dataframe객체 안에 담지 못하고 Out of memory가 발생
할 수 있으므로 그런경우 유용하게 사용가능하다.

### App 사용법
#### 로그인 방법
```python
app = xa.App('../account.txt')
```
```python
app = xa.App('아이디', '패스워드', '공인인증패스워드')
```
```python
app = xa.App(id='아이디', pw='패스워드', cert='공인인증패스워드')
```
#### 종목코드조회
```python
app.종목코드.전체
```
```python
app.종목코드.코스피
```
```python
app.종목코드.투자주의
```

