python(13) open API + GUI

hyukstory·2020년 8월 26일
0

python

목록 보기
19/35

<< 네이버 open API 통해 크롤링 하는 GUI 만들기>>

블로그 크롤링하는 함수 정의

def naverBlogOpenAPI(x,y,z) :
    

    import requests
    from urllib.parse import urlparse
    
    
    file = open("블로그openAPI+GUI.txt", 'w', encoding = "UTF-8")
    
    
    keyword = str(x)
    
    i = 1
    
    for i in range(1, y+1) : 
        if i == 1 :
            url = "https://openapi.naver.com/v1/search/blog?query=" + \
                keyword + "&display=" + str(z) + "&start=" + str(i)
        elif i > 1 :
            url = "https://openapi.naver.com/v1/search/blog?query=" + \
                keyword + "&display=" + str(z) + "&start=" + str((i-1)*z + 1)
        
                
        result = requests.get(urlparse(url).geturl(),
                             headers={"X-Naver-Client-Id":"클라이언트 아이디",
                                      "X-Naver-Client-Secret":"클라이언트 비밀번호"})
        
        json_data = result.json()
        
        
        # for문으로 내용 뽑아서 파일 만들기
        for item in json_data['items']:
            file.write("[제목] : " + item['title'].replace("<b>", "").replace("</b>", "") + "\n")       # <b> </b> 제거
            file.write("[본문] : " + item['description'].replace("<b>", "").replace("</b>", "") + "\n")
            file.write('========================================' + '\n')
        
        file.write("\n" + "<<<<<<<<<<<<<<<<<<<<" + str(i*z) + "개 완료" + ">>>>>>>>>>>>>>>>>>>>" + "\n\n")
        
    file.close()

GUI 만들기

import tkinter as tk
from tkinter import ttk


#인스턴스 만들기
win = tk.Tk()

# 타이틀 정하기
win.title("Bigdata GUI")

# 창 사이즈
win.geometry("640x480")

# 사이즈 조절 가능 여부 설정 (세로, 가로)
win.resizable(True, True) # (세로 고정, 가로 조절 가능)

# 레이블 추가
label = ttk.Label(win, text = "검색어를 입력하세요 :")
label.grid(column = 0, row = 0)

label2 = ttk.Label(win, text = "start_point를 입력하세요 :")
label2.grid(column = 0, row = 1)

label3 = ttk.Label(win, text = "display_count를 입력하세요 :")
label3.grid(column = 0, row = 2)




# 텍스트 박스 추가
## 첫번째 텍스트 박스 : 검색어 값
name = tk.StringVar()
name_entered = ttk.Entry(win, width = 12, textvariable = name)
name_entered.grid(column=1, row=0)

## 두번째 텍스트 박스 : start_point 값
name2 = tk.StringVar()
name2_entered = ttk.Entry(win, width = 12, textvariable = name2)
name2_entered.grid(column=1, row=1)

## 세번째 텍스트 박스 : display_count 값
name3 = tk.StringVar()
name3_entered = ttk.Entry(win, width = 12, textvariable = name3)
name3_entered.grid(column=1, row=2)






# 버튼 클릭 함수 정의 (에러 체크 까지)
def click_me() :
    name_err = "T"
    label.configure(text = '완료', foreground = 'blue')
    if name.get() == "":   # 검색어가 오류면
        name_err = "F"
        label.configure(text='한 글자 이상 입력하세요.', \
                        foreground='red')


    name2_err = "T"
    label2.configure(text = '완료', foreground = 'blue')
    if int(name2.get()) > 1000 or int(name2.get()) < 1   :   # start_point 가 오류면
        name2_err = "F"
        label2.configure(text = '1 ~ 1000 사이의 값을 입력해주세요.', \
                         foreground = 'red')



    name3_err = "T"
    label3.configure(text = '완료', foreground = 'blue')
    if int(name3.get()) > 100 or int(name3.get()) < 10  :   # display_count 가 오류면
        name3_err = "F"
        label3.configure(text = '10 ~ 100 사이의 값을 입력해주세요.',\
                         foreground = 'red')



    if name_err == "T" and name2_err == "T" and name3_err == "T":    # 오류 없으면
        action.configure(text = name.get() + " 관련 블로그를 " + \
                         str(int(name2.get()) * int(name3.get())) + "개 크롤링 합니다.")  # 버튼에 나타나는 글자
        
        naverBlogOpenAPI(name.get(), int(name2.get()), int(name3.get()))
        
        
    else:       # 하나라도 오류면
        action.configure(text = "입력값 수정 후 다시 누르세요.")   # 버튼에 나타나는 글자





# 버튼 추가
action = ttk.Button(win, text = "검색을 시작합니다!", command = click_me)
action.grid(column = 1, row = 3)



# 실행
win.mainloop() 
profile
문돌이의 고군분투 개발 공부

0개의 댓글