Google Sheets, S3, Python을 사용하여 빠른 웹 사이트 구축
이 강좌에서는 Google Sheets에서 데이터를 읽고 미리 정의된 템플릿으로 정적 사이트를 생성하여 S3 bucket에 배치하는 스크립트를 설정합니다.본고는 웹 개발에 대해 아는 것이 매우 적고 무언가를 신속하게 실행하고자 하는 프로그래머를 대상으로 한다.
이 강좌는 요구 사항, 코드 보기 및 Jinja 템플릿, Google Sheets API 사용, 사이트 구축 및 배포 등 다섯 가지 섹션으로 구성됩니다.
요구 사항
이것들은 네가 스스로 설정하거나 검사해야 한다.나는 이 때문에 약간의 링크를 추가했다.
AWS CLI(가능use brew if you have a Mac
코드 및 Jinja 템플릿
먼저
my_pokemon_stats
라는 디렉터리를 만들고 터미널을 엽니다.그런 다음 다음과 같이 가상 환경을 만들고 필요한 패키지를 설치합니다.python3 -m venv venv
source venv/bin/activate
pip3 install boto3 gspread jinja2 oauth2client
다음은 이 두 파일을 다운로드하고 저장합니다: template.html과site_builder.py.이것은 사이트를 생성하는 구축 블록입니다.template.html
사이트를 구축하는 데 사용할 Jinja 템플릿입니다.이것은 파이썬에서 처리할 논리를 추가하고 최종 사이트를 생성할 수 있는 HTML과 유사한 파일입니다.이 파일은 다음과 같습니다.<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<title>My Pokemon Stats</title>
</head>
<body>
<header id="header">
<div class="container text-center">
<h1 class="pt-5 pb-1 font-weight-bold">
My Pokemon Stats
</h1>
<hr>
<p class="pt-2">
This is a site I use to store the stats of all my Pokemon.
</p>
</div>
</header>
<section id="pokemon_table">
<div class="container py-4">
<div class="table-responsive">
<table class="table table-hover">
<thead class="thead-dark">
<tr>
<th scope="col">Name</th>
<th scope="col">Type 1</th>
<th scope="col">Type 2</th>
<th scope="col">Total</th>
<th scope="col">HP</th>
<th scope="col">Attack</th>
<th scope="col">Defense</th>
</tr>
</thead>
<tbody>
{% for row in data %}
<tr>
<td>{{ row["Name"] }}</td>
<td>{{ row["Type 1"] }}</td>
<td>{{ row["Type 2"] }}</td>
<td>{{ row["Total"] }}</td>
<td>{{ row["HP"] }}</td>
<td>{{ row["Attack"] }}</td>
<td>{{ row["Defense"] }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</section>
</body>
</html>
그것을 분해합시다.<head>
과 <link>
을 자세히 볼 것이다.<title>
태그는 구성 요소 라이브러리를 가져오는 데 사용됩니다.우리는 그것을 사용하여 페이지의 다른 부분에 간단한 스타일을 정의하고 그것을 보기 좋게 할 것이다. 너무 많은 노력을 기울일 필요가 없다.<link>
페이지의 제목(브라우저 탭에서 본 내용)을 정의하여 검색 엔진 최적화와 소셜 미디어 공유에 매우 유용합니다.<title>
라벨에 <header>
부분이 있습니다.이것은 우리가 페이지에 나타날 텍스트를 정의하는 곳이다.다음 그림과 같습니다.안내선의 표준 스타일을 사용하여 텍스트를 가운데에 배치하고 채우기를 추가했습니다.<body>
를 얻었다.<section id="pokemon_table">
및 <div>
표기는 표 구축에 기본적인 양식을 제공했다.다음은 <table>
표기 안에 표의 제목을 정의합니다.<thead>
라벨 안에 김가가 마법을 펼치는 곳<tbody>
는 포켓몬의 줄마다 데이터를 통해 순환하는 것이다.각 {% for row in data %}
에서는 필드에서 각 행에 대한 정보를 얻습니다(예: 이름, 유형 1, 유형 2).그러면 다음과 같은 내용이 생성됩니다. 다음은
<td>{{ row["..."] }}</td>
파일입니다.이 스크립트는 Google Sheets에서 포켓몬 데이터를 다운로드하여 데이터와 site_builder.py
파일을 처리한 다음 생성된 파일을 S3 저장소에 업로드합니다.import csv
import boto3
import gspread
import jinja2
from oauth2client.service_account import ServiceAccountCredentials
AWS_PROFILE = "INSERT-AWS-PROFILE-HERE"
BUCKET = "INSERT-BUCKET-NAME-HERE"
WORKBOOK = "INSERT-WORKBOOK-NAME-HERE"
def download_data():
"""Download data using the Google Sheets API"""
scope = [
"https://spreadsheets.google.com/feeds",
"https://www.googleapis.com/auth/drive",
]
credentials = ServiceAccountCredentials.from_json_keyfile_name(
"credentials.json", scope
)
client = gspread.authorize(credentials)
worksheet = client.open(WORKBOOK).get_worksheet(0)
sheet_values = worksheet.get_all_values()
print(f"Downloading: {worksheet.title}")
with open("my_pokemon_stats.csv", "w") as f:
writer = csv.writer(f)
writer.writerows(sheet_values)
def generate_site():
"""Generate site in local directory"""
print("Process data and build site")
template_loader = jinja2.FileSystemLoader(searchpath="./")
template_env = jinja2.Environment(loader=template_loader)
template = template_env.get_template("template.html")
with open("my_pokemon_stats.csv") as csv_file:
csv_reader = csv.DictReader(csv_file)
data = [row for row in csv_reader]
output = template.render(data=data)
with open("index.html", "w") as f:
f.write(output)
def deploy_site():
"""Deploy site S3 bucket"""
print("Upload data to S3")
session = boto3.Session(profile_name=AWS_PROFILE)
s3 = session.resource("s3")
s3.Bucket(BUCKET).upload_file(
Filename="index.html", Key="index.html", ExtraArgs={"ContentType": "text/html"}
)
if __name__ == "__main__":
download_data()
generate_site()
deploy_site()
코드는 3개의 함수로 구성되어 있다. template.html
, download_sheets
, generate_site
.다음 섹션에서는 AWS 및 Google Sheets API 액세스에 대해 자세히 설명합니다.Google Sheets API 사용
다음 절차에 따라 Google Sheets API를 사용하여 포켓몬 데이터를 다운로드합니다.
deploy_site
디렉토리로 복사하고 이름을 my_pokemon_stats
로 변경합니다.credentials.json
라는 키를 찾아 값을 복사합니다(예: Google APIs Console...).Google Sheets의 워크북으로 돌아가서 오른쪽 상단에 있는 공유 버튼을 클릭하여 클라이언트 전자 메일을 연락처 필드에 붙여 편집 권한을 부여합니다.클릭하여 발송합니다.credentials.json
변수를 1단계에서 워크북에 지정한 이름으로 설정합니다.구글 API 콘솔 S3 bucket 및 AWS 관련 구성 설정
이제 S3 bucket을 만들고 코드를 프로그래밍 방식으로 AWS에 액세스하도록 구성합니다.
client_email
{
"Version":"2012-10-17",
"Statement":[{
"Sid":"PublicReadGetObject",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::BUCKET-NAME-HERE/*"
]
}
]
}
site_builder.py
를 AWS에 액세스하는 데 사용할 프로필 이름으로 설정합니다(UNIX 시스템에서는 WORKBOOK
의 프로필 중 하나여야 합니다.).사이트 구축 및 배포
마지막으로 프로젝트의 루트 폴더
index.html
에서 사이트를 생성할 수 있어야 합니다.Google Sheets에서 데이터를 다운로드하고 Jinja 처리site_builder.py
파일을 사용하여 S3 bucket에 사이트를 업로드합니다.사이트를 확인하려면 끝 URL로 이동합니다(이전 단계 6).
Amazon S3 콘솔 끝말
이런 방법은 결코 완벽하지는 않지만, 당신이 신속하게 물건을 발송하는 것을 도울 수 있습니다.나는 이 전략을 사용하여 구축 하였는데, 효과가 매우 좋다.4월 1일부터 4월 16일까지 이 사이트에는 15000여 명의 방문객이 있는데 이것은 내가 가장 낙관적인 기대를 초과했다.
이 사이트는 서서히 죽음으로 향하고 있다.그러나 이 과정은 나에게 시간을 낭비하지 않고 완벽한 도구를 찾는 것이 얼마나 중요한지 가르쳐 주었다.나는 아주 빨리 이 사이트를 세웠는데, 사람들은 모두 매우 좋아한다. 첫날 이후, 그 데이터는 내가 지금까지 한 어떤 보조 항목도 초과했다.완벽은 선의 적이다. 이것은 정말이다.
내 예에서, 나는 스타일 디자인과 배치를 위해 스크립트에 더 많은 기능을 추가해야 한다.관심이 있으시면 mystayhomeandlearn.org의 코드를 보실 수 있습니다.또는 의 다른 글을 참조하십시오.
마지막으로 당신의 사이트를 더욱 재미있게 하기 위해서 당신은 지금 몇 가지 일을 할 수 있습니다.
도메인 및 SSL 인증서 가져오기 공구서류
[1] G.Bauges,Make it look better!(2017)
[2] V.Drake,H (2017)
[3] A.Barradas,Google Spreadsheets and Python(2016)
Reference
이 문제에 관하여(Google Sheets, S3, Python을 사용하여 빠른 웹 사이트 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/dylanjcastillo/use-google-sheets-s3-and-python-to-build-a-website-quickly-1d5b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)