파이썬/파이썬(python) 중급

[39-5 파이썬] sheety API +tequila API

Olivia-BlackCherry 2022. 10. 4. 23:01

sheety API  +tequila API

sheety api를 이용하여 googlesheet의 빈칸을 

2~3. tequila api에서 가져온 iata code로 채워보자

BEARER = ""
sheety_url = ""

APIKEY =""
tequila_url = ""

import requests
# 1. sheety api이용해서 구글 시트에 있는 정보 불러와보기
headers= {
    "Authorization": BEARER
}
get_response = requests.get(url=sheety_url, headers=headers)
datas = get_response.json()
# datas = {'prices': [{'city': 'Paris', 'iataCode': '', 'lowestPrice': 54, 'id': 2}, {'city': 'Berlin', 'iataCode': '', 'lowestPrice': 42, 'id': 3}]}


# 2. tequila api로 iata code 찾기
headers = {
    "apikey":APIKEY
}
for data in datas['prices']:
    parameters = {
        "term":data['city'],
        "location_types":"airport",
        "limit": 1}
    response = requests.get(url=tequila_url, headers=headers, params=parameters)
    response.raise_for_status()
    tequila_datas = response.json()
    # tequila_datas = {'last_refresh': 1664793003, 'locations': [{'active': True, 'airport_int_id': 9667, 'alternative_departure_points': [{'distance': 16.69, 'duration': 796, 'id': 'FR-PLAI-PARC'}, {'distance': 190.06, 'duration': 7266.3, 'id': 'LIL'}, {'distance': 198.74, 'duration': 8435.4, 'id': 'XCR'}, {'distance': 213.47, 'duration': 8513.2, 'id': 'DOL'}, {'distance': 22.52, 'duration': 1236.7, 'id': 'FR-PARI-PA10'}, {'distance': 27.21, 'duration': 1569.5, 'id': 'FR-PARI-PAR9'}, {'distance': 27.37, 'duration': 1497.7, 'id': 'FR-PARI-PAR3'}, {'distance': 27.6, 'duration': 1586.1, 'id': 'FR-PARI-PA11'}, {'distance': 28.62, 'duration': 1581.7, 'id': 'FR-PARI-PARI'}, {'distance': 30.33, 'duration': 1711.6, 'id': 'FR-PARI-PAR1'}, {'distance': 30.48, 'duration': 1747, 'id': 'FR-PARI-PAR2'}, {'distance': 41.46, 'duration': 2213.1, 'id': 'FR-DISN-PARI'}, {'distance': 44.54, 'duration': 2554.2, 'id': 'ORY'}, {'distance': 45.49, 'duration': 2562.7, 'id': 'XJY'}, {'distance': 78.32, 'duration': 3340.6, 'id': 'BVA'}], 'alternative_names': ['Aéroport de Paris-Charles-de-Gaulle', 'Paris (CDG)'], 'car_rentals': [{'provider_id': 1175, 'providers_locations': ['644548']}], 'city': {'autonomous_territory': None, 'code': 'PAR', 'continent': {'code': 'EU', 'id': 'europe', 'name': 'Europe', 'slug': 'europe'}, 'country': {'code': 'FR', 'id': 'FR', 'name': 'France', 'slug': 'france'}, 'id': 'paris_fr', 'name': 'Paris', 'nearby_country': None, 'region': {'id': 'western-europe', 'name': 'Western Europe', 'slug': 'western-europe'}, 'slug': 'paris-france', 'subdivision': None}, 'code': 'CDG', 'dst_popularity_score': 4380128.0, 'global_rank_dst': 9, 'icao': 'LFPG', 'id': 'CDG', 'int_id': 9667, 'location': {'lat': 49.009722, 'lon': 2.547778}, 'name': 'Charles de Gaulle Airport', 'new_ground': False, 'providers': [1028, 1035, 1053, 1064, 1096, 1128, 1148, 1163, 1165, 1175, 1227, 1229, 1282, 1283, 1291, 1329], 'rank': 18, 'routing_priority': 0, 'slug': 'charles-de-gaulle-paris-france', 'slug_en': 'charles-de-gaulle-paris-france', 'special': [{'id': 'notre-dame_poi', 'name': 'Notre Dame', 'slug': 'notre-dame'}, {'id': 'versailles_poi', 'name': 'Versailles', 'slug': 'versailles'}, {'id': 'louvre-museum_poi', 'name': 'Louvre Museum', 'slug': 'louvre-museum'}, {'id': 'le-cimetiere-de-pere-lachaise_poi', 'name': 'Le Cimetiere de Pere Lachaise', 'slug': 'le-cimetiere-de-pere-lachaise'}, {'id': 'giverny_poi', 'name': 'Giverny', 'slug': 'giverny'}, {'id': 'eiffel-tower_poi', 'name': 'Eiffel Tower', 'slug': 'eiffel-tower'}], 'tags': [{'month_from': -1, 'month_to': -1, 'tag': 'sightseeing'}, {'month_from': -1, 'month_to': -1, 'tag': 'culture'}, {'month_from': -1, 'month_to': -1, 'tag': 'famous cities'}, {'month_from': -1, 'month_to': -1, 'tag': 'romance'}, {'month_from': -1, 'month_to': -1, 'tag': 'city break'}], 'timezone': 'Europe/Paris', 'tourist_region': [{'id': 'ile-de-france_poi', 'name': 'Ile de France', 'slug': 'ile-de-france'}, {'id': 'greater-paris_poi', 'name': 'Greater Paris', 'slug': 'greater-paris'}, {'id': 'autoroute-utrecht-paris_poi', 'name': 'Autoroute Utrecht Paris', 'slug': 'autoroute-utrecht-paris'}], 'type': 'airport'}], 'meta': {'locale': {'code': 'en-US', 'status': 'Locale not specified, using default.'}}, 'results_retrieved': 1}
    iata_code = tequila_datas['locations'][0]['code']

    # 3. 빈 iata에 iata code 넣기
    sheety_put_url = f"{sheety_url}/{data['id']}"
    parameters = {
        "price":{
            "iataCode": iata_code
        }}
    put_response = requests.put(url=sheety_put_url, headers=headers, json=parameters)
    put_response.raise_for_status()