파이썬 스크립트

파이썬으로 제주의 맛집을 찾아서 (3)

Billcorea 2021. 12. 24. 09:39
반응형

오늘은 정리되고 있는 자료를 타인(?)들과 공유하기 위해서... Firebase 의 Realtime Database 에 저장을 해 보도록 하겠다.

import requests
import sqlite3
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
from firebase_admin import messaging
import datetime

# 서버 운영을 위해서는 firebase 의 설정 정보를 따로 읽어올 수 있어야 함.
cred = credentials.Certificate('./services_firebase.json')
firebase_admin.initialize_app(cred,{
    'databaseURL' : 'https://my-appli................ault-rtdb.asia-southeast1.firebasedatabase.app/'
})

conn = sqlite3.connect("opDeGangDB.sqlite", isolation_level=None)
rs = conn.cursor()
rs.execute('''CREATE TABLE IF NOT EXISTS chejuList1
        (id integer PRIMARY KEY, url text, Name text, writeDate text)''')

rs.execute('''CREATE TABLE IF NOT EXISTS localAddr
        (id integer PRIMARY KEY, url text, address text, lat float, lot float, writeDate text)''')

url = 'https://dapi.kakao.com/v2/local/search/address.json'
urlCategory = 'https://dapi.kakao.com/v2/local/search/category.json'
REST_API_KEY = '6........................................8'
headers = {'Authorization': 'KakaoAK {0}'.format(REST_API_KEY)}
address = '제주 제주시 첨단로 242'

def location_data(address):
    params = {'query': '{0}'.format(address)}
    resp = requests.get(url, params=params, headers=headers)
    #print(resp.status_code)
    data = resp.json()['documents'][0]['road_address']
    return data

def category_data(y, x):
    # FD6 음식점 좌표 주변 20m 검색
    params = {'category_group_code': 'FD6', 'x': '{0}'.format(x), 'y': '{0}'.format(y), 'radius': 20}
    resp = requests.get(urlCategory, params=params, headers=headers)
    #print(resp.status_code) phone, road_address_name, x, y, distance
    idx = resp.json()['meta']['total_count']
    print(idx)
    if idx == 0:
        data = {'place_name': 'not found'}
    else:
        for ix in range(0, idx):
            data = resp.json()['documents'][ix]
            if idx > 1:
                if int(resp.json()['documents'][ix]['distance']) < 10:
                    break;
    return data

# addrStr = location_data(address)
# print(addrStr['address_name'] + ' ' + addrStr['y'] + ' ' + addrStr['x'])
rs.execute('select url, address, lat, lot from localAddr')
row = rs.fetchone()
# print(row[0] + ' ' + row[1] + ' ' + str(row[2]) + ' ' + str(row[3]))
# print(category_data(row[2], row[3]))

jejuFD6info = db.reference('jejuFD6info')

for row in rs.fetchall():
    data = category_data(row[2], row[3])
    print(row[0] + ' ' + row[1] + ' ' + str(data))
    try:
        infoData = jejuFD6info.child(data['id'])
        infoData.set(data)
        infoData.child('url').set(row[0])
    except:
        print('이미 처리')


print('JOB END')

2) 에서 보았던 소스에 추가적인 작업을 하고 있다. Firebase 의 RealtimeDatabase 와 접속을 위해서 services_firebase.json 파일을 만들어야 하는 데, 그것 이전에 작성했던 포스팅을 참고하면 된다.

https://billcoreapython.tistory.com/29

 

파이썬 자동화 스크립트 : Firebase Cloud Messaging 보내기

오늘은 파이썬으로 메시지를 보내 보도록 하겠다... 어디로 내 안드로이드 폰으로 다가... 그래서 먼저 안드로이드에서 하는 FCM에 대한 이해를 조금해 보아야 하지 않을까 싶다. https://billcorea.tist

billcoreapython.tistory.com

이번에 추가된 부분은 category_data(y, x) 함수 부분인데, 이건 뭘할껀가 하면 주소를 막상 받아오기는 했는데, 그 주소의 정확도(?)를 확인할 방법이 없다. 실제 주소인지도 모르겠고 그렇다고 일일이 다 방문해 보려면 하 세월일 듯 하여,

kakao api을 통해서 검증을 해 보는 것이다. kakao api 에서는 위도, 경도 주변 기준으로 검색을 해주는 서비스를 지원하고 있다. 그 중에서도 특정 카테고리를 선택하면 해당 되는 카테고리 정리를 찾아주기 때문에 그것을 이용해서 주변에 있는 식당을 찾아보는 것이다.

그래서 location_data 에서 받아온 위도, 경도와 근접한(20m 이내) 곳을 검색에서 내가 알려준 위도, 경도와 제일 근접한 곳을 이 위도, 경도의 맛집(?) 이라고 인식하게 하는 것이다.  그렇게 해서 정리를 해 두어야 데이터를 활용하는 측면에서도 유용한 자료가 되지 않을 까 하는 생각이 든다.

ㅋ~

그럼 이제 이것으로 무엇을 할 것 인가 ?  그건 역시 아직은 비밀... ㅋㅋㅋ 

firebase 에 저장된 저장 예시

 

반응형
1 2 3 4 5 6 7 8 9 ··· 20