tecuts commited on
Commit
c524eff
·
verified ·
1 Parent(s): edb7351

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +45 -3
app.py CHANGED
@@ -9,6 +9,7 @@ import asyncio
9
  import cloudscraper
10
  from pydantic import BaseModel
11
  from urllib.parse import urlparse, parse_qs
 
12
 
13
  app = Flask(__name__)
14
  ytmusic = YTMusic()
@@ -206,23 +207,64 @@ async def get_track_download_url(track_id: str, quality: str) -> str:
206
 
207
 
208
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
209
  @app.route('/track_dl', methods=['POST'])
210
  async def track_dl():
 
 
 
 
 
 
 
 
 
 
211
  data = request.get_json()
212
  track_id = data.get('track_id')
213
  quality = data.get('quality', '128')
 
214
  try:
215
  quality_num = int(quality)
216
  if quality_num > 128 or quality.upper() == 'FLAC':
217
- return jsonify({"error": "Quality above 128 or FLAC is for Premium users Only."}), 400
 
 
 
218
  dl_url = await get_track_download_url(track_id, quality)
 
219
  if dl_url and "http" in dl_url:
 
 
220
  result = {"url": dl_url}
221
  return jsonify(result)
222
  else:
223
- return jsonify({"error": "Failed to Fetch the Track."}), 400
 
 
 
224
  except ValueError:
225
- return jsonify({"error": "Invalid quality value provided. It should be a valid integer or FLAC."}), 400
 
 
226
 
227
 
228
 
 
9
  import cloudscraper
10
  from pydantic import BaseModel
11
  from urllib.parse import urlparse, parse_qs
12
+ import redis
13
 
14
  app = Flask(__name__)
15
  ytmusic = YTMusic()
 
207
 
208
 
209
 
210
+
211
+ # Initialize Redis client
212
+ redis_client = redis.Redis(host='localhost', port=6379, db=0)
213
+
214
+ def get_daily_requests(ip):
215
+ """Get the number of requests made today by this IP"""
216
+ today = datetime.now().strftime('%Y-%m-%d')
217
+ key = f'daily_requests:{ip}:{today}'
218
+ return int(redis_client.get(key) or 0)
219
+
220
+ def increment_daily_requests(ip):
221
+ """Increment the request counter for this IP"""
222
+ today = datetime.now().strftime('%Y-%m-%d')
223
+ key = f'daily_requests:{ip}:{today}'
224
+ # Set expiration to end of day (seconds until midnight)
225
+ seconds_until_midnight = 86400 - (datetime.now().hour * 3600 + datetime.now().minute * 60 + datetime.now().second)
226
+ redis_client.incr(key)
227
+ redis_client.expire(key, seconds_until_midnight)
228
+
229
  @app.route('/track_dl', methods=['POST'])
230
  async def track_dl():
231
+ # Get client IP
232
+ client_ip = request.remote_addr
233
+
234
+ # Check if daily limit exceeded
235
+ daily_requests = get_daily_requests(client_ip)
236
+ if daily_requests >= 20:
237
+ return jsonify({
238
+ "error": "Daily limit of 20 downloads exceeded. Please try again tomorrow."
239
+ }), 429
240
+
241
  data = request.get_json()
242
  track_id = data.get('track_id')
243
  quality = data.get('quality', '128')
244
+
245
  try:
246
  quality_num = int(quality)
247
  if quality_num > 128 or quality.upper() == 'FLAC':
248
+ return jsonify({
249
+ "error": "Quality above 128 or FLAC is for Premium users Only."
250
+ }), 400
251
+
252
  dl_url = await get_track_download_url(track_id, quality)
253
+
254
  if dl_url and "http" in dl_url:
255
+ # Increment counter only on successful download
256
+ increment_daily_requests(client_ip)
257
  result = {"url": dl_url}
258
  return jsonify(result)
259
  else:
260
+ return jsonify({
261
+ "error": "Failed to Fetch the Track."
262
+ }), 400
263
+
264
  except ValueError:
265
+ return jsonify({
266
+ "error": "Invalid quality value provided. It should be a valid integer or FLAC."
267
+ }), 400
268
 
269
 
270