import json, urllib.request, time, datetime KEY = open('.weread/apikey.txt', encoding='utf-8').read().strip() URL = "https://i.weread.qq.com/api/agent/gateway" def call(api, **kw): body = {"skill_version": "1.0.4", "api_name": api} body.update(kw) req = urllib.request.Request(URL, data=json.dumps(body).encode('utf-8'), headers={"Authorization": "Bearer " + KEY, "Content-Type": "application/json"}) try: with urllib.request.urlopen(req, timeout=60) as r: return json.loads(r.read().decode('utf-8')) except Exception as e: return {"_error": str(e)} shelf = call('/shelf/sync') json.dump(shelf, open('.weread/tmp/shelf.json', 'w', encoding='utf-8'), ensure_ascii=False) if shelf.get('upgrade_info'): print('UPGRADE_INFO:', json.dumps(shelf['upgrade_info'], ensure_ascii=False)) if shelf.get('_error'): print('SHELF_ERROR:', shelf['_error']); raise SystemExit(1) books = shelf.get('books') or [] reading = [] for b in books: bid = str(b.get('bookId', '')) if bid.startswith('MP_') or bid.startswith('mp'): continue if b.get('finishReading') == 1: continue reading.append({'bookId': bid, 'title': b.get('title'), 'author': b.get('author')}) json.dump(reading, open('.weread/tmp/reading_books.json', 'w', encoding='utf-8'), ensure_ascii=False) print('TOTAL_SHELF=%d READING=%d' % (len(books), len(reading))) for r in reading: print(' ', r['bookId'], '|', r['title']) detail = call('/readdata/detail', mode='weekly') json.dump(detail, open('.weread/tmp/readdetail.json', 'w', encoding='utf-8'), ensure_ascii=False) if detail.get('upgrade_info'): print('UPGRADE_INFO2:', json.dumps(detail['upgrade_info'], ensure_ascii=False)) rt = detail.get('readTimes') or {} print('READTIMES:', json.dumps(rt, ensure_ascii=False)) now = datetime.datetime.now() today_mid = int(datetime.datetime(now.year, now.month, now.day).timestamp()) y = now - datetime.timedelta(days=1) yest_mid = int(datetime.datetime(y.year, y.month, y.day).timestamp()) td = rt.get(str(today_mid), 0) yd = rt.get(str(yest_mid), 0) print('today_mid=%d todayDur=%s | yest_mid=%d yestDur=%s' % (today_mid, td, yest_mid, yd)) print('readLongest:', json.dumps(detail.get('readLongest'), ensure_ascii=False)[:600])