# بسم الله الرحمن الرحيم # بسم الله الرحمن الرحيم # بسم الله الرحمن الرحيم from flask import Flask, request, jsonify from flask_cors import CORS import spacy import re from collections import defaultdict import json import os from client import RestClient app = Flask(__name__) CORS(app) # Global variable to store processed results cached_results = {} def process_ranked_keywords(response_data): """ Process the API response, filter for location keywords using spaCy, and sort by volume """ all_keywords = [] for post_id, post_data in response_data.items(): if "ranked" in post_data: for keyword_data in post_data["ranked"]: all_keywords.append(keyword_data) # Filter and sort keywords using spaCy location detection only location_keywords, non_location_keywords = filter_and_sort_keywords_by_location(all_keywords) # Save results to file with open('results.json', 'w') as f: json.dump({ 'location_keywords': location_keywords, 'non_location_keywords': non_location_keywords }, f, indent=2) return location_keywords @app.route('/get_ranked_kw_for_domain', methods=['GET', 'POST']) def get_ranked_keywords(): try: if request.method == 'POST': data = request.get_json() domain = data.get('domain') else: domain = request.args.get('domain') if not domain: return jsonify({'error': 'Domain parameter is required'}), 400 username = os.getenv('DATAFORSEO_API_LOGIN') password = os.getenv('DATAFORSEO_API_PASSWORD') # Initialize DataForSEO client client = RestClient(username,password ) post_data = { 1112: { "domain": domain, "country_code": "US", "language": "en", "limit": 500, "offset": 0, "orderby": "position,asc", "filters": [["search_volume", ">=", 1]] } } response = client.post("/v2/kwrd_finder_ranked_keywords_get", {"data": post_data}) return response except Exception as e: return jsonify({'error': str(e)}), 500 @app.route('/get_ranked_kw_for_domain//page', methods=['GET']) def get_ranked_keywords_paginated(domain, page): try: # Decode the domain if it's URL encoded import urllib.parse domain = urllib.parse.unquote(domain) if domain not in cached_results: return jsonify({'error': 'Domain not found in cache. Please call the main endpoint first.'}), 404 location_keywords = cached_results[domain] per_page = 10 total_pages = (len(location_keywords) + per_page - 1) // per_page if page < 1 or page > total_pages: return jsonify({'error': f'Page number must be between 1 and {total_pages}'}), 400 start_idx = (page - 1) * per_page end_idx = start_idx + per_page return jsonify({ 'total_results': len(location_keywords), 'page': page, 'per_page': per_page, 'total_pages': total_pages, 'results': location_keywords[start_idx:end_idx] }) except Exception as e: return jsonify({'error': str(e)}), 500 if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port=8000)