만들어보고 싶은 사이트가 생겼다.
성경 api를 이용하여 서로의 의견을 주고받을 수 있는 고민거리 커뮤니티 사이트를 만들어보고 싶었다.
열심히 성경 api를 찾았지만 영문버전 말고는 구할 수가 없었다...
json 파일은 인터넷에 있어서 우선 다운 받았다.
파일 크기가 아주아주 커서 절대 노가다는 불가하고 쳇 지피티에게 물어보니 파이썬으로 하라고 했다.
우선 파이썬 for문을 돌려서 제이슨 파일이 읽히는지 시도해봤다.
import json
# import os
# from supabase import create_client, Client
# url: str = os.environ.get("SUPABASE_URL")
# key: str = os.environ.get("SUPABASE_KEY")
# supabase: Client = create_client(url, key)
# JSON 파일 로드
with open('ko_ko.json', encoding='utf-8-sig') as f:
data = json.load(f)
for book in data:
print(book["abbrev"], book["name"])
for chapter_index, chapter in enumerate(book['chapters']):
print(chapter_index, chapter)
for verse_index, verse in enumerate(chapter):
print(verse_index, verse)
잘 실행이 된다.
정말 db에 대해서 무지하다..
그냥 파이어베이스와 몽고디비 깔짝 써본게 다라서 튜터님들께 찾아가서 여쭤보고 쳇 지피티에게도 열심히 물어봤다.
다음과 같은 데이터 저장 형식을 알려줬다.
다음과 같이 관계도를 그림으로 그려봤다.
id는 uuid로 자동생성되게 만들었고 생성된 아이디는 바로 아래 자식에게 포린키로 넘겨줘서 검색이 용이하게 만들었다!
위의 공식문서를 보면 그냥 다 나와있다.
설치 초기화 인서트까지 바로 해보겠다!
아 근데 한글로 제공해줘야 해서 name을 노가다로 한글로 바꿨다... ㅠㅜ
import json
import os
from supabase import create_client, Client
os.environ["SUPABASE_URL"] = "고유주소"
os.environ["SUPABASE_KEY"] = "시크릿키"
url: str = os.environ.get("SUPABASE_URL")
key: str = os.environ.get("SUPABASE_KEY")
supabase: Client = create_client(url, key)
# JSON 파일 로드
with open('ko_ko.json', encoding='utf-8-sig') as f:
data = json.load(f)
for book in data:
response = (
supabase.table("books")
.insert({"name": book["name"], "name": book["abbrev"] })
.execute()
)
boodId = response.data.id
for chapter_index, chapter in enumerate(book['chapters']):
response = (
supabase.table("chapters")
.insert({"chapter_number": chapter_index+1, "book_id":boodId })
.execute()
)
chapterId = response.data.id
for verse_index, verse in enumerate(chapter):
response = (
supabase.table("verses")
.insert({"verse_number": chapter_index+1, "chapter_id":chapterId, "text": verse})
.execute()
)
공식 문서에 있는대로 하면 url과 key를 제대로 가져오지 못해서
위의 코드와 같이 바꾸면! 다음 에러로 넘어갈 수 있다^^
policy를 지정해줘야하나보다
inset와 select 정책을 모든 테이블에 지정해줬다!
insert를 지정할 때 옆에 템플릿 insert 중에서 to가 public이 되는 것을 클릭한다음에 with check를 true 조건으로 바꿔주면 된다!
실수로 오타내서 none 값이 들어가는중... 나중에 발견해버림 ㅠㅜ
코드 수정후 다시 실행!!
매우 잘되고 있는중!!
지금은 매우 피곤하니 그대로 켜놓고 내일 일어나면 되어있겠지 ㅎㅎ
하는 설레는 마음으로 오늘은 여기까지!!!
🥰