docs.upbit.com/reference#open-api-%ED%82%A4-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EC%A1%B0%ED%9A%8C
requests 모듈
>> HTTP 요청을 보내는 모듈이다.
<기본 구조>
import requests
response=requests.get('url입력')
response.status_code
response.text
주소를 GET 요청(Request)를 통해 서버로 보냈고,
서버에서는 그 요청을 받아서 처리를 하고 클라이언트에게 응답을 했다.
응답은 200 상태 코드와 함께 온다.
= 이는 서버에서 잘 처리되었다는 정상적인 응답을 의미한다.
(status_code : 상태코드)
text는 응답의 내용 >> HTML코드가 온다.
status_code #응답코드
raise_for_status() #200 ok 응답코드가 아닐 경우 에러 발생
json() #json 응답일 경우 딕셔너리 타입으로 변환함
Requests는 좋은 라이브러리지만 python이 이해하는 구조로 만들어주지 못한다.
text로 받아온 건 pytho의 문자열 객체를 반환하는 것일뿐이라 정보 추출이 어렵다.
그래서 이때 BeautifulSoup를 이용하게 된다.
Beautifulsoup는 html 코드를 python이 이해할 수 있는 구조로 변환하는
파싱(parsing)을 맡고 있고
이 라이브러리를 이용해서 우리는 의미있는 정보를 추출해낼 수 있다.
즉,
requests를 이용해서 html 코드를 가져오고,
beautifulSoup를 이용해서 파싱 작업을 진행한다.
하지만
지금은 html 자체를 불러오는 게 아니고
필요한 정보만 담여있는 api를 사용하는 것이기 때문에
필요 없는 과정이다.
help(response)
>>
class Response(builtins.object)
| The :class:`Response <Response>` object, which contains a
| server's response to an HTTP request.
|
| Methods defined here:
|
| __bool__(self)
| Returns True if :attr:`status_code` is less than 400.
|
| This attribute checks if the status code of the response is between
| 400 and 600 to see if there was a client error or a server error. If
| the status code, is between 200 and 400, this will return True. This
| is **not** a check to see if the response code is ``200 OK``.
|
| __enter__(self)
|
| __exit__(self, *args)
|
| __getstate__(self)
|
| __init__(self)
| Initialize self. See help(type(self)) for accurate signature.
|
| __iter__(self)
| Allows you to use a response as an iterator.
|
| __nonzero__(self)
| Returns True if :attr:`status_code` is less than 400.
|
| This attribute checks if the status code of the response is between
| 400 and 600 to see if there was a client error or a server error. If
| the status code, is between 200 and 400, this will return True. This
| is **not** a check to see if the response code is ``200 OK``.
|
| __repr__(self)
| Return repr(self).
|
| __setstate__(self, state)
|
| close(self)
| Releases the connection back to the pool. Once this method has been
| called the underlying ``raw`` object must not be accessed again.
|
| *Note: Should not normally need to be called explicitly.*
|
| iter_content(self, chunk_size=1, decode_unicode=False)
| Iterates over the response data. When stream=True is set on the
| request, this avoids reading the content at once into memory for
| large responses. The chunk size is the number of bytes it should
| read into memory. This is not necessarily the length of each item
| returned as decoding can take place.
|
| chunk_size must be of type int or None. A value of None will
| function differently depending on the value of `stream`.
| stream=True will read data as it arrives in whatever size the
| chunks are received. If stream=False, data is returned as
| a single chunk.
|
| If decode_unicode is True, content will be decoded using the best
| available encoding based on the response.
|
| iter_lines(self, chunk_size=512, decode_unicode=False, delimiter=None)
| Iterates over the response data, one line at a time. When
| stream=True is set on the request, this avoids reading the
| content at once into memory for large responses.
|
| .. note:: This method is not reentrant safe.
|
| json(self, **kwargs)
| Returns the json-encoded content of a response, if any.
|
| :param \*\*kwargs: Optional arguments that ``json.loads`` takes.
| :raises ValueError: If the response body does not contain valid json.
|
| raise_for_status(self)
| Raises :class:`HTTPError`, if one occurred.
|
| ----------------------------------------------------------------------
| Data descriptors defined here:
|
| __dict__
| dictionary for instance variables (if defined)
|
| __weakref__
| list of weak references to the object (if defined)
|
| apparent_encoding
| The apparent encoding, provided by the chardet library.
|
| content
| Content of the response, in bytes.
|
| is_permanent_redirect
| True if this Response one of the permanent versions of redirect.
|
| is_redirect
| True if this Response is a well-formed HTTP redirect that could have
| been processed automatically (by :meth:`Session.resolve_redirects`).
|
| links
| Returns the parsed header links of the response, if any.
|
| next
| Returns a PreparedRequest for the next request in a redirect chain, if there is one.
|
| ok
| Returns True if :attr:`status_code` is less than 400, False if not.
|
| This attribute checks if the status code of the response is between
| 400 and 600 to see if there was a client error or a server error. If
| the status code is between 200 and 400, this will return True. This
| is **not** a check to see if the response code is ``200 OK``.
|
| text
| Content of the response, in unicode.
|
| If Response.encoding is None, encoding will be guessed using
| ``chardet``.
|
| The encoding of the response content is determined based solely on HTTP
| headers, following RFC 2616 to the letter. If you can take advantage of
| non-HTTP knowledge to make a better guess at the encoding, you should
| set ``r.encoding`` appropriately before accessing this property.
|
| ----------------------------------------------------------------------
| Data and other attributes defined here:
|
| __attrs__ = ['_content', 'status_code', 'headers', 'url', 'history', '...
HTTP 응답 메서드
get
: 입력한 URL의 HTML 코드 받기
post :
URL에 폼 입력을 처리하기 위해 구성한 서버 측 스크립트로 구성되어 있고,
헤더 정보에 포함되지 않고 데이터 부분에 요청 정보가 입력된다.
head
: get방식과 유사하나, 헤더 정보 이외에는 어떤 데이터도 보내지 않는다.
delete
: 원격지 웹 서버에 파일을 삭제하기 위해 사용된다. (<->put)
다시 Upbit로 돌아와서
querystring = {"isDetails": "false"}
>> isDetails(boolean) : 유의종목 필드와 같은 상세 정보 노출 여부
response = requests.request("GET", url, params=querystring)
print(response.text)
get 요청시 parameter 전달은 params=넘겨줄 파라미터 변수명
post 요청시 data 전달은 data=넘겨줄 파라미터 변수명
직렬화란?
: 파이썬 객체를 효율적으로 저장하거나 스트림으로 전송할 때 데이터를 줄로 세워서 저장하는 것이다.
역직렬화?
: 직렬화된 파일이나 바이트를 원래의 객체로 복원하는 방식이다.
'여니의 Side Project > 가상화폐 매수매도 프로그램' 카테고리의 다른 글
[Node.js 버전 관리 도구] nvm 설치하기 (0) | 2021.01.22 |
---|---|
[#2] 웹소켓 , 비동기에 대한 기초 지식 쌓기 & upbit websocket api (0) | 2021.01.18 |
[#1] 가상화폐 프로그램 만들기 (ccxt 다운로드 , 가상 환경 설정) (3) | 2021.01.18 |