Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
FastAPIで始める やまなし温泉めぐり
Search
Yuuki Shimizu
July 15, 2021
Programming
0
480
FastAPIで始める やまなし温泉めぐり
2021.7.15
信玄パイ LT大会 みんなの FastAPI LT
Yuuki Shimizu
July 15, 2021
Tweet
Share
More Decks by Yuuki Shimizu
See All by Yuuki Shimizu
サイトを作ったらNFCタグキーホルダーを爆速で作れ!
yuukis
0
880
Perlで痩せる
yuukis
1
780
Pythonで遊べるLEDボードの紹介
yuukis
0
89
今話題のMCPサーバーをFastAPIでサッと作ってみた
yuukis
0
400
地域ITコミュニティの活性化とAWSに移行してみた話
yuukis
0
470
Gemini API を試した話と山梨でオススメのものを語るLT
yuukis
0
88
山梨のIT勉強会コミュニティを盛り上げるためにアレ作ってみた!
yuukis
0
82
FastAPI を活用した オープンデータAPI の作成
yuukis
0
1k
Slack の困りごとを何とかしてみた①
yuukis
0
93
Other Decks in Programming
See All in Programming
なぜGoのジェネリクスはこの形なのか? Featherweight Goが明かす設計の核心
ryotaros
7
1.1k
(Extension DC 2025) Actor境界を越える技術
teamhimeh
1
250
CSC509 Lecture 02
javiergs
PRO
0
410
Web フロントエンドエンジニアに開かれる AI Agent プロダクト開発 - Vercel AI SDK を観察して AI Agent と仲良くなろう! #FEC余熱NIGHT
izumin5210
3
480
ソフトウェア設計の実践的な考え方
masuda220
PRO
4
540
チームの境界をブチ抜いていけ
tokai235
0
140
バッチ処理を「状態の記録」から「事実の記録」へ
panda728
PRO
0
140
GraphQL×Railsアプリのデータベース負荷分散 - 月間3,000万人利用サービスを無停止で
koxya
1
1.2k
After go func(): Goroutines Through a Beginner’s Eye
97vaibhav
0
310
Cloudflare AgentsとAI SDKでAIエージェントを作ってみた
briete
0
130
「ちょっと古いから」って避けてた技術書、今だからこそ読もう
mottyzzz
10
6.4k
CSC509 Lecture 01
javiergs
PRO
1
440
Featured
See All Featured
Navigating Team Friction
lara
189
15k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
The Straight Up "How To Draw Better" Workshop
denniskardys
237
140k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
A Modern Web Designer's Workflow
chriscoyier
697
190k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Code Reviewing Like a Champion
maltzj
525
40k
The World Runs on Bad Software
bkeepers
PRO
71
11k
Transcript
2021. 7. 15 ͠Έͣ Ώ͏͖ 1 ʲ৴ݰύΠ LTେձ ΈΜͳͷ FastAPIʳ
FastAPI Ͱ࢝ΊΔ ·ͳ͠ ԹઘΊ͙Γ
͓·͑୭Αʁ ͠Έͣ Ώ͏͖ • Android / iOS ϓϩάϥϚ • ࢁསੜ·Ε
ࢁསҭͪ ˞ݱࡏ౦ژʹग़Ք͗த 5 2
͡Ίʹ ઌ݄։࠵͞Εͨ৴ݰύΠͷ FastAPI ษڧձ ʮFastAPI Ͱϋδϝϧ PythonʯͰֶΜͩ͜ͱ Λࢀߟʹɺࢼ͠ʹ API Λ࡞ͯ͠Έ·ͨ͠ͷͰ
൸࿐͠·͢ ʢษڧձۀͰࢀՃͰ͖ͳ͔ͬͨͷͰɺࣗश͖ͯ͠·͠ ͨɻࢿྉͷڞ༗͋Γ͕ͱ͏͍͟͝·͢ʂʣ 3
มΘΓ·͕͢ɺ օ͞Μɺ Թઘ ͖Ͱ͔͢ʁ 4
ࢁསԹઘ͕͍ͬͺ͍ʂ • ଟ༷ͳઘ࣭ ◦ “શ෦Ͱ10छྨ͋Δઘ࣭ͷ͏ͪɺࢁསʹ9छྨͷ ઘ࣭͕͋ΓɺશࠃͰτοϓϨϕϧ” • ܠ؍ͷྑ͞ ◦ “ૣே༦Ε࣌ʹଠཅͷޫͰߚ͘છ·Δ࢜ࢁɺ
ߕຍͷ༦Ε͔ΒܠʹҠΔॠؒͷඒ͍͠ܠ ৭ɺࣗવ๛͔ͳܢ୩ඒͳͲɺ༷ʑͳܠ৭ΛԹઘʹ ਁ͔Γͳ͕Βָ͠Ή͜ͱ͕Ͱ͖·͢” 5 ग़యɿ·ͳཱͪ͠دΓඦ໊౬ ؼলͷࡍʹΑཱͪ͘دͬͯ·͢
ࢁསͷԹઘࢪઃΛฦ٫͢ΔAPI Λ FastAPIͰ࡞ͬͯΈͨ 6
ࢁསݝͷΦʔϓϯσʔλΛར༻ 7
8 PDF !!
ં֯ͳͷͰ.... PDF Λͦͷ··ϩʔυͯ͠มޙɺ FastAPI Ͱฦ٫͢ΔΑ͏࣮͠·ͨ͠ 9 Python ศརͩͳʙ
chezou/tabula-py • PDF ϑΝΠϧͷදΛ pandas ͷ DataFrame ΦϒδΣΫτʹ ม͢ΔϥΠϒϥϦ ◦
CSVɺTSVɺJSON ϑΝΠϧʹม ͢Δ͜ͱՄೳ • OCR πʔϧͰͳ͍ • Java 8 Ҏ͕߱ඞཁ 10
main.py - ᶃ PDF ಡΈࠐΈ def check_columns(df, previous_df): difference1 =
set(df.keys()) - set(previous_df.keys()) difference2 = set(previous_df.keys()) - set(df.keys()) return (len(difference1) == 0 and len(difference2) == 0) 11 def get_data(pdf_path): previous_df = pd.DataFrame() dfs = tabula.read_pdf(pdf_path, lattice=True, pages = 'all') for df in dfs: # ෳϖʔδͷදΛ݁߹͢Δ if (check_columns(df, previous_df)): df = pd.concat([previous_df, df]) previous_df = df return previous_df PDFΛಡΈࠐΈɺDataFrame Φϒ δΣΫτΛฦ٫͢Δ ෳϖʔδʹ·͕ͨΔදͷ໊߲ Λൺֱ͠ɺಉ͡ද͔Ͳ͏͔Λఆ ͢Δʢ্ͷ͔ؔΒݺΕΔʣ
main.py - ᶄ API ࡞ 12 app = FastAPI() pdf_path
= "h3012011.pdf" @app.get("/") def read_root(): data = get_data(pdf_path) json_data = data.to_json(orient = 'records') return json.loads(json_data) @app.get("/area/{area}") def read_item(area: str): data = get_data(pdf_path) df_mask = data['市町村名'] == area data = data[df_mask] json_data = data.to_json(orient = 'records') return json.loads(json_data) [get] / શ݅ฦ٫͢Δ API [get] /area/{area} ࢦఆ͞ΕͨࢢொଜͷΈฦ٫͢Δ API
Docker ͍·ͨ͠ 13 Docker Host (VPS) Nginx ϦόʔεϓϩΩγ onsen.yamanashi.dev:443 App
Container FastAPI localhost:45280 main.py ࢁསݝ WebαΠτ PDF PDF tiangolo/uvicorn-gunicorn-fastapi :python3.8-alpine3.10 ্هͷΠϝʔδΛϕʔεʹ openjdk11 ΛΠϯετʔϧ ͨ͠ͷΛ༻ ࠓճݝαΠτʹෛՙ͕͔͔Βͳ͍Α͏ɺ PDFΛࣄલʹίϯςφʹίϐʔ
DEMO 14 https://onsen.yamanashi.dev
͍͞͝ʹ 15
ࡶײɾ·ͱΊ ʮFastAPI Ͱ࢝ΊΔ ·ͳ͠ ԹઘΊ͙Γʯ • FastAPI Φʔϓϯσʔλ͔Βखܰʹ API Λ࡞͢Δͷʹྑͦ͞͏
◦ Tabula ͱΈ߹ΘͤΔ͜ͱͰɺPDF ϑΝΠϧ FastAPI ʹࡌͤΔ͜ͱ͕Մೳ ◦ PDFϑΝΠϧͷมʹ͕͔͔͍࣌ؒͬͯΔͷͰɺதؒσʔλΛอଘ͢Δͷ ͕͍Δ͔ • ͓ؾʹೖΓͷԹઘࢪઃΛථ͢Δ API ͷ࡞ೝূࢼͯ͠Έ͍ͨ • ·ͩߦͬͨ͜ͱͷͳ͍ԹઘࢪઃΛ৭ʑΕͯྑ͔ͬͨʂ 16
ʲิʳ࠷ۙ ͓ؾʹೖΓͷؼΓԹઘ ᶃΈ͔͞ͷ౬ ԘαφͰ͓ഽεϕεϕʹʂ ᶄ࡚ѴԹઘ ମʹͼͬ͠Γ͘๐ͷࢎԹઘ ᶅ૿ͷ౬ ԹͷݯઘͰ࣌ؒΏͬ͘Γਁ͔ΕΔ 17 ΦεεϝͷԹઘࢪઃ͕͋ͬͨΒ
ੋඇڭ͍͑ͯͩ͘͞ʂ