티스토리 뷰
INTRO
web data를 수집, 가공하는 용어로 Parsing이라 정의하고 python 기초 마지막 편을 마치고자 한다.
web crawling, web scraping 등 목적에 따라 정의가 상의하지만 parsing을 기초로 한다.(링크 : 용어설명)
대표적인 국내 Open API 제공 사이트 : 공공데이터포털 --> 로그인/key 생성 필요
프로그램언어나 플랫폼에 독립적인 .json 다루어 본다.
용어
parsing
web page 내용에서 원하는 정보를 원하는 형태로 가공하여 표현
위키에서 'parsing'이나 'parser'을 검색하면 구문 분석으로 번역되어 표기
컴퓨터 과학에서 파싱((syntactic) parsing)은 일련의 문자열을 의미있는 토큰(token)으로 분해하고 이들로 이루어진 파스 트리(parse tree)를 만드는 과정을 말한다.
출처 : ko.wikipedia.org/wiki/구문_분석
Open API(Open Application Programming Interface, 오픈 API, 공개 API)
누구나 사용할 수 있도록 공개된 API를 말하며, 개발자에게 사유 응용 소프트웨어나 웹 서비스에 프로그래밍적인 권한을 제공
이것은 "하나의 웹 사이트에서 자신이 가진 기능을 이용할 수 있도록 공개한 프로그래밍 인터페이스가 오픈 API이다"라고 정의할수있다.
네이버 지도, 구글맵, 오픈스트리트맵 등이 대표적인 예이다. 지도 서비스 및 다양한 서비스들에서 시도되고 있으며 누구나 접근하여 사용할 수 있다는 장점이 있다.
메타블로그도 오픈 API를 사용하여 만든 예이다. 최근에 코로나 사태로 라이브코로나, 코로나 맵 등의 서비스가 생겼는데, 네이버클라우드플랫폼의 API 지원을 받고 있다.
출처 : ko.wikipedia.org/wiki/오픈_API
API(Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스)
crawling or scraping에서 API는 web API의 준말로 사용
API request : HTTP를 통해 데이터를 요청
API는 이 데이터를 XML이나 JSON(JavaScript Object Notation) 형식으로 변환
응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다.
주로 파일 제어, 창 제어, 화상 처리, 문자 제어 등을 위한 인터페이스를 제공
웹 API는 웹 애플리케이션 개발에서 다른 서비스에 요청을 보내고 응답을 받기 위해 정의된 명세
블로그 API를 이용하면 블로그에 접속하지 않고도 다른 방법으로 글을 올릴 수 있다.
그 외에 우체국의 우편번호 API, 구글과 네이버의 지도 API등 유용한 API들이 많으므로, 요즘은 홈페이지 구축이나 추가개편 시 따로 추가로 개발하지 않고 이런 오픈 API를 가져와 사용하는 추세다.
출처 : ko.wikipedia.org/wiki/API
JSON(JavaScript Object Notation)
client와 server간 HTTP 통신을 위한 데이터 교환 포멧
cf. REST : HTTP를 기반 client와 server간 리소스 접근 방식을 규정한 아키텍쳐 or 교환방식 protocol
속성-값 쌍( attribute–value pairs and array data types (or any other serializable value)) 또는 "키-값 쌍"으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷
비동기 브라우저/서버 통신 (AJAX)을 위해, 넓게는 XML(AJAX가 사용)을 대체하는 주요 데이터 포맷
특히, 인터넷에서 자료를 주고 받을 때 그 자료를 표현하는 방법으로 알려져 있다.
자료의 종류에 큰 제한은 없으며, 특히 컴퓨터 프로그램의 변수값을 표현하는 데 적합하다.
본래는 자바스크립트 언어로부터 파생되어 자바스크립트의 구문 형식을 따르지만 언어 독립형 데이터 포맷이다. 즉, 프로그래밍 언어나 플랫폼에 독립적이므로, 구문 분석 및 JSON 데이터 생성을 위한 코드는 C, C++, C#, 자바, 자바스크립트, 펄, 파이썬 등 수많은 프로그래밍 언어에서 쉽게 이용할 수 있다.
JSON의 공식 인터넷 미디어 타입은 application/json이며, JSON의 파일 확장자는 .json이다.
출처 : ko.wikipedia.org/wiki/JSON
Open API Parsing : json handle
- 영화진흥위원회(kofic) Open API
링크 : www.kobis.or.kr/kobisopenapi/homepg/apiservice/searchServiceInfo.do
- Rest 방식 중 .json의 url + key + params
python code : pyTest/test16.py
# -*- coding: utf-8 -*-
import os
import urllib.request
import json
from datetime import date, timedelta
#### path & sample download
base_path, sub_dirs, fnames = next(os.walk(os.getcwd()))
base_dpath = './data'
save_name = 'file5.json'
#### url parsing
url_json = 'http://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json'
key_num = 'f5eef3421c602c6cb7ea224104795888'
yesterday = date.today() - timedelta(1)
target_Date = yesterday.strftime('%Y%m%d')
url = '%s?key=%s&targetDt=%s' % (url_json,key_num,str(target_Date))
print("kofic : 영화진흥위원회 Open API Address\n{}\n".format(url))
req = urllib.request.Request(url)
#### get data & json format
data_get = urllib.request.urlopen(req).read()
print("Data-type of 'data_get'\n{}\n".format(type(data_get)))
# print(data_get)
data_json = json.loads(data_get)
print("Data-type of 'data_get'\n{}\n".format(type(data_json)))
# print(data_json)
#### json data parsing
print("Data indexing 'dailyBoxOfficeList' \n{}\n".format(\
data_json['boxOfficeResult']['dailyBoxOfficeList']))
UpToDate = yesterday.strftime('%Y-%m-%d')
print("\n\n********** Data Parsing **********\n")
print("Movie Rank in yesterday {}\n".format(UpToDate))
for info in data_json['boxOfficeResult']['dailyBoxOfficeList']:
print("rank: {} OpenDate: {} MovieName: {}\n".format(info['rank'],info['openDt'],info['movieNm']))
#### save .json & read .json
with open(os.path.join(base_dpath,save_name), "w", encoding="utf-8") as fs:
json.dump(data_json, fs, ensure_ascii=False, indent="\t")
with open(os.path.join(base_dpath,save_name), "r", encoding="utf-8") as fr:
read_json = json.load(fr)
---- SublimeText python Run test16.py ----
kofic : 영화진흥위원회 Open API Address
http://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=f5eef3421c602c6cb7ea224104795888&targetDt=20210310
Data-type of 'data_get'
<class 'bytes'>
Data-type of 'data_get'
<class 'dict'>
Data indexing 'dailyBoxOfficeList'
[{'rnum': '1', 'rank': '1', 'rankInten': '0', 'rankOldAndNew': 'OLD',
...
(중략)
...
'audiAcc': '31374', 'scrnCnt': '98', 'showCnt': '125'}]
********** Data Parsing **********
Movie Rank in yesterday 2021-03-10
rank: 1 OpenDate: 2021-03-03 MovieName: 미나리
rank: 2 OpenDate: 2021-01-27 MovieName: 극장판 귀멸의 칼날: 무한열차편
rank: 3 OpenDate: 2021-03-04 MovieName: 라야와 마지막 드래곤
rank: 4 OpenDate: 2021-01-20 MovieName: 소울
rank: 5 OpenDate: 2021-02-17 MovieName: 미션 파서블
rank: 6 OpenDate: 1995-09-02 MovieName: 중경삼림
rank: 7 OpenDate: 2021-02-24 MovieName: 카오스 워킹
rank: 8 OpenDate: 2021-03-10 MovieName: 쁘떼뜨
rank: 8 OpenDate: 2021-02-24 MovieName: 톰과 제리
rank: 10 OpenDate: 2021-02-24 MovieName: 고백
***Repl Closed***
'python > Lecture' 카테고리의 다른 글
python 활용 #8 : django (0) | 2021.03.03 |
---|---|
python 활용 #1 : pandas - Data Handle (0) | 2021.03.03 |
python 기초 #9 : Data Visualization(데이터 시각화) (0) | 2021.03.03 |
python 기초 #8 : Database - SQLite (0) | 2021.03.03 |
python 기초 #7 : File Handling - csv, excel(xlsx) (0) | 2021.03.03 |
- Total
- Today
- Yesterday
- Model
- template
- analysis
- CSV
- 라즈베리파이
- DAQ
- sublime text
- Python
- github
- server
- Django
- Templates
- r
- Regression
- ERP
- SSH
- arduino
- MacOS
- 코로나19
- 코로나
- 확진
- Raspberry Pi
- DS18B20
- git
- raspberrypi
- Pandas
- COVID-19
- vscode
- 자가격리
- pyserial
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |