gui 버전, 날짜를 사용자가 입력할 수 있도록 수정.

This commit is contained in:
2025-07-03 11:42:44 +09:00
parent b2fce6fb76
commit 663e90e526

89
naver_review/run.py Normal file
View File

@ -0,0 +1,89 @@
import tkinter as tk
from tkinter import ttk, scrolledtext, messagebox
from datetime import datetime, timedelta
import threading
import main # main.py가 같은 폴더에 있어야 함
def get_yesterday_str():
return (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d")
def run_crawler_thread(place_ids, start_date, end_date, output_widget, run_button):
def task():
try:
output_widget.config(state='normal')
output_widget.delete("1.0", tk.END)
output_widget.insert(tk.END, f"크롤링 시작: {start_date} ~ {end_date}\n\n")
start_date_obj = datetime.strptime(start_date, "%Y-%m-%d").date()
end_date_obj = datetime.strptime(end_date, "%Y-%m-%d").date()
for place_id in place_ids:
output_widget.insert(tk.END, f"[업체 ID: {place_id}] 리뷰 수집 중...\n")
shop_name, reviews = main.crawl_reviews_within_range(place_id, start_date_obj, end_date_obj)
output_widget.insert(tk.END, f"업체명: {shop_name}\n")
output_widget.insert(tk.END, f"수집 리뷰 수: {len(reviews)}\n")
for i, r in enumerate(reviews, 1):
output_widget.insert(tk.END, f"{i}. 작성자: {r['writer']}, 날짜: {r['date']}\n")
output_widget.insert(tk.END, f" 내용: {r['text']}\n")
output_widget.insert(tk.END, "\n")
output_widget.insert(tk.END, "크롤링 완료!\n")
output_widget.config(state='disabled')
except Exception as e:
messagebox.showerror("오류", f"크롤링 중 오류 발생:\n{e}")
output_widget.config(state='disabled')
finally:
run_button.config(state='normal')
run_button.config(state='disabled')
threading.Thread(target=task, daemon=True).start()
def create_gui():
root = tk.Tk()
root.title("네이버 플레이스 리뷰 크롤러")
frm = ttk.Frame(root, padding=10)
frm.grid()
ttk.Label(frm, text="시작일 (YYYY-MM-DD):").grid(column=0, row=0, sticky='w')
start_entry = ttk.Entry(frm, width=15)
start_entry.grid(column=1, row=0)
start_entry.insert(0, get_yesterday_str())
ttk.Label(frm, text="종료일 (YYYY-MM-DD):").grid(column=0, row=1, sticky='w')
end_entry = ttk.Entry(frm, width=15)
end_entry.grid(column=1, row=1)
end_entry.insert(0, get_yesterday_str())
output = scrolledtext.ScrolledText(frm, width=80, height=25, state='disabled')
output.grid(column=0, row=3, columnspan=3, pady=10)
def on_run():
start_date = start_entry.get()
end_date = end_entry.get()
# 날짜 형식 검증
try:
datetime.strptime(start_date, "%Y-%m-%d")
datetime.strptime(end_date, "%Y-%m-%d")
except ValueError:
messagebox.showerror("입력 오류", "날짜 형식을 YYYY-MM-DD 로 입력하세요.")
return
place_ids = getattr(main.config, "PLACE_IDS", [])
if not place_ids:
messagebox.showerror("설정 오류", "config.py에 PLACE_IDS 리스트가 비어있습니다.")
return
run_crawler_thread(place_ids, start_date, end_date, output, run_button)
run_button = ttk.Button(frm, text="실행", command=on_run)
run_button.grid(column=0, row=2, pady=5)
root.mainloop()
if __name__ == "__main__":
create_gui()