kindle manager

This commit is contained in:
gavin
2020-06-05 09:26:26 +08:00
parent b57297a443
commit fa4c908f58
9 changed files with 318 additions and 130 deletions

View File

@@ -4,6 +4,7 @@
## 1.0.0 (20200526) ## 1.0.0 (20200526)
### create ### create
- unittest
- abstract note/bookmark/highlight from kindle clipping - abstract note/bookmark/highlight from kindle clipping
- formatter output to special file - formatter output to special file
@@ -37,6 +38,8 @@ b['1']['2'] = {'3':1} # OK
``` ```
(authinfo, dateinfo, content) = (s[0], s[1], s[2] if len(s)==3 else None) (authinfo, dateinfo, content) = (s[0], s[1], s[2] if len(s)==3 else None)
``` ```
- unittest error line number is not collect, **unitest bug**?
- **unitest testcase execution sequence is disorder, so must create test data for each case**
## 1.0.2 (20200530) ## 1.0.2 (20200530)
### feature ### feature
@@ -59,10 +62,12 @@ b['1']['2'] = {'3':1} # OK
# feature plan # feature plan
## 20200528 ## 20200528
- first abstract from kindle hard / local directory for different OS - first abstract from kindle hard / local directory for different OS
- add GUI use QT - add GUI use QT **done**
## 20200604
- refactoring kman.py
- creat constant class for all constant
- creat config dialog to do some constant configuration
- creat xman class for all clipping manipulation
- design config dialog & statusbar information![statusbar & config dialog](https://i.loli.net/2020/06/04/zg4W6M1bUPch2vB.jpg)

View File

@@ -64,6 +64,7 @@ CLIPPATH = './tclip.txt'
OUTPREF = './clip' OUTPREF = './clip'
DEBUG = 1 # 0 - INFO; 1 - DEBUG DEBUG = 1 # 0 - INFO; 1 - DEBUG
LOG2FILE = 1 # 0 - to stdio; 1 - to file LOG2FILE = 1 # 0 - to stdio; 1 - to file
LOGFILE = 'log'
DELIMITER= '|' DELIMITER= '|'
# log info # log info
@@ -73,7 +74,7 @@ logger = logging.getLogger()
formatter = logging.Formatter('') formatter = logging.Formatter('')
if LOG2FILE: if LOG2FILE:
handler = logging.FileHandler("log") handler = logging.FileHandler(LOGFILE)
handler.setFormatter(formatter) handler.setFormatter(formatter)
logger.addHandler(handler) logger.addHandler(handler)
else: else:
@@ -110,7 +111,7 @@ def parse_section(s,i):
"""parse section """parse section
Args: Args:
s: section dict s: section line list
i: section index i: section index
Returns: Returns:
@@ -118,7 +119,7 @@ def parse_section(s,i):
d = { 'bookname':bookname, d = { 'bookname':bookname,
bookname: { bookname: {
'author':author 'author':author
'section0':{ '0':{
'type':'HL', 'type':'HL',
'position':'123', 'position':'123',
'day':'2020年5月26日', 'day':'2020年5月26日',

235
kmanrc.py
View File

@@ -6,85 +6,86 @@
from PySide2 import QtCore from PySide2 import QtCore
qt_resource_data = b"\ qt_resource_data = b"\
\x00\x00\x04\xcc\ \x00\x00\x04\xd5\
\x00\ \x00\
\x00\x1a=x\x9c\xb5X\xdf\x93\x9b6\x10~\xbf\xbfB\ \x00\x1a{x\x9c\xb5X\xdf\x93\x9b6\x10~\xbf\xbfB\
\xe3\xf7\x1a\xfb\xe6Zw22\x99^'mf\x9a\x9b\ \xe3\xf7\x1a\xfb\xe6Zw22\x99^'mf\x9a\x9b\
\xb9\xcc\xb9\xc9cG\x06\xd9\xa8\x07\x88\x0a\x91\xb3\xf3\xd7\ \xb9\xcc\xb9\xc9cG\x06\xd9\xa8\x07\x88\x08\x11\xdb\xf9\xeb\
w\x91\x04H\x80\xc19%o\xec\x0f>\xad>\xed\xae\ \xb3H\x02$\xc0\xd89]\xde\xd8\x1f|Z}\xda]\
\x16\xf0\xdbS\x96\xa2/T\x94\x8c\xe7\xdb\xc5z\xb9Z\ -\xe0\xb7\xc7,E_\xa9(\x19\xcf\xd7\xb3\xe5|1\
\x9aG<f\xf9q\xbb\xf8{\xf7\xc7O\xbf.\xde\ C4\x8fx\xcc\xf2\xfdz\xf6\xef\xe6\xaf_~\x9f\xbd\
\x867\xb8b\x9d\xd3\x1d8\x857\x08G))\xcb\xf0\ \x0dop\xc5:\xa7;p\x0ao\x10\x8eRR\x96\xe1\
\x81\xb0\xfc3\xcbc\xfe\x82\x03\xad\x01\xd3\x0b\x8b\x8fT\ \x03a\xf9g\x96\xc7\xfc\x80\x03\xad\x01\xd3\x81\xc5{*\
\x22%o\x17\x1f;\x9f\x05\xcaIF\xb7\x0bK\x03\xfe\ \x91\x92\xd7\xb3\x8f\x9d\xcf\x0c\xe5$\xa3\xeb\x99\xa5\x01\x7f\
\x08\x17\x82\x17T\xc8\xb31\x1f)\xcf\xa8\x14geD\ \x84\x0b\xc1\x0b*\xe4\xc9\x98\xf7\x94gT\x8a\x932\x22\
X\xd0H\xaa'\x84O\xe1\x0a\x07'#\x9ck\xe1l\ ,h$\xd5\x13\xc2\xc7p\x81\x83\xa3\x11N\xb5p2\
\x04XS&\xe1fs\x87\x03\xfd\xa8\xd5\x09e\xc7D\ \x02\xac)\x93p\xb5\xba\xc3\x81~\xd4\xea\x84\xb2}\x22\
\x86wkp5\xcf\x0a3h@q\xd0,>\x16\xc9\ \xc3\xbb%\xb8\x9ag\x85\x194\xa08h\x16\x1f\x8b\xe4\
\x8b\x0ar\xc7dJM0\xa5\x14@N\xf8\x17\x18R\ \xa0\x82\xdc0\x99R\x13L)\x05\x90\x13\xfe\x03\x86\x94\
\x8a\x1eHN\x8e4\xa3\xb9\xc4\x81\xb1\x0c1{t|\ \xa2\x07\x92\x93=\xcdh.q`,C\xcc\x1e\x1d\x9f\
VbCE\x04\xef\x0a\x92j\x1f\xb3FJ\xce\xbc\xea\ \x95\xd8P\x11\xc1\xbb\x82\xa4\xda\xc7\xac\x91\x92\x13\xaf\xba\
^\xf8S\xb0\xf8\x83R5/\x1d;\x8d\xd9'\x934\ \x17\xfe\x16,\xfe\xa0T\xcdK\xfbNc\xf6\xc9$\xcd\
C\x82\xbfl\x17p\x84\x11O\xab,\xaf\x1f\xb5u\x80\ \x90\xe0\x87\xf5\x0c\x8e0\xe2i\x95\xe5\xf5\xa3\xb6\x0e\x10\
\xf8\xfe\x9e\x9f\x5c\xc4\x84\x0b\xf6\x95\xe7\x92\xa4\x0e\xaeA\ \xdf\xdf\xf3\xa3\x8b\x98p\xc1\xbe\xf1\x5c\x92\xd4\xc15\xc8\
n\x84\xc1^>\x90=M\x1b\x8c\x92\x12\x11%Z\xd5\ \x8d0\xd8\xcb\x07\xb2\xa5i\x83QR\x22\xa2D\xab\xda\
\xbe1\xa0T\xd2\x93\xb4\xcc-\xa3O\xeam\x9bFc\ 7\x06\x94Jz\x94\x96\xb9e\xf4I\xbdm\xd3h\xec\
w\xc84*\x1dF\x1bc`\x079\x131\xcb\xe9\xbb\ \x0e\x99F\xa5\xc3hc\x0c\xec /D\xccr\xfa.\
\x98\xc9^\xd0\x8d6x\x0d\xe6\xef<\xdbs\xa0\xd4\xc5\ f\xb2\x17t\xa3\x0d^\x82\xf9'\xcf\xb6\x1c(u1\
l\xb5\xaf\xc2\xdcq\x9e\xdeWR\xf2\xdcE\xb5\xf4\xdf\ [\xed\x8b07\x9c\xa7\xf7\x95\x94<wQ-\xfd\x8f\
\xce\xf1r\xb9\xbc\x8a\xe0\x01 \x8b\x9c\xf5 vP\x94\ s<\x9f\xcf\xaf\x22x\x00\xc8\x22g=\x88\x1d\x14e\
\xdd\x09(]\xceEFR~8\x84\xca\x1a\xe8\x80\x97\ w\x02J\x97s\x91\x91\x94\xefv\xa1\xb2\x06:\xe0\xf9\
\xff\x16\xf4\x88\x83I\xe3\x00\xed[\x0f\x1d\x07:\xc3M\ \xff\x05\xdd\xe3`\xd28@\xfb\xd1C\xc7\x81\xcepS\
5X&\xab2\xd6c\x95\xd1\xa3\xfd\xa9H\x99\x94T\ \x0d\x96\xc9\xaa\x8c\xe5Xe\xf4h\x7f*R&%\x15\
\xb4\xa4\x1b\xf9\x9f\xdb\xae\x22z\xdc@\xe5@\x0d\x13\xc9\ -\xe9F\xfe\xef\xb6\xab\x88\x1e7P9P\xc3D2\
l\x8a0\xcd\xab,\xfc(\xdf\xbcy\xdfV\x16\x0e\x94\ \x9b\x22L\xf3*\x0b?\xca7o\xde\xb7\x95\x85\x03\xa5\
\xf2\xe6\xd2\x16\x07) (\xfd\xc4h\xdb5e#w\ \xbc9\xb7\xc5A\x0a\x08J?1\xdavM\xd9\xc8\xdd\
\xab\xf4B)\xd9W\xfa\xc8S\x16\x9d\xed\xe4\xa8\xb5\x85\ *\xbdPJ\xf6\x8d>\xf2\x94E';9jm\xa1\
\xd2\xa2\xa4~\x96\xe7\x02|\x1f\x05=P!h\xbc@\ \xb4(\xa9\x9f\xe5\xa9\x00\xdfGAwT\x08\x1a\xcf\xd0\
_:\xed\xbbSA\xf2\xba\xfd;\xa7\x0d\xdd\x01\xb2\x86\ \xd7N\xfb\xeeX\x90\xbcn\xff\xceiCw\x80\xac\xa1\
\xca(\xa9[\xae%Y>\xf5\x05\xd1\xf9X\x92u\xa8\ 2J\xea\x96kI\x96O}At>\x96d\x1dj\
]$\xd6\xb1\x0eO\xba\xb7\xab\x8c\x9cXVeO\xf0\ \x17\x89u\xac\xc3\x93\xee\xed*#G\x96U\xd9\x13\xbc\
r\x7f[v\x00\xba\xed\xdf\xadV\xce\x0d`6\xa0[\ \xdc\xdf\x96\x1d\x80n\xfbw\x8b\x85s\x03\x98\x0d\xe8\xd6\
\xff\xfa\x97\xcdfs\xbb\xfe\xd9\xb9\x0b\xac\xd8&\xa2\x1a\ \xbf\xfcm\xb5Z\xdd.\x7fu\xee\x02+\xb6\x89\xa8\x06\
\xa4\xdf\x95\x89s\xf9\xb0F\xf3\xc6J\x9cO\xe0\xcb\xa2\ \xe9we\xe2\x9c?\xac\xd1\xbc\xb1\x12\xe7\x13\xf8\xb2\xa8\
~\xda\x8c\x12\xd6O\x1c\xb2O\xdd\xcci\x15\x97K|\ \x9f6\xa3\x84\xf5\x13\x87lS7sZ\xc5\xf9\x12\x1f\
4w.%\xcf\x83>\x92\xf9\xd4\xb9*w\xaeI\x9e\ \xcd\x9ds\xc9\xf3\xa0\x8f\xe4r\xea\x5c\x95;\xd7$\xcf\
\xf1\xec\xb9\xa6Q\x0c\xe9\x81\xeeh_\x01\xb2\x91\x7f \ x\xf6\x5c\xd3(\x86\xf4@w\xb4\xaf\x00\xd9\xc8?\x91\
9]\xb5y\x91\xb3\xf6%\xe7\xca\xe2\x1aTWS^\ \x9c\xae\xda\xbc\xc8Y\xfa\x92seq\x0d\xaa\xab)\xaf\
]\x05\xf5k\xac\x9b\xb5V\xaba}\xf5\x0b\xec\xba\x0e\ \xae\x82\xfa5\xd6\xcdZ\x8b\xc5\xb0\xbe\xfa\x05v]\x87\
\xef\xc8\xaeh\xf5x\xbb\xf9\xdbN\x83\x12\x85b\xab\xca\ wdW\xb4z\xbc\xdd\xfcm\xa7A\x89B\xb1U\xe5\
{\xd2\xd5\xa8R\xecA\x11\x8c\xf9?@\xddY\xde\x99\ =\xe9jT)\xb6\xa0\x08\xc6\xfc\x1f\xa0\xee,\xef\xcc\
\x11\xf5\x9a\x93#\xab=\xb3\xbaC\xab;\xb5^\x1a[\ \x88z\xcd\xc9\x91\xd5\x9eY\xdd\xa1\xd5\x9dZ\xcf\x8d\xad\
[.oo]*\xbb\xb9\xb5?dN\xec[\x8d\x0c\ -\x97\xb7\xb7.\x95\xdd\xdc\xda\x1f2'\xf6\xadF\x86\
\xdd>\xa4\x11G\xf71\x18x\xdb\xd9\xc1\xbc\xe6\xcc\x0f\ n\x1f\xd2\x88\xa3\xfb\x18\x0c\xbc\xed\xec`^s\xe6\x87\
\xbdC\xc4D\x82m_I\xea.\xf5\x9b\xa0\xa4AS\ \xde!b\x22\xc1\xb6\xad$u\x97\xfaCP\xd2\xa0\xa9\
\xbdl\xc7\x8b]g\xb2\x1a\x1c\x0eZ\x88I\xc4{x\ ^\xb6\xe1\xc5\xa63Y\x0d\x0e\x07-\xc4$\xe2=\xbc\
\xed\xb9\x81\xdc\x83.<\x90\xb4\xa48P\xcf\xe3Hq\ \xf6\xdc@nA\x17\xeeHZR\x1c\xa8\xe7q\xa48\
L\xa2\xba\xd9\x1a$-\xb0\xac\xe0B>\xabi\xde\x0c\ &Q\xddl\x0d\x92\x16XVp!\x9f\xd54o\x06\
j\x93\x9e)\x87\x8e|\xc9\xb1\xa4\x05\x11Dr1\x8d\ \xb5I\xcf\x94CG>\xe7X\xd2\x82\x08\x22\xb9\x98F\
\x04\xc3\xce\x81\x1d\xa7}^\xb8\x88\xcbi\x97:{Y\ :p\x11\x97\xd3.uf\xb2\x12\xda\xbf\xe7R0W\
\x09W\x84g8\x09dn\x01_1\xd3^d_\x7f\ \xed\xd8\xde\x13$\x81\xd4.\xe03g\xda\x8bl\xeb\xcf\
\x15\xf8\xadtH\xab21\xb5f\xe7\xeb\x0c\xdb\xa3\x89\ \x06\xbf\x95viU&\xa6\x18\xed\x84\xbep\x1c\xa3\x99\
jM\xa4\xbdat0\x87BB\xe7bY\xe4#S\ l\x8d\xac\xbdiu0\xa8B\xc6\xe7b^\xe4#c\
\xa8e\xb2A\xfay}y\xbcn\xaa\xc3\x8aw\xb2B\ \xaae\xb2A\xfa\x89\x7f~\xfen\xca\xc7\x8aw\xb2\x84\
\xfaH\x90\xae;V\x8c\x82A\xfd\xb2\xa2\x00\x19\x1d\x18\ \xfaH\x90\xcf\x1bV\x8c\x82A\x81\xb3\xa2\x00\x19\xed\x18\
|j\x1e\x04\xcf\x90Z\xc05L,\x075\xa0\xc8\x9c\ |\x8b\xee\x04\xcf\x90Z\xc05L,\x07E\xa2\xc8\x9c\
&\xd9$\xff\xf7`\xf92\xc9\xdf\x8fc\x1d\xee\x8f$\ &\xd9T\xc7k\xb0|\x9e\xe4\xd7\xe3X\x87\xfb3I\
yv\x859^M\x81\xfb2\xaaa\xc69\xb5m~\ \xbe\xb8\xc2%^MY\xfa2\xaaa\xc69\xb5m~\
\xacj$\x7f>5N%\xd4@\xebA\x9en\x12\xbe\ \xacj$\x7f>5N%\xd4\xc4\xebA\x9en\x12\xbe\
\xdc\xc1\xb8%h\x99\x8c\x93\xe7\x18\xfd\xd8S\xd1\xfa\x93\ \xdc\xc1<&h\x99\x8c\x93\xe7\x18\xfd\xd83P\xfe\xf4\
\xa7`\x90II\xcf\xaa\xd6W\x87/\x81p\x91>\x97\ \x19 d\xd2\xb2\xce\xc6\xe0K\xc5\xa2\xe7V\xf3*\xa9\
\xe3\xf4Y&?\xf2T\xa4\xfe\xe4\xcd\xc1\xcc\x11\xd6]\ \xa9/'_v\xe1\x1a~.\xc7\xb9\xb5L~\xcc\xaa\
\xa4\xbe\xa4\xb5H\x17\x98\xeb\xdb\xfd\xe8k\xd1\xfc)\xec\ H\xfdy\xbd\x04s\x89\xb0\xee\xaa\xf6%\xadE:\xc3\
\x02C0Y\xd5\x1fq(!\xfb=\x93\x1e\xb4\xb6s\ \x5c\xdf\xeeG_\x8b\xe6Oa\x17\x18\x82\xb9\xac\xfe\x04\
\x85/\xab5\xd08\x9f\x9d\xc5\x8f\xc9&T\x7f\x22\xe1\ D\x09\xd9n\x99\xf4\xa0\xb5\x1d:|Y\xad\x81\xc6\xf9\
\x0b\x8f\xd5#:\x92\x1ce\xf0U8\x0f<G\xa3\x1e\ \xec,~L6\xa1\xbeF\x8d\xc7\xac\x1e\xf0\x91\xe4(\
\xbc|9\xfc\xaf\xa2e\x8d6\xce\xa3k\xf5\xe3R\xc5\ \x83o\xca\xcb\xc0\x97h\xd4S\x99/\x87_*Z\xd6\
\xebO$\xb8\xe4Ha\xa1\x98A\xacS7\xd4l\x81\ h\xe3<\xbaV?.U\xbc\xfeD\x82K\x8e\x14\x16\
\xab\x7f\x8d\xde\x1c>\xb2\x13\x89\xe9i\x9cB\xc7\xe8Y\ \x8a\x19\xc4:u}],p\xf5\xa7\xd2\x9b\xc3Gv\
\xd7\xc3?\xe1\xaf+j\x85\x83r.\xaf\xcc?k(\ $1=\x8eS\xe8\x18=\xebz\xf8\x1f\xfdeE\xad\
\x87\x0f\xd8\x92W\x22\xa2e=\xaec\xd8ON5\x97\ pP\xce\xe5\x95\xf9gM\xec\xf0\xf9[\xf2JD\xb4\
\xe3\xa0b\xe1\xcd\xffYCO\x9b\ \xacgy\x0c\xfb\xc9\xa9\xe6\x12d\x1cT,\xbc\xf9\x0e\
\xb1\xe8et\
\x00\x00\x1cx\ \x00\x00\x1cx\
\x89\ \x89\
PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
@@ -45617,84 +45618,84 @@ qt_resource_struct = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00'\x00\x00\x00\x03\ \x00\x00\x00\x00\x00\x02\x00\x00\x00'\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\x01ry\x81\xbb\x9f\ \x00\x00\x01r|\xf92\x84\
\x00\x00\x02\xaa\x00\x00\x00\x00\x00\x01\x00\x08\x03\xa2\ \x00\x00\x02\xaa\x00\x00\x00\x00\x00\x01\x00\x08\x03\xab\
\x00\x00\x01ro \xc0+\ \x00\x00\x01ro \xc0+\
\x00\x00\x00\x8e\x00\x00\x00\x00\x00\x01\x00\x01l\x98\ \x00\x00\x00\x8e\x00\x00\x00\x00\x00\x01\x00\x01l\xa1\
\x00\x00\x01rybF\xf5\ \x00\x00\x01rybF\xf5\
\x00\x00\x03\x5c\x00\x00\x00\x00\x00\x01\x00\x09\xab\xb7\ \x00\x00\x03\x5c\x00\x00\x00\x00\x00\x01\x00\x09\xab\xc0\
\x00\x00\x01ro-O\xd6\ \x00\x00\x01ro-O\xd6\
\x00\x00\x00R\x00\x00\x00\x00\x00\x01\x00\x00!L\ \x00\x00\x00R\x00\x00\x00\x00\x00\x01\x00\x00!U\
\x00\x00\x01ryefk\ \x00\x00\x01ryefk\
\x00\x00\x02d\x00\x00\x00\x00\x00\x01\x00\x07\x04\xfd\ \x00\x00\x02d\x00\x00\x00\x00\x00\x01\x00\x07\x05\x06\
\x00\x00\x01ro!\xbci\ \x00\x00\x01ro!\xbci\
\x00\x00\x03\x92\x00\x00\x00\x00\x00\x01\x00\x09\xe1G\ \x00\x00\x03\x92\x00\x00\x00\x00\x00\x01\x00\x09\xe1P\
\x00\x00\x01ro \x94\xf5\ \x00\x00\x01ro \x94\xf5\
\x00\x00\x01\x08\x00\x00\x00\x00\x00\x01\x00\x03(\xdd\ \x00\x00\x01\x08\x00\x00\x00\x00\x00\x01\x00\x03(\xe6\
\x00\x00\x01rn\x81\xa0K\ \x00\x00\x01rn\x81\xa0K\
\x00\x00\x00\xf0\x00\x00\x00\x00\x00\x01\x00\x02\xbe\xac\ \x00\x00\x00\xf0\x00\x00\x00\x00\x00\x01\x00\x02\xbe\xb5\
\x00\x00\x01rn\x7f\x9a\xa2\ \x00\x00\x01rn\x7f\x9a\xa2\
\x00\x00\x01\xfe\x00\x00\x00\x00\x00\x01\x00\x05\xfad\ \x00\x00\x01\xfe\x00\x00\x00\x00\x00\x01\x00\x05\xfam\
\x00\x00\x01rx\xd0\xef\xa4\ \x00\x00\x01rx\xd0\xef\xa4\
\x00\x00\x01R\x00\x00\x00\x00\x00\x01\x00\x03\xe4\x8a\ \x00\x00\x01R\x00\x00\x00\x00\x00\x01\x00\x03\xe4\x93\
\x00\x00\x01ro&U\x86\ \x00\x00\x01ro&U\x86\
\x00\x00\x02\xc0\x00\x00\x00\x00\x00\x01\x00\x08s\x9f\ \x00\x00\x02\xc0\x00\x00\x00\x00\x00\x01\x00\x08s\xa8\
\x00\x00\x01ro'\x5c\xdd\ \x00\x00\x01ro'\x5c\xdd\
\x00\x00\x03\xe0\x00\x00\x00\x00\x00\x01\x00\x0a\xdbH\ \x00\x00\x03\xe0\x00\x00\x00\x00\x00\x01\x00\x0a\xdbQ\
\x00\x00\x01rxL\xc3L\ \x00\x00\x01rxL\xc3L\
\x00\x00\x01\xd0\x00\x00\x00\x00\x00\x01\x00\x05G\xaa\ \x00\x00\x01\xd0\x00\x00\x00\x00\x00\x01\x00\x05G\xb3\
\x00\x00\x01rn\x80a\x98\ \x00\x00\x01rn\x80a\x98\
\x00\x00\x02\x82\x00\x00\x00\x00\x00\x01\x00\x07\x1c\xca\ \x00\x00\x02\x82\x00\x00\x00\x00\x00\x01\x00\x07\x1c\xd3\
\x00\x00\x01ro!\x10\x8b\ \x00\x00\x01ro!\x10\x8b\
\x00\x00\x00z\x00\x00\x00\x00\x00\x01\x00\x01 q\ \x00\x00\x00z\x00\x00\x00\x00\x00\x01\x00\x01 z\
\x00\x00\x01ro6\xcc\x14\ \x00\x00\x01ro6\xcc\x14\
\x00\x00\x02\x94\x00\x00\x00\x00\x00\x01\x00\x07\x8fY\ \x00\x00\x02\x94\x00\x00\x00\x00\x00\x01\x00\x07\x8fb\
\x00\x00\x01ryf\xd9E\ \x00\x00\x01ryf\xd9E\
\x00\x00\x020\x00\x00\x00\x00\x00\x01\x00\x06Q\xde\ \x00\x00\x020\x00\x00\x00\x00\x00\x01\x00\x06Q\xe7\
\x00\x00\x01rn\x83W\xb2\ \x00\x00\x01rn\x83W\xb2\
\x00\x00\x01\xa0\x00\x00\x00\x00\x00\x01\x00\x04\xaa\xa3\ \x00\x00\x01\xa0\x00\x00\x00\x00\x00\x01\x00\x04\xaa\xac\
\x00\x00\x01rn\x80\x8e_\ \x00\x00\x01rn\x80\x8e_\
\x00\x00\x018\x00\x00\x00\x00\x00\x01\x00\x03\xb0;\ \x00\x00\x018\x00\x00\x00\x00\x00\x01\x00\x03\xb0D\
\x00\x00\x01ro'\xd9\xb1\ \x00\x00\x01ro'\xd9\xb1\
\x00\x00\x01\xe6\x00\x00\x00\x00\x00\x01\x00\x05\x95\xb8\ \x00\x00\x01\xe6\x00\x00\x00\x00\x00\x01\x00\x05\x95\xc1\
\x00\x00\x01ro!\x80\x9f\ \x00\x00\x01ro!\x80\x9f\
\x00\x00\x03p\x00\x00\x00\x00\x00\x01\x00\x09\xc2\x91\ \x00\x00\x03p\x00\x00\x00\x00\x00\x01\x00\x09\xc2\x9a\
\x00\x00\x01ro*{\xa5\ \x00\x00\x01ro*{\xa5\
\x00\x00\x03\xc4\x00\x00\x00\x00\x00\x01\x00\x0a\xa25\ \x00\x00\x03\xc4\x00\x00\x00\x00\x00\x01\x00\x0a\xa2>\
\x00\x00\x01rxA\xa0\xe6\ \x00\x00\x01rxA\xa0\xe6\
\x00\x00\x02\x14\x00\x00\x00\x00\x00\x01\x00\x06. \ \x00\x00\x02\x14\x00\x00\x00\x00\x00\x01\x00\x06.)\
\x00\x00\x01ro'\xf7\xd9\ \x00\x00\x01ro'\xf7\xd9\
\x00\x00\x01\x80\x00\x00\x00\x00\x00\x01\x00\x04KO\ \x00\x00\x01\x80\x00\x00\x00\x00\x00\x01\x00\x04KX\
\x00\x00\x01ro+U:\ \x00\x00\x01ro+U:\
\x00\x00\x000\x00\x00\x00\x00\x00\x01\x00\x00\x04\xd0\ \x00\x00\x000\x00\x00\x00\x00\x00\x01\x00\x00\x04\xd9\
\x00\x00\x01ro\x22L\x9b\ \x00\x00\x01ro\x22L\x9b\
\x00\x00\x00\xba\x00\x00\x00\x00\x00\x01\x00\x02+n\ \x00\x00\x00\xba\x00\x00\x00\x00\x00\x01\x00\x02+w\
\x00\x00\x01rn\x80\xbaA\ \x00\x00\x01rn\x80\xbaA\
\x00\x00\x00\xd4\x00\x00\x00\x00\x00\x01\x00\x02w\x1c\ \x00\x00\x00\xd4\x00\x00\x00\x00\x00\x01\x00\x02w%\
\x00\x00\x01ro\x14<\x9f\ \x00\x00\x01ro\x14<\x9f\
\x00\x00\x02\xdc\x00\x00\x00\x00\x00\x01\x00\x08\x94N\ \x00\x00\x02\xdc\x00\x00\x00\x00\x00\x01\x00\x08\x94W\
\x00\x00\x01ro\x14\xa8\xb6\ \x00\x00\x01ro\x14\xa8\xb6\
\x00\x00\x00f\x00\x00\x00\x00\x00\x01\x00\x00\x9a\x98\ \x00\x00\x00f\x00\x00\x00\x00\x00\x01\x00\x00\x9a\xa1\
\x00\x00\x01ro\x1e\xc7F\ \x00\x00\x01ro\x1e\xc7F\
\x00\x00\x03,\x00\x00\x00\x00\x00\x01\x00\x09_\xa9\ \x00\x00\x03,\x00\x00\x00\x00\x00\x01\x00\x09_\xb2\
\x00\x00\x01rxK\x8a\x1d\ \x00\x00\x01rxK\x8a\x1d\
\x00\x00\x01\xbc\x00\x00\x00\x00\x00\x01\x00\x04\xf5\x99\ \x00\x00\x01\xbc\x00\x00\x00\x00\x00\x01\x00\x04\xf5\xa2\
\x00\x00\x01ro!G\x15\ \x00\x00\x01ro!G\x15\
\x00\x00\x01 \x00\x00\x00\x00\x00\x01\x00\x03\x90\x1e\ \x00\x00\x01 \x00\x00\x00\x00\x00\x01\x00\x03\x90'\
\x00\x00\x01ro*\xb4%\ \x00\x00\x01ro*\xb4%\
\x00\x00\x02\xf6\x00\x00\x00\x00\x00\x01\x00\x08\x9d\xe8\ \x00\x00\x02\xf6\x00\x00\x00\x00\x00\x01\x00\x08\x9d\xf1\
\x00\x00\x01ryaf\xee\ \x00\x00\x01ryaf\xee\
\x00\x00\x02J\x00\x00\x00\x00\x00\x01\x00\x06\x9f\xa6\ \x00\x00\x02J\x00\x00\x00\x00\x00\x01\x00\x06\x9f\xaf\
\x00\x00\x01ryg+\xf0\ \x00\x00\x01ryg+\xf0\
\x00\x00\x03\xaa\x00\x00\x00\x00\x00\x01\x00\x0a?]\ \x00\x00\x03\xaa\x00\x00\x00\x00\x00\x01\x00\x0a?f\
\x00\x00\x01rx\xcbU\xa4\ \x00\x00\x01rx\xcbU\xa4\
\x00\x00\x03H\x00\x00\x00\x00\x00\x01\x00\x09\x84&\ \x00\x00\x03H\x00\x00\x00\x00\x00\x01\x00\x09\x84/\
\x00\x00\x01rx\xcc\xdf'\ \x00\x00\x01rx\xcc\xdf'\
\x00\x00\x01h\x00\x00\x00\x00\x00\x01\x00\x04\x00{\ \x00\x00\x01h\x00\x00\x00\x00\x00\x01\x00\x04\x00\x84\
\x00\x00\x01rn\x80\xf2c\ \x00\x00\x01rn\x80\xf2c\
\x00\x00\x03\x10\x00\x00\x00\x00\x00\x01\x00\x08\xf4W\ \x00\x00\x03\x10\x00\x00\x00\x00\x00\x01\x00\x08\xf4`\
\x00\x00\x01ro!-\x86\ \x00\x00\x01ro!-\x86\
\x00\x00\x00\xa6\x00\x00\x00\x00\x00\x01\x00\x01\xbd\xb7\ \x00\x00\x00\xa6\x00\x00\x00\x00\x00\x01\x00\x01\xbd\xc0\
\x00\x00\x01rn\x7f\xe8!\ \x00\x00\x01rn\x7f\xe8!\
" "

View File

@@ -149,10 +149,11 @@ class Ui_MainWindow(object):
self.toolBar.addAction(self.actionimportkindle) self.toolBar.addAction(self.actionimportkindle)
self.toolBar.addAction(self.actionimportlocal) self.toolBar.addAction(self.actionimportlocal)
self.toolBar.addSeparator() self.toolBar.addSeparator()
self.toolBar.addAction(self.actionconfig)
self.toolBar.addAction(self.actionwords) self.toolBar.addAction(self.actionwords)
self.toolBar.addAction(self.actionstatistic) self.toolBar.addAction(self.actionstatistic)
self.toolBar.addSeparator() self.toolBar.addSeparator()
self.toolBar.addAction(self.actionconfig)
self.toolBar.addSeparator()
self.toolBar.addAction(self.actionhomepage) self.toolBar.addAction(self.actionhomepage)
self.toolBar.addAction(self.actionabout) self.toolBar.addAction(self.actionabout)
self.toolBar.addSeparator() self.toolBar.addSeparator()
@@ -177,9 +178,9 @@ class Ui_MainWindow(object):
#if QT_CONFIG(tooltip) #if QT_CONFIG(tooltip)
self.actionconfig.setToolTip(QCoreApplication.translate("MainWindow", u"configuration", None)) self.actionconfig.setToolTip(QCoreApplication.translate("MainWindow", u"configuration", None))
#endif // QT_CONFIG(tooltip) #endif // QT_CONFIG(tooltip)
self.actionflush.setText(QCoreApplication.translate("MainWindow", u"flush", None)) self.actionflush.setText(QCoreApplication.translate("MainWindow", u"refresh", None))
#if QT_CONFIG(tooltip) #if QT_CONFIG(tooltip)
self.actionflush.setToolTip(QCoreApplication.translate("MainWindow", u"flush import file", None)) self.actionflush.setToolTip(QCoreApplication.translate("MainWindow", u"refresh import file/quick import from kindle", None))
#endif // QT_CONFIG(tooltip) #endif // QT_CONFIG(tooltip)
self.actionwords.setText(QCoreApplication.translate("MainWindow", u"words", None)) self.actionwords.setText(QCoreApplication.translate("MainWindow", u"words", None))
#if QT_CONFIG(tooltip) #if QT_CONFIG(tooltip)

View File

@@ -117,10 +117,11 @@
<addaction name="actionimportkindle"/> <addaction name="actionimportkindle"/>
<addaction name="actionimportlocal"/> <addaction name="actionimportlocal"/>
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="actionconfig"/>
<addaction name="actionwords"/> <addaction name="actionwords"/>
<addaction name="actionstatistic"/> <addaction name="actionstatistic"/>
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="actionconfig"/>
<addaction name="separator"/>
<addaction name="actionhomepage"/> <addaction name="actionhomepage"/>
<addaction name="actionabout"/> <addaction name="actionabout"/>
<addaction name="separator"/> <addaction name="separator"/>

View File

@@ -1,3 +1,6 @@
TYPE|BOOKNAME|AUTHOR|MARKTIME|CONTENT TYPE|BOOKNAME|AUTHOR|MARKTIME|CONTENT
--|--|--|--|-- --|--|--|--|--
HL|薛兆丰经济学讲义 |薛兆丰|2020/1/13 8:11:05|么到底什么叫边际?边际就是“新增”带来的“新增”。 例如,边际成本就是每新增一个单位产品所需要付出的新增成本;边际收入是每多卖一个产品能够带来的新增收入;边际产量是每新增一份投入所带来的新增产量;边际效用是每消耗一个单位的商品所能带来的新增享受。 HL|薛兆丰经济学讲义 |薛兆丰|2020/1/13 8:11:05|么到底什么叫边际?边际就是“新增”带来的“新增”。 例如,边际成本就是每新增一个单位产品所需要付出的新增成本;边际收入是每多卖一个产品能够带来的新增收入;边际产量是每新增一份投入所带来的新增产量;边际效用是每消耗一个单位的商品所能带来的新增享受。
HL|薛兆丰经济学讲义 |薛兆丰|2020/1/30 10:23:58|一个国家很大,贫富有差距,并非每个学校和家长都能负担得起这样标准的校车。标准太高,就会逼着很多学校,尤其是农村的学校放弃提供校车,家长们就只能使用安全性能更低的交通工具,比如自己骑自行车或雇用黑车等,结果是孩子们享受到的安全保障反而降低了。
NT|薛兆丰经济学讲义 |薛兆丰|2020/1/30 10:26:31|山寨 假货 问题
HL|薛兆丰经济学讲义 |薛兆丰|2020/1/30 10:29:41|为了克服信息不对称,建立互信,人类社会构想出了各种各样有趣的解决方案,从重复交易到第三方背书,从质保、延保,再到收益共享。此外,还有三种非常接近的建立信任的办法:付出沉没成本、给出人质或者给出抵押。

View File

@@ -8,3 +8,18 @@
========== ==========
薛兆丰经济学讲义 (薛兆丰)
- 您在位置 #1408-1410的标注 | 添加于 2020年1月13日星期一 上午8:11:05
么到底什么叫边际?边际就是“新增”带来的“新增”。 例如,边际成本就是每新增一个单位产品所需要付出的新增成本;边际收入是每多卖一个产品能够带来的新增收入;边际产量是每新增一份投入所带来的新增产量;边际效用是每消耗一个单位的商品所能带来的新增享受。
==========
薛兆丰经济学讲义 (薛兆丰)
- 您在位置 #4284-4286的标注 | 添加于 2020年1月30日星期四 上午10:23:58

161
test_kman.py Normal file
View File

@@ -0,0 +1,161 @@
import unittest
from collections import defaultdict
from kman import *
class TestKman(unittest.TestCase):
# initial
def setUp(self):
CLIPPATH = './test.data'
OUTPREF = './test.clip'
LOG2FILE = 1
DELIMITER= '|'
global t_bm_sec
global t_hl_sec
global t_nt_sec
global t_books
t_bm_sec = ["""另一半中国史 (高洪雷)
""", \
"""- 您在位置 #2468 的书签 | 添加于 2020年1月12日星期日 下午11:09:06
"""]
t_hl_sec = ["""薛兆丰经济学讲义 (薛兆丰)
""", \
"""- 您在位置 #1408-1410的标注 | 添加于 2020年1月13日星期一 上午8:11:05
""", \
"""边际就是“新增”带来的“新增”。
"""]
t_nt_sec = ["""薛兆丰经济学讲义 (薛兆丰)
""", \
"""- 您在位置 #4286 的笔记 | 添加于 2020年1月30日星期四 下午10:26:31
""", \
"""山寨 假货 问题
"""]
t_books = defaultdict(dict)
def cre_tbooks(self):
# parsing section & fill data structure
t_secd = parse_section(t_bm_sec,0)
t_secd = parse_section(t_hl_sec,1)
bn = t_secd['bookname']
t_books[bn]['author'] = t_secd[bn]['author']
t_books[bn]['1'] = t_secd[bn]['1']
t_secd.clear()
t_secd = parse_section(t_nt_sec,2)
bn = t_secd['bookname']
t_books[bn]['author'] = t_secd[bn]['author']
t_books[bn]['2'] = t_secd[bn]['2']
t_secd.clear()
return t_books
# test function parse_section
def test_parse_section(self):
# parsing section & fill data structure
t_secd = parse_section(t_bm_sec,0)
self.assertEqual(t_secd,False)
t_secd = parse_section(t_hl_sec,1)
bn = t_secd['bookname']
self.assertIsNotNone(t_secd)
self.assertEqual(bn,'薛兆丰经济学讲义 ')
self.assertEqual(t_secd[bn]['author'],'薛兆丰')
self.assertEqual(t_secd[bn]['1']['type'],'HL')
self.assertEqual(t_secd[bn]['1']['position'],'1408-1410')
self.assertEqual(t_secd[bn]['1']['day'],'2020年1月13日')
self.assertEqual(t_secd[bn]['1']['week'],'星期一')
self.assertEqual(t_secd[bn]['1']['meridiem'],'上午')
self.assertEqual(t_secd[bn]['1']['time'],'8:11:05')
self.assertEqual(t_secd[bn]['1']['content'],'边际就是“新增”带来的“新增”。\n')
t_books[bn]['author'] = t_secd[bn]['author']
t_books[bn]['1'] = t_secd[bn]['1']
t_secd.clear()
t_secd = parse_section(t_nt_sec,2)
bn = t_secd['bookname']
self.assertIsNotNone(t_secd)
self.assertEqual(bn,'薛兆丰经济学讲义 ')
self.assertEqual(t_secd[bn]['author'],'薛兆丰')
self.assertEqual(t_secd[bn]['2']['type'],'NT')
self.assertEqual(t_secd[bn]['2']['position'],'4286')
self.assertEqual(t_secd[bn]['2']['day'],'2020年1月30日')
self.assertEqual(t_secd[bn]['2']['week'],'星期四')
self.assertEqual(t_secd[bn]['2']['meridiem'],'下午')
self.assertEqual(t_secd[bn]['2']['time'],'10:26:31')
self.assertEqual(t_secd[bn]['2']['content'],'山寨 假货 问题\n')
t_books[bn]['author'] = t_secd[bn]['author']
t_books[bn]['2'] = t_secd[bn]['2']
t_secd.clear()
# test drop_duplicate
def test_drop_duplicate(self):
t_books = self.cre_tbooks()
t_secd = parse_section(t_hl_sec,3)
bn = t_secd['bookname']
t_books_du = t_books.copy()
t_books_du[bn]['3'] = t_secd[bn]['3']
t_books_du[bn]['4'] = t_secd[bn]['3']
self.assertIsInstance(t_books_du[bn]['3'],dict)
try:
t_books_du = drop_duplicate(t_books_du)
t = t_books_du[bn]['3']
except KeyError as keyerror:
print("与预期匹配sidx 3 重复被删除,抛出: %s" % 'keyerror')
t_secd.clear()
# test function format_time()
def test_format_time(self):
t_ds = '2020年1月13日 星期一 下午 8:11:05'
t_ds = format_time(t_ds)
self.assertEqual(t_ds, '2020/1/13 20:11:05')
# test function format_data
def test_format_data(self):
t_books = self.cre_tbooks()
t_out = format_data(t_books, ft='MD')
self.assertEqual(t_out[0], 'TYPE|BOOKNAME|AUTHOR|MARKTIME|CONTENT')
self.assertEqual(t_out[1], '--|--|--|--|--')
self.assertEqual(t_out[2], 'HL|薛兆丰经济学讲义 |薛兆丰|2020/1/13 8:11:05|边际就是“新增”带来的“新增”。\n')
t_out.clear()
def test_add_note_to_highlight(self):
t_books = self.cre_tbooks()
t_books_remove_nt = add_note_to_highlight(t_books)
for k in t_books_remove_nt.keys():
bn = k
self.assertEqual((t_books_remove_nt[bn]['1']['content']).replace('\n',''),\
'边际就是“新增”带来的“新增”。'+NTPREF+ '山寨 假货 问题')
"""
def test_search_clip(self):
pass
def test_statistic(self):
pass
def test_dict2json(self):
pass
def test_json2dict(self):
pass
def test_import_clips(self):
pass
"""
# clean
def tearDown(self):
pass
if __name__ == '__main__':
"""
suite = unittest.TestSuite ()
suite.addTest(TestKman('test_parse_section'))
suite.addTest(TestKman('test_format_time'))
suite.addTest(TestKman('test_format_data'))
suite.addTest(TestKman('test_drop_duplicate'))
suite.addTest(TestKman('test_add_note_to_highlight'))

2
xx
View File

@@ -1 +1 @@
{"\u859b\u5146\u4e30\u7ecf\u6d4e\u5b66\u8bb2\u4e49 ": {"author": "\u859b\u5146\u4e30", "1": {"type": "HL", "position": "1408-1410", "day": "2020\u5e741\u670813\u65e5", "week": "\u661f\u671f\u4e00", "meridiem": "\u4e0a\u5348", "time": "8:11:05", "content": "\u4e48\u5230\u5e95\u4ec0\u4e48\u53eb\u8fb9\u9645\uff1f\u8fb9\u9645\u5c31\u662f\u201c\u65b0\u589e\u201d\u5e26\u6765\u7684\u201c\u65b0\u589e\u201d\u3002 \u4f8b\u5982\uff0c\u8fb9\u9645\u6210\u672c\u5c31\u662f\u6bcf\u65b0\u589e\u4e00\u4e2a\u5355\u4f4d\u4ea7\u54c1\u6240\u9700\u8981\u4ed8\u51fa\u7684\u65b0\u589e\u6210\u672c\uff1b\u8fb9\u9645\u6536\u5165\u662f\u6bcf\u591a\u5356\u4e00\u4e2a\u4ea7\u54c1\u80fd\u591f\u5e26\u6765\u7684\u65b0\u589e\u6536\u5165\uff1b\u8fb9\u9645\u4ea7\u91cf\u662f\u6bcf\u65b0\u589e\u4e00\u4efd\u6295\u5165\u6240\u5e26\u6765\u7684\u65b0\u589e\u4ea7\u91cf\uff1b\u8fb9\u9645\u6548\u7528\u662f\u6bcf\u6d88\u8017\u4e00\u4e2a\u5355\u4f4d\u7684\u5546\u54c1\u6240\u80fd\u5e26\u6765\u7684\u65b0\u589e\u4eab\u53d7\u3002"}, "lines": 1}} {"\u859b\u5146\u4e30\u7ecf\u6d4e\u5b66\u8bb2\u4e49 ": {"author": "\u859b\u5146\u4e30", "1": {"type": "HL", "position": "1408-1410", "day": "2020\u5e741\u670813\u65e5", "week": "\u661f\u671f\u4e00", "meridiem": "\u4e0a\u5348", "time": "8:11:05", "content": "\u4e48\u5230\u5e95\u4ec0\u4e48\u53eb\u8fb9\u9645\uff1f\u8fb9\u9645\u5c31\u662f\u201c\u65b0\u589e\u201d\u5e26\u6765\u7684\u201c\u65b0\u589e\u201d\u3002 \u4f8b\u5982\uff0c\u8fb9\u9645\u6210\u672c\u5c31\u662f\u6bcf\u65b0\u589e\u4e00\u4e2a\u5355\u4f4d\u4ea7\u54c1\u6240\u9700\u8981\u4ed8\u51fa\u7684\u65b0\u589e\u6210\u672c\uff1b\u8fb9\u9645\u6536\u5165\u662f\u6bcf\u591a\u5356\u4e00\u4e2a\u4ea7\u54c1\u80fd\u591f\u5e26\u6765\u7684\u65b0\u589e\u6536\u5165\uff1b\u8fb9\u9645\u4ea7\u91cf\u662f\u6bcf\u65b0\u589e\u4e00\u4efd\u6295\u5165\u6240\u5e26\u6765\u7684\u65b0\u589e\u4ea7\u91cf\uff1b\u8fb9\u9645\u6548\u7528\u662f\u6bcf\u6d88\u8017\u4e00\u4e2a\u5355\u4f4d\u7684\u5546\u54c1\u6240\u80fd\u5e26\u6765\u7684\u65b0\u589e\u4eab\u53d7\u3002"}, "2": {"type": "HL", "position": "4284-4286", "day": "2020\u5e741\u670830\u65e5", "week": "\u661f\u671f\u56db", "meridiem": "\u4e0a\u5348", "time": "10:23:58", "content": "\u4e00\u4e2a\u56fd\u5bb6\u5f88\u5927\uff0c\u8d2b\u5bcc\u6709\u5dee\u8ddd\uff0c\u5e76\u975e\u6bcf\u4e2a\u5b66\u6821\u548c\u5bb6\u957f\u90fd\u80fd\u8d1f\u62c5\u5f97\u8d77\u8fd9\u6837\u6807\u51c6\u7684\u6821\u8f66\u3002\u6807\u51c6\u592a\u9ad8\uff0c\u5c31\u4f1a\u903c\u7740\u5f88\u591a\u5b66\u6821\uff0c\u5c24\u5176\u662f\u519c\u6751\u7684\u5b66\u6821\u653e\u5f03\u63d0\u4f9b\u6821\u8f66\uff0c\u5bb6\u957f\u4eec\u5c31\u53ea\u80fd\u4f7f\u7528\u5b89\u5168\u6027\u80fd\u66f4\u4f4e\u7684\u4ea4\u901a\u5de5\u5177\uff0c\u6bd4\u5982\u81ea\u5df1\u9a91\u81ea\u884c\u8f66\u6216\u96c7\u7528\u9ed1\u8f66\u7b49\uff0c\u7ed3\u679c\u662f\u5b69\u5b50\u4eec\u4eab\u53d7\u5230\u7684\u5b89\u5168\u4fdd\u969c\u53cd\u800c\u964d\u4f4e\u4e86\u3002--CG\u6ce8:\u5c71\u5be8 \u5047\u8d27 \u95ee\u9898"}, "4": {"type": "HL", "position": "4382-4384", "day": "2020\u5e741\u670830\u65e5", "week": "\u661f\u671f\u56db", "meridiem": "\u4e0a\u5348", "time": "10:29:41", "content": "\u4e3a\u4e86\u514b\u670d\u4fe1\u606f\u4e0d\u5bf9\u79f0\uff0c\u5efa\u7acb\u4e92\u4fe1\uff0c\u4eba\u7c7b\u793e\u4f1a\u6784\u60f3\u51fa\u4e86\u5404\u79cd\u5404\u6837\u6709\u8da3\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u4ece\u91cd\u590d\u4ea4\u6613\u5230\u7b2c\u4e09\u65b9\u80cc\u4e66\uff0c\u4ece\u8d28\u4fdd\u3001\u5ef6\u4fdd\uff0c\u518d\u5230\u6536\u76ca\u5171\u4eab\u3002\u6b64\u5916\uff0c\u8fd8\u6709\u4e09\u79cd\u975e\u5e38\u63a5\u8fd1\u7684\u5efa\u7acb\u4fe1\u4efb\u7684\u529e\u6cd5\uff1a\u4ed8\u51fa\u6c89\u6ca1\u6210\u672c\u3001\u7ed9\u51fa\u4eba\u8d28\u6216\u8005\u7ed9\u51fa\u62b5\u62bc\u3002"}, "lines": 4}}