본문 바로가기

PYTHON 공부 - PY4E

PY4E - Chapter 13 Web SOA and Service GeoJSON (3)

Part 1 SOA

구글 이미지, SOA

1. SOA :Service Oriented Approach
2. 서비스 기반 접근을 사용하는 경우는

하나의 시스템 내에 모든 정보가 저장되어 있지 않은 경우이다.

3. 왜냐하면 어떤 어플리케이션은 모든 데이터를 담지 못하기 때문이다.

4. 예를 들어 여행예약회사는 차를 빌리거나 표를 사거나 등등 할 수 있지만 여행예약회사가 실제로 하는 것은 웹상의 서비스를 연결 해주는 것일 뿐이다.
5. 특정부분만 때어서 다른 시스템에 넣고 싶다!  이럴려면 규칙이 필요하다.
6. 각 어플리케이션의 정보가 서비스로 제공되어서 다른 어플리케이션의 그 정보를 사용하고 또 다른 정보를 만들어 낸다.

7.서비스 지향 프로그램이 시스템간 호환 가능한 구조르 발전했을 떄, 정보 공유의 기회를 나라와 나라 간에도 가질 수 있다.

https://www.youtube.com/watch?v=mj-kCFzF0ME&list=PLlRFEj9H3Oj7Bp8-DfGpfAfDBiblRfl5p&index=65




SOA에 대한 설명.

 

Part 2 API

 

1. 웹서비스를 연결 시킨다. 이는 다른 어플리케이션의 API, 정보를 사용한다는 말이다.

2. API Apllication Program Interface는 하나의 계약이다.

3. 이러한 것들을 주면 이런 식으로 정보를 주겠다.

# urllib, json 임포트
import urllib.request, urllib.parse, urllib.error
import json
import ssl

api_key = False
# If you have a Google Places API key, enter it here
# api_key = 'AIzaSy___IDByT70'
# https://developers.google.com/maps/documentation/geocoding/intro


if api_key is False:
    api_key = 42
    serviceurl = 'http://py4e-data.dr-chuck.net/json?'
#url 코드를 가져오고
else :
    serviceurl = 'https://maps.googleapis.com/maps/api/geocode/json?'

# Ignore SSL certificate errors
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE


# 위치를 묻는 while 문을 사용한다.
while True:
    address = input('Enter location: ')
    if len(address) < 1: break

    parms = dict()
    parms['address'] = address
    if api_key is not False: parms['key'] = api_key
    #parse.urlencode가 parms를 받아온다. parms는 딕셔너리 형태로  address를 받아오낟.
    url = serviceurl + urllib.parse.urlencode(parms)

    print('Retrieving', url)


    #url을 읽은 것은 uh로 저장하여 핸들을 만들고
    uh = urllib.request.urlopen(url, context=ctx)
    # uh는 지금 바이트 형태이기 때문에, uh를 읽어 디코딩하여 스트링형태로 바꾼다.
    data = uh.read().decode()
    print('Retrieved', len(data), 'characters')

    #이제 JSON으로 파싱을 할 것이다.
    #별 것 없다. 잘못된 문자열이 있어, 읽히지 않을 경우를 제외하고
    try:
        js = json.loads(data)
    except:
        js = None

    if not js or 'status' not in js or js['status'] != 'OK':
        print('==== Failure To Retrieve ====')
        print(data)
        continue

    print(json.dumps(js, indent=4))

# js의 results의 0번 원소의  geometry의 location의 'lat'을 읽어 오라는 소리. 그것을 lat으로 함.
    lat = js['results'][0]['geometry']['location']['lat']
    lng = js['results'][0]['geometry']['location']['lng']
    print('lat', lat, 'lng', lng)
    location = js['results'][0]['formatted_address']
    print(location)