마케팅/데이터분석(파이썬)

(파이썬/python) 모두를 위한 프로그래밍 : 파이썬 챕터 13 / 웹 서비스

XML

XML은 eXtensible Markup Language의 약자로, 다음과 같은 계층 구조로 이루어져 있습니다. HTML과 비슷하지만 원하는 이름의 태그를 만들 수 있다는 특징이 있고, HTML 보다 문법 오류를 더 엄격하게 다룹니다.

 

다음과 같은 함수를 활용하면 XML에 접근해 원하는 데이터를 추출할 수 있습니다.

조금 더 복잡하지만 XML의 구조를 이해하고 있으면 다음과 같이 반복문을 활용해 XML의 데이터에 접근할 수도 있습니다.

 

<person>
    <name>Chuck</name>
    <phone type="intl">
     +1 734 303 4456
    </phone>
    <email hide="yes"/>
</person>

tree = ET.fromstring(data)
print('Name:',tree.find('name').text)
print('Attr:'.tree.find('email').get('hide'))

#Name: Chuck
#Attr: yes

#예제
import xml.etree.ElementTree as ET

input ='''
<stuff>
  <users>
    <user x ="2">
      <id>001</id>
      <name>Chuck</name>
    </user>
    <user x ="7">
      <id>009</id>
      <name>Brent</name>
    </user>
  </users>
</stuff>'''

stuff = ET.fromsting(input)
lst = stuff.findall('users/user')
print('User count:', len(lst))

for item in lst:
    print('Name', item.find('name').text)
    print('ID', item.find('id').text)
    print('Attribute', item.get("x"))
    
User count: 2
#Name Chuck
#ID 001
#Attribute 2
#Name Brent
#ID 009
#Attribute 7

 

JSON(JavaScript Object Notation)

JSON은 XML보다 더 자주 사용되는 데이터 포맷입니다. 이 코드는 XML로 실행했던 것과 정확히 같은 내용의 코드입니다.

데이터가 XML 형식에서 JSON 형식으로 바뀐 것을 제외하면 말입니다.

JSON은 파이썬에서의 딕셔너리와 굉장히 비슷하기 때문에 데이터를 읽어온 후 딕셔너리로 접근할 수 있습니다.

import json
data = '''{
  "name" : "Chuck",
  "phone" : {
   "type" : "intl",
   "number" : "+1 734 303 4456"
  },
  "email":{
  "hide" : "yes"
  }
}'''

info = json.loads(data)
print('Name:',info["name"])
print('Hide:',info["email"]["hide"])

#Name: Chuck
#Hide: yes

import json
data = '''[
  {"id" : "001",
   "x":"2",
   "name":"Chuck"
  },
  {"id" : "009",
   "x":"7",
   "name":"Chuck"
  }
]'''

info = json.loads(data)
print(info)
print('User count:', len(info))
for item in info:
    print('Name', item['name'])
    print('Id', item['id'])
    print('Attribute', item['x'])

#[{'id':'001', 'x':'2', 'name':'Chuck'}, {'id':'009','x':'7','name':'Chuck'}]
#User count: 2
#Name Chuck
#Id 001
#Attribute 2
#Name Chuck
#Id 009
#Attribute 7

 

SOA(Service Oriented Architecture)

서비스 지향 아키텍처란 대규모 컴퓨터 시스템을 구축할 때의 개념으로 업무상에 일 처리에 해당하는 소프트웨어 기능을 서비스로 판단하여 그 서비스를 네트워크 상에 연동하여 시스템 전체를 구축해 나가는 방법론이다.

 

구글 API

구글 API를 활용해 다음과 같이 데이터를 읽어올 수 있다.

import urllib.request, urllib.parse, urllib.error
import json

serviceurl = 'http://maps.googleapis.com/maps/api/geocode/json?'

while True:
    address = input('Enter location:')
    if len(address) < 1:break
    
    url = serviceurl + urllib.parse.urlencode({'address':address})
    
    print('Retrieving',url)
    uh = urllib.request.urlopen(url)
    data=uh.read().decode()
    print('Retrieved', len(data), 'characters')
    
    try:
        js=json.loads(data)
    except:
        js=None
    
    if not js or 'status' not in jo or js['status']!='OK':
        print('====Failure To Retrieve====')
        print(data)
        continue
        
    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)

 

트위터 API

트위터에서 개인 키를 발급받으면 트위터 API를 활용할 수 있습니다.

hidden.py 파일의 return 부분에 발급받은 키(4종류)를 입력하면 트위터 API를 활용할 수 있게 됩니다.

#Keep this file separate

#https://apps.twitter.com/
#Create new App and get the four strings

def oauth():
    return {"consumer_key":"h7Lu...Ng",
        "consumer_secret":"dNKne",
        "token_key":"122222000000",
        "token_secret":"H012231313"}