-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinternetbook.py
More file actions
140 lines (118 loc) · 4.45 KB
/
internetbook.py
File metadata and controls
140 lines (118 loc) · 4.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# -*- coding: cp949 -*-
from xmlbook import *
from http.client import HTTPConnection
from http.server import BaseHTTPRequestHandler, HTTPServer
##global
conn = None
#regKey = 'c1b406b32dbbbbeee5f2a36ddc14067f' #네이버 OpenAPI 테스트키
regKey = 'c65f7d130ef99a3dd1826fde11f9b0b3' #다음 OpenAPI 키
#server = "openapi.naver.com" #네이버 OpenAPI 서버
server = "apis.daum.net" #다음 OpenAPI 서버
# smtp 정보
host = "smtp.gmail.com" # Gmail SMTP 서버 주소.
port = "587"
def userURIBuilder(server,**user):
# str = "http://" + server + "/search" + "?" #네이버 검색 URL
str = "https://" + server + "/search/book" + "?" #다음 검색 URL
for key in user.keys():
str += key + "=" + user[key] + "&"
return str
def connectOpenAPIServer():
global conn, server
conn = HTTPConnection(server)
def getBookDataFromISBN(isbn):
global server, regKey, conn
if conn == None :
connectOpenAPIServer()
# uri = userURIBuilder(server, key=regKey, query='%20', display="1", start="1", target="book_adv", d_isbn=isbn) #네이버 검색 URL
uri = userURIBuilder(server, apikey=regKey, q=isbn, output="xml") #다음 검색 URL
conn.request("GET", uri)
req = conn.getresponse()
print (req.status)
if int(req.status) == 200 :
print("Book data downloading complete!")
return extractBookData(req.read())
else:
print ("OpenAPI request has been failed!! please retry")
return None
def extractBookData(strXml):
from xml.etree import ElementTree
tree = ElementTree.fromstring(strXml)
print (strXml)
# Book 엘리먼트를 가져옵니다.
itemElements = tree.getiterator("item") # return list type
print(itemElements)
for item in itemElements:
isbn = item.find("isbn")
strTitle = item.find("title")
print (strTitle)
if len(strTitle.text) > 0 :
return {"ISBN":isbn.text,"title":strTitle.text}
def sendMain():
global host, port
html = ""
title = str(input ('Title :'))
senderAddr = str(input ('sender email address :'))
recipientAddr = str(input ('recipient email address :'))
msgtext = str(input ('write message :'))
passwd = str(input (' input your password of gmail account :'))
msgtext = str(input ('Do you want to include book data (y/n):'))
if msgtext == 'y' :
keyword = str(input ('input keyword to search:'))
html = MakeHtmlDoc(SearchBookTitle(keyword))
# import mysmtplib
import smtplib
# MIMEMultipart의 MIME을 생성합니다.
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
#Message container를 생성합니다.
msg = MIMEMultipart('alternative')
#set message
msg['Subject'] = title
msg['From'] = senderAddr
msg['To'] = recipientAddr
msgPart = MIMEText(msgtext, 'plain')
bookPart = MIMEText(html, 'html', _charset = 'UTF-8')
# 메세지에 생성한 MIME 문서를 첨부합니다.
msg.attach(msgPart)
msg.attach(bookPart)
print ("connect smtp server ... ")
#s = mysmtplib.MySMTP(host,port)
s = smtplib.SMTP(host,port)
#s.set_debuglevel(1)
s.ehlo()
s.starttls()
s.ehlo()
s.login(senderAddr, passwd) # 로긴을 합니다.
s.sendmail(senderAddr , [recipientAddr], msg.as_string())
s.close()
print ("Mail sending complete!!!")
class MyHandler(BaseHTTPRequestHandler):
def do_GET(self):
from urllib.parse import urlparse
import sys
parts = urlparse(self.path)
keyword, value = parts.query.split('=',1)
if keyword == "title" :
html = MakeHtmlDoc(SearchBookTitle(value)) # keyword에 해당하는 책을 검색해서 HTML로 전환합니다.
##헤더 부분을 작성.
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write(html.encode('utf-8')) # 본분( body ) 부분을 출력 합니다.
else:
self.send_error(400,' bad requst : please check the your url') # 잘 못된 요청라는 에러를 응답한다.
def startWebService():
try:
server = HTTPServer( ('localhost',8080), MyHandler)
print("started http server....")
server.serve_forever()
except KeyboardInterrupt:
print ("shutdown web server")
server.socket.close() # server 종료합니다.
def checkConnection():
global conn
if conn == None:
print("Error : connection is fail")
return False
return True