الملفات
domain-api/main.py
2025-10-29 14:01:53 +00:00

122 أسطر
3.5 KiB
Python

# بسم الله الرحمن الرحيم
# بسم الله الرحمن الرحيم
# بسم الله الرحمن الرحيم
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/<path:domain>/page<int: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)