mistpe commited on
Commit
e7c16da
1 Parent(s): 251d559

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +82 -53
app.py CHANGED
@@ -1,57 +1,86 @@
1
- from flask import Flask, render_template, jsonify, request
2
- from movie_controller import MovieController
 
 
 
 
 
 
3
 
4
  app = Flask(__name__)
5
- controller = MovieController()
6
-
7
- @app.route('/')
8
- def index():
9
- return render_template('index.html')
10
-
11
- @app.route('/api/movies')
12
- def get_movies():
13
- movies = controller.get_all_movies()
14
- return jsonify([movie.__dict__ for movie in movies])
15
-
16
- @app.route('/api/highest-rated')
17
- def get_highest_rated():
18
- movie = controller.get_highest_rated_movie()
19
- return jsonify(movie.__dict__)
20
-
21
- @app.route('/api/highest-grossing')
22
- def get_highest_grossing():
23
- movie = controller.get_highest_grossing_movie()
24
- return jsonify(movie.__dict__)
25
-
26
- @app.route('/api/movies-by-year')
27
- def get_movies_by_year():
28
- movies = controller.get_movies_sorted_by_year()
29
- return jsonify([movie.__dict__ for movie in movies])
30
-
31
- @app.route('/api/genres')
32
- def get_genres():
33
- genres = controller.get_all_genres()
34
- return jsonify(genres)
35
-
36
- @app.route('/api/languages')
37
- def get_languages():
38
- languages = controller.get_all_languages()
39
- return jsonify(languages)
40
-
41
- @app.route('/api/movies/filter')
42
- def filter_movies():
43
- genre = request.args.get('genre', '')
44
- year = request.args.get('year', '')
45
- language = request.args.get('language', '')
46
- movies = controller.filter_movies(genre, year, language)
47
- return jsonify([movie.__dict__ for movie in movies])
48
-
49
- @app.route('/api/movies/sort')
50
- def sort_movies():
51
- sort_by = request.args.get('sort_by', 'year')
52
- order = request.args.get('order', 'desc')
53
- movies = controller.sort_movies(sort_by, order)
54
- return jsonify([movie.__dict__ for movie in movies])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
 
56
  if __name__ == '__main__':
57
- app.run(host='0.0.0.0', port=7860, debug=True)
 
1
+ import os
2
+ from flask import Flask, request, abort
3
+ import hashlib
4
+ import xmltodict
5
+ import openai
6
+ from wechatpy import parse_message
7
+ from wechatpy.utils import check_signature
8
+ from wechatpy.exceptions import InvalidSignatureException
9
 
10
  app = Flask(__name__)
11
+
12
+ # 配置
13
+ TOKEN = 'your_wechat_token'
14
+ APPID = 'your_wechat_appid'
15
+ APPSECRET = 'your_wechat_appsecret'
16
+ OPENAI_API_KEY = 'your_openai_api_key'
17
+
18
+ openai.api_key = OPENAI_API_KEY
19
+
20
+ # 存储用户当前使用的模型
21
+ user_models = {}
22
+
23
+ def split_message(message, max_length=500):
24
+ """Split a message into chunks of max_length characters."""
25
+ return [message[i:i+max_length] for i in range(0, len(message), max_length)]
26
+
27
+ def get_gpt_response(message, model="gpt-3.5-turbo"):
28
+ """Get response from GPT model."""
29
+ try:
30
+ response = openai.ChatCompletion.create(
31
+ model=model,
32
+ messages=[{"role": "user", "content": message}]
33
+ )
34
+ return response.choices[0].message.content
35
+ except Exception as e:
36
+ return f"Error: {str(e)}"
37
+
38
+ @app.route('/', methods=['GET', 'POST'])
39
+ def wechat():
40
+ if request.method == 'GET':
41
+ token = TOKEN
42
+ signature = request.args.get('signature', '')
43
+ timestamp = request.args.get('timestamp', '')
44
+ nonce = request.args.get('nonce', '')
45
+ echostr = request.args.get('echostr', '')
46
+ try:
47
+ check_signature(token, signature, timestamp, nonce)
48
+ except InvalidSignatureException:
49
+ abort(403)
50
+ return echostr
51
+ else:
52
+ xml_data = request.data
53
+ msg = parse_message(xml_data)
54
+ if msg.type == 'text':
55
+ user_id = msg.source
56
+ content = msg.content
57
+
58
+ if content.startswith('/model'):
59
+ # 切换模型
60
+ model = content.split(' ')[1]
61
+ user_models[user_id] = model
62
+ return f'Model switched to {model}'
63
+
64
+ model = user_models.get(user_id, "gpt-3.5-turbo")
65
+ response = get_gpt_response(content, model)
66
+
67
+ # 拆分长消息
68
+ response_parts = split_message(response)
69
+
70
+ # 构建回复消息
71
+ reply = []
72
+ for part in response_parts:
73
+ reply.append(f"""
74
+ <xml>
75
+ <ToUserName><![CDATA[{msg.source}]]></ToUserName>
76
+ <FromUserName><![CDATA[{msg.target}]]></FromUserName>
77
+ <CreateTime>{int(time.time())}</CreateTime>
78
+ <MsgType><![CDATA[text]]></MsgType>
79
+ <Content><![CDATA[{part}]]></Content>
80
+ </xml>
81
+ """)
82
+
83
+ return ''.join(reply)
84
 
85
  if __name__ == '__main__':
86
+ app.run(host='0.0.0.0', port=7860)