Update main.py
هذا الالتزام موجود في:
38
main.py
38
main.py
@@ -6,10 +6,10 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# بسم الله الرحمن الرحيم
|
||||||
|
|
||||||
from flask import Flask, request, jsonify
|
from flask import Flask, request, jsonify
|
||||||
from flask_cors import CORS
|
from flask_cors import CORS
|
||||||
import re
|
|
||||||
from collections import defaultdict
|
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
from client import RestClient
|
from client import RestClient
|
||||||
@@ -20,9 +20,6 @@ CORS(app)
|
|||||||
# Global variable to store processed results
|
# Global variable to store processed results
|
||||||
cached_results = {}
|
cached_results = {}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@app.route('/get_ranked_kw_for_domain', methods=['GET', 'POST'])
|
@app.route('/get_ranked_kw_for_domain', methods=['GET', 'POST'])
|
||||||
def get_ranked_keywords():
|
def get_ranked_keywords():
|
||||||
try:
|
try:
|
||||||
@@ -35,13 +32,11 @@ def get_ranked_keywords():
|
|||||||
if not domain:
|
if not domain:
|
||||||
return jsonify({'error': 'Domain parameter is required'}), 400
|
return jsonify({'error': 'Domain parameter is required'}), 400
|
||||||
|
|
||||||
|
|
||||||
username = os.getenv('DATAFORSEO_API_LOGIN')
|
username = os.getenv('DATAFORSEO_API_LOGIN')
|
||||||
password = os.getenv('DATAFORSEO_API_PASSWORD')
|
password = os.getenv('DATAFORSEO_API_PASSWORD')
|
||||||
|
|
||||||
|
|
||||||
# Initialize DataForSEO client
|
# Initialize DataForSEO client
|
||||||
client = RestClient(username,password )
|
client = RestClient(username, password)
|
||||||
|
|
||||||
post_data = {
|
post_data = {
|
||||||
1112: {
|
1112: {
|
||||||
@@ -57,7 +52,12 @@ def get_ranked_keywords():
|
|||||||
|
|
||||||
response = client.post("/v2/kwrd_finder_ranked_keywords_get", {"data": post_data})
|
response = client.post("/v2/kwrd_finder_ranked_keywords_get", {"data": post_data})
|
||||||
|
|
||||||
return response
|
# Store results in cache
|
||||||
|
if domain and hasattr(response, 'json') and callable(response.json):
|
||||||
|
response_data = response.json()
|
||||||
|
cached_results[domain] = response_data
|
||||||
|
|
||||||
|
return jsonify(response.json()) if hasattr(response, 'json') and callable(response.json) else jsonify(response)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return jsonify({'error': str(e)}), 500
|
return jsonify({'error': str(e)}), 500
|
||||||
@@ -65,16 +65,25 @@ def get_ranked_keywords():
|
|||||||
@app.route('/get_ranked_kw_for_domain/<path:domain>/page<int:page>', methods=['GET'])
|
@app.route('/get_ranked_kw_for_domain/<path:domain>/page<int:page>', methods=['GET'])
|
||||||
def get_ranked_keywords_paginated(domain, page):
|
def get_ranked_keywords_paginated(domain, page):
|
||||||
try:
|
try:
|
||||||
# Decode the domain if it's URL encoded
|
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
domain = urllib.parse.unquote(domain)
|
domain = urllib.parse.unquote(domain)
|
||||||
|
|
||||||
if domain not in cached_results:
|
if domain not in cached_results:
|
||||||
return jsonify({'error': 'Domain not found in cache. Please call the main endpoint first.'}), 404
|
return jsonify({'error': 'Domain not found in cache. Please call the main endpoint first.'}), 404
|
||||||
|
|
||||||
location_keywords = cached_results[domain]
|
response_data = cached_results[domain]
|
||||||
|
|
||||||
|
# Extract keywords from response
|
||||||
|
keywords = []
|
||||||
|
if 'tasks' in response_data:
|
||||||
|
for task in response_data['tasks']:
|
||||||
|
if 'result' in task:
|
||||||
|
for result in task['result']:
|
||||||
|
if 'items' in result:
|
||||||
|
keywords.extend(result['items'])
|
||||||
|
|
||||||
per_page = 10
|
per_page = 10
|
||||||
total_pages = (len(location_keywords) + per_page - 1) // per_page
|
total_pages = (len(keywords) + per_page - 1) // per_page
|
||||||
|
|
||||||
if page < 1 or page > total_pages:
|
if page < 1 or page > total_pages:
|
||||||
return jsonify({'error': f'Page number must be between 1 and {total_pages}'}), 400
|
return jsonify({'error': f'Page number must be between 1 and {total_pages}'}), 400
|
||||||
@@ -83,11 +92,11 @@ def get_ranked_keywords_paginated(domain, page):
|
|||||||
end_idx = start_idx + per_page
|
end_idx = start_idx + per_page
|
||||||
|
|
||||||
return jsonify({
|
return jsonify({
|
||||||
'total_results': len(location_keywords),
|
'total_results': len(keywords),
|
||||||
'page': page,
|
'page': page,
|
||||||
'per_page': per_page,
|
'per_page': per_page,
|
||||||
'total_pages': total_pages,
|
'total_pages': total_pages,
|
||||||
'results': location_keywords[start_idx:end_idx]
|
'results': keywords[start_idx:end_idx]
|
||||||
})
|
})
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -96,4 +105,3 @@ def get_ranked_keywords_paginated(domain, page):
|
|||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
app.run(debug=True, host='0.0.0.0', port=8000)
|
app.run(debug=True, host='0.0.0.0', port=8000)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
المرجع في مشكلة جديدة
حظر مستخدم