Skip to content

Commit

Permalink
V1.1.0
Browse files Browse the repository at this point in the history
  • Loading branch information
leezhua17 committed Apr 9, 2023
1 parent 89712d6 commit 9982d08
Show file tree
Hide file tree
Showing 18 changed files with 150 additions and 111 deletions.
2 changes: 2 additions & 0 deletions .env
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
DEBUG=True
SECRET_KEY="rss2Ebook"
1 change: 1 addition & 0 deletions Procfile
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
web: gunicorn run:app
7 changes: 4 additions & 3 deletions app.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
# from book.views import user, feed, wechat, myfeed
from book import *
import os

from book import app
from book.schedule import *
from book.views import *



if __name__ == '__main__':
# print(app.url_map)
print(app.url_map)
app.run(debug=True,threaded=True,use_reloader=False,port=8000)
55 changes: 40 additions & 15 deletions book/__init__.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
# -*-coding: utf-8-*-
import os
import logging
from importlib import import_module
from logging.handlers import RotatingFileHandler
from flask import Flask, request, render_template, jsonify

from flask import Flask, jsonify
from flask_caching import Cache
from flask_jwt_extended.exceptions import NoAuthorizationError, InvalidHeaderError, WrongTokenError
from flask_mail import Mail
Expand All @@ -11,26 +13,29 @@

app = Flask(__name__)
app.config.from_object('config')



mail = Mail(app)
cache = Cache(app)
db = SQLAlchemy(app)
jwt = JWTManager(app)
with app.app_context():
db.create_all()

"""
Initialize logging
"""
logging.basicConfig(level=logging.INFO) # Debug level (development environment)
file_log_handler = RotatingFileHandler(
f"{os.path.dirname(app.root_path)}/logs/books.log", maxBytes=1024 * 1024 * 100, backupCount=10
) # 100M
formatter = logging.Formatter(
'%(asctime)s-%(levelname)s-%(filename)s-%(funcName)s-%(lineno)s-%(message)s'
) # Time, log level, log file, line number, message
file_log_handler.setFormatter(formatter)
logging.getLogger().addHandler(file_log_handler)

jwt = JWTManager(app)
def register_extensions(app):
db.init_app(app)


def configure_database(app):
@app.before_first_request
def initialize_database():
db.create_all()

@app.teardown_request
def shutdown_session(exception=None):
db.session.remove()


@app.errorhandler(NoAuthorizationError)
Expand All @@ -45,4 +50,24 @@ def error_date(error):
return render_template("404.html"), 404


from book.dbModels import *
from book.views import *
modules = ['user', 'ebook', 'feed', 'wechat']
for model_name in modules:
model = import_module(f"{app.name}.views.{model_name}")
app.register_blueprint(model.blueprint)




"""
Initialize logging
"""
logfile = f"{os.path.dirname(app.root_path)}/logs/books.log"
logging.basicConfig(level=logging.INFO)
handler = RotatingFileHandler(logfile, maxBytes=1024 * 1024 * 100, backupCount=10) # 最大100M
# Time, log level, log file, line number, message
formatter = logging.Formatter('%(asctime)s-%(levelname)s-%(filename)s-%(funcName)s-%(lineno)s-%(message)s')
handler.setFormatter(formatter)
logging.getLogger().addHandler(handler)


4 changes: 2 additions & 2 deletions book/dbModels.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ class User(db.Model):
email = db.Column(db.String(120))
role = db.Column(db.String(120))
srole = db.Column(db.Integer, default=0)
hash_pass = db.Column(db.String(200))
hash_pass = db.Column(db.String(240))
kindle_email = db.Column(db.String(120))
wx_openid = db.Column(db.String(64),unique=True)
wx_openid = db.Column(db.String(64), unique=True)
upload_times = db.Column(db.Integer, default=0)
download_times = db.Column(db.Integer, default=0)
feed_count = db.Column(db.Integer, default=0)
Expand Down
11 changes: 5 additions & 6 deletions book/schedule.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
# encoding:utf-8
from apscheduler.schedulers.background import BackgroundScheduler
from flask_apscheduler import APScheduler
from flask_apscheduler.scheduler import BackgroundScheduler
from book.utils.wxMsg import mail_body, send_failed_body, mail_download_url_body

from book import app
from book.utils.wxMsg import mail_body, send_failed_body, mail_download_url_body
from book.utils.mailUtil import send_email
from book.utils import *

Expand All @@ -24,9 +26,7 @@ def delete_file_out_24_hours():


def book_send(send_status):
from book.dbModels import Userlog
from book.dbModels import db

from book.dbModels import Userlog, db
with app.app_context():
userlogs = Userlog.query.filter(Userlog.status == send_status).all()
if userlogs:
Expand Down Expand Up @@ -61,7 +61,6 @@ def book_send(send_status):

scheduler = APScheduler(BackgroundScheduler())
scheduler.init_app(app)

scheduler.add_job(id="delete_file", func=delete_file_out_24_hours, trigger="interval", hours=2, replace_existing=False)
scheduler.add_job(id="send_file", func=book_send, args=("0"), trigger="interval", seconds=180, replace_existing=False,
max_instances=3)
Expand Down
2 changes: 1 addition & 1 deletion book/utils/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@ def generate_code():


if __name__ == '__main__':
print("aaa")
print(get_file_name(__file__))
# author = "[]未知12213COMchenjin5.comePUBw.COM 12344"
# author = str(author).translate(str.maketrans('', '', '[]未知COAY.COMchenjin5.comePUBw.COM'))
# print(author)
Expand Down
3 changes: 2 additions & 1 deletion book/utils/mailUtil.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import logging
from threading import Thread
from flask_mail import Message
from book import mail, app
from book import mail


def send_async_email(app, msg):
Expand All @@ -19,5 +19,6 @@ def send_email(subject, body, receiver, attach=None):
logging.error('open file failed.' + e)
msg.html = body
logging.info(f'发送邮件.{subject}-接收邮箱{receiver}')
from book import app
Thread(target=send_async_email, args=[app, msg]).start()
return u'发送成功'
22 changes: 9 additions & 13 deletions book/utils/wxMsg.py
Original file line number Diff line number Diff line change
@@ -1,24 +1,23 @@
# coding: utf-8
import hashlib
import time, os
import time
import config

create_time = str(int(time.time()))


def unbind_email_msg(user_email):
return f'''你好,你已经解绑邮箱:{user_email}\n解除绑定回复:1001'''
return f'''已经解绑邮箱:{user_email}\n解除绑定回复:1001'''


def bind_email_msg(user_email):
return f'''你好,你绑定邮箱:{user_email}\n解除绑定回复:1001'''
return f'''绑定邮箱:{user_email}\n解除绑定回复:1001'''


no_book_content = "未找到书籍,在更新中!请换其他的书籍"

not_isbn_search = "不支持ISBN搜索,请输入书籍名称搜索!"

send_failed_msg = "根据其他用户报告,此书籍无法发送,请换一个编号继续!"

no_bind_email_msg = '''你好,你还没有绑定邮箱!
no_bind_email_msg = '''你还没有绑定邮箱!
请发送【邮箱地址】进行绑定
例如:[email protected]
查看帮助请回复 ?'''
Expand All @@ -37,7 +36,7 @@ def bind_email_msg(user_email):
reply_subscribe = f'''欢迎关注books图书馆,本书站收录图书超乎你的想象
按以下步骤将电子书自动发送到您的邮箱:
1.在聊天栏里发送邮箱地址 「你的邮箱地址」,如:[email protected] *
1.在聊天栏里发送邮箱地址 「你的邮箱地址」,如:[email protected]
2.查询书籍,在聊天栏里发送你要找的书籍,直接回复书籍名称,如:平凡的世界
Expand Down Expand Up @@ -76,8 +75,8 @@ def send_failed_body(bookname):
'''


# 当文件大于20M的时候 发送下载地址到邮箱
def mail_download_url_body(filename):
"""当文件大于20M的时候 发送下载地址到邮箱"""
download_url = config.DOWNLOAD_URL + filename
return f'''
{filename}》<br/>
Expand All @@ -91,9 +90,6 @@ def mail_download_url_body(filename):
'''


create_time = str(int(time.time()))


def wx_reply_xml(from_user, to_user, msg_content):
"""
desc: 微信回复消息模版
Expand All @@ -114,7 +110,7 @@ def wx_reply_xml(from_user, to_user, msg_content):


def check_signature(token, signature, timestamp, nonce):
"""校验签名"""
"""微信校验签名"""
temp_arr = [token, timestamp, nonce]
temp_arr.sort()
temp_str = ''.join(temp_arr)
Expand Down
10 changes: 9 additions & 1 deletion book/views/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
# -*- encoding: utf-8 -*-
"""
Copyright (c) 2019 - present benben
"""
from flask import render_template

from . import user, feed, wechat, myfeed
from book import app


Expand All @@ -14,3 +17,8 @@ def page_404():
def home():
# logging.error(app.template_folder)
return "欢迎关注公众号:sendtokindles 下载电子书"





10 changes: 6 additions & 4 deletions book/views/myfeed.py → book/views/ebook.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import logging
from flask import request
from flask import request, Blueprint
from flask_jwt_extended import get_jwt_identity, jwt_required
from book import app, jwt, Userlog, db
from book.utils.ApiResponse import APIResponse

from book.utils import get_file_name
from book.utils.ApiResponse import APIResponse
from book.dbModels import Userlog, db

@app.route("/user/send/ebook", methods=["POST"])
blueprint = Blueprint(get_file_name(__file__), __name__, url_prefix='/api/v2')
@blueprint.route("/send/ebook", methods=["POST"])
@jwt_required()
def dl_ebook():
try:
Expand Down
Loading

0 comments on commit 9982d08

Please sign in to comment.