kindle manager
This commit is contained in:
9
1.htm
9
1.htm
@@ -1,9 +0,0 @@
|
|||||||
<html>
|
|
||||||
<span style='font-size:22pt;color:maroon'><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⡷</span>
|
|
||||||
<span style='font-size:22pt;color:maroon'><EFBFBD><EFBFBD><EFBFBD><EFBFBD></span>
|
|
||||||
<span style='font-size:22pt;color:maroon'>ʱ<EFBFBD><EFBFBD></span>
|
|
||||||
<span style='font-size:11pt;color:maroon'><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD></span><br>
|
|
||||||
<span>********************************************************</span><br>
|
|
||||||
<span style='font-size:11.0pt;color:#31849B'><EFBFBD><EFBFBD><EFBFBD><EFBFBD></span>
|
|
||||||
<span style='font-size:14pt;color:maroon'><EFBFBD><EFBFBD>P123-126<32><36></span><br>
|
|
||||||
</html>
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
14
changelog.md
14
changelog.md
@@ -84,18 +84,22 @@ b['1']['2'] = {'3':1} # OK
|
|||||||
## learn lesson
|
## learn lesson
|
||||||
|
|
||||||
|
|
||||||
|
## 1.1.0 (20200617)
|
||||||
|
### feature
|
||||||
|
- book information grabbed from douban / amazon
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# feature list
|
# feature list
|
||||||
- first abstract from kindle hard / local directory for different OS **done**
|
- first abstract from kindle hard / local directory for different OS **:white_check_mark:**
|
||||||
- add GUI use QT **done**
|
- add GUI use QT :white_check_mark:
|
||||||
- use thread to check kindle connection status **done**
|
- use thread to check kindle connection status :white_check_mark:
|
||||||
- import function:
|
- import function:
|
||||||
- local **done**
|
- local **done**
|
||||||
- kindle **done**
|
- kindle **done**
|
||||||
- duokan **doing**
|
- duokan **doing**
|
||||||
- amazon **doing**
|
- amazon **doing**
|
||||||
- link to douban and amazon **doing**
|
- link to douban and amazon **done**
|
||||||
- export function:
|
- export function:
|
||||||
- to [evernote](https://github.com/benhorvath/kindle2evernote/blob/master/kindle2evernote.py)
|
- to [evernote](https://github.com/benhorvath/kindle2evernote/blob/master/kindle2evernote.py)
|
||||||
- to web html format
|
- to web html format
|
||||||
@@ -105,7 +109,7 @@ b['1']['2'] = {'3':1} # OK
|
|||||||
- markdown **done**
|
- markdown **done**
|
||||||
- easily copy filter notes to clipboard
|
- easily copy filter notes to clipboard
|
||||||
- implement command line based on [argparse](https://www.jianshu.com/p/a41fbd4919f8)
|
- implement command line based on [argparse](https://www.jianshu.com/p/a41fbd4919f8)
|
||||||
- mobi / epub reader **XXXX**
|
- mobi / epub reader :X:
|
||||||
- import .azw3/.epub/.mobi file to kindle
|
- import .azw3/.epub/.mobi file to kindle
|
||||||
- [convert](https://github.com/jianyun8023/convert-ebook) .epub -> .mobi <br>
|
- [convert](https://github.com/jianyun8023/convert-ebook) .epub -> .mobi <br>
|
||||||
.azw3 -> .mobi <br>
|
.azw3 -> .mobi <br>
|
||||||
|
|||||||
BIN
downimg/s2065468.jpg
Normal file
BIN
downimg/s2065468.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.3 KiB |
BIN
downimg/s23509692.jpg
Normal file
BIN
downimg/s23509692.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.9 KiB |
BIN
downimg/s24422928.jpg
Normal file
BIN
downimg/s24422928.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 20 KiB |
BIN
downimg/s33600743.jpg
Normal file
BIN
downimg/s33600743.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 24 KiB |
80
kmanapp.py
80
kmanapp.py
@@ -36,12 +36,23 @@ notes_temp = """<br><span style='font-size:18pt;color:maroon'>《{bookname}》</
|
|||||||
<span style='font-size:18pt;color:#31849B'>{content}</span>
|
<span style='font-size:18pt;color:#31849B'>{content}</span>
|
||||||
<span style='font-size:11pt;color:maroon'>【P{position}】</span><br>"""
|
<span style='font-size:11pt;color:maroon'>【P{position}】</span><br>"""
|
||||||
|
|
||||||
infos_temp = """<br><span style='font-size:18pt;color:maroon'>
|
infos_temp = """<table border="0">
|
||||||
<a href="3school.com.cn/" target="_blank">《{bookname}》</a></span>
|
<tr>
|
||||||
<span style='font-size:18pt;color:maroon'> {author} </span>
|
<td width = 20> </td>
|
||||||
<span style='font-size:18pt;color:maroon'> ({time}) </span>
|
<td valign="top">
|
||||||
<span style='font-size:18pt;color:#31849B'>{rate}★ ☆</span>
|
<font size="4" color="black"></font><br>
|
||||||
<span style='font-size:11pt;color:maroon'>{img}</span><br>"""
|
<a href={link}><font size="8" color="darkred">{bookname}</font></a><br><br>
|
||||||
|
<font size="4" color="black">作者 : {author}</font><br><br>
|
||||||
|
<font size="4" color="yellow">评论数 : {ratenum}</font> <br><br>
|
||||||
|
<font size="4" color="black">评分 : {score}</font> <br><br>
|
||||||
|
<font size="4" color="green">出版社 : {publisher}</font><br><br>
|
||||||
|
<font size="4">出版时间 : {publishing}</font> <br><br>
|
||||||
|
</td>
|
||||||
|
<td style="border-left:1px solid lightgray;"> </td>
|
||||||
|
<td width=100> </td>
|
||||||
|
<td> <img style="max-width:220px;" src="/Users/mark/kman/downimg/{img}" > </td>
|
||||||
|
</tr>
|
||||||
|
</table>"""
|
||||||
|
|
||||||
words_temp = """<br><span style='font-size:18pt;color:#31849B'>{usage}</span><br><br>
|
words_temp = """<br><span style='font-size:18pt;color:#31849B'>{usage}</span><br><br>
|
||||||
<span style='font-size:14pt;color:#2F4F4F'> {bookname} </span>
|
<span style='font-size:14pt;color:#2F4F4F'> {bookname} </span>
|
||||||
@@ -187,6 +198,7 @@ class kmanWindow(QMainWindow):
|
|||||||
2 - textedit , note table view clicked
|
2 - textedit , note table view clicked
|
||||||
3 - tablevew + textedit , word tree view clicked
|
3 - tablevew + textedit , word tree view clicked
|
||||||
4 - textedit , word table view clicked
|
4 - textedit , word table view clicked
|
||||||
|
5 - textedit , info tree view clicked
|
||||||
"""
|
"""
|
||||||
# refresh tableview click note tree
|
# refresh tableview click note tree
|
||||||
if comp in [1,2]:
|
if comp in [1,2]:
|
||||||
@@ -213,6 +225,8 @@ class kmanWindow(QMainWindow):
|
|||||||
self.ui.textEdit.setHtml(tt)
|
self.ui.textEdit.setHtml(tt)
|
||||||
elif comp in [3,4]:
|
elif comp in [3,4]:
|
||||||
self.render_textedit_words(self.words_data)
|
self.render_textedit_words(self.words_data)
|
||||||
|
elif comp == 5:
|
||||||
|
self.render_textedit_infos(self.books_info)
|
||||||
|
|
||||||
self.show_status_info()
|
self.show_status_info()
|
||||||
|
|
||||||
@@ -239,6 +253,35 @@ class kmanWindow(QMainWindow):
|
|||||||
|
|
||||||
self.ui.textEdit.setHtml(txt)
|
self.ui.textEdit.setHtml(txt)
|
||||||
|
|
||||||
|
'''
|
||||||
|
{
|
||||||
|
"金融的本质": {
|
||||||
|
"link": "https://book.douban.com/subject/25843334",
|
||||||
|
"bookname": "金融的本质",
|
||||||
|
"img": "https://img9.doubanio.com/view/subject/s/public/s27246465.jpg",
|
||||||
|
"score": "8.2",
|
||||||
|
"ratenum": "893",
|
||||||
|
"publisher": "中信出版社",
|
||||||
|
"publishing": "2014",
|
||||||
|
"author": "【美】伯南克/巴曙松"
|
||||||
|
}
|
||||||
|
'''
|
||||||
|
def render_textedit_infos(self, idata, selectitem):
|
||||||
|
""" render textedit for book information
|
||||||
|
Args:
|
||||||
|
idata - books_info
|
||||||
|
selectitem - text of treeitem selected
|
||||||
|
"""
|
||||||
|
|
||||||
|
if selectitem in list(idata.keys()):
|
||||||
|
vv = idata[selectitem]
|
||||||
|
self.ui.textEdit.setHtml(infos_temp.format(link=vv['link'],bookname=vv['bookname'],
|
||||||
|
author=vv['author'], ratenum=vv['ratenum'],
|
||||||
|
score=vv['score'], publisher=vv['publisher'],
|
||||||
|
publishing=vv['publishing'],img=vv['img'].split('/')[-1]))
|
||||||
|
else: pass
|
||||||
|
|
||||||
|
|
||||||
def convert_to_panda(self, mlist, tp=0):
|
def convert_to_panda(self, mlist, tp=0):
|
||||||
if tp==0:
|
if tp==0:
|
||||||
pdframe = pd.DataFrame(mlist, \
|
pdframe = pd.DataFrame(mlist, \
|
||||||
@@ -264,18 +307,26 @@ class kmanWindow(QMainWindow):
|
|||||||
self.filter_list = None
|
self.filter_list = None
|
||||||
info = re.split(r'\s+',item.text())[0]
|
info = re.split(r'\s+',item.text())[0]
|
||||||
comp = 0
|
comp = 0
|
||||||
|
if self.tree_selected.split('_')[0] == 'info':
|
||||||
|
self.ui.tableView.setVisible(False)
|
||||||
|
self.render_textedit_infos(self.books_info, item.text())
|
||||||
|
comp = 5
|
||||||
|
else:
|
||||||
|
self.ui.tableView.setVisible(True)
|
||||||
|
|
||||||
|
# refresh filter clips(tableview) after tree item clicked
|
||||||
if self.tree_selected in ['note_root', 'note_bookname', 'note_author']:
|
if self.tree_selected in ['note_root', 'note_bookname', 'note_author']:
|
||||||
[self.filter_books, self.filter_list] = self.km.filter_clips(self.books_data)
|
[self.filter_books, self.filter_list] = self.km.filter_clips(self.books_data)
|
||||||
comp = 1
|
comp = 1
|
||||||
elif self.tree_selected in ['word_root', 'word_bookname']:
|
|
||||||
self.filter_list = self.km.filter_words(self.words_data)
|
|
||||||
comp = 3
|
|
||||||
elif self.tree_selected == 'note_bleaf': # bookname leaf
|
elif self.tree_selected == 'note_bleaf': # bookname leaf
|
||||||
comp = 1
|
comp = 1
|
||||||
[self.filter_books, self.filter_list] = self.km.filter_clips(self.books_data, info, 1)
|
[self.filter_books, self.filter_list] = self.km.filter_clips(self.books_data, info, 1)
|
||||||
elif self.tree_selected == 'note_aleaf': # author leaf
|
elif self.tree_selected == 'note_aleaf': # author leaf
|
||||||
comp = 1
|
comp = 1
|
||||||
[self.filter_books, self.filter_list] = self.km.filter_clips(self.books_data, info, 2)
|
[self.filter_books, self.filter_list] = self.km.filter_clips(self.books_data, info, 2)
|
||||||
|
elif self.tree_selected in ['word_root', 'word_bookname']:
|
||||||
|
self.filter_list = self.km.filter_words(self.words_data)
|
||||||
|
comp = 3
|
||||||
elif self.tree_selected == 'word_leaf': # word bookname leaf
|
elif self.tree_selected == 'word_leaf': # word bookname leaf
|
||||||
comp = 3
|
comp = 3
|
||||||
self.filter_list = self.km.filter_words(self.words_data, info)
|
self.filter_list = self.km.filter_words(self.words_data, info)
|
||||||
@@ -304,7 +355,8 @@ class kmanWindow(QMainWindow):
|
|||||||
"""
|
"""
|
||||||
if not index.isValid(): return
|
if not index.isValid(): return
|
||||||
|
|
||||||
if self.tree_selected.split('_')[0]=='note':
|
ss = self.tree_selected.split('_')[0]
|
||||||
|
if ss=='note':
|
||||||
row = index.row()
|
row = index.row()
|
||||||
stype = index.sibling(row, 0).data()
|
stype = index.sibling(row, 0).data()
|
||||||
sbookname = index.sibling(row, 1).data()
|
sbookname = index.sibling(row, 1).data()
|
||||||
@@ -316,7 +368,7 @@ class kmanWindow(QMainWindow):
|
|||||||
self.ui.textEdit.setHtml(notes_temp.format(
|
self.ui.textEdit.setHtml(notes_temp.format(
|
||||||
bookname=sbookname, author=sauthor, time=stime,
|
bookname=sbookname, author=sauthor, time=stime,
|
||||||
note=stype, content=scontent, position=sposition))
|
note=stype, content=scontent, position=sposition))
|
||||||
else:
|
elif ss=='note':
|
||||||
self.render_textedit_words(self.words_data)
|
self.render_textedit_words(self.words_data)
|
||||||
|
|
||||||
def search_button_clicked(self):
|
def search_button_clicked(self):
|
||||||
@@ -486,7 +538,7 @@ class kmanWindow(QMainWindow):
|
|||||||
word_bookname_item.appendRow(item)
|
word_bookname_item.appendRow(item)
|
||||||
|
|
||||||
# add infos root
|
# add infos root
|
||||||
self.ui.tableView.hide()
|
self.ui.tableView.setVisible(True)
|
||||||
info_rootItem = self.ui.model.invisibleRootItem()
|
info_rootItem = self.ui.model.invisibleRootItem()
|
||||||
item = QStandardItem('All Books({})'.format(len(self.books_info.keys())))
|
item = QStandardItem('All Books({})'.format(len(self.books_info.keys())))
|
||||||
icon = QIcon()
|
icon = QIcon()
|
||||||
@@ -507,7 +559,7 @@ class kmanWindow(QMainWindow):
|
|||||||
for k in self.books_info.keys():
|
for k in self.books_info.keys():
|
||||||
item = QStandardItem('{}'.format(k))
|
item = QStandardItem('{}'.format(k))
|
||||||
icon = QIcon()
|
icon = QIcon()
|
||||||
icon.addFile(u":/icons/book.png", QSize(), QIcon.Normal, QIcon.Off)
|
icon.addFile(u":/icons/list.png", QSize(), QIcon.Normal, QIcon.Off)
|
||||||
item.setIcon(icon)
|
item.setIcon(icon)
|
||||||
item.setAccessibleDescription('info_leaf')
|
item.setAccessibleDescription('info_leaf')
|
||||||
info_bookname_item.appendRow(item)
|
info_bookname_item.appendRow(item)
|
||||||
@@ -651,7 +703,7 @@ if __name__ == "__main__":
|
|||||||
icon.addFile(u":/icons/Cbb20.png", QSize(), QIcon.Normal, QIcon.Off)
|
icon.addFile(u":/icons/Cbb20.png", QSize(), QIcon.Normal, QIcon.Off)
|
||||||
kmw.setWindowIcon(icon)
|
kmw.setWindowIcon(icon)
|
||||||
kmw.setWindowTitle("kindle management")
|
kmw.setWindowTitle("kindle management")
|
||||||
kmw.resize(900, 600)
|
kmw.resize(1200, 800)
|
||||||
#kmw.showFullScreen()
|
#kmw.showFullScreen()
|
||||||
kmw.show()
|
kmw.show()
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE QtCreatorProject>
|
<!DOCTYPE QtCreatorProject>
|
||||||
<!-- Written by QtCreator 4.11.2, 2020-06-11T11:09:47. -->
|
<!-- Written by QtCreator 4.11.2, 2020-06-17T21:43:50. -->
|
||||||
<qtcreator>
|
<qtcreator>
|
||||||
<data>
|
<data>
|
||||||
<variable>EnvironmentId</variable>
|
<variable>EnvironmentId</variable>
|
||||||
|
|||||||
@@ -51,5 +51,8 @@
|
|||||||
<file>icons/kindle.png</file>
|
<file>icons/kindle.png</file>
|
||||||
<file>icons/homepage.png</file>
|
<file>icons/homepage.png</file>
|
||||||
<file>icons/import.png</file>
|
<file>icons/import.png</file>
|
||||||
|
<file>icons/book.png</file>
|
||||||
|
<file>icons/amazon.png</file>
|
||||||
|
<file>icons/flower.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|||||||
@@ -1,58 +0,0 @@
|
|||||||
<RCC>
|
|
||||||
<qresource prefix="/">
|
|
||||||
<file>icons/add.png</file>
|
|
||||||
<file>icons/books.png</file>
|
|
||||||
<file>icons/Cbb20.png</file>
|
|
||||||
<file>icons/config.png</file>
|
|
||||||
<file>icons/direction.png</file>
|
|
||||||
<file>icons/down.png</file>
|
|
||||||
<file>icons/downr.png</file>
|
|
||||||
<file>icons/dustbin.png</file>
|
|
||||||
<file>icons/fav.png</file>
|
|
||||||
<file>icons/file18.png</file>
|
|
||||||
<file>icons/folder.png</file>
|
|
||||||
<file>icons/home.png</file>
|
|
||||||
<file>icons/list.png</file>
|
|
||||||
<file>icons/mail.png</file>
|
|
||||||
<file>icons/md2.png</file>
|
|
||||||
<file>icons/money.png</file>
|
|
||||||
<file>icons/money2.png</file>
|
|
||||||
<file>icons/money3.png</file>
|
|
||||||
<file>icons/qq.png</file>
|
|
||||||
<file>icons/refresh2.png</file>
|
|
||||||
<file>icons/Safari.png</file>
|
|
||||||
<file>icons/search.jpeg</file>
|
|
||||||
<file>icons/share.png</file>
|
|
||||||
<file>icons/txt.png</file>
|
|
||||||
<file>icons/upgreen.png</file>
|
|
||||||
<file>icons/web.png</file>
|
|
||||||
<file>icons/webchat.png</file>
|
|
||||||
<file>icons/write.png</file>
|
|
||||||
<file>icons/yes.png</file>
|
|
||||||
<file>icons/addbook.png</file>
|
|
||||||
<file>icons/conf.png</file>
|
|
||||||
<file>icons/Drop Stuff.png</file>
|
|
||||||
<file>icons/flush.png</file>
|
|
||||||
<file>icons/foldup.png</file>
|
|
||||||
<file>icons/md.jpeg</file>
|
|
||||||
<file>icons/Pixadex.png</file>
|
|
||||||
<file>icons/question.png</file>
|
|
||||||
<file>icons/refresh.png</file>
|
|
||||||
<file>icons/statistics.png</file>
|
|
||||||
<file>mainwindow.ui</file>
|
|
||||||
<file>icons/booksicon.png</file>
|
|
||||||
<file>icons/book_open.png</file>
|
|
||||||
<file>icons/book_open_bookmark.png</file>
|
|
||||||
<file>icons/emblem_library.png</file>
|
|
||||||
<file>icons/book3.png</file>
|
|
||||||
<file>icons/register.png</file>
|
|
||||||
<file>icons/person.png</file>
|
|
||||||
<file>icons/user.png</file>
|
|
||||||
<file>icons/kindle.png</file>
|
|
||||||
<file>icons/homepage.png</file>
|
|
||||||
<file>icons/import.png</file>
|
|
||||||
<file>icons/book.png</file>
|
|
||||||
<file>icons/amazon.png</file>
|
|
||||||
<file>icons/flower.png</file>
|
|
||||||
</qresource>
|
|
||||||
</RCC>
|
|
||||||
542
kmanapp_rc.py
542
kmanapp_rc.py
@@ -4983,6 +4983,80 @@ WP\x04\xc0\x10!\x08\x01\xc2'G\xe8\xa4\xf4\xe0\x05\
|
|||||||
\xa0@\x81\x02\x05\x0a\x14(P\xa0@\x81\x029\xfe\x7f\
|
\xa0@\x81\x02\x05\x0a\x14(P\xa0@\x81\x029\xfe\x7f\
|
||||||
\x07ONL%\xef\xce8\x00\x00\x00\x00IEND\
|
\x07ONL%\xef\xce8\x00\x00\x00\x00IEND\
|
||||||
\xaeB`\x82\
|
\xaeB`\x82\
|
||||||
|
\x00\x00\x04\x7f\
|
||||||
|
\x89\
|
||||||
|
PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
|
||||||
|
\x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\
|
||||||
|
\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\
|
||||||
|
\x00\x00\x00\x09pHYs\x00\x00\x00\xec\x00\x00\x00\xec\
|
||||||
|
\x01y(q\xbd\x00\x00\x00\x19tEXtSof\
|
||||||
|
tware\x00www.inksca\
|
||||||
|
pe.org\x9b\xee<\x1a\x00\x00\x03\xfcID\
|
||||||
|
ATX\x85\xc5\x97MO\x1bW\x14\x86\x9f;\xf6\xe0\
|
||||||
|
\xc16\xd8\x0e\x8aq\xcaW\xcd\x97D\x05-B- \
|
||||||
|
\xaa\xa8\xb0\x8d\x94.\xba\x88\x90\xf2\x0b\x90\x92,\xdaH\
|
||||||
|
\xad\xaa\x8aE\x17\xfc\x81\xa0\x92]\xa5H\xadP\xd7\x95\
|
||||||
|
\xb2i$\xa8*\x9a\x08\xa9\x22\x05U%4\xb5b \
|
||||||
|
\x91\xa9Ll\x8c\xed1c\xcf\xed\xc2`l\xc0\xf5`\
|
||||||
|
\x1c\xf5]\xdd{\xce\x99s\xde9\xf7\xde\xf7\xce\xc0\xff\
|
||||||
|
\x0cq\xd2\xf0\xfa\xdbq\xef\x81\xb4\xdf0M\xd3W\xab\
|
||||||
|
\x22K\x9b\xbe\xd6\xa7\x11w\x17@\xa3=\xfb\xe3\xdd\xd9\
|
||||||
|
\xef\xbe9\xf2\xd9O\x16\xcf\x98\xb6\xdf@\x06\x858\xc5\
|
||||||
|
\xadjx4\x83_\xc3\x8d\x00\x8c\xb4$\x9c@\x81\x80\
|
||||||
|
R\x1cx`*\x93@\xd04\x0cL\xc3\xa8\x19\x81~\
|
||||||
|
\x7f\x92\xb1\xf6\xf8\x99\xbe\x92\x0e\x98(\x01\x81\xc4<\xc8\
|
||||||
|
\xe6\xd9\xa9j\xc5\xe4+\xaf\xdc `0\xb0\xff\x9fq\
|
||||||
|
S\x1fls\xb5#F,c\xff\xab,\x81j0\xb7\
|
||||||
|
\xdc\x82\x10p\xff\xfaz\xc5\xd8~\x7f\x12\x89\xd8*\xb6\
|
||||||
|
)\xe5\x82\xcf\xc2F\xd4I\xca8~$i\xd8\x00\x81\
|
||||||
|
\x94\xe2p\x9cG\xcaP\xd8\xd8\xad\xb7\x94\xd3r\x076\
|
||||||
|
\xa2N\xbe^x\x9b~\x7f\x92\xc9\x81\x08\xebQ'\x8b\
|
||||||
|
!o\x81\xd0\xccb\x07\xe3\xc1\x18\xbdM)\xe6W\x9b\
|
||||||
|
Y\xdbq1=\x11\xa2\xe7R\xba6\x04Z\x1au\xfa\
|
||||||
|
\xfdI\xd6v\x5c|\xf5\xa8\xf3\x94?\x1c\xd7x\xb0\x12\
|
||||||
|
(\xcc\xfb\xfdIZ\x1b2\x15\xf3Z^\x02\xa7j2\
|
||||||
|
9\x10)\xcc\x9b\xea\x0d\xee\x8clq\xad7\xca\xb5\xde\
|
||||||
|
(\xb7G\xb7h\xaa?>9\x93\x03\x11\xeaU\xb3v\
|
||||||
|
\x04\x00\xd6\xa3\xceBqC*\xb8\xb5,\x9a\xcdD\xb3\
|
||||||
|
\x9948\xb2\x18R)\x90xv\x18[\x09\x96\x97 \
|
||||||
|
i\xd8X\x0cy\x01\xb8\xf9n\x04\xb7\x96e\xf6I\x1b\
|
||||||
|
\xed\x8d:\x00?\x85.qkd\x93D\xc6\xce\xbd\xc7\
|
||||||
|
\xad,\x84\xbc\x8c\xb5\xc7q\xa9\xb9\x8b\x11Xy\xe5f\
|
||||||
|
n\xb9\x05\x10\x85\x0d\xf7\x22\xee@K\xd5\xd1\xe9K\xe7\
|
||||||
|
u\x00\x18\xbc\xb2\xcf\xf3]'\xba\x91W\xd0p\x5c\xe3\
|
||||||
|
\xb3\x87\xddH`jx\xbb\xacNT\xee\x80\x00!\x00\
|
||||||
|
)\x0b\xa6\xa4a#g\x9a\xe8\xd9\xe3\x15\xd4\xb3\x0a\xc9\
|
||||||
|
\x8cB:{|\x1c%\x02!$B\x96\x97\xf53\x09\
|
||||||
|
(u\xc7\xe6\xc1\xc0>\xf7\xaf\xaf\x934l\xcc,v\
|
||||||
|
\x10\x8ek\xf4]N\xd1\xe0\xc8\xf2s\xd8G\xbf?\x99\
|
||||||
|
\x7f\xe3=\x8dO\xde\xd9aO\xb7\xf3\xe8o\x1f\xed\x1e\
|
||||||
|
\x9d/?zq\xf1%8\x82K\xcd1\x1e\x8c\xf1`\
|
||||||
|
%\xc0\xf7O\x9b1\xa4\xc2\xad\x91M\xfe\xdcq\x01\xf0\
|
||||||
|
q\xdf?\xcc>iC\x15\xf9\x9d?\x1e\x8cU,\x0e\
|
||||||
|
\xe7<\x05\xbdM)\x00\xa2i\x15U\x98$2v\xf4\
|
||||||
|
\x9cB:\xab\xb0\xa7\xdbQ\x85I4\xad\x96\xc4V\x82\
|
||||||
|
\xe5\x0e\xa4\x0c\x85\xf9\xd5\xe6\xc2<\x9aV\xb9\xf7\xb8\xb5\
|
||||||
|
l\xfc\xfcj3wF7+j\x81e\x02\xdb{\x1a\
|
||||||
|
k;\xae\x82\x14?\x8b:Y\x08y\x09\xc75\x00\xda\
|
||||||
|
=:\x13\xc1\x18=ER\xbc\x95p\xd4N\x8a{\x9a\
|
||||||
|
RLO\x84hm\xc8P\xaf\x9atxu\xc6\xda\xe3\
|
||||||
|
|\xfa\xb0\x07\xa0d\xc3\xdd\x1e\xdd\xe4e\xc2Aw\x85\
|
||||||
|
\xe2\xe7\x22\x00\x9cz\x1b\x97\x9aC\x08Y\x18\x1f\xc1\xa9\
|
||||||
|
\x9a\x96\x8a\x97%`\xe5C\xe4\x08S\xef\xbf,\x90\xa8\
|
||||||
|
\x06\x17\xfe y\xefJ\xc2r\xecj\xc4M\xfc\xc0V\
|
||||||
|
\xb2s/L\xc0*\xe6\x96[X\x0a{\x18iIt\
|
||||||
|
\x17\xdb\xcf\xa5\x03\xd5b5\xe2f)\xec9\xd3wF\
|
||||||
|
\x07D\x5cx\x82\xbf\xcb\xba\x86\xca\x97\xb9E\xe4R\xa6\
|
||||||
|
g\xa2O6\x01\x04.\xbf\xf5GY\x02Bu\xe9\xb6\
|
||||||
|
\x0f\xa7\xf7\xa4+p\xb5v\x7f\x0504\x0cC\x87c\
|
||||||
|
)\xd9\xe1\x8b\x99\xb3\x09(\xc3w\xa5t\x05\xda\xaa)\
|
||||||
|
\x92\xd1ut]G\xd3\xf2\xc2\xa4\xebz\x89_\xd34\
|
||||||
|
\x1c\x87\xbeb\x94v\xc0\xd7\xf5Z\x16]\xbb\xf1X\xec\
|
||||||
|
\xd4\x03ZQ\x12\xc7\x89\xf1\xc9\xb9\x15\x94\x10\xb0\xd7e\
|
||||||
|
~02\xea\xe7 :\x01<^\xaf\xa5$\x17A\x09\
|
||||||
|
\x01\x9f/\x18\xdb\xdd}>\x94;\xa8\xbf!\x85\xecz\
|
||||||
|
#\x15\x05\xbf\xbc\x91\xbc\xd5\xe2_\xe5<q#\xa4\xa2\
|
||||||
|
\xfe\xa7\x00\x00\x00\x00IEND\xaeB`\x82\
|
||||||
\x00\x00L#\
|
\x00\x00L#\
|
||||||
\x89\
|
\x89\
|
||||||
PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
|
PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
|
||||||
@@ -37744,6 +37818,106 @@ v\x07\xb8>\xb0Bd\xfb7p\x15x\x5c\x05\x06\xb8\
|
|||||||
\xdcOq\x9b\xcd\xf2\xb7\xae\xb7-\x7f\x80e\xdb\x0f\xea\
|
\xdcOq\x9b\xcd\xf2\xb7\xae\xb7-\x7f\x80e\xdb\x0f\xea\
|
||||||
\x06w\x01\xacLr\xc3\xf3\xf0\xe9\x0e\x00\x00\x00\x00I\
|
\x06w\x01\xacLr\xc3\xf3\xf0\xe9\x0e\x00\x00\x00\x00I\
|
||||||
END\xaeB`\x82\
|
END\xaeB`\x82\
|
||||||
|
\x00\x00\x06\x11\
|
||||||
|
\x89\
|
||||||
|
PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
|
||||||
|
\x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\
|
||||||
|
\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\
|
||||||
|
\x00\x00\x00\x09pHYs\x00\x00\x00\xec\x00\x00\x00\xec\
|
||||||
|
\x01y(q\xbd\x00\x00\x00\x19tEXtSof\
|
||||||
|
tware\x00www.inksca\
|
||||||
|
pe.org\x9b\xee<\x1a\x00\x00\x05\x8eID\
|
||||||
|
ATX\x85\xb5\x97\xcf\x8f\x1cG\x15\xc7?\xaf\xabz\
|
||||||
|
\xba{g5\xb3;\xb3d7\xeb\x04\xc7\xca\x0fb\x1b\
|
||||||
|
\x11\x8b8\x8aA\x84\xc8\x22Nb#9XQ$K\
|
||||||
|
\x11g\x0e\x08\xb8\xe6O\xe0\x00\x5c\xe2\x0bg@\x22D\
|
||||||
|
\x8ap\xa2\xd8\x06\x07\x19A\x10\x87X$\x02)\x87l\
|
||||||
|
b\xe4qbb\xef\xce\x8f\xfd5\xbf\xba\xba\x1f\x87\x1e\
|
||||||
|
\xef\xeel\xcf\x90\xf5H<\xa9\xa5\xaeW\xf5\xbe\xef\xfb\
|
||||||
|
^U\xbd\xaa\x12&\x14\xd5_\xfa\xae\xde\xfe\x0d\x80\xad\
|
||||||
|
N\xbd,\xf2\x83x\x12\x1c\x99\xdc\xf9\xe6k*\xde\x19\
|
||||||
|
\x00%}\xbb\xd0\xb0/\xca\xc3?\xee\xfd\xdf\x09l9\
|
||||||
|
\xf7\xa6\xcfH\xe1\x00\x88\xa0\xfdkh\xba1\x11\x89\xbb\
|
||||||
|
\x220H\xfb\xeb\xf8\x8b/\xe0/\xee\xec\x01w\x9b4\
|
||||||
|
\xbeq\xb1\xd00g\xee\x86\x84\xb7w\xe7*\xae!o\
|
||||||
|
\x11\x1e\xda\xe5\x1c@\xc0\xce\xe3\x05\x87N\xbaj\xf4{\
|
||||||
|
U\xdds`{&\x10\xaf\xbev\x8e\xf0+\xcf\xe1M\
|
||||||
|
\xfd\x0f\xb4)\x08\x1ey>i\xfd\xf6\xd5\xbd\xe2\x8ed\
|
||||||
|
\xaa\x8d\xcb\xe5$\x08\x8e\xe3\xd9\x930\xf3]\x95b\x95\
|
||||||
|
\xce\x855\xa4PQs\x8f\x1533\x12L\x93\x16\xb8\
|
||||||
|
\xdb\x89\xa4\xfd\xbaL\x9f*i\xbaQ\x17V\xdf&u\
|
||||||
|
\x17M\xafwE*'V\xc7\x12\xe8o\xbe{TH\
|
||||||
|
O#r\x02\xf1\x9e\x80\x92\xc1\xab\x00\x16\x92:\xda\xbe\
|
||||||
|
\xb4#\xd22\x12>\x08\x98\x81\xc2\xa1\xddk\x90n\xe3\
|
||||||
|
\xcb\xd4I0\x15\xd0\x04h\x81\xb6\x124y\x0f\xd5\xcb\
|
||||||
|
\x8a\xf7f\xa1\xf8\xad\xabd\xe8\x03\x03\xd1_!\xf6Q\
|
||||||
|
d\x16(\x83\x98-0\xd5\x8da\xda\xe9*\xda[B\
|
||||||
|
\x82G\x01E{K\x90\x0e\x8fQ]G\xa8\x0cp\xaa\
|
||||||
|
\xc0\x8cAV\x8f\xa1\xcdc\xa2\xc9K\xc0A\xd8\xb1\x06\
|
||||||
|
D\xf8+\x84 \x95!\xe7Y\x9a,9I\xd6\xc1-\
|
||||||
|
g_\xb2\x91\xeb\xce\xd9\x88\xc9\xb0\x09\x11\xe1/[\xc9\
|
||||||
|
\xdc\xa6,\xef\x80\xcb;\x02t\xdc\x9c\xbb\xff45\xfe\
|
||||||
|
<7\xaf\x99\xcd\xecH\x1bH@y\xe7Nk\x8b\xa6\
|
||||||
|
q\xfe\x9f\x9cMSF\xec\x0c\x91\x22j\x16 \xf9|\
|
||||||
|
K\xb7\x19\xf7\xf9\xfbgK\x06\xe0\x1b\x8b\xfb)\x16\x0a\
|
||||||
|
\xdb\x06f\x01\x911\xbbE\x93\xd48w\xe5Ns{\
|
||||||
|
\x0aJO\xd6!\xf9\xe7\x18\xdaH\xf88\x88\xe7bM\
|
||||||
|
\xe9:\xc7RsY\x9b\xbdN\xa9\xd9\xeb\x94>n\xad\
|
||||||
|
h7q\xc4\x9a\xa2\x88\x93\xf0\xf1q0x^\xfa\x81\
|
||||||
|
\x94\x8e\xaf\xe42\x90Iz\x09\xf4H\xb69\x14u7\
|
||||||
|
\xc0\xdd\x84t\x13\xc4\xb8nb\xea\xffn-\xcf\xa7(\
|
||||||
|
\x9ego\x02\xfb\x00\xc437?Ym\xed\xf3\x10\x0e\
|
||||||
|
\x94\x17\xeaa\xef\x83*\x9aX\xbc\x22\xd8E\xc4\xde\xcf\
|
||||||
|
\x1d\xcc4q\x7f\xd8\xe9q\x88\x80\x22\xe7\xc1\xbd\x22i\
|
||||||
|
\x1b\xed\xbc\x0bikhl'\xee\xce\xa7(\x00\xc6\x98\
|
||||||
|
\x85\x82\xb1[\xff(\xa4(\x1d\xb7>\x1f\x9a\xc1\xc1\x98\
|
||||||
|
\x00\xf1'\xa87\x83DO\xa1^\x04\x22\xe7\x872\xbb\
|
||||||
|
;Eq\xe7_\x1f\xa5\x9b\x7f\xfe\xb2\x10\x07\xbb\xfb\x5c\
|
||||||
|
\xaa\xdc\xd8X\xa3\xedb\x05d\xa3\x9f\x95\xfc\xe9B\x80\
|
||||||
|
\x02E\xebs\xfft\x09\xeb\xe5\xeb\x9bb\xfb\xde\xd4\xd3\
|
||||||
|
\xd7\xfd\xa9\xc7\x1e\x19\x9f\x01U\xe9\xaf\xbfU@\xd4\x1b\
|
||||||
|
\x04:$\x89&\x5ck\xde\xee6\xba\x9d s\x1c\x02\
|
||||||
|
Jm\xb5\x0e\xa0\xb3A\xd4[\x9c\x9a\x0e\xadgr\xb6\
|
||||||
|
\x22*\xea\xae\x17v\xeb\x87V|\xdc\xf8\xc5\x93b\x8a\
|
||||||
|
\xfb\xbd\xe0\xa0\x8fD9\x90O\xd7Wit;! \
|
||||||
|
\x02\xccO\x97\xdc\xc2t\x19\xc9\x92-\xcd^'\xfcl\
|
||||||
|
\xb3\x95\xb3C\x22$8\xe4c\x8a\xfb\xfb\xf5\x9f\x1f\x1b\
|
||||||
|
K@\xc5\xbc b\xc1\x0b\x91\xe8\xab\x10<\x04\xf6K\
|
||||||
|
`J\x88\x99\xd1J4\xb7\xe4\x89\xc4\x00\xfb\xcb\xd5\xeb\
|
||||||
|
\x81\xb1\xb6`,\xf7\x16K\xb5\x0cL\xe2\xd9pnI\
|
||||||
|
\xcc\x8cbJ`\xe6 x(\xc3\xf2BD,*\xf6\
|
||||||
|
\xf4\x10\xb7\x9d\x8d~\xfd\xd5\xf7%:r$\x1f\x02\x90\
|
||||||
|
\xb6\xd1\xde\x87\xae\xebb\xdbs\x8eN\x92P\xefv\x00\
|
||||||
|
\xa8\x86!\x91\xb1\x04\xd6\x12Z\xdfIx\xd8\x8e\xca \
|
||||||
|
\x80\xb6\xff\xf1~a\xee'_\xcfe@\xd7\xceU\x11\
|
||||||
|
\xf3\xb5\x91V\x80\xc65P\xb5\xa1\xb1\x94\x83\x90j\x10\
|
||||||
|
Q\xb4>E\xebS\x0d\x22\xcaAHh,\xa8Z\xed\
|
||||||
|
\xd7\xc6\xc1\x80\xe7?\xa6k?\x9b\xcb\x11\xe8\xc7\xfd\xef\
|
||||||
|
\x80\x1dy?P\xedg\xb5\x7f\x87\xf8\xc6\xe3\x81\x99}\
|
||||||
|
\xcd\x033\xf7\xb5|\xb3k\xd1%k\xa8\x8e\xbb\xa3\x1a\
|
||||||
|
\xaf\x1f\xcb\xf1\x1c\x01\x81g\x90\x11\x87\x0e i{\xb4\
|
||||||
|
\xde?<\x8b\x7fp\xe4A1\xce\x06\xb1\x08\xf2L\x8e\
|
||||||
|
\x00\xcaS\xa4kh\xbf\x96c\xaf\xa4#\x02\x99\x87\xc2\
|
||||||
|
\x83\xd9g\xee\xc9u+\xc9p[c\xb4_\x83t\x1d\
|
||||||
|
\x94o\xdf\xd1\xdb\x1d\x16\xdfWMN\x8b\xde:\x81\xbb\
|
||||||
|
\xfd\x04\xb6j\xb0\x0b\xe0E\x88\x04\xc3e\xc1\xeeC\xc2\
|
||||||
|
o\x92\xadaA\xa2\xa7\xd1\xce\xdf \xb9\xb9\x1d\xa8\x0c\
|
||||||
|
\xea\x98\xf6\xd0\xf8\x16$\xcb\x09\x9a\xbe\xa7\xaa\x97\x05y\
|
||||||
|
sk\xdc\xa8,i\xe3\xa7\xe5~\x1a\x1c\x17x\x163\
|
||||||
|
wJ\xfc\xca\x1c\xbd\xda\x86\x9a\xd99\xfc\x87\x8d\xd8\xfb\
|
||||||
|
F\x99\xa1\xeeS\xc4}\xec\xd4\xad\xd4\x09\x1e\x98&n\
|
||||||
|
\xac\x90\xac\x5cP\xf8c\xc1\xeb]\x91\xca+\xe3\xafd\
|
||||||
|
_$\xae\xfd\xe195\x95\x1f~\xb1\x89\x22Z?g\
|
||||||
|
\xc3\xc3?\xda\x0b\xee\x9e\x09\xa8\xaa\xb8\xee\xd5\x0b\xc8\xfc\
|
||||||
|
\xf3H\xee\x98\x18\x0c\xea\x81\xde\xbad\xc3\xa3\xa7Dd\
|
||||||
|
D1\xcf\xcb\x9e\xaf\xe5\x22\xa26\x94\xd3\xa4\xb5\xf3h\
|
||||||
|
\x1dv\x1f\x16\xda\x04\xad]\xb4\xe1\xf2\xf7\xf6\xea\x1c&\
|
||||||
|
z\x9a\xfd\xce\xc4\x9d{\x7f-\x12\x9e\xc5[\xc8 \xd2\
|
||||||
|
[\xa0\xed7l\x14\x9d\x159zW\x8f\xd4\x09\x1f\xa7\
|
||||||
|
\x03\x12xg3M:\x91\xf3\x89\x09d$\xae\xfa\xae\
|
||||||
|
\xd3\xc9\x9e\xe7Q\xf4\xf2$\xce\x01\xfe\x0b\x83GV/\
|
||||||
|
\x91~\x04\xa1\x00\x00\x00\x00IEND\xaeB`\x82\
|
||||||
|
\
|
||||||
\x00\x00\x04\xfa\
|
\x00\x00\x04\xfa\
|
||||||
\x89\
|
\x89\
|
||||||
PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
|
PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
|
||||||
@@ -43136,6 +43310,256 @@ W\x15\x02\x08 \x80\x00\x02\x0d\x16\x98\xb8\xb4j\xd2\xaa\
|
|||||||
\x9dx\xfd`\xf0\xa7\x06\xcfYJ\xeb\xff\x01\xa4\xc1\x9d\
|
\x9dx\xfd`\xf0\xa7\x06\xcfYJ\xeb\xff\x01\xa4\xc1\x9d\
|
||||||
\x1b \xa3\xaf\xe7\x00\x00\x00\x00IEND\xaeB`\
|
\x1b \xa3\xaf\xe7\x00\x00\x00\x00IEND\xaeB`\
|
||||||
\x82\
|
\x82\
|
||||||
|
\x00\x00\x0ft\
|
||||||
|
\x89\
|
||||||
|
PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
|
||||||
|
\x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\
|
||||||
|
\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
|
||||||
|
\x01\x00\x9a\x9c\x18\x00\x00\x0aOiCCPPho\
|
||||||
|
toshop ICC profi\
|
||||||
|
le\x00\x00x\xda\x9dSgTS\xe9\x16=\xf7\xde\
|
||||||
|
\xf4BK\x88\x80\x94KoR\x15\x08 RB\x8b\x80\
|
||||||
|
\x14\x91&*!\x09\x10J\x88!\xa1\xd9\x15Q\xc1\x11\
|
||||||
|
EE\x04\x1b\xc8\xa0\x88\x03\x8e\x8e\x80\x8c\x15Q,\x0c\
|
||||||
|
\x8a\x0a\xd8\x07\xe4!\xa2\x8e\x83\xa3\x88\x8a\xca\xfb\xe1{\
|
||||||
|
\xa3k\xd6\xbc\xf7\xe6\xcd\xfe\xb5\xd7>\xe7\xac\xf3\x9d\xb3\
|
||||||
|
\xcf\x07\xc0\x08\x0c\x96H3Q5\x80\x0c\xa9B\x1e\x11\
|
||||||
|
\xe0\x83\xc7\xc4\xc6\xe1\xe4.@\x81\x0a$p\x00\x10\x08\
|
||||||
|
\xb3d!s\xfd#\x01\x00\xf8~<<+\x22\xc0\x07\
|
||||||
|
\xbe\x00\x01x\xd3\x0b\x08\x00\xc0M\x9b\xc00\x1c\x87\xff\
|
||||||
|
\x0f\xeaB\x99\x5c\x01\x80\x84\x01\xc0t\x918K\x08\x80\
|
||||||
|
\x14\x00@z\x8eB\xa6\x00@F\x01\x80\x9d\x98&S\
|
||||||
|
\x00\xa0\x04\x00`\xcbcb\xe3\x00P-\x00`'\x7f\
|
||||||
|
\xe6\xd3\x00\x80\x9d\xf8\x99{\x01\x00[\x94!\x15\x01\xa0\
|
||||||
|
\x91\x00 \x13e\x88D\x00h;\x00\xac\xcfV\x8aE\
|
||||||
|
\x00X0\x00\x14fK\xc49\x00\xd8-\x000IW\
|
||||||
|
fH\x00\xb0\xb7\x00\xc0\xce\x10\x0b\xb2\x00\x08\x0c\x000\
|
||||||
|
Q\x88\x85)\x00\x04{\x00`\xc8##x\x00\x84\x99\
|
||||||
|
\x00\x14F\xf2W<\xf1+\xae\x10\xe7*\x00\x00x\x99\
|
||||||
|
\xb2<\xb9$9E\x81[\x08-q\x07WW.\x1e\
|
||||||
|
(\xceI\x17+\x146a\x02a\x9a@.\xc2y\x99\
|
||||||
|
\x192\x814\x0f\xe0\xf3\xcc\x00\x00\xa0\x91\x15\x11\xe0\x83\
|
||||||
|
\xf3\xfdx\xce\x0e\xae\xce\xce6\x8e\xb6\x0e_-\xea\xbf\
|
||||||
|
\x06\xff\x22bb\xe3\xfe\xe5\xcf\xabp@\x00\x00\xe1t\
|
||||||
|
~\xd1\xfe,/\xb3\x1a\x80;\x06\x80m\xfe\xa2%\xee\
|
||||||
|
\x04h^\x0b\xa0u\xf7\x8bf\xb2\x0f@\xb5\x00\xa0\xe9\
|
||||||
|
\xdaW\xf3p\xf8~<<E\xa1\x90\xb9\xd9\xd9\xe5\xe4\
|
||||||
|
\xe4\xd8J\xc4B[a\xcaW}\xfeg\xc2_\xc0W\
|
||||||
|
\xfdl\xf9~<\xfc\xf7\xf5\xe0\xbe\xe2$\x812]\x81\
|
||||||
|
G\x04\xf8\xe0\xc2\xcc\xf4L\xa5\x1c\xcf\x92\x09\x84b\xdc\
|
||||||
|
\xe6\x8fG\xfc\xb7\x0b\xff\xfc\x1d\xd3\x22\xc4Ib\xb9X\
|
||||||
|
*\x14\xe3Q\x12q\x8eD\x9a\x8c\xf32\xa5\x22\x89B\
|
||||||
|
\x92)\xc5%\xd2\xffd\xe2\xdf,\xfb\x03>\xdf5\x00\
|
||||||
|
\xb0j>\x01{\x91-\xa8]c\x03\xf6K'\x10X\
|
||||||
|
t\xc0\xe2\xf7\x00\x00\xf2\xbbo\xc1\xd4(\x08\x03\x80h\
|
||||||
|
\x83\xe1\xcfw\xff\xef?\xfdG\xa0%\x00\x80fI\x92\
|
||||||
|
q\x00\x00^D$.T\xca\xb3?\xc7\x08\x00\x00D\
|
||||||
|
\xa0\x81*\xb0A\x1b\xf4\xc1\x18,\xc0\x06\x1c\xc1\x05\xdc\
|
||||||
|
\xc1\x0b\xfc`6\x84B$\xc4\xc2B\x10B\x0ad\x80\
|
||||||
|
\x1cr`)\xac\x82B(\x86\xcd\xb0\x1d*`/\xd4\
|
||||||
|
@\x1d4\xc0Qh\x86\x93p\x0e.\xc2U\xb8\x0e=\
|
||||||
|
p\x0f\xfaa\x08\x9e\xc1(\xbc\x81\x09\x04A\xc8\x08\x13\
|
||||||
|
a!\xda\x88\x01b\x8aX#\x8e\x08\x17\x99\x85\xf8!\
|
||||||
|
\xc1H\x04\x12\x8b$ \xc9\x88\x14Q\x22K\x915H\
|
||||||
|
1R\x8aT UH\x1d\xf2=r\x029\x87\x5cF\
|
||||||
|
\xba\x91;\xc8\x002\x82\xfc\x86\xbcG1\x94\x81\xb2Q\
|
||||||
|
=\xd4\x0c\xb5C\xb9\xa87\x1a\x84F\xa2\x0b\xd0dt\
|
||||||
|
1\x9a\x8f\x16\xa0\x9b\xd0r\xb4\x1a=\x8c6\xa1\xe7\xd0\
|
||||||
|
\xabh\x0f\xda\x8f>C\xc70\xc0\xe8\x18\x073\xc4l\
|
||||||
|
0.\xc6\xc3B\xb18,\x09\x93c\xcb\xb1\x22\xac\x0c\
|
||||||
|
\xab\xc6\x1a\xb0V\xac\x03\xbb\x89\xf5c\xcf\xb1w\x04\x12\
|
||||||
|
\x81E\xc0\x096\x04wB a\x1eAHXLX\
|
||||||
|
N\xd8H\xa8 \x1c$4\x11\xda\x097\x09\x03\x84Q\
|
||||||
|
\xc2'\x22\x93\xa8K\xb4&\xba\x11\xf9\xc4\x18b21\
|
||||||
|
\x87XH,#\xd6\x12\x8f\x13/\x10{\x88C\xc47\
|
||||||
|
$\x12\x89C2'\xb9\x90\x02I\xb1\xa4T\xd2\x12\xd2\
|
||||||
|
F\xd2nR#\xe9,\xa9\x9b4H\x1a#\x93\xc9\xda\
|
||||||
|
dk\xb2\x079\x94, +\xc8\x85\xe4\x9d\xe4\xc3\xe4\
|
||||||
|
3\xe4\x1b\xe4!\xf2[\x0a\x9db@q\xa4\xf8S\xe2\
|
||||||
|
(R\xcajJ\x19\xe5\x10\xe54\xe5\x06e\x982A\
|
||||||
|
U\xa3\x9aR\xdd\xa8\xa1T\x115\x8fZB\xad\xa1\xb6\
|
||||||
|
R\xafQ\x87\xa8\x134u\x9a9\xcd\x83\x16IK\xa5\
|
||||||
|
\xad\xa2\x95\xd3\x1ah\x17h\xf7i\xaf\xe8t\xba\x11\xdd\
|
||||||
|
\x95\x1eN\x97\xd0W\xd2\xcb\xe9G\xe8\x97\xe8\x03\xf4w\
|
||||||
|
\x0c\x0d\x86\x15\x83\xc7\x88g(\x19\x9b\x18\x07\x18g\x19\
|
||||||
|
w\x18\xaf\x98L\xa6\x19\xd3\x8b\x19\xc7T071\xeb\
|
||||||
|
\x98\xe7\x99\x0f\x99oUX*\xb6*|\x15\x91\xca\x0a\
|
||||||
|
\x95J\x95&\x95\x1b*/T\xa9\xaa\xa6\xaa\xde\xaa\x0b\
|
||||||
|
U\xf3U\xcbT\x8f\xa9^S}\xaeFU3S\xe3\
|
||||||
|
\xa9\x09\xd4\x96\xabU\xaa\x9dP\xebS\x1bSg\xa9;\
|
||||||
|
\xa8\x87\xaag\xa8oT?\xa4~Y\xfd\x89\x06Y\xc3\
|
||||||
|
L\xc3OC\xa4Q\xa0\xb1_\xe3\xbc\xc6 \x0bc\x19\
|
||||||
|
\xb3x,!k\x0d\xab\x86u\x815\xc4&\xb1\xcd\xd9\
|
||||||
|
|v*\xbb\x98\xfd\x1d\xbb\x8b=\xaa\xa9\xa19C3\
|
||||||
|
J3W\xb3R\xf3\x94f?\x07\xe3\x98q\xf8\x9ct\
|
||||||
|
N\x09\xe7(\xa7\x97\xf3~\x8a\xde\x14\xef)\xe2)\x1b\
|
||||||
|
\xa64L\xb91e\x5ck\xaa\x96\x97\x96X\xabH\xab\
|
||||||
|
Q\xabG\xeb\xbd6\xae\xed\xa7\x9d\xa6\xbdE\xbbY\xfb\
|
||||||
|
\x81\x0eA\xc7J'\x5c'Gg\x8f\xce\x05\x9d\xe7S\
|
||||||
|
\xd9S\xdd\xa7\x0a\xa7\x16M=:\xf5\xae.\xaak\xa5\
|
||||||
|
\x1b\xa1\xbbDw\xbfn\xa7\xee\x98\x9e\xbe^\x80\x9eL\
|
||||||
|
o\xa7\xdey\xbd\xe7\xfa\x1c}/\xfdT\xfdm\xfa\xa7\
|
||||||
|
\xf5G\x0cX\x06\xb3\x0c$\x06\xdb\x0c\xce\x18<\xc55\
|
||||||
|
qo<\x1d/\xc7\xdb\xf1QC]\xc3@C\xa5a\
|
||||||
|
\x95a\x97\xe1\x84\x91\xb9\xd1<\xa3\xd5F\x8dF\x0f\x8c\
|
||||||
|
i\xc6\x5c\xe3$\xe3m\xc6m\xc6\xa3&\x06&!&\
|
||||||
|
KM\xeaM\xee\x9aRM\xb9\xa6)\xa6;L;L\
|
||||||
|
\xc7\xcd\xcc\xcd\xa2\xcd\xd6\x995\x9b=1\xd72\xe7\x9b\
|
||||||
|
\xe7\x9b\xd7\x9b\xdf\xb7`ZxZ,\xb6\xa8\xb6\xb8e\
|
||||||
|
I\xb2\xe4Z\xa6Y\xee\xb6\xbcn\x85Z9Y\xa5X\
|
||||||
|
UZ]\xb3F\xad\x9d\xad%\xd6\xbb\xad\xbb\xa7\x11\xa7\
|
||||||
|
\xb9N\x93N\xab\x9e\xd6g\xc3\xb0\xf1\xb6\xc9\xb6\xa9\xb7\
|
||||||
|
\x19\xb0\xe5\xd8\x06\xdb\xae\xb6m\xb6}agb\x17g\
|
||||||
|
\xb7\xc5\xae\xc3\xee\x93\xbd\x93}\xba}\x8d\xfd=\x07\x0d\
|
||||||
|
\x87\xd9\x0e\xab\x1dZ\x1d~s\xb4r\x14:V:\xde\
|
||||||
|
\x9a\xce\x9c\xee?}\xc5\xf4\x96\xe9/gX\xcf\x10\xcf\
|
||||||
|
\xd83\xe3\xb6\x13\xcb)\xc4i\x9dS\x9b\xd3Gg\x17\
|
||||||
|
g\xb9s\x83\xf3\x88\x8b\x89K\x82\xcb.\x97>.\x9b\
|
||||||
|
\x1b\xc6\xdd\xc8\xbd\xe4Jt\xf5q]\xe1z\xd2\xf5\x9d\
|
||||||
|
\x9b\xb3\x9b\xc2\xed\xa8\xdb\xaf\xee6\xeei\xee\x87\xdc\x9f\
|
||||||
|
\xcc4\x9f)\x9eY3s\xd0\xc3\xc8C\xe0Q\xe5\xd1\
|
||||||
|
?\x0b\x9f\x950k\xdf\xac~OCO\x81g\xb5\xe7\
|
||||||
|
#/c/\x91W\xad\xd7\xb0\xb7\xa5w\xaa\xf7a\xef\
|
||||||
|
\x17>\xf6>r\x9f\xe3>\xe3<7\xde2\xdeY_\
|
||||||
|
\xcc7\xc0\xb7\xc8\xb7\xcbO\xc3o\x9e_\x85\xdfC\x7f\
|
||||||
|
#\xffd\xffz\xff\xd1\x00\xa7\x80%\x01g\x03\x89\x81\
|
||||||
|
A\x81[\x02\xfb\xf8z|!\xbf\x8e?:\xdbe\xf6\
|
||||||
|
\xb2\xd9\xedA\x8c\xa0\xb9A\x15A\x8f\x82\xad\x82\xe5\xc1\
|
||||||
|
\xad!h\xc8\xec\x90\xad!\xf7\xe7\x98\xce\x91\xcei\x0e\
|
||||||
|
\x85P~\xe8\xd6\xd0\x07a\xe6a\x8b\xc3~\x0c'\x85\
|
||||||
|
\x87\x85W\x86?\x8ep\x88X\x1a\xd11\x975w\xd1\
|
||||||
|
\xdcCs\xdfD\xfaD\x96D\xde\x9bg1O9\xaf\
|
||||||
|
-J5*>\xaa.j<\xda7\xba4\xba?\xc6\
|
||||||
|
.fY\xcc\xd5X\x9dXIlK\x1c9.*\xae\
|
||||||
|
6nl\xbe\xdf\xfc\xed\xf3\x87\xe2\x9d\xe2\x0b\xe3{\x17\
|
||||||
|
\x98/\xc8]py\xa1\xce\xc2\xf4\x85\xa7\x16\xa9.\x12\
|
||||||
|
,:\x96@L\x88N8\x94\xf0A\x10*\xa8\x16\x8c\
|
||||||
|
%\xf2\x13w%\x8e\x0ay\xc2\x1d\xc2g\x22/\xd16\
|
||||||
|
\xd1\x88\xd8C\x5c*\x1eN\xf2H*Mz\x92\xec\x91\
|
||||||
|
\xbc5y$\xc53\xa5,\xe5\xb9\x84'\xa9\x90\xbcL\
|
||||||
|
\x0dL\xdd\x9b:\x9e\x16\x9av m2=:\xbd1\
|
||||||
|
\x83\x92\x91\x90qB\xaa!M\x93\xb6g\xeag\xe6f\
|
||||||
|
v\xcb\xace\x85\xb2\xfe\xc5n\x8b\xb7/\x1e\x95\x07\xc9\
|
||||||
|
k\xb3\x90\xac\x05Y-\x0a\xb6B\xa6\xe8TZ(\xd7\
|
||||||
|
*\x07\xb2geWf\xbf\xcd\x89\xca9\x96\xab\x9e+\
|
||||||
|
\xcd\xed\xcc\xb3\xca\xdb\x907\x9c\xef\x9f\xff\xed\x12\xc2\x12\
|
||||||
|
\xe1\x92\xb6\xa5\x86KW-\x1dX\xe6\xbd\xacj9\xb2\
|
||||||
|
<qy\xdb\x0a\xe3\x15\x05+\x86V\x06\xac<\xb8\x8a\
|
||||||
|
\xb6*m\xd5O\xab\xedW\x97\xae~\xbd&zMk\
|
||||||
|
\x81^\xc1\xca\x82\xc1\xb5\x01k\xeb\x0bU\x0a\xe5\x85}\
|
||||||
|
\xeb\xdc\xd7\xed]OX/Y\xdf\xb5a\xfa\x86\x9d\x1b\
|
||||||
|
>\x15\x89\x8a\xae\x14\xdb\x17\x97\x15\x7f\xd8(\xdcx\xe5\
|
||||||
|
\x1b\x87o\xca\xbf\x99\xdc\x94\xb4\xa9\xab\xc4\xb9d\xcff\
|
||||||
|
\xd2f\xe9\xe6\xde-\x9e[\x0e\x96\xaa\x97\xe6\x97\x0en\
|
||||||
|
\x0d\xd9\xda\xb4\x0d\xdfV\xb4\xed\xf5\xf6E\xdb/\x97\xcd\
|
||||||
|
(\xdb\xbb\x83\xb6C\xb9\xa3\xbf<\xb8\xbce\xa7\xc9\xce\
|
||||||
|
\xcd;?T\xa4T\xf4T\xfaT6\xee\xd2\xdd\xb5a\
|
||||||
|
\xd7\xf8n\xd1\xee\x1b{\xbc\xf64\xec\xd5\xdb[\xbc\xf7\
|
||||||
|
\xfd>\xc9\xbe\xdbU\x01UM\xd5f\xd5e\xfbI\xfb\
|
||||||
|
\xb3\xf7?\xae\x89\xaa\xe9\xf8\x96\xfbm]\xadNmq\
|
||||||
|
\xed\xc7\x03\xd2\x03\xfd\x07#\x0e\xb6\xd7\xb9\xd4\xd5\x1d\xd2\
|
||||||
|
=TR\x8f\xd6+\xebG\x0e\xc7\x1f\xbe\xfe\x9d\xefw\
|
||||||
|
-\x0d6\x0dU\x8d\x9c\xc6\xe2#pDy\xe4\xe9\xf7\
|
||||||
|
\x09\xdf\xf7\x1e\x0d:\xdav\x8c{\xac\xe1\x07\xd3\x1fv\
|
||||||
|
\x1dg\x1d/jB\x9a\xf2\x9aF\x9bS\x9a\xfb[b\
|
||||||
|
[\xbaO\xcc>\xd1\xd6\xea\xdez\xfcG\xdb\x1f\x0f\x9c\
|
||||||
|
4<YyJ\xf3T\xc9i\xda\xe9\x82\xd3\x93g\xf2\
|
||||||
|
\xcf\x8c\x9d\x95\x9d}~.\xf9\xdc`\xdb\xa2\xb6{\xe7\
|
||||||
|
c\xce\xdfj\x0fo\xef\xba\x10t\xe1\xd2E\xff\x8b\xe7\
|
||||||
|
;\xbc;\xce\x5c\xf2\xb8t\xf2\xb2\xdb\xe5\x13W\xb8W\
|
||||||
|
\x9a\xaf:_m\xeat\xea<\xfe\x93\xd3O\xc7\xbb\x9c\
|
||||||
|
\xbb\x9a\xae\xb9\x5ck\xb9\xeez\xbd\xb5{f\xf7\xe9\x1b\
|
||||||
|
\x9e7\xce\xdd\xf4\xbdy\xf1\x16\xff\xd6\xd5\x9e9=\xdd\
|
||||||
|
\xbd\xf3zo\xf7\xc5\xf7\xf5\xdf\x16\xdd~r'\xfd\xce\
|
||||||
|
\xcb\xbb\xd9w'\xee\xad\xbcO\xbc_\xf4@\xedA\xd9\
|
||||||
|
C\xdd\x87\xd5?[\xfe\xdc\xd8\xef\xdc\x7fj\xc0w\xa0\
|
||||||
|
\xf3\xd1\xdcG\xf7\x06\x85\x83\xcf\xfe\x91\xf5\x8f\x0fC\x05\
|
||||||
|
\x8f\x99\x8f\xcb\x86\x0d\x86\xeb\x9e8>99\xe2?r\
|
||||||
|
\xfd\xe9\xfc\xa7C\xcfd\xcf&\x9e\x17\xfe\xa2\xfe\xcb\xae\
|
||||||
|
\x17\x16/~\xf8\xd5\xeb\xd7\xce\xd1\x98\xd1\xa1\x97\xf2\x97\
|
||||||
|
\x93\xbfm|\xa5\xfd\xea\xc0\xeb\x19\xaf\xdb\xc6\xc2\xc6\x1e\
|
||||||
|
\xbe\xc9x31^\xf4V\xfb\xed\xc1w\xdcw\x1d\xef\
|
||||||
|
\xa3\xdf\x0fO\xe4| \x7f(\xffh\xf9\xb1\xf5S\xd0\
|
||||||
|
\xa7\xfb\x93\x19\x93\x93\xff\x04\x03\x98\xf3\xfcc3-\xdb\
|
||||||
|
\x00\x00\x00 cHRM\x00\x00z%\x00\x00\x80\x83\
|
||||||
|
\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00u0\x00\x00\xea`\
|
||||||
|
\x00\x00:\x98\x00\x00\x17o\x92_\xc5F\x00\x00\x04\x9f\
|
||||||
|
IDATx\xda\xc4W_L[e\x14\xff\x9d\xdb\
|
||||||
|
\xaf\xf7k\xd7B\xf9\x9fNhg[\x18\x7f\xc6Fu\
|
||||||
|
>\x11\xd9\xe6B\x08\xc1%f\x99\xcc\xa4Qg\xe2+\
|
||||||
|
\xf1\x85\xb8\xf0\xb0\x97\xf90\xc7\x83{6l\xea\xc3\x12\
|
||||||
|
c&\xc6\x10\xff\x91N\x1ffB\x16\xfe\x98\xb80\xa7\
|
||||||
|
\x19+\x84\xa2\xc8\x84\xc5v\x03Jo{\xef\xf1a\xe5\
|
||||||
|
\xae5\x03\xca\xd2\xb1\x93\xdc\x87sO\xee=\xbf\xef|\
|
||||||
|
\xe7\xfc\xce9\xc4\xccx\x96\x22\x00\xc0f\xb3\xad\xebe\
|
||||||
|
\x00J\x01\xa8\x19]/\x80\x0f\x02`\x01\xc0\x00V\x01\
|
||||||
|
,\x01X\x01\x80\xb5\xb5\xb5\x87\x00\x00(\x00*\x98\xd9\
|
||||||
|
\x9bN\xa7\xdfe\xe6.f\xf6\x16\xf2\xa4D\x14%\xa2\
|
||||||
|
a!\xc4\xc7Dt\x07\xc02\x00\x063CJY\xae\
|
||||||
|
\xaaj\x90\x88nf\x90>\xb5\x87\x88n\xa9\xaa\xbaO\
|
||||||
|
J\xe9bf\xac\x03\xa8U\x14\xe5\xe2\xd3v\x9e\x01\xc0\
|
||||||
|
\x8a\xa2|\x22\xa5\xacef(\x99\x08If~}'\
|
||||||
|
\x92\x8e\x99\xc1\xcc'\x00\xd8\xcc$4\x0c\xc3\x05\xa0d\
|
||||||
|
\xab\x8f\xedv;\xda\xdb\xdb\xd1\xd9\xd9\x89\x96\x96\x16\x94\
|
||||||
|
\x96\x96baa\x01\xd7\xaf_\xc7\xd0\xd0\x10\xc6\xc7\xc7\
|
||||||
|
\xf3\xc5\xe1\xca\xf8|\x88H\x08q\x88\x886\x0d]0\
|
||||||
|
\x18\xe4\xb1\xb11\xdeH\x0c\xc3\xe0\x0b\x17.\xb0\x10\x22\
|
||||||
|
\xafk\x10B\x1c6s@\x08\xd1\xb6\x19\x80\xdd\xbbw\
|
||||||
|
s4\x1a\xe5\xad\xc40\x0c\xee\xe9\xe9\xd9\x16\x00%\x9f\
|
||||||
|
x\xf5\xf5\xf5\xc1\xe3\xf1\x98z8\x1cFGG\x07\x8e\
|
||||||
|
\x1e=\x8ap8\x9c]j\xe8\xee\xee\xde~Rl\x16\
|
||||||
|
\x01\x22\xe2\xd1\xd1Q\xf3\x94w\xef\xdee\x97\xcbe\xda\
|
||||||
|
\x03\x81\x00'\x12\x09\xd3>55\xc5R\xca\xbc# \
|
||||||
|
\xf2\x01\x18\x0a\x85P]]\x0d\xb7\xdb\x8d\xc5\xc5E\xc4\
|
||||||
|
\xe3q\xd3>77\x87\x95\x95\x15\x93M\x85\x10\x10B\
|
||||||
|
\x99L\xe6O\xc5[I$\x12A$\x12\x01\x008\
|
||||||
|
\x1c\x0e\xb4\xb5\xb5\xc1\xef\xf7\xc3\xe3\xf1\xc0\xe7\xf3\xc1\xe9\
|
||||||
|
t\xe6\x00\xdev/\xc8G\xbc^/z{{q\xf2\
|
||||||
|
\xe4I\xb8\xdd\xee\xc26\xa3\xad\xa4\xb6\xb6\x16\xc3\xc3\xc3\
|
||||||
|
\x08\x04\x02\xe6\xbb\xf9\xf9y\xdc\xb8q\x03\xb1X\x0c\xc7\
|
||||||
|
\x8f\x1f\xcfnh\x85MBEQ\xf8\xea\xd5\xab9\xe5\
|
||||||
|
v\xf9\xf2e\xae\xac\xacd\x00l\xb3\xd9xii\xc9\
|
||||||
|
\xb4MOO\xb3\xc3\xe1(\x1c\x0f466r:\x9d\
|
||||||
|
6\x1d\xcc\xce\xce\xb2\xd3\xe94\xedUUU\x1c\x8b\xc5\
|
||||||
|
L{$\x12a\xbb\xdd^8\x1e\xf0z\xbd\xb0X,\
|
||||||
|
\xa6\x1e\x8dF\xb1\xbc\xbcl\xea\xf5\xf5\xf5(**2\
|
||||||
|
u\xa7\xd3\xb9\xad\xeb\xd8\x12\x80\xae\xe7\xce$\x0d\x0d\x0d\
|
||||||
|
\xf0\xf9|X\x1fd\xce\x9e=\x0bEy\xf4\x9b\xca\xca\
|
||||||
|
J\x84B\xa1\xc2\xe5\x80\xdf\xefgM\xd3rr`r\
|
||||||
|
r\x92\xfb\xfb\xfbydd\xe4\xb1\x94|\xff\xc12W\
|
||||||
|
W?\xc7\xc1\xbdn\xfe\xe0\xad:>\x7fj\xcf\x93_\
|
||||||
|
\xc1\xcc\xcc\x0c\xbe\x1c\x1c\xccy\xd7\xdc\xdc\x8c\xd3\xa7O\
|
||||||
|
\xa3\xb5\xb5\x15\x9a\xa6a`\xe0\xa2Y\xff\x0c\xe0\xeb\xa1\
|
||||||
|
!8\xa5\x82#-\x15\xb8\xb7*\xe0/7\x9e<\x02\
|
||||||
|
\x00\xb8\xa4\xa4\x84?\xff\xe2\x0ak\xa9G\xc9h0\xf3\
|
||||||
|
\xf8\xc4/\xdc\xf5\xea1\x06\xc0\xe7\xce\x9d\xe7\xb4\xae\xf3\
|
||||||
|
\xb9\x0f\xfb\xcd\xef^{\xa5\x89\xdf\xec\xda\xcf\xa1v\xdf\
|
||||||
|
\x86\x11 f\x86\xd5jm\xd3u\xfd\xe7l\x16{\xe7\
|
||||||
|
X3\x96\xe2\x1a~\x1a\x9bA\x22\x99\x02\x00\xd4\xd5\xd5\
|
||||||
|
\xa1\xa9\xa9\x09\x8a\xc5\x82?\xe7\xe6011\x91\xc3|\
|
||||||
|
uu\xb5\x98\x8bF\xd1\xfeR\x0d\xdek\xb7\xa2\xc8\x0e\
|
||||||
|
\xbc=\xb0\x8cS\x87]8\xf3\xd9\xad\x9c\xa6e\xb1X\
|
||||||
|
\x8e\xa4R\xa9k\x1b\x12Qxb\x01\xef\x9f\xf0\xe1L\
|
||||||
|
g\x0dF\xff*\xc6\x8f\x93\xf71\x19Y\xc4\xf7\xdf}\
|
||||||
|
\x8bT\xfaabJU`\x97M\x85\xbb\xc2\x81\xc6=\
|
||||||
|
eh\xab\xb7\xe2\x8dz\x15.u\x1e\x03\xbf5\xa2\xef\
|
||||||
|
\xd2M$\xb5\x14~(\xdd\xb5\xf1\xb0\x9a\x89\xc0!]\
|
||||||
|
\xd7\xaf=\x8e\xc7\x0f\xee\x0f\xa0\xb7\xcb\x89\x8e\xeai\x94\
|
||||||
|
\xca\x15h\xba\x05\xb1\x84\x81\xb4N\xb0\xdav\xc1i\xd5\
|
||||||
|
`\xc7\x1a\xc8\x00\xe2\xba\x1dW\xee\x04\xf0\xd17\xf7p\
|
||||||
|
{\xe6\xef\xcd&d3\x02\xeb\x00Zu]\x1f\xd9\xac\
|
||||||
|
\x91\x94\xb9\x1c8\xb8\xb7\x0c\x07\x9e\xb7!\xe8\x15\xa8)\
|
||||||
|
N\x81Rq\xfc\x93(\xc6x\xd4\x82\xb1\xe9$~\xbd\
|
||||||
|
\xbd\x88\xf8\x83\xd5|Ft\x08!^\xd64md}\
|
||||||
|
*\xdeGD\xff\xee\xc4T\x9cI\xc2\x98\x94\xb29\xbb\
|
||||||
|
\x0c\x93D4\xb8\x13S1\x11\x81\x88\xbe\x02\xb0f\x96\
|
||||||
|
\xa1\x94\xb2BU\xd5\x17\x89\xe8\xf7\x1d8\xfd\x1f\xaa\xaa\
|
||||||
|
\x1e\x90R\x96d/&\x16)e\x95\xaa\xaa\x07\x89\xe8\
|
||||||
|
\x12\x11\xcd>\x05\xc7\xb3\x8a\xa2|\xaa\xaa\xea\x0bR\xca\
|
||||||
|
b)%\x99<\xf0\xbf\xe5\xb4\x1c\x80\xcc,\xa6\x85\x5c\
|
||||||
|
N)\xb3\x94.f/\xa7\xf4\xac\xd7\xf3\xff\x06\x00\x0b\
|
||||||
|
\xc0}\x0a\xbf\x9a8\xe7\x00\x00\x00\x00IEND\xae\
|
||||||
|
B`\x82\
|
||||||
\x00\x00b\xd4\
|
\x00\x00b\xd4\
|
||||||
\x89\
|
\x89\
|
||||||
PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
|
PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
|
||||||
@@ -46549,6 +46973,10 @@ qt_resource_name = b"\
|
|||||||
\x0b\xf7W\xa7\
|
\x0b\xf7W\xa7\
|
||||||
\x00t\
|
\x00t\
|
||||||
\x00x\x00t\x00.\x00p\x00n\x00g\
|
\x00x\x00t\x00.\x00p\x00n\x00g\
|
||||||
|
\x00\x08\
|
||||||
|
\x06^Zg\
|
||||||
|
\x00b\
|
||||||
|
\x00o\x00o\x00k\x00.\x00p\x00n\x00g\
|
||||||
\x00\x07\
|
\x00\x07\
|
||||||
\x07\xa7W\x87\
|
\x07\xa7W\x87\
|
||||||
\x00a\
|
\x00a\
|
||||||
@@ -46690,6 +47118,10 @@ qt_resource_name = b"\
|
|||||||
\x06\x99_\xa7\
|
\x06\x99_\xa7\
|
||||||
\x00i\
|
\x00i\
|
||||||
\x00m\x00p\x00o\x00r\x00t\x00.\x00p\x00n\x00g\
|
\x00m\x00p\x00o\x00r\x00t\x00.\x00p\x00n\x00g\
|
||||||
|
\x00\x0a\
|
||||||
|
\x0d\xc8\xf1\x87\
|
||||||
|
\x00f\
|
||||||
|
\x00l\x00o\x00w\x00e\x00r\x00.\x00p\x00n\x00g\
|
||||||
\x00\x08\
|
\x00\x08\
|
||||||
\x09\xc5X\xc7\
|
\x09\xc5X\xc7\
|
||||||
\x00u\
|
\x00u\
|
||||||
@@ -46719,6 +47151,10 @@ qt_resource_name = b"\
|
|||||||
\x00m\
|
\x00m\
|
||||||
\x00o\x00n\x00e\x00y\x00.\x00p\x00n\x00g\
|
\x00o\x00n\x00e\x00y\x00.\x00p\x00n\x00g\
|
||||||
\x00\x0a\
|
\x00\x0a\
|
||||||
|
\x01lPg\
|
||||||
|
\x00a\
|
||||||
|
\x00m\x00a\x00z\x00o\x00n\x00.\x00p\x00n\x00g\
|
||||||
|
\x00\x0a\
|
||||||
\x0c\xf7\x1b\xc7\
|
\x0c\xf7\x1b\xc7\
|
||||||
\x00c\
|
\x00c\
|
||||||
\x00o\x00n\x00f\x00i\x00g\x00.\x00p\x00n\x00g\
|
\x00o\x00n\x00f\x00i\x00g\x00.\x00p\x00n\x00g\
|
||||||
@@ -46735,109 +47171,115 @@ qt_resource_name = b"\
|
|||||||
qt_resource_struct = b"\
|
qt_resource_struct = b"\
|
||||||
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x01\
|
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x01\
|
||||||
\x00\x00\x00\x00\x00\x00\x00\x00\
|
\x00\x00\x00\x00\x00\x00\x00\x00\
|
||||||
\x00\x00\x00\x00\x00\x02\x00\x00\x002\x00\x00\x00\x03\
|
\x00\x00\x00\x00\x00\x02\x00\x00\x005\x00\x00\x00\x03\
|
||||||
\x00\x00\x00\x00\x00\x00\x00\x00\
|
\x00\x00\x00\x00\x00\x00\x00\x00\
|
||||||
\x00\x00\x00\x10\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\
|
\x00\x00\x00\x10\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\
|
||||||
\x00\x00\x01r\xbc\x88\xfe:\
|
\x00\x00\x01r\xbc\x88\xfe:\
|
||||||
\x00\x00\x03\xce\x00\x00\x00\x00\x00\x01\x00\x08=\xd7\
|
\x00\x00\x03\xe4\x00\x00\x00\x00\x00\x01\x00\x08BZ\
|
||||||
\x00\x00\x01ro \xc0+\
|
\x00\x00\x01ro \xc0+\
|
||||||
\x00\x00\x00\xf0\x00\x00\x00\x00\x00\x01\x00\x01\x92\xbb\
|
\x00\x00\x01\x06\x00\x00\x00\x00\x00\x01\x00\x01\x97>\
|
||||||
\x00\x00\x01rybF\xf5\
|
\x00\x00\x01rybF\xf5\
|
||||||
\x00\x00\x04\xb0\x00\x00\x00\x00\x00\x01\x00\x09\xedV\
|
\x00\x00\x05.\x00\x00\x00\x00\x00\x01\x00\x0a\x8b\x94\
|
||||||
|
\x00\x00\x01r\xbcxSM\
|
||||||
|
\x00\x00\x04\xe0\x00\x00\x00\x00\x00\x01\x00\x09\xf7\xee\
|
||||||
\x00\x00\x01ro-O\xd6\
|
\x00\x00\x01ro-O\xd6\
|
||||||
\x00\x00\x00\x94\x00\x00\x00\x00\x00\x01\x00\x007\x0d\
|
\x00\x00\x00\x94\x00\x00\x00\x00\x00\x01\x00\x007\x0d\
|
||||||
\x00\x00\x01ryefk\
|
\x00\x00\x01ryefk\
|
||||||
\x00\x00\x03n\x00\x00\x00\x00\x00\x01\x00\x07:s\
|
\x00\x00\x03\x84\x00\x00\x00\x00\x00\x01\x00\x07>\xf6\
|
||||||
\x00\x00\x01ro!\xbci\
|
\x00\x00\x01ro!\xbci\
|
||||||
\x00\x00\x024\x00\x00\x00\x00\x00\x01\x00\x04.\xc1\
|
\x00\x00\x02J\x00\x00\x00\x00\x00\x01\x00\x043D\
|
||||||
\x00\x00\x01r\x83\x0a\xde,\
|
\x00\x00\x01r\x83\x0a\xde,\
|
||||||
\x00\x00\x04\xe6\x00\x00\x00\x00\x00\x01\x00\x0a\x22\xe6\
|
\x00\x00\x05\x16\x00\x00\x00\x00\x00\x01\x00\x0a-~\
|
||||||
\x00\x00\x01ro \x94\xf5\
|
\x00\x00\x01ro \x94\xf5\
|
||||||
\x00\x00\x01j\x00\x00\x00\x00\x00\x01\x00\x03O\x00\
|
\x00\x00\x01\x80\x00\x00\x00\x00\x00\x01\x00\x03S\x83\
|
||||||
\x00\x00\x01rn\x81\xa0K\
|
\x00\x00\x01rn\x81\xa0K\
|
||||||
\x00\x00\x00j\x00\x00\x00\x00\x00\x01\x00\x002\x10\
|
\x00\x00\x00j\x00\x00\x00\x00\x00\x01\x00\x002\x10\
|
||||||
\x00\x00\x01r\x83\x17T#\
|
\x00\x00\x01r\x83\x17T#\
|
||||||
\x00\x00\x03P\x00\x00\x00\x00\x00\x01\x00\x077\xdb\
|
\x00\x00\x03f\x00\x00\x00\x00\x00\x01\x00\x07<^\
|
||||||
\x00\x00\x01r\x83\x18\xc72\
|
\x00\x00\x01r\x83\x18\xc72\
|
||||||
\x00\x00\x000\x00\x00\x00\x00\x00\x01\x00\x00\x05\x9a\
|
\x00\x00\x000\x00\x00\x00\x00\x00\x01\x00\x00\x05\x9a\
|
||||||
\x00\x00\x01r\x83\x18J\xbf\
|
\x00\x00\x01r\x83\x18J\xbf\
|
||||||
\x00\x00\x01\xb4\x00\x00\x00\x00\x00\x01\x00\x03\xd8s\
|
\x00\x00\x01\xca\x00\x00\x00\x00\x00\x01\x00\x03\xdc\xf6\
|
||||||
\x00\x00\x01r\x83\x0b\xa39\
|
\x00\x00\x01r\x83\x0b\xa39\
|
||||||
\x00\x00\x01R\x00\x00\x00\x00\x00\x01\x00\x02\xe4\xcf\
|
\x00\x00\x01h\x00\x00\x00\x00\x00\x01\x00\x02\xe9R\
|
||||||
\x00\x00\x01rn\x7f\x9a\xa2\
|
\x00\x00\x01rn\x7f\x9a\xa2\
|
||||||
\x00\x00\x02\xea\x00\x00\x00\x00\x00\x01\x00\x06-B\
|
\x00\x00\x03\x00\x00\x00\x00\x00\x00\x01\x00\x061\xc5\
|
||||||
\x00\x00\x01rx\xd0\xef\xa4\
|
\x00\x00\x01rx\xd0\xef\xa4\
|
||||||
\x00\x00\x02\x1e\x00\x00\x00\x00\x00\x01\x00\x04\x12\xd0\
|
\x00\x00\x024\x00\x00\x00\x00\x00\x01\x00\x04\x17S\
|
||||||
\x00\x00\x01ro&U\x86\
|
\x00\x00\x01ro&U\x86\
|
||||||
\x00\x00\x03\xe4\x00\x00\x00\x00\x00\x01\x00\x08\xad\xd4\
|
|
||||||
\x00\x00\x01ro'\x5c\xdd\
|
|
||||||
\x00\x00\x044\x00\x00\x00\x00\x00\x01\x00\x09.\x8c\
|
|
||||||
\x00\x00\x01r\xa2l\xb8\xf8\
|
|
||||||
\x00\x00\x054\x00\x00\x00\x00\x00\x01\x00\x0b\x1c\xe7\
|
|
||||||
\x00\x00\x01rxL\xc3L\
|
|
||||||
\x00\x00\x02\xbc\x00\x00\x00\x00\x00\x01\x00\x05z\x88\
|
|
||||||
\x00\x00\x01rn\x80a\x98\
|
|
||||||
\x00\x00\x03\xa6\x00\x00\x00\x00\x00\x01\x00\x07V\xff\
|
|
||||||
\x00\x00\x01ro!\x10\x8b\
|
|
||||||
\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x01\x00\x0162\
|
\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x01\x00\x0162\
|
||||||
|
\x00\x00\x01r\xbcx\xf1\xbd\
|
||||||
|
\x00\x00\x03\xfa\x00\x00\x00\x00\x00\x01\x00\x08\xb2W\
|
||||||
|
\x00\x00\x01ro'\x5c\xdd\
|
||||||
|
\x00\x00\x04J\x00\x00\x00\x00\x00\x01\x00\x093\x0f\
|
||||||
|
\x00\x00\x01r\xa2l\xb8\xf8\
|
||||||
|
\x00\x00\x05~\x00\x00\x00\x00\x00\x01\x00\x0b6\xf7\
|
||||||
|
\x00\x00\x01rxL\xc3L\
|
||||||
|
\x00\x00\x02\xd2\x00\x00\x00\x00\x00\x01\x00\x05\x7f\x0b\
|
||||||
|
\x00\x00\x01rn\x80a\x98\
|
||||||
|
\x00\x00\x03\xbc\x00\x00\x00\x00\x00\x01\x00\x07[\x82\
|
||||||
|
\x00\x00\x01ro!\x10\x8b\
|
||||||
|
\x00\x00\x00\xd2\x00\x00\x00\x00\x00\x01\x00\x01:\xb5\
|
||||||
\x00\x00\x01ro6\xcc\x14\
|
\x00\x00\x01ro6\xcc\x14\
|
||||||
\x00\x00\x03\xb8\x00\x00\x00\x00\x00\x01\x00\x07\xc9\x8e\
|
\x00\x00\x03\xce\x00\x00\x00\x00\x00\x01\x00\x07\xce\x11\
|
||||||
\x00\x00\x01ryf\xd9E\
|
\x00\x00\x01ryf\xd9E\
|
||||||
\x00\x00\x03\x1c\x00\x00\x00\x00\x00\x01\x00\x06\x84\xbc\
|
\x00\x00\x032\x00\x00\x00\x00\x00\x01\x00\x06\x89?\
|
||||||
\x00\x00\x01rn\x83W\xb2\
|
\x00\x00\x01rn\x83W\xb2\
|
||||||
\x00\x00\x02\x8c\x00\x00\x00\x00\x00\x01\x00\x04\xdd\x81\
|
\x00\x00\x02\xa2\x00\x00\x00\x00\x00\x01\x00\x04\xe2\x04\
|
||||||
\x00\x00\x01rn\x80\x8e_\
|
\x00\x00\x01rn\x80\x8e_\
|
||||||
\x00\x00\x01\xe6\x00\x00\x00\x00\x00\x01\x00\x03\xda\xee\
|
\x00\x00\x01\xfc\x00\x00\x00\x00\x00\x01\x00\x03\xdfq\
|
||||||
\x00\x00\x01ro'\xd9\xb1\
|
\x00\x00\x01ro'\xd9\xb1\
|
||||||
\x00\x00\x02\xd2\x00\x00\x00\x00\x00\x01\x00\x05\xc8\x96\
|
\x00\x00\x02\xe8\x00\x00\x00\x00\x00\x01\x00\x05\xcd\x19\
|
||||||
\x00\x00\x01ro!\x80\x9f\
|
\x00\x00\x01ro!\x80\x9f\
|
||||||
\x00\x00\x04\xc4\x00\x00\x00\x00\x00\x01\x00\x0a\x040\
|
\x00\x00\x04\xf4\x00\x00\x00\x00\x00\x01\x00\x0a\x0e\xc8\
|
||||||
\x00\x00\x01ro*{\xa5\
|
\x00\x00\x01ro*{\xa5\
|
||||||
\x00\x00\x05\x18\x00\x00\x00\x00\x00\x01\x00\x0a\xe3\xd4\
|
\x00\x00\x05b\x00\x00\x00\x00\x00\x01\x00\x0a\xfd\xe4\
|
||||||
\x00\x00\x01rxA\xa0\xe6\
|
\x00\x00\x01rxA\xa0\xe6\
|
||||||
\x00\x00\x04N\x00\x00\x00\x00\x00\x01\x00\x090\xf8\
|
\x00\x00\x04~\x00\x00\x00\x00\x00\x01\x00\x09;\x90\
|
||||||
\x00\x00\x01r\x8a:\x08\x8f\
|
\x00\x00\x01r\x8a:\x08\x8f\
|
||||||
\x00\x00\x02\x00\x00\x00\x00\x00\x00\x01\x00\x04\x0f=\
|
\x00\x00\x02\x16\x00\x00\x00\x00\x00\x01\x00\x04\x13\xc0\
|
||||||
\x00\x00\x01r\xa2b\xf5\xfa\
|
\x00\x00\x01r\xa2b\xf5\xfa\
|
||||||
\x00\x00\x03\x00\x00\x00\x00\x00\x00\x01\x00\x06`\xfe\
|
\x00\x00\x03\x16\x00\x00\x00\x00\x00\x01\x00\x06e\x81\
|
||||||
\x00\x00\x01ro'\xf7\xd9\
|
\x00\x00\x01ro'\xf7\xd9\
|
||||||
\x00\x00\x03\x8c\x00\x00\x00\x00\x00\x01\x00\x07R@\
|
\x00\x00\x03\xa2\x00\x00\x00\x00\x00\x01\x00\x07V\xc3\
|
||||||
\x00\x00\x01r\x8a6j\xde\
|
\x00\x00\x01r\x8a6j\xde\
|
||||||
\x00\x00\x02l\x00\x00\x00\x00\x00\x01\x00\x04~-\
|
\x00\x00\x02\x82\x00\x00\x00\x00\x00\x01\x00\x04\x82\xb0\
|
||||||
\x00\x00\x01ro+U:\
|
\x00\x00\x01ro+U:\
|
||||||
\x00\x00\x00H\x00\x00\x00\x00\x00\x01\x00\x00\x15\x94\
|
\x00\x00\x00H\x00\x00\x00\x00\x00\x01\x00\x00\x15\x94\
|
||||||
\x00\x00\x01ro\x22L\x9b\
|
\x00\x00\x01ro\x22L\x9b\
|
||||||
\x00\x00\x01\x1c\x00\x00\x00\x00\x00\x01\x00\x02Q\x91\
|
\x00\x00\x012\x00\x00\x00\x00\x00\x01\x00\x02V\x14\
|
||||||
\x00\x00\x01rn\x80\xbaA\
|
\x00\x00\x01rn\x80\xbaA\
|
||||||
\x00\x00\x01\x9a\x00\x00\x00\x00\x00\x01\x00\x03\xd6^\
|
\x00\x00\x01\xb0\x00\x00\x00\x00\x00\x01\x00\x03\xda\xe1\
|
||||||
\x00\x00\x01r\x9e\xb0mx\
|
\x00\x00\x01r\x9e\xb0mx\
|
||||||
\x00\x00\x016\x00\x00\x00\x00\x00\x01\x00\x02\x9d?\
|
\x00\x00\x01L\x00\x00\x00\x00\x00\x01\x00\x02\xa1\xc2\
|
||||||
\x00\x00\x01ro\x14<\x9f\
|
\x00\x00\x01ro\x14<\x9f\
|
||||||
\x00\x00\x04\x00\x00\x00\x00\x00\x00\x01\x00\x08\xce\x83\
|
\x00\x00\x04\x16\x00\x00\x00\x00\x00\x01\x00\x08\xd3\x06\
|
||||||
\x00\x00\x01ro\x14\xa8\xb6\
|
\x00\x00\x01ro\x14\xa8\xb6\
|
||||||
\x00\x00\x00\xa8\x00\x00\x00\x00\x00\x01\x00\x00\xb0Y\
|
\x00\x00\x00\xa8\x00\x00\x00\x00\x00\x01\x00\x00\xb0Y\
|
||||||
\x00\x00\x01ro\x1e\xc7F\
|
\x00\x00\x01ro\x1e\xc7F\
|
||||||
\x00\x00\x04\x80\x00\x00\x00\x00\x00\x01\x00\x09\xa1H\
|
\x00\x00\x04\xb0\x00\x00\x00\x00\x00\x01\x00\x09\xab\xe0\
|
||||||
\x00\x00\x01rxK\x8a\x1d\
|
\x00\x00\x01rxK\x8a\x1d\
|
||||||
\x00\x00\x02\xa8\x00\x00\x00\x00\x00\x01\x00\x05(w\
|
\x00\x00\x02\xbe\x00\x00\x00\x00\x00\x01\x00\x05,\xfa\
|
||||||
\x00\x00\x01ro!G\x15\
|
\x00\x00\x01ro!G\x15\
|
||||||
\x00\x00\x01\x82\x00\x00\x00\x00\x00\x01\x00\x03\xb6A\
|
\x00\x00\x01\x98\x00\x00\x00\x00\x00\x01\x00\x03\xba\xc4\
|
||||||
\x00\x00\x01ro*\xb4%\
|
\x00\x00\x01ro*\xb4%\
|
||||||
\x00\x00\x00\xd0\x00\x00\x00\x00\x00\x01\x00\x01\x82Y\
|
\x00\x00\x00\xe6\x00\x00\x00\x00\x00\x01\x00\x01\x86\xdc\
|
||||||
\x00\x00\x01r\x82\xb4i\x96\
|
\x00\x00\x01r\x82\xb4i\x96\
|
||||||
\x00\x00\x04\x1a\x00\x00\x00\x00\x00\x01\x00\x08\xd8\x1d\
|
\x00\x00\x040\x00\x00\x00\x00\x00\x01\x00\x08\xdc\xa0\
|
||||||
\x00\x00\x01ryaf\xee\
|
\x00\x00\x01ryaf\xee\
|
||||||
\x00\x00\x036\x00\x00\x00\x00\x00\x01\x00\x06\xd2\x84\
|
\x00\x00\x03L\x00\x00\x00\x00\x00\x01\x00\x06\xd7\x07\
|
||||||
\x00\x00\x01ryg+\xf0\
|
\x00\x00\x01ryg+\xf0\
|
||||||
\x00\x00\x04\xfe\x00\x00\x00\x00\x00\x01\x00\x0a\x80\xfc\
|
\x00\x00\x05H\x00\x00\x00\x00\x00\x01\x00\x0a\x9b\x0c\
|
||||||
\x00\x00\x01rx\xcbU\xa4\
|
\x00\x00\x01rx\xcbU\xa4\
|
||||||
\x00\x00\x04\x9c\x00\x00\x00\x00\x00\x01\x00\x09\xc5\xc5\
|
\x00\x00\x04\xcc\x00\x00\x00\x00\x00\x01\x00\x09\xd0]\
|
||||||
\x00\x00\x01rx\xcc\xdf'\
|
\x00\x00\x01rx\xcc\xdf'\
|
||||||
\x00\x00\x02T\x00\x00\x00\x00\x00\x01\x00\x043Y\
|
\x00\x00\x04d\x00\x00\x00\x00\x00\x01\x00\x095{\
|
||||||
|
\x00\x00\x01r\xbcw>\x8a\
|
||||||
|
\x00\x00\x02j\x00\x00\x00\x00\x00\x01\x00\x047\xdc\
|
||||||
\x00\x00\x01rn\x80\xf2c\
|
\x00\x00\x01rn\x80\xf2c\
|
||||||
\x00\x00\x04d\x00\x00\x00\x00\x00\x01\x00\x095\xf6\
|
\x00\x00\x04\x94\x00\x00\x00\x00\x00\x01\x00\x09@\x8e\
|
||||||
\x00\x00\x01ro!-\x86\
|
\x00\x00\x01ro!-\x86\
|
||||||
\x00\x00\x01\x08\x00\x00\x00\x00\x00\x01\x00\x01\xe3\xda\
|
\x00\x00\x01\x1e\x00\x00\x00\x00\x00\x01\x00\x01\xe8]\
|
||||||
\x00\x00\x01rn\x7f\xe8!\
|
\x00\x00\x01rn\x7f\xe8!\
|
||||||
"
|
"
|
||||||
|
|
||||||
|
|||||||
45
mod.htm
Normal file
45
mod.htm
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
<html>
|
||||||
|
<span style='font-size:22pt;color:maroon'><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⡷</span>
|
||||||
|
<span style='font-size:22pt;color:maroon'><EFBFBD><EFBFBD><EFBFBD><EFBFBD></span>
|
||||||
|
<span style='font-size:22pt;color:maroon'>ʱ<EFBFBD><EFBFBD></span>
|
||||||
|
<span style='font-size:11pt;color:maroon'><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD></span><br>
|
||||||
|
<span>********************************************************</span><br>
|
||||||
|
<span style='font-size:11.0pt;color:#31849B'><EFBFBD><EFBFBD><EFBFBD><EFBFBD></span>
|
||||||
|
<span style='font-size:14pt;color:maroon'><EFBFBD><EFBFBD>P123-126<32><36></span><br>
|
||||||
|
|
||||||
|
<br><br>
|
||||||
|
|
||||||
|
<table border="0">
|
||||||
|
<tr>
|
||||||
|
<td width = 20> </td>
|
||||||
|
<td valign="top">
|
||||||
|
<font size="4" color="black"></font><br>
|
||||||
|
<a href=https://www.w3school.com.cn/html/html_links.asp><font size="4" color="red"><EFBFBD><EFBFBD><EFBFBD><EFBFBD></font></a><br>
|
||||||
|
<font size="4" color="black"><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:è<><C3A8></font><br>
|
||||||
|
<font size="4" color="red"><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></font> <br>
|
||||||
|
<font size="4" color="black"><EFBFBD><EFBFBD><EFBFBD><EFBFBD></font> <br>
|
||||||
|
<font size="4" color="green"><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>xxxxxxxxxxxxxxxxxxxxxxxxxxx</font><br>
|
||||||
|
<font size="4"><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>: 2015</font> <br>
|
||||||
|
</td>
|
||||||
|
<td width = 100> </td>
|
||||||
|
<td> <img style="max-width:220px;" src="/Users/mark/kman/downimg/s28283792.jpg" > </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<br><br>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<a class="nbg" title="֯<><D6AF>">
|
||||||
|
<img src="https://img9.doubanio.com/view/subject/s/public/s33637764.jpg"
|
||||||
|
style="max-width: 270px;max-height: 400px;"></a>
|
||||||
|
</div>
|
||||||
|
<div id="info" class="">
|
||||||
|
<span> <span class="pl"> <20><><EFBFBD><EFBFBD>:</span></span><br/>
|
||||||
|
<span class="pl"><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:</span><br/>
|
||||||
|
<span class="pl">ratenumber:</span><br/>
|
||||||
|
<span class="pl">Rate:</span><br/>
|
||||||
|
<span class="pl">publisher:</span><br/>
|
||||||
|
<span class="pl">publishing time:</span><br/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</html>
|
||||||
132
parseweb.py
132
parseweb.py
@@ -85,71 +85,15 @@ testbooks =['24堂财富课',
|
|||||||
'中国为什么有前途:对外经济关系的战略潜能(第3版)',
|
'中国为什么有前途:对外经济关系的战略潜能(第3版)',
|
||||||
'日本的世界观(《剑桥日本史》主编凝练之作三个人物故事串起日本两百年变局了解近代日本转向的必读之书理想国出品))']
|
'日本的世界观(《剑桥日本史》主编凝练之作三个人物故事串起日本两百年变局了解近代日本转向的必读之书理想国出品))']
|
||||||
|
|
||||||
testresp = """<div class="result">
|
|
||||||
<div class="pic">
|
|
||||||
<a class="nbg" href="https://www.douban.com/link2/?url=https%3A%2F%2Fbook.douban.com%2Fsubject%2F30329810%2F&query=%E8%A7%A3%E8%AF%BB%E4%B8%AD%E5%9B%BD%E7%BB%8F%E6%B5%8E&cat_id=1001&type=search&pos=1" target="_blank" onclick="moreurl(this,{i: '1', query: '%E8%A7%A3%E8%AF%BB%E4%B8%AD%E5%9B%BD%E7%BB%8F%E6%B5%8E', from: 'dou_search_book', sid: 30329810, qcat: ''})" title="解读中国经济" ><img src="https://img3.doubanio.com/view/subject/s/public/s29872890.jpg"></a>
|
|
||||||
</div>
|
|
||||||
<div class="content">
|
|
||||||
<div class="title">
|
|
||||||
<h3>
|
|
||||||
<span>[书籍]</span> <a href="https://www.douban.com/link2/?url=https%3A%2F%2Fbook.douban.com%2Fsubject%2F30329810%2F&query=%E8%A7%A3%E8%AF%BB%E4%B8%AD%E5%9B%BD%E7%BB%8F%E6%B5%8E&cat_id=1001&type=search&pos=1" target="_blank" onclick="moreurl(this,{i: '1', query: '%E8%A7%A3%E8%AF%BB%E4%B8%AD%E5%9B%BD%E7%BB%8F%E6%B5%8E', from: 'dou_search_book', sid: 30329810, qcat: ''})" >解读中国经济 </a>
|
|
||||||
</h3>
|
|
||||||
|
|
||||||
<div class="rating-info">
|
|
||||||
|
|
||||||
<span class="allstar45"></span>
|
|
||||||
<span class="rating_nums">9.4</span>
|
|
||||||
<span>(145人评价)</span>
|
|
||||||
|
|
||||||
<span class="subject-cast">林毅夫 / 北京大学出版社 / 2018</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<p>《解读中国经济》是解读中国经济之作,总结了中国与其他国家、地区经济发展和改革活动的经验,提出了一个经济发展和转型的一般理论,并以此理论分析中国在改革和发展过...</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
div class="result">
|
|
||||||
<div class="pic">
|
|
||||||
<a class="nbg" href="https://www.douban.com/link2/?url=https%3A%2F%2Fbook.douban.com%2Fsubject%2F30329810%2F&query=%E8%A7%A3%E8%AF%BB%E4%B8%AD%E5%9B%BD%E7%BB%8F%E6%B5%8E&cat_id=1001&type=search&pos=1" target="_blank" onclick="moreurl(this,{i: '1', query: '%E8%A7%A3%E8%AF%BB%E4%B8%AD%E5%9B%BD%E7%BB%8F%E6%B5%8E', from: 'dou_search_book', sid: 30329810, qcat: ''})" title="解读中国经济" ><img src="https://img3.doubanio.com/view/subject/s/public/s29872890.jpg"></a>
|
|
||||||
</div>
|
|
||||||
<div class="content">
|
|
||||||
<div class="title">
|
|
||||||
<h3>
|
|
||||||
<span>[书籍]</span> <a href="https://www.douban.com/link2/?url=https%3A%2F%2Fbook.douban.com%2Fsubject%2F30329810%2F&query=%E8%A7%A3%E8%AF%BB%E4%B8%AD%E5%9B%BD%E7%BB%8F%E6%B5%8E&cat_id=1001&type=search&pos=1" target="_blank" onclick="moreurl(this,{i: '1', query: '%E8%A7%A3%E8%AF%BB%E4%B8%AD%E5%9B%BD%E7%BB%8F%E6%B5%8E', from: 'dou_search_book', sid: 30329810, qcat: ''})" >解读中国经济 </a>
|
|
||||||
</h3>
|
|
||||||
|
|
||||||
<div class="rating-info">
|
|
||||||
|
|
||||||
<span class="allstar45"></span>
|
|
||||||
<span class="rating_nums">9.4</span>
|
|
||||||
<span>(145人评价)</span>
|
|
||||||
|
|
||||||
<span class="subject-cast">林毅夫 / 北京大学出版社 / 2018</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<p>《解读中国经济》是解读中国经济之作,总结了中国与其他国家、地区经济发展和改革活动的经验,提出了一个经济发展和转型的一般理论,并以此理论分析中国在改革和发展过...</p>
|
|
||||||
</div>
|
|
||||||
</div>"""
|
|
||||||
|
|
||||||
class bookInfoSpide():
|
class bookInfoSpide():
|
||||||
|
|
||||||
"""
|
[re_bn,re_bn,re_score,re_star,re_author,re_end]=[None,None,None,None,None,None]
|
||||||
re_bn = re.compile(r'''
|
|
||||||
class=\"nbg.+?sid: (\d+?),.+?
|
|
||||||
title=\"(.+?)\".+?
|
|
||||||
img src=\"(.+?)\".+?
|
|
||||||
rating_nums\">(.+?)<
|
|
||||||
''',flags=re.S|re.X)
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
[re_bn,re_bn,re_rate,re_norate,re_author,re_end] = [None,None,None,None,None,None]
|
|
||||||
if ISDOUBAN==1:
|
if ISDOUBAN==1:
|
||||||
re_bn=re.compile(r'''class=\"nbg.+?sid: (\d+?),.+?title=\"(.+?)\".+?img src=\"(.+?)\".+?rating_nums\">(.+?)<''', re.S)
|
re_bn=re.compile(r'''class=\"nbg.+?sid: (\d+?),.+?title=\"(.+?)\".+?img src=\"(.+?)\".+?rating_nums\">(.+?)<''', re.S)
|
||||||
re_bn=re.compile(r'''class=\"nbg.+?sid: (\d+?),.+?title=\"(.+?)\".+?img src=\"(.+?)\"''')
|
re_bn=re.compile(r'''class=\"nbg.+?sid: (\d+?),.+?title=\"(.+?)\".+?img src=\"(.+?)\"''')
|
||||||
re_rate = re.compile(r'''class=\"rating_nums\">(.+?)<''')
|
re_star=re.compile(r'''^<span class=\"allstar(\d+)\"></span>''')
|
||||||
re_norate = re.compile(r'''class=\"allstar00\"''')
|
re_score=re.compile(r'''class=\"rating_nums\">(.+?)<''')
|
||||||
|
re_ratenum=re.compile(r'''^<span>\((\d+)人评价\)</span>''')
|
||||||
re_author=re.compile(r'''class=\"subject-cast\">(.+?)<''')
|
re_author=re.compile(r'''class=\"subject-cast\">(.+?)<''')
|
||||||
else:
|
else:
|
||||||
re_asin=re.compile(r'''^<div data-asin=\"(.+?)\" data-index''')
|
re_asin=re.compile(r'''^<div data-asin=\"(.+?)\" data-index''')
|
||||||
@@ -160,7 +104,6 @@ class bookInfoSpide():
|
|||||||
#re_end=re.compile(r'''<\/body><\/html>''')
|
#re_end=re.compile(r'''<\/body><\/html>''')
|
||||||
re_end=re.compile(r'''^<span class=\"a-letter-space\"><\/span><\/div><\/div>''')
|
re_end=re.compile(r'''^<span class=\"a-letter-space\"><\/span><\/div><\/div>''')
|
||||||
|
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@@ -171,8 +114,11 @@ class bookInfoSpide():
|
|||||||
"link":"https://....xxxxx"
|
"link":"https://....xxxxx"
|
||||||
"bookname": "庆余年",
|
"bookname": "庆余年",
|
||||||
"img": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2575362797.jpg",
|
"img": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2575362797.jpg",
|
||||||
"rate": "8.0",
|
"score": "8.0",
|
||||||
|
"ratenum": "1000",
|
||||||
"author": "猫腻"
|
"author": "猫腻"
|
||||||
|
"publisher": "中华书局"
|
||||||
|
"publishing": "2015"
|
||||||
},...}
|
},...}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -187,15 +133,8 @@ class bookInfoSpide():
|
|||||||
session.params = mparams
|
session.params = mparams
|
||||||
r = session.get( url=murl, headers=mheaders, params=mparams)
|
r = session.get( url=murl, headers=mheaders, params=mparams)
|
||||||
#r = requests.get( url=murl, headers=mheaders, params=mparams)
|
#r = requests.get( url=murl, headers=mheaders, params=mparams)
|
||||||
except requests.exceptions.ConnectionError:
|
except Exception as e:
|
||||||
print('ConnectionError -- please wait 3 seconds')
|
print(e)
|
||||||
time.sleep(3)
|
|
||||||
except requests.exceptions.ChunkedEncodingError:
|
|
||||||
print('ChunkedEncodingError -- please wait 3 seconds')
|
|
||||||
time.sleep(3)
|
|
||||||
except:
|
|
||||||
print('Unfortunitely -- An Unknow Error Happened, Please wait 3 seconds')
|
|
||||||
time.sleep(3)
|
|
||||||
|
|
||||||
if r.status_code != 200:
|
if r.status_code != 200:
|
||||||
print('grab book {} info from webside failure'.format(mbkn))
|
print('grab book {} info from webside failure'.format(mbkn))
|
||||||
@@ -219,22 +158,37 @@ class bookInfoSpide():
|
|||||||
bkinfo[sid]['link']=os.path.join(LINKPREF,sid)
|
bkinfo[sid]['link']=os.path.join(LINKPREF,sid)
|
||||||
bkinfo[sid]['bookname']=ret.group(2)
|
bkinfo[sid]['bookname']=ret.group(2)
|
||||||
bkinfo[sid]['img']=ret.group(3)
|
bkinfo[sid]['img']=ret.group(3)
|
||||||
stat = 'RATE'
|
stat='STAR'
|
||||||
continue
|
continue
|
||||||
elif stat=='RATE':
|
elif stat=='STAR':
|
||||||
# if no rate, goto next bookname state
|
ret=re.search(self.re_star, line)
|
||||||
if re.search(self.re_norate, line):
|
|
||||||
stat = 'SID'
|
|
||||||
continue
|
|
||||||
ret=re.search(self.re_rate, line)
|
|
||||||
if ret:
|
if ret:
|
||||||
bkinfo[sid]['rate'] = ret.group(1)
|
star = ret.group(1)
|
||||||
|
if star=='00':
|
||||||
|
stat='AUTHOR'
|
||||||
|
elif int(star) > 0:
|
||||||
|
stat='SCORE'
|
||||||
|
elif stat=='SCORE':
|
||||||
|
ret=re.search(self.re_score, line)
|
||||||
|
if ret:
|
||||||
|
bkinfo[sid]['score']=ret.group(1)
|
||||||
|
stat='RATENUM'
|
||||||
|
continue
|
||||||
|
elif stat=='RATENUM':
|
||||||
|
ret=re.search(self.re_ratenum, line)
|
||||||
|
if ret:
|
||||||
|
bkinfo[sid]['ratenum']=ret.group(1)
|
||||||
stat='AUTHOR'
|
stat='AUTHOR'
|
||||||
continue
|
continue
|
||||||
elif stat=='AUTHOR':
|
elif stat=='AUTHOR':
|
||||||
ret=re.search(self.re_author, line)
|
ret=re.search(self.re_author, line)
|
||||||
if ret:
|
if ret:
|
||||||
bkinfo[sid]['author'] = ret.group(1).split(' ')[0]
|
tt=ret.group(1).split(' / ')
|
||||||
|
if len(tt)>=3:
|
||||||
|
*author, bkinfo[sid]['publisher'], bkinfo[sid]['publishing']=tt
|
||||||
|
bkinfo[sid]['author']='/'.join(author)
|
||||||
|
else:
|
||||||
|
bkinfo[sid]['author']=ret[0]
|
||||||
stat='SID'
|
stat='SID'
|
||||||
else: continue
|
else: continue
|
||||||
else:
|
else:
|
||||||
@@ -288,13 +242,15 @@ class bookInfoSpide():
|
|||||||
"""
|
"""
|
||||||
mbkinfo:
|
mbkinfo:
|
||||||
douban
|
douban
|
||||||
{
|
"10530219": {
|
||||||
"庆余年": {
|
"link": "https://book.douban.com/subject/10530219",
|
||||||
"link":"https://....25853071",
|
"bookname": "市场的逻辑",
|
||||||
"bookname": "庆余年xxx",
|
"img": "https://img3.doubanio.com/view/subject/s/public/s8912552.jpg",
|
||||||
"img": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2575362797.jpg",
|
"score": "8.3",
|
||||||
"rate": "8.0",
|
"ratenum": "218",
|
||||||
"author": "猫腻"
|
"publisher": "世纪文景 上海人民出版社",
|
||||||
|
"publishing": "2012",
|
||||||
|
"author": "张维迎"
|
||||||
},...}
|
},...}
|
||||||
amazon
|
amazon
|
||||||
"孟子": {
|
"孟子": {
|
||||||
@@ -315,7 +271,7 @@ class bookInfoSpide():
|
|||||||
mbkn=mbkinfo[0]
|
mbkn=mbkinfo[0]
|
||||||
for k,v in mbkinfo[1].items():
|
for k,v in mbkinfo[1].items():
|
||||||
bkn=v['bookname']
|
bkn=v['bookname']
|
||||||
if len(v) == 5:
|
if len(v)==8:
|
||||||
if (not f1) and (mbkn in bkn):
|
if (not f1) and (mbkn in bkn):
|
||||||
f1=1
|
f1=1
|
||||||
d1={mbkn:v}
|
d1={mbkn:v}
|
||||||
|
|||||||
25236
tdouban.data
Normal file
25236
tdouban.data
Normal file
File diff suppressed because it is too large
Load Diff
341
tparsedbcomments.py
Normal file
341
tparsedbcomments.py
Normal file
@@ -0,0 +1,341 @@
|
|||||||
|
#########################################################
|
||||||
|
## @file : tparsedbcomments.py
|
||||||
|
## @desc : parse douban comments & reviews
|
||||||
|
## @create : 2020/06/15
|
||||||
|
## @author : Chengan
|
||||||
|
## @email : douboer@gmail.com
|
||||||
|
#########################################################
|
||||||
|
|
||||||
|
#comments - https://book.douban.com/subject/26591910/comments/hot?p=1
|
||||||
|
# https://book.douban.com/subject/26591910/comments/
|
||||||
|
#reviews - https://book.douban.com/subject/26591910/reviews/
|
||||||
|
# https://book.douban.com/subject/26591910/reviews?start=0
|
||||||
|
|
||||||
|
import requests
|
||||||
|
import json
|
||||||
|
import re
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
import logging
|
||||||
|
from collections import defaultdict
|
||||||
|
|
||||||
|
# log info
|
||||||
|
logger=logging.getLogger()
|
||||||
|
logger.addHandler(logging.FileHandler('log'))
|
||||||
|
logger.setLevel(logging.DEBUG)
|
||||||
|
|
||||||
|
FROMFILE=1
|
||||||
|
ISDOUBAN=1
|
||||||
|
IMGPATH = './downimg'
|
||||||
|
LINKPREF = 'https://book.douban.com/subject/' \
|
||||||
|
if ISDOUBAN else 'https://www.amazon.cn/s?k='
|
||||||
|
|
||||||
|
mheaders = {
|
||||||
|
'Host': 'www.douban.com',
|
||||||
|
'Referer': 'http://www.douban.com',
|
||||||
|
'User-Agent': 'User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'
|
||||||
|
}
|
||||||
|
#"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36"
|
||||||
|
|
||||||
|
mparams = {}
|
||||||
|
murl = ""
|
||||||
|
if ISDOUBAN==1:
|
||||||
|
mparams['Host']='www.douban.com',
|
||||||
|
mparams['search_text'] = 'bkname_xxx'
|
||||||
|
mparams['cat']='1001'
|
||||||
|
mparams['k']='bookname_xxx'
|
||||||
|
murl = "https://search.douban.com/book/subject_search"
|
||||||
|
else:
|
||||||
|
mheaders['Host']='www.amazon.cn'
|
||||||
|
mheaders['Referer']='http:/www.amazon.cn'
|
||||||
|
|
||||||
|
#https://www.amazon.cn/s?k={bookname}&i=stripbooks&__mk_zh_CN=亚马逊网站&ref=nb_sb_noss
|
||||||
|
mparams['Host']='www.amazon.cn'
|
||||||
|
mparams['k']='bkname_xxx'
|
||||||
|
mparams['i']='stripbooks'
|
||||||
|
mparams['__mk_zh_CN=']='亚马逊网站'
|
||||||
|
mparams['reg']='nb_sb_noss'
|
||||||
|
|
||||||
|
murl = 'https://www.amazon.cn/s'
|
||||||
|
|
||||||
|
testbooks=['24堂财富课',
|
||||||
|
'甲骨文',
|
||||||
|
'庆余年(精校版)',
|
||||||
|
'商君书-中华经典名著全本全注全译丛书',
|
||||||
|
'苏世民:我的经验与教训(2018读桥水达利欧的原则,2020看黑石苏世民的经验!一本书读懂从白手起家到华尔街新国王的传奇人生)',
|
||||||
|
'杨伯峻_论语译注',
|
||||||
|
'小窗幽记',
|
||||||
|
'少年凯歌',
|
||||||
|
'投资要义',
|
||||||
|
'白鱼解字',
|
||||||
|
'历史的巨镜',
|
||||||
|
'货币的教训',
|
||||||
|
'钱从哪里来',
|
||||||
|
'中国古代简史',
|
||||||
|
'罗马人的故事(套装共15册)',
|
||||||
|
'改变心理学的40项研究',
|
||||||
|
'如何假装懂音乐',
|
||||||
|
'管子(上下册)--中华经典名著全本全注全译(精)',
|
||||||
|
'投资中最简单的事',
|
||||||
|
'薛兆丰经济学讲义',
|
||||||
|
'枪炮、病菌与钢铁:人类社会的命运(世纪人文系列丛书·开放人文)',
|
||||||
|
'中央帝国的哲学密码',
|
||||||
|
'新编说文解字大全集(超值白金版)',
|
||||||
|
'市场的逻辑(增订本)',
|
||||||
|
'金融的本质:伯南克四讲美联储(看一个风云人物的金融思考)',
|
||||||
|
'从零开始学写作:个人增值的有效方法',
|
||||||
|
'中国国家治理的制度逻辑:一个组织学研究',
|
||||||
|
'中国为什么有前途:对外经济关系的战略潜能(第3版)',
|
||||||
|
'日本的世界观(《剑桥日本史》主编凝练之作三个人物故事串起日本两百年变局了解近代日本转向的必读之书理想国出品))']
|
||||||
|
|
||||||
|
class bookInfoSpide():
|
||||||
|
|
||||||
|
[re_bn,re_bn,re_score,re_star,re_author,re_end]=[None,None,None,None,None,None]
|
||||||
|
if ISDOUBAN==1:
|
||||||
|
re_bn=re.compile(r'''class=\"nbg.+?sid: (\d+?),.+?title=\"(.+?)\".+?img src=\"(.+?)\".+?rating_nums\">(.+?)<''', re.S)
|
||||||
|
re_bn=re.compile(r'''class=\"nbg.+?sid: (\d+?),.+?title=\"(.+?)\".+?img src=\"(.+?)\"''')
|
||||||
|
re_star=re.compile(r'''^<span class=\"allstar(\d+)\"></span>''')
|
||||||
|
re_score=re.compile(r'''class=\"rating_nums\">(.+?)<''')
|
||||||
|
re_ratenum=re.compile(r'''^<span>\((\d+)人评价\)</span>''')
|
||||||
|
re_author=re.compile(r'''class=\"subject-cast\">(.+?)<''')
|
||||||
|
else:
|
||||||
|
re_asin=re.compile(r'''^<div data-asin=\"(.+?)\" data-index''')
|
||||||
|
re_img=re.compile(r'''^<img src=\"(.+?)\"$''')
|
||||||
|
re_bn=re.compile(r'''^alt=\"(.+?)\"$''')
|
||||||
|
re_author=re.compile(r'''^<div class=.+auto\"><\/span>.+$''')
|
||||||
|
re_rate=re.compile(r'''^<span aria-label=\"(.+?)\">$''')
|
||||||
|
#re_end=re.compile(r'''<\/body><\/html>''')
|
||||||
|
re_end=re.compile(r'''^<span class=\"a-letter-space\"><\/span><\/div><\/div>''')
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def grab_book_info(self, mbkn: str):
|
||||||
|
"""mbkn - bookname to be spided
|
||||||
|
return: {
|
||||||
|
"25853071": { # sid
|
||||||
|
"link":"https://....xxxxx"
|
||||||
|
"bookname": "庆余年",
|
||||||
|
"img": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2575362797.jpg",
|
||||||
|
"score": "8.0",
|
||||||
|
"ratenum": "1000",
|
||||||
|
"author": "猫腻"
|
||||||
|
"publisher": "中华书局"
|
||||||
|
"publishing": "2015"
|
||||||
|
},...}
|
||||||
|
"""
|
||||||
|
|
||||||
|
bkinfo=defaultdict(dict)
|
||||||
|
sid=None
|
||||||
|
stat=None
|
||||||
|
|
||||||
|
if FROMFILE:
|
||||||
|
with open('./tdouban.data', 'r', encoding='utf8', errors='ignore') as f:
|
||||||
|
resp=f.read()
|
||||||
|
else:
|
||||||
|
if ISDOUBAN==1: #douban
|
||||||
|
mparams['search_text'] = mbkn
|
||||||
|
else: #amazon
|
||||||
|
mparams['k'] = mbkn
|
||||||
|
try:
|
||||||
|
session = requests.Session()
|
||||||
|
session.header = mheaders
|
||||||
|
session.params = mparams
|
||||||
|
r = session.get( url=murl, headers=mheaders, params=mparams)
|
||||||
|
#r = requests.get( url=murl, headers=mheaders, params=mparams)
|
||||||
|
except requests.exceptions.ConnectionError:
|
||||||
|
print('ConnectionError -- please wait 3 seconds')
|
||||||
|
time.sleep(3)
|
||||||
|
except requests.exceptions.ChunkedEncodingError:
|
||||||
|
print('ChunkedEncodingError -- please wait 3 seconds')
|
||||||
|
time.sleep(3)
|
||||||
|
except:
|
||||||
|
print('Unfortunitely -- An Unknow Error Happened, Please wait 3 seconds')
|
||||||
|
time.sleep(3)
|
||||||
|
if r.status_code != 200:
|
||||||
|
print('grab book {} info from webside failure'.format(mbkn))
|
||||||
|
|
||||||
|
if ISDOUBAN==1:
|
||||||
|
stat='SID'
|
||||||
|
for line in resp.split('\n'):
|
||||||
|
line=line.strip()
|
||||||
|
if line=='': continue
|
||||||
|
|
||||||
|
if stat=='SID':
|
||||||
|
ret=re.search(self.re_bn, line)
|
||||||
|
if ret:
|
||||||
|
sid=ret.group(1)
|
||||||
|
bkinfo[sid]['link']=os.path.join(LINKPREF,sid)
|
||||||
|
bkinfo[sid]['bookname']=ret.group(2)
|
||||||
|
bkinfo[sid]['img']=ret.group(3)
|
||||||
|
stat='STAR'
|
||||||
|
continue
|
||||||
|
elif stat=='STAR':
|
||||||
|
ret=re.search(self.re_star, line)
|
||||||
|
if ret:
|
||||||
|
star = ret.group(1)
|
||||||
|
if star=='00':
|
||||||
|
stat='AUTHOR'
|
||||||
|
elif int(star) > 0:
|
||||||
|
stat='SCORE'
|
||||||
|
elif stat=='SCORE':
|
||||||
|
ret=re.search(self.re_score, line)
|
||||||
|
if ret:
|
||||||
|
bkinfo[sid]['score']=ret.group(1)
|
||||||
|
stat='RATENUM'
|
||||||
|
continue
|
||||||
|
elif stat=='RATENUM':
|
||||||
|
ret=re.search(self.re_ratenum, line)
|
||||||
|
if ret:
|
||||||
|
bkinfo[sid]['ratenum']=ret.group(1)
|
||||||
|
stat='AUTHOR'
|
||||||
|
continue
|
||||||
|
elif stat=='AUTHOR':
|
||||||
|
ret=re.search(self.re_author, line)
|
||||||
|
if ret:
|
||||||
|
tt=ret.group(1).split(' / ')
|
||||||
|
if len(tt)>=3:
|
||||||
|
*author, bkinfo[sid]['publisher'], bkinfo[sid]['publishing']=tt
|
||||||
|
bkinfo[sid]['author']='/'.join(author)
|
||||||
|
else:
|
||||||
|
bkinfo[sid]['author']=ret[0]
|
||||||
|
stat='SID'
|
||||||
|
else: continue
|
||||||
|
else:
|
||||||
|
stat='ASIN'
|
||||||
|
for line in resp.split('\n'):
|
||||||
|
line=line.strip()
|
||||||
|
if line=='': continue
|
||||||
|
|
||||||
|
if stat=='ASIN':
|
||||||
|
ret=re.search(self.re_asin, line)
|
||||||
|
if ret:
|
||||||
|
sid=ret.group(1)
|
||||||
|
bkinfo[sid]['link']=os.path.join(LINKPREF,ret.group(1))
|
||||||
|
stat='IMG'
|
||||||
|
continue
|
||||||
|
elif stat=='IMG':
|
||||||
|
ret=re.search(self.re_img, line)
|
||||||
|
if ret:
|
||||||
|
bkinfo[sid]['img']=ret.group(1)
|
||||||
|
stat='BOOKNAME'
|
||||||
|
continue
|
||||||
|
elif stat=='BOOKNAME':
|
||||||
|
ret=re.search(self.re_bn, line)
|
||||||
|
if ret:
|
||||||
|
bkname=re.split(r'[((\s]',ret.group(1).strip())[0]
|
||||||
|
bkinfo[sid]['bookname']=bkname
|
||||||
|
stat='AUTHOR'
|
||||||
|
continue
|
||||||
|
elif stat=='AUTHOR':
|
||||||
|
ret=re.search(self.re_author, line)
|
||||||
|
if ret:
|
||||||
|
author=','.join(re.split('<span.+?auto\">|<\/span', ret.group(0))[3::4])
|
||||||
|
bkinfo[sid]['author']=author
|
||||||
|
stat='RATE'
|
||||||
|
continue
|
||||||
|
elif stat=='RATE':
|
||||||
|
ret=re.search(self.re_rate, line)
|
||||||
|
if ret:
|
||||||
|
bkinfo[sid]['rate']=ret.group(1).split(' ')[0]
|
||||||
|
stat='AUTHOR'
|
||||||
|
continue
|
||||||
|
else: continue
|
||||||
|
|
||||||
|
if re.search(self.re_end, line):
|
||||||
|
stat=='ASIN'
|
||||||
|
continue
|
||||||
|
|
||||||
|
return [mbkn, bkinfo]
|
||||||
|
|
||||||
|
def filter_spide_book(self, mbkinfo):
|
||||||
|
"""
|
||||||
|
mbkinfo:
|
||||||
|
douban
|
||||||
|
"10530219": {
|
||||||
|
"link": "https://book.douban.com/subject/10530219",
|
||||||
|
"bookname": "市场的逻辑",
|
||||||
|
"img": "https://img3.doubanio.com/view/subject/s/public/s8912552.jpg",
|
||||||
|
"score": "8.3",
|
||||||
|
"ratenum": "218",
|
||||||
|
"publisher": "世纪文景 上海人民出版社",
|
||||||
|
"publishing": "2012",
|
||||||
|
"author": "张维迎"
|
||||||
|
},...}
|
||||||
|
amazon
|
||||||
|
"孟子": {
|
||||||
|
"link": "https://....B07RN73425",
|
||||||
|
"bookname": "古典名著普及文库:孟子",
|
||||||
|
"img": "https://images-cn.ssl-images-amazon.com/images/I/511vbVrhIBL._AC_UY218_.jpg",
|
||||||
|
"rate": "3.9"
|
||||||
|
"author": "孙钦善",
|
||||||
|
}
|
||||||
|
|
||||||
|
"""
|
||||||
|
#booklink - https://book.douban.com/subject/{sid}
|
||||||
|
# f1/d1: mbkn include in bookname
|
||||||
|
# f2/d2: bookname include mbkn
|
||||||
|
# f3/d3: mbkn and bookname different
|
||||||
|
[f1,f2,f3]=[0,0,0]
|
||||||
|
[d1,d2,d3] =[{},{},{}]
|
||||||
|
mbkn=mbkinfo[0]
|
||||||
|
for k,v in mbkinfo[1].items():
|
||||||
|
bkn=v['bookname']
|
||||||
|
if len(v)==8:
|
||||||
|
if (not f1) and (mbkn in bkn):
|
||||||
|
f1=1
|
||||||
|
d1={mbkn:v}
|
||||||
|
elif (not f1) and (not f2) and (bkn in mbkn):
|
||||||
|
f2=1
|
||||||
|
d2={mbkn:v}
|
||||||
|
elif (not f3):
|
||||||
|
f3=1
|
||||||
|
d3={mbkn:v}
|
||||||
|
else: continue
|
||||||
|
else:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if f1:
|
||||||
|
return d1
|
||||||
|
elif f2:
|
||||||
|
return d2
|
||||||
|
elif f3:
|
||||||
|
return d3
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
def down_book_img(self, mbkinfo):
|
||||||
|
import os
|
||||||
|
import socket
|
||||||
|
from urllib.request import urlretrieve
|
||||||
|
|
||||||
|
headers={'User-Agent': 'User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}
|
||||||
|
|
||||||
|
for k,v in mbkinfo.items():
|
||||||
|
link=v['img']
|
||||||
|
if not os.path.exists(IMGPATH): os.mkdir(IMGPATH)
|
||||||
|
p=os.path.join(IMGPATH,link.split('/')[-1])
|
||||||
|
|
||||||
|
try:
|
||||||
|
img=requests.get(link, headers=headers)
|
||||||
|
if img.status_code==200:
|
||||||
|
with open(p, 'wb') as fp:
|
||||||
|
fp.write(img.content)
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
|
||||||
|
if __name__=='__main__':
|
||||||
|
|
||||||
|
spide=bookInfoSpide()
|
||||||
|
|
||||||
|
for bkname in testbooks:
|
||||||
|
bkname=re.split(r'[\((\-\::_\s]',bkname.strip())[0]
|
||||||
|
bkinfo=spide.grab_book_info(bkname)
|
||||||
|
filter_bkinfo=spide.filter_spide_book(bkinfo)
|
||||||
|
if filter_bkinfo: spide.down_book_img(filter_bkinfo)
|
||||||
|
|
||||||
|
#logger.debug('================ {} ================'.format(bkname))
|
||||||
|
#logger.debug(json.dumps(bkinfo,indent=2, ensure_ascii=False))
|
||||||
|
logger.debug('================ {} ================'.format(bkname))
|
||||||
|
logger.debug(json.dumps(filter_bkinfo,indent=2, ensure_ascii=False))
|
||||||
|
|
||||||
337
tparsedbinfo.py
Normal file
337
tparsedbinfo.py
Normal file
@@ -0,0 +1,337 @@
|
|||||||
|
#########################################################
|
||||||
|
## @file : tparsedbinfo.py
|
||||||
|
## @desc : kindle note managerment tool
|
||||||
|
## @create : 2020/06/15
|
||||||
|
## @author : Chengan
|
||||||
|
## @email : douboer@gmail.com
|
||||||
|
#########################################################
|
||||||
|
|
||||||
|
|
||||||
|
import requests
|
||||||
|
import json
|
||||||
|
import re
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
import logging
|
||||||
|
from collections import defaultdict
|
||||||
|
|
||||||
|
# log info
|
||||||
|
logger=logging.getLogger()
|
||||||
|
logger.addHandler(logging.FileHandler('log'))
|
||||||
|
logger.setLevel(logging.DEBUG)
|
||||||
|
|
||||||
|
FROMFILE=1
|
||||||
|
ISDOUBAN=1
|
||||||
|
IMGPATH = './downimg'
|
||||||
|
LINKPREF = 'https://book.douban.com/subject/' \
|
||||||
|
if ISDOUBAN else 'https://www.amazon.cn/s?k='
|
||||||
|
|
||||||
|
mheaders = {
|
||||||
|
'Host': 'www.douban.com',
|
||||||
|
'Referer': 'http://www.douban.com',
|
||||||
|
'User-Agent': 'User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'
|
||||||
|
}
|
||||||
|
#"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36"
|
||||||
|
|
||||||
|
mparams = {}
|
||||||
|
murl = ""
|
||||||
|
if ISDOUBAN==1:
|
||||||
|
mparams['Host']='www.douban.com',
|
||||||
|
mparams['search_text'] = 'bkname_xxx'
|
||||||
|
mparams['cat']='1001'
|
||||||
|
mparams['k']='bookname_xxx'
|
||||||
|
murl = "https://search.douban.com/book/subject_search"
|
||||||
|
else:
|
||||||
|
mheaders['Host']='www.amazon.cn'
|
||||||
|
mheaders['Referer']='http:/www.amazon.cn'
|
||||||
|
|
||||||
|
#https://www.amazon.cn/s?k={bookname}&i=stripbooks&__mk_zh_CN=亚马逊网站&ref=nb_sb_noss
|
||||||
|
mparams['Host']='www.amazon.cn'
|
||||||
|
mparams['k']='bkname_xxx'
|
||||||
|
mparams['i']='stripbooks'
|
||||||
|
mparams['__mk_zh_CN=']='亚马逊网站'
|
||||||
|
mparams['reg']='nb_sb_noss'
|
||||||
|
|
||||||
|
murl = 'https://www.amazon.cn/s'
|
||||||
|
|
||||||
|
testbooks=['24堂财富课',
|
||||||
|
'甲骨文',
|
||||||
|
'庆余年(精校版)',
|
||||||
|
'商君书-中华经典名著全本全注全译丛书',
|
||||||
|
'苏世民:我的经验与教训(2018读桥水达利欧的原则,2020看黑石苏世民的经验!一本书读懂从白手起家到华尔街新国王的传奇人生)',
|
||||||
|
'杨伯峻_论语译注',
|
||||||
|
'小窗幽记',
|
||||||
|
'少年凯歌',
|
||||||
|
'投资要义',
|
||||||
|
'白鱼解字',
|
||||||
|
'历史的巨镜',
|
||||||
|
'货币的教训',
|
||||||
|
'钱从哪里来',
|
||||||
|
'中国古代简史',
|
||||||
|
'罗马人的故事(套装共15册)',
|
||||||
|
'改变心理学的40项研究',
|
||||||
|
'如何假装懂音乐',
|
||||||
|
'管子(上下册)--中华经典名著全本全注全译(精)',
|
||||||
|
'投资中最简单的事',
|
||||||
|
'薛兆丰经济学讲义',
|
||||||
|
'枪炮、病菌与钢铁:人类社会的命运(世纪人文系列丛书·开放人文)',
|
||||||
|
'中央帝国的哲学密码',
|
||||||
|
'新编说文解字大全集(超值白金版)',
|
||||||
|
'市场的逻辑(增订本)',
|
||||||
|
'金融的本质:伯南克四讲美联储(看一个风云人物的金融思考)',
|
||||||
|
'从零开始学写作:个人增值的有效方法',
|
||||||
|
'中国国家治理的制度逻辑:一个组织学研究',
|
||||||
|
'中国为什么有前途:对外经济关系的战略潜能(第3版)',
|
||||||
|
'日本的世界观(《剑桥日本史》主编凝练之作三个人物故事串起日本两百年变局了解近代日本转向的必读之书理想国出品))']
|
||||||
|
|
||||||
|
class bookInfoSpide():
|
||||||
|
|
||||||
|
[re_bn,re_bn,re_score,re_star,re_author,re_end]=[None,None,None,None,None,None]
|
||||||
|
if ISDOUBAN==1:
|
||||||
|
re_bn=re.compile(r'''class=\"nbg.+?sid: (\d+?),.+?title=\"(.+?)\".+?img src=\"(.+?)\".+?rating_nums\">(.+?)<''', re.S)
|
||||||
|
re_bn=re.compile(r'''class=\"nbg.+?sid: (\d+?),.+?title=\"(.+?)\".+?img src=\"(.+?)\"''')
|
||||||
|
re_star=re.compile(r'''^<span class=\"allstar(\d+)\"></span>''')
|
||||||
|
re_score=re.compile(r'''class=\"rating_nums\">(.+?)<''')
|
||||||
|
re_ratenum=re.compile(r'''^<span>\((\d+)人评价\)</span>''')
|
||||||
|
re_author=re.compile(r'''class=\"subject-cast\">(.+?)<''')
|
||||||
|
else:
|
||||||
|
re_asin=re.compile(r'''^<div data-asin=\"(.+?)\" data-index''')
|
||||||
|
re_img=re.compile(r'''^<img src=\"(.+?)\"$''')
|
||||||
|
re_bn=re.compile(r'''^alt=\"(.+?)\"$''')
|
||||||
|
re_author=re.compile(r'''^<div class=.+auto\"><\/span>.+$''')
|
||||||
|
re_rate=re.compile(r'''^<span aria-label=\"(.+?)\">$''')
|
||||||
|
#re_end=re.compile(r'''<\/body><\/html>''')
|
||||||
|
re_end=re.compile(r'''^<span class=\"a-letter-space\"><\/span><\/div><\/div>''')
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def grab_book_info(self, mbkn: str):
|
||||||
|
"""mbkn - bookname to be spided
|
||||||
|
return: {
|
||||||
|
"25853071": { # sid
|
||||||
|
"link":"https://....xxxxx"
|
||||||
|
"bookname": "庆余年",
|
||||||
|
"img": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2575362797.jpg",
|
||||||
|
"score": "8.0",
|
||||||
|
"ratenum": "1000",
|
||||||
|
"author": "猫腻"
|
||||||
|
"publisher": "中华书局"
|
||||||
|
"publishing": "2015"
|
||||||
|
},...}
|
||||||
|
"""
|
||||||
|
|
||||||
|
bkinfo=defaultdict(dict)
|
||||||
|
sid=None
|
||||||
|
stat=None
|
||||||
|
|
||||||
|
if FROMFILE:
|
||||||
|
with open('./tdouban.data', 'r', encoding='utf8', errors='ignore') as f:
|
||||||
|
resp=f.read()
|
||||||
|
else:
|
||||||
|
if ISDOUBAN==1: #douban
|
||||||
|
mparams['search_text'] = mbkn
|
||||||
|
else: #amazon
|
||||||
|
mparams['k'] = mbkn
|
||||||
|
try:
|
||||||
|
session = requests.Session()
|
||||||
|
session.header = mheaders
|
||||||
|
session.params = mparams
|
||||||
|
r = session.get( url=murl, headers=mheaders, params=mparams)
|
||||||
|
#r = requests.get( url=murl, headers=mheaders, params=mparams)
|
||||||
|
except requests.exceptions.ConnectionError:
|
||||||
|
print('ConnectionError -- please wait 3 seconds')
|
||||||
|
time.sleep(3)
|
||||||
|
except requests.exceptions.ChunkedEncodingError:
|
||||||
|
print('ChunkedEncodingError -- please wait 3 seconds')
|
||||||
|
time.sleep(3)
|
||||||
|
except:
|
||||||
|
print('Unfortunitely -- An Unknow Error Happened, Please wait 3 seconds')
|
||||||
|
time.sleep(3)
|
||||||
|
if r.status_code != 200:
|
||||||
|
print('grab book {} info from webside failure'.format(mbkn))
|
||||||
|
|
||||||
|
if ISDOUBAN==1:
|
||||||
|
stat='SID'
|
||||||
|
for line in resp.split('\n'):
|
||||||
|
line=line.strip()
|
||||||
|
if line=='': continue
|
||||||
|
|
||||||
|
if stat=='SID':
|
||||||
|
ret=re.search(self.re_bn, line)
|
||||||
|
if ret:
|
||||||
|
sid=ret.group(1)
|
||||||
|
bkinfo[sid]['link']=os.path.join(LINKPREF,sid)
|
||||||
|
bkinfo[sid]['bookname']=ret.group(2)
|
||||||
|
bkinfo[sid]['img']=ret.group(3)
|
||||||
|
stat='STAR'
|
||||||
|
continue
|
||||||
|
elif stat=='STAR':
|
||||||
|
ret=re.search(self.re_star, line)
|
||||||
|
if ret:
|
||||||
|
star = ret.group(1)
|
||||||
|
if star=='00':
|
||||||
|
stat='AUTHOR'
|
||||||
|
elif int(star) > 0:
|
||||||
|
stat='SCORE'
|
||||||
|
elif stat=='SCORE':
|
||||||
|
ret=re.search(self.re_score, line)
|
||||||
|
if ret:
|
||||||
|
bkinfo[sid]['score']=ret.group(1)
|
||||||
|
stat='RATENUM'
|
||||||
|
continue
|
||||||
|
elif stat=='RATENUM':
|
||||||
|
ret=re.search(self.re_ratenum, line)
|
||||||
|
if ret:
|
||||||
|
bkinfo[sid]['ratenum']=ret.group(1)
|
||||||
|
stat='AUTHOR'
|
||||||
|
continue
|
||||||
|
elif stat=='AUTHOR':
|
||||||
|
ret=re.search(self.re_author, line)
|
||||||
|
if ret:
|
||||||
|
tt=ret.group(1).split(' / ')
|
||||||
|
if len(tt)>=3:
|
||||||
|
*author, bkinfo[sid]['publisher'], bkinfo[sid]['publishing']=tt
|
||||||
|
bkinfo[sid]['author']='/'.join(author)
|
||||||
|
else:
|
||||||
|
bkinfo[sid]['author']=ret[0]
|
||||||
|
stat='SID'
|
||||||
|
else: continue
|
||||||
|
else:
|
||||||
|
stat='ASIN'
|
||||||
|
for line in resp.split('\n'):
|
||||||
|
line=line.strip()
|
||||||
|
if line=='': continue
|
||||||
|
|
||||||
|
if stat=='ASIN':
|
||||||
|
ret=re.search(self.re_asin, line)
|
||||||
|
if ret:
|
||||||
|
sid=ret.group(1)
|
||||||
|
bkinfo[sid]['link']=os.path.join(LINKPREF,ret.group(1))
|
||||||
|
stat='IMG'
|
||||||
|
continue
|
||||||
|
elif stat=='IMG':
|
||||||
|
ret=re.search(self.re_img, line)
|
||||||
|
if ret:
|
||||||
|
bkinfo[sid]['img']=ret.group(1)
|
||||||
|
stat='BOOKNAME'
|
||||||
|
continue
|
||||||
|
elif stat=='BOOKNAME':
|
||||||
|
ret=re.search(self.re_bn, line)
|
||||||
|
if ret:
|
||||||
|
bkname=re.split(r'[((\s]',ret.group(1).strip())[0]
|
||||||
|
bkinfo[sid]['bookname']=bkname
|
||||||
|
stat='AUTHOR'
|
||||||
|
continue
|
||||||
|
elif stat=='AUTHOR':
|
||||||
|
ret=re.search(self.re_author, line)
|
||||||
|
if ret:
|
||||||
|
author=','.join(re.split('<span.+?auto\">|<\/span', ret.group(0))[3::4])
|
||||||
|
bkinfo[sid]['author']=author
|
||||||
|
stat='RATE'
|
||||||
|
continue
|
||||||
|
elif stat=='RATE':
|
||||||
|
ret=re.search(self.re_rate, line)
|
||||||
|
if ret:
|
||||||
|
bkinfo[sid]['rate']=ret.group(1).split(' ')[0]
|
||||||
|
stat='AUTHOR'
|
||||||
|
continue
|
||||||
|
else: continue
|
||||||
|
|
||||||
|
if re.search(self.re_end, line):
|
||||||
|
stat=='ASIN'
|
||||||
|
continue
|
||||||
|
|
||||||
|
return [mbkn, bkinfo]
|
||||||
|
|
||||||
|
def filter_spide_book(self, mbkinfo):
|
||||||
|
"""
|
||||||
|
mbkinfo:
|
||||||
|
douban
|
||||||
|
"10530219": {
|
||||||
|
"link": "https://book.douban.com/subject/10530219",
|
||||||
|
"bookname": "市场的逻辑",
|
||||||
|
"img": "https://img3.doubanio.com/view/subject/s/public/s8912552.jpg",
|
||||||
|
"score": "8.3",
|
||||||
|
"ratenum": "218",
|
||||||
|
"publisher": "世纪文景 上海人民出版社",
|
||||||
|
"publishing": "2012",
|
||||||
|
"author": "张维迎"
|
||||||
|
},...}
|
||||||
|
amazon
|
||||||
|
"孟子": {
|
||||||
|
"link": "https://....B07RN73425",
|
||||||
|
"bookname": "古典名著普及文库:孟子",
|
||||||
|
"img": "https://images-cn.ssl-images-amazon.com/images/I/511vbVrhIBL._AC_UY218_.jpg",
|
||||||
|
"rate": "3.9"
|
||||||
|
"author": "孙钦善",
|
||||||
|
}
|
||||||
|
|
||||||
|
"""
|
||||||
|
#booklink - https://book.douban.com/subject/{sid}
|
||||||
|
# f1/d1: mbkn include in bookname
|
||||||
|
# f2/d2: bookname include mbkn
|
||||||
|
# f3/d3: mbkn and bookname different
|
||||||
|
[f1,f2,f3]=[0,0,0]
|
||||||
|
[d1,d2,d3] =[{},{},{}]
|
||||||
|
mbkn=mbkinfo[0]
|
||||||
|
for k,v in mbkinfo[1].items():
|
||||||
|
bkn=v['bookname']
|
||||||
|
if len(v)==8:
|
||||||
|
if (not f1) and (mbkn in bkn):
|
||||||
|
f1=1
|
||||||
|
d1={mbkn:v}
|
||||||
|
elif (not f1) and (not f2) and (bkn in mbkn):
|
||||||
|
f2=1
|
||||||
|
d2={mbkn:v}
|
||||||
|
elif (not f3):
|
||||||
|
f3=1
|
||||||
|
d3={mbkn:v}
|
||||||
|
else: continue
|
||||||
|
else:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if f1:
|
||||||
|
return d1
|
||||||
|
elif f2:
|
||||||
|
return d2
|
||||||
|
elif f3:
|
||||||
|
return d3
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
def down_book_img(self, mbkinfo):
|
||||||
|
import os
|
||||||
|
import socket
|
||||||
|
from urllib.request import urlretrieve
|
||||||
|
|
||||||
|
headers={'User-Agent': 'User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}
|
||||||
|
|
||||||
|
for k,v in mbkinfo.items():
|
||||||
|
link=v['img']
|
||||||
|
if not os.path.exists(IMGPATH): os.mkdir(IMGPATH)
|
||||||
|
p=os.path.join(IMGPATH,link.split('/')[-1])
|
||||||
|
|
||||||
|
try:
|
||||||
|
img=requests.get(link, headers=headers)
|
||||||
|
if img.status_code==200:
|
||||||
|
with open(p, 'wb') as fp:
|
||||||
|
fp.write(img.content)
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
|
||||||
|
if __name__=='__main__':
|
||||||
|
|
||||||
|
spide=bookInfoSpide()
|
||||||
|
|
||||||
|
for bkname in testbooks:
|
||||||
|
bkname=re.split(r'[\((\-\::_\s]',bkname.strip())[0]
|
||||||
|
bkinfo=spide.grab_book_info(bkname)
|
||||||
|
filter_bkinfo=spide.filter_spide_book(bkinfo)
|
||||||
|
if filter_bkinfo: spide.down_book_img(filter_bkinfo)
|
||||||
|
|
||||||
|
#logger.debug('================ {} ================'.format(bkname))
|
||||||
|
#logger.debug(json.dumps(bkinfo,indent=2, ensure_ascii=False))
|
||||||
|
logger.debug('================ {} ================'.format(bkname))
|
||||||
|
logger.debug(json.dumps(filter_bkinfo,indent=2, ensure_ascii=False))
|
||||||
|
|
||||||
Reference in New Issue
Block a user