RSS Engine
Processes multiple RSS feeds with intelligent filtering, AI enhancement, and real-time content optimization.
Automatic Plugin for WordPress is an enterprise-grade content automation system built with a modular triple-engine architecture. The plugin leverages advanced AI integration, sophisticated caching mechanisms, and robust deduplication algorithms to deliver scalable content generation across multiple languages and sources.
Processes multiple RSS feeds with intelligent filtering, AI enhancement, and real-time content optimization.
OpenAI GPT-4.1 integration with custom prompts, smart caching, and multilingual content generation.
Advanced content extraction with anti-detection, dynamic parsing, and content transformation.
Plugins → Add New → Upload Plugin/wp-content/plugins/// Check plugin activation status
if (is_plugin_active('auto-news-importer-ultimate/main.php')) {
echo "Plugin activated successfully";
}
// Verify database tables
global $wpdb;
$tables = $wpdb->get_results("SHOW TABLES LIKE '{$wpdb->prefix}ani_%'");
if (count($tables) >= 3) {
echo "Database tables created successfully";
}
// wp-config.php additions for optimal performance
define('ANI_MAX_EXECUTION_TIME', 600);
define('ANI_MEMORY_LIMIT', '512M');
define('ANI_CACHE_DURATION', 86400); // 24 hours
define('ANI_MAX_CONCURRENT_REQUESTS', 5);
define('ANI_DEBUG_MODE', false);
define('ANI_LOG_LEVEL', 'info'); // debug, info, warning, error
// OpenAI Configuration
define('ANI_OPENAI_MAX_TOKENS', 2048);
define('ANI_OPENAI_TEMPERATURE', 0.7);
define('ANI_OPENAI_TIMEOUT', 60);
// Custom database settings
define('ANI_DB_CHARSET', 'utf8mb4');
define('ANI_DB_COLLATE', 'utf8mb4_unicode_ci');
define('ANI_MAX_DB_CONNECTIONS', 10);
define('ANI_DB_TIMEOUT', 30);
// Table optimization settings
define('ANI_AUTO_OPTIMIZE_TABLES', true);
define('ANI_CLEANUP_OLD_LOGS', 30); // days
// Disable WordPress cron and use system cron for better performance
define('DISABLE_WP_CRON', true);
// System crontab entries
# RSS processing every 5 minutes
*/5 * * * * /usr/bin/wget -q -O - "https://yoursite.com/wp-cron.php?doing_wp_cron" >/dev/null 2>&1
# Original content generation every hour
0 * * * * /usr/bin/wget -q -O - "https://yoursite.com/?ani_cron=original" >/dev/null 2>&1
# Web scraping every 30 minutes
*/30 * * * * /usr/bin/wget -q -O - "https://yoursite.com/?ani_cron=scraping" >/dev/null 2>&1
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ RSS Engine │ │ AI Engine │ │ Scraping Engine │
│ │ │ │ │ │
│ • Feed Parser │ │ • OpenAI API │ │ • URL Processor │
│ • Content Filter│ │ • Prompt Manager│ │ • Content Extract│
│ • Deduplication │ │ • Cache System │ │ • Anti-Detection│
│ • Image Sourcing│ │ • Multi-Language│ │ • Rate Limiting │
└─────────┬───────┘ └─────────┬───────┘ └─────────┬───────┘
│ │ │
└──────────────────────┼──────────────────────┘
│
┌─────────────▼─────────────┐
│ Content Processor │
│ │
│ • Quality Validation │
│ • SEO Optimization │
│ • Image Processing │
│ • WordPress Integration │
└─────────────┬─────────────┘
│
┌─────────────▼─────────────┐
│ Published Content │
└──────────────────────────┘
// Main Plugin Class
class AutoNewsImporter {
private $rss_engine;
private $ai_engine;
private $scraping_engine;
private $content_processor;
private $cache_manager;
public function __construct() {
$this->init_engines();
$this->register_hooks();
}
private function init_engines() {
$this->rss_engine = new ANI_RSS_Engine();
$this->ai_engine = new ANI_AI_Engine();
$this->scraping_engine = new ANI_Scraping_Engine();
$this->content_processor = new ANI_Content_Processor();
$this->cache_manager = new ANI_Cache_Manager();
}
}
// Engine Interfaces
interface ANI_Engine_Interface {
public function process();
public function validate_content($content);
public function get_stats();
}
-- Main content tracking table
CREATE TABLE `wp_ani_content` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`source_url` varchar(500) NOT NULL,
`content_hash` varchar(64) NOT NULL,
`title` text NOT NULL,
`content` longtext NOT NULL,
`post_id` bigint(20) unsigned DEFAULT NULL,
`engine_type` enum('rss','ai','scraping') NOT NULL,
`status` enum('pending','processing','published','failed') DEFAULT 'pending',
`language` varchar(10) DEFAULT 'en',
`category_id` bigint(20) unsigned DEFAULT NULL,
`image_url` varchar(500) DEFAULT NULL,
`meta_data` longtext DEFAULT NULL,
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `content_hash` (`content_hash`),
KEY `engine_type` (`engine_type`),
KEY `status` (`status`),
KEY `created_at` (`created_at`)
);
-- RSS feeds configuration
CREATE TABLE `wp_ani_rss_feeds` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`feed_url` varchar(500) NOT NULL,
`feed_name` varchar(255) NOT NULL,
`category_id` bigint(20) unsigned DEFAULT NULL,
`language` varchar(10) DEFAULT 'en',
`active` tinyint(1) DEFAULT 1,
`last_check` timestamp NULL DEFAULT NULL,
`check_interval` int(11) DEFAULT 300,
`total_processed` bigint(20) DEFAULT 0,
`settings` longtext DEFAULT NULL,
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `feed_url` (`feed_url`)
);
-- Processing statistics
CREATE TABLE `wp_ani_stats` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`date` date NOT NULL,
`engine_type` enum('rss','ai','scraping') NOT NULL,
`total_processed` int(11) DEFAULT 0,
`successful` int(11) DEFAULT 0,
`failed` int(11) DEFAULT 0,
`processing_time` float DEFAULT 0,
`memory_usage` bigint(20) DEFAULT 0,
`api_calls` int(11) DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `date_engine` (`date`,`engine_type`)
);
// ===============================
// CONTENT PROCESSING LIFECYCLE
// ===============================
// Pre-processing hooks
do_action('ani_before_content_processing', $content, $engine_type);
do_action('ani_content_received', $raw_content, $source_url, $engine_type);
do_action('ani_content_validated', $content, $validation_result);
do_action('ani_content_sanitized', $sanitized_content, $original_content);
// Processing hooks
do_action('ani_content_processing_started', $content_id, $engine_type);
do_action('ani_content_ai_enhanced', $enhanced_content, $original_content, $ai_model);
do_action('ani_content_translated', $translated_content, $source_language, $target_language);
do_action('ani_content_seo_optimized', $optimized_content, $seo_data);
// Post-processing hooks
do_action('ani_after_content_processing', $post_id, $content, $engine_type);
do_action('ani_content_published', $post_id, $source_data);
do_action('ani_content_scheduled', $post_id, $schedule_time);
do_action('ani_content_failed', $error, $content_data);
do_action('ani_content_skipped', $reason, $content_data);
// ===============================
// ENGINE-SPECIFIC HOOKS
// ===============================
// RSS Engine hooks
do_action('ani_rss_feed_fetched', $feed_url, $feed_data);
do_action('ani_rss_feed_parsed', $feed_id, $items, $feed_url);
do_action('ani_rss_item_processed', $item_data, $feed_id);
do_action('ani_rss_feed_processed', $feed_id, $items_count);
do_action('ani_rss_feed_failed', $feed_id, $error_message);
do_action('ani_rss_duplicate_detected', $item_hash, $existing_post_id);
// AI Engine hooks
do_action('ani_ai_prompt_prepared', $prompt, $content_type, $language);
do_action('ani_ai_request_sent', $prompt, $api_endpoint, $parameters);
do_action('ani_ai_response_received', $response, $prompt, $execution_time);
do_action('ani_ai_content_generated', $content, $prompt_data);
do_action('ani_ai_content_enhanced', $enhanced_content, $original_content);
do_action('ani_ai_translation_completed', $translated_text, $source_lang, $target_lang);
do_action('ani_ai_api_limit_reached', $api_name, $limit_info);
do_action('ani_ai_api_error', $error_code, $error_message, $api_endpoint);
// Web Scraping Engine hooks
do_action('ani_scraping_started', $url, $scraping_config);
do_action('ani_scraping_page_fetched', $url, $html_content, $response_code);
do_action('ani_scraping_content_extracted', $extracted_content, $url);
do_action('ani_scraping_completed', $url, $content);
do_action('ani_scraping_failed', $url, $error_message);
do_action('ani_scraping_blocked', $url, $block_reason);
do_action('ani_scraping_rate_limited', $url, $retry_after);
// ===============================
// IMAGE PROCESSING HOOKS
// ===============================
// Image sourcing hooks
do_action('ani_image_search_started', $search_query, $image_source);
do_action('ani_image_found', $image_url, $image_data, $source);
do_action('ani_image_downloaded', $image_url, $local_path);
do_action('ani_image_optimized', $image_path, $optimization_stats);
do_action('ani_image_uploaded', $image_id, $post_id, $image_data);
do_action('ani_image_processing_failed', $image_url, $error_message);
// ===============================
// DEDUPLICATION SYSTEM HOOKS
// ===============================
do_action('ani_duplicate_check_started', $content_hash, $engine_type);
do_action('ani_duplicate_detected', $content_hash, $existing_post_id, $new_content);
do_action('ani_duplicate_resolved', $resolution_method, $content_data);
do_action('ani_unique_content_confirmed', $content_hash, $content_data);
// ===============================
// CRON AND SCHEDULING HOOKS
// ===============================
do_action('ani_cron_job_started', $job_type, $job_config);
do_action('ani_cron_job_completed', $job_type, $execution_stats);
do_action('ani_cron_job_failed', $job_type, $error_message);
do_action('ani_cron_schedule_updated', $job_type, $new_schedule);
// ===============================
// CACHE SYSTEM HOOKS
// ===============================
do_action('ani_cache_miss', $cache_key, $cache_group);
do_action('ani_cache_hit', $cache_key, $cache_group);
do_action('ani_cache_set', $cache_key, $cache_group, $expiration);
do_action('ani_cache_cleared', $cache_type);
do_action('ani_cache_expired', $cache_key, $cache_group);
// ===============================
// SYSTEM AND MAINTENANCE HOOKS
// ===============================
// Plugin lifecycle hooks
do_action('ani_plugin_activated');
do_action('ani_plugin_deactivated');
do_action('ani_plugin_updated', $old_version, $new_version);
do_action('ani_database_upgraded', $old_version, $new_version);
// Configuration hooks
do_action('ani_settings_updated', $setting_group, $old_values, $new_values);
do_action('ani_api_key_updated', $api_service, $key_status);
do_action('ani_feed_added', $feed_id, $feed_data);
do_action('ani_feed_removed', $feed_id);
do_action('ani_feed_status_changed', $feed_id, $old_status, $new_status);
// Performance and monitoring hooks
do_action('ani_performance_monitored', $operation, $execution_time, $memory_usage);
do_action('ani_memory_limit_reached', $current_usage, $limit);
do_action('ani_processing_queue_full', $queue_size, $max_size);
do_action('ani_maintenance_completed', $stats);
// Error and logging hooks
do_action('ani_error_logged', $error_level, $message);
do_action('ani_debug_info_collected', $debug_data);
do_action('ani_log_rotated', $log_file, $archive_file);
// ===============================
// MULTILINGUAL HOOKS
// ===============================
do_action('ani_language_detected', $detected_language, $content);
do_action('ani_language_switched', $old_language, $new_language);
do_action('ani_translation_started', $content, $source_lang, $target_lang);
do_action('ani_translation_completed', $translated_content, $source_lang, $target_lang);
// ===============================
// QUALITY CONTROL HOOKS
// ===============================
do_action('ani_quality_check_started', $content_id, $quality_metrics);
do_action('ani_quality_check_passed', $content_id, $quality_score);
do_action('ani_quality_check_failed', $content_id, $failure_reasons);
do_action('ani_content_approved', $content_id, $approval_data);
do_action('ani_content_rejected', $content_id, $rejection_reason);
// ===============================
// SECURITY HOOKS
// ===============================
do_action('ani_security_scan_completed', $scan_results);
do_action('ani_suspicious_activity_detected', $activity_type, $details);
do_action('ani_access_denied', $user_id, $attempted_action);
do_action('ani_api_key_validated', $api_service, $validation_result);
// ===============================
// CONTENT PROCESSING FILTERS
// ===============================
// Content filtering and manipulation
$content = apply_filters('ani_filter_content', $content, $source);
$title = apply_filters('ani_filter_title', $title, $content);
$excerpt = apply_filters('ani_filter_excerpt', $excerpt, $content);
$content = apply_filters('ani_sanitize_content', $content, $engine_type);
$content = apply_filters('ani_validate_content', $content, $validation_rules);
$content_length = apply_filters('ani_max_content_length', 5000, $content_type);
$min_content_length = apply_filters('ani_min_content_length', 300, $content_type);
// Content enhancement filters
$enhanced_content = apply_filters('ani_enhance_content', $content, $enhancement_options);
$seo_content = apply_filters('ani_seo_optimize_content', $content, $seo_settings);
$formatted_content = apply_filters('ani_format_content', $content, $format_rules);
// ===============================
// AI PROCESSING FILTERS
// ===============================
// AI prompts and responses
$prompt = apply_filters('ani_ai_prompt', $prompt, $content_type, $language);
$system_prompt = apply_filters('ani_ai_system_prompt', $system_prompt, $content_type);
$ai_response = apply_filters('ani_ai_response', $response, $prompt);
$ai_parameters = apply_filters('ani_ai_parameters', $parameters, $content_type);
$ai_model = apply_filters('ani_ai_model_selection', 'GPT-4.1', $content_type);
// Translation filters
$translation_prompt = apply_filters('ani_translation_prompt', $prompt, $source_lang, $target_lang);
$translated_content = apply_filters('ani_translated_content', $content, $source_lang, $target_lang);
// ===============================
// RSS PROCESSING FILTERS
// ===============================
// RSS feed processing
$feed_url = apply_filters('ani_rss_feed_url', $feed_url, $feed_config);
$feed_items = apply_filters('ani_rss_feed_items', $feed_items, $feed_url);
$rss_content = apply_filters('ani_rss_content_extract', $content, $rss_item);
$rss_title = apply_filters('ani_rss_title_clean', $title, $rss_item);
$feed_frequency = apply_filters('ani_rss_check_frequency', 300, $feed_id);
// ===============================
// SCRAPING FILTERS
// ===============================
// Web scraping filters
$scraping_config = apply_filters('ani_scraping_config', $config, $url);
$extracted_content = apply_filters('ani_scraped_content', $content, $url);
$scraping_selectors = apply_filters('ani_scraping_selectors', $selectors, $url);
$user_agents = apply_filters('ani_scraping_user_agents', $user_agents, $url);
$scraping_delay = apply_filters('ani_scraping_delay', 2, $url);
// ===============================
// IMAGE PROCESSING FILTERS
// ===============================
// Image sourcing and processing
$image_url = apply_filters('ani_filter_image', $image_url, $content);
$image_search_query = apply_filters('ani_image_search_query', $query, $content);
$image_sources = apply_filters('ani_image_sources', $sources, $content_type);
$image_alt_text = apply_filters('ani_image_alt_text', $alt_text, $image_data);
$image_caption = apply_filters('ani_image_caption', $caption, $image_data);
$image_quality = apply_filters('ani_image_compression_quality', 85, $image_type);
// ===============================
// POST CREATION FILTERS
// ===============================
// WordPress post data
$post_data = apply_filters('ani_pre_insert_post', $post_data, $source_data);
$post_meta = apply_filters('ani_post_meta', $meta_data, $post_id);
$post_categories = apply_filters('ani_post_categories', $categories, $content, $engine_type);
$post_tags = apply_filters('ani_post_tags', $tags, $content, $engine_type);
$post_author = apply_filters('ani_post_author', $author_id, $content_source);
$post_status = apply_filters('ani_post_status', 'publish', $content_quality);
$post_date = apply_filters('ani_post_date', $post_date, $content_source);
// ===============================
// CONFIGURATION FILTERS
// ===============================
// Engine settings
$settings = apply_filters('ani_engine_settings', $settings, $engine_type);
$rss_settings = apply_filters('ani_rss_engine_settings', $settings);
$ai_settings = apply_filters('ani_ai_engine_settings', $settings);
$scraping_settings = apply_filters('ani_scraping_engine_settings', $settings);
// Cache configuration
$cache_duration = apply_filters('ani_cache_duration', 3600, $cache_type);
$cache_key = apply_filters('ani_cache_key', $key, $data, $cache_group);
$cache_groups = apply_filters('ani_cache_groups', $groups);
// ===============================
// QUALITY CONTROL FILTERS
// ===============================
// Content quality filters
$quality_threshold = apply_filters('ani_quality_threshold', 75, $content_type);
$spam_keywords = apply_filters('ani_spam_keywords', $keywords, $language);
$banned_domains = apply_filters('ani_banned_domains', $domains);
$allowed_content_types = apply_filters('ani_allowed_content_types', $types);
// ===============================
// DEDUPLICATION FILTERS
// ===============================
// Duplicate detection
$duplicate_threshold = apply_filters('ani_duplicate_threshold', 0.8, $content_type);
$hash_algorithm = apply_filters('ani_hash_algorithm', 'sha256', $content_type);
$similarity_check = apply_filters('ani_similarity_check_enabled', true, $engine_type);
// ===============================
// MULTILINGUAL FILTERS
// ===============================
// Language processing
$detected_language = apply_filters('ani_detected_language', $language, $content);
$target_languages = apply_filters('ani_target_languages', $languages, $content_type);
$language_prompts = apply_filters('ani_language_specific_prompts', $prompts, $language);
// ===============================
// API AND EXTERNAL SERVICE FILTERS
// ===============================
// API configuration
$api_endpoints = apply_filters('ani_api_endpoints', $endpoints, $service);
$api_headers = apply_filters('ani_api_headers', $headers, $service, $endpoint);
$api_timeout = apply_filters('ani_api_timeout', 30, $service);
$api_retry_attempts = apply_filters('ani_api_retry_attempts', 3, $service);
// Rate limiting
$rate_limits = apply_filters('ani_rate_limits', $limits, $service);
$rate_limit_window = apply_filters('ani_rate_limit_window', 3600, $service);
// ===============================
// SCHEDULING AND CRON FILTERS
// ===============================
// Cron configuration
$cron_schedules = apply_filters('ani_cron_schedules', $schedules);
$cron_frequency = apply_filters('ani_cron_frequency', $frequency, $job_type);
$max_execution_time = apply_filters('ani_max_execution_time', 300, $operation);
// ===============================
// PERFORMANCE FILTERS
// ===============================
// Performance tuning
$memory_limit = apply_filters('ani_memory_limit', '512M', $operation);
$batch_size = apply_filters('ani_batch_size', 10, $operation);
$concurrent_processes = apply_filters('ani_concurrent_processes', 3, $engine_type);
// ===============================
// SECURITY FILTERS
// ===============================
// Security configuration
$allowed_domains = apply_filters('ani_allowed_domains', $domains, $context);
$security_headers = apply_filters('ani_security_headers', $headers, $request_type);
$input_validation_rules = apply_filters('ani_validation_rules', $rules, $input_type);
// ===============================
// DEBUGGING AND LOGGING FILTERS
// ===============================
// Debug configuration
$debug_level = apply_filters('ani_debug_level', 'info', $context);
$log_retention_days = apply_filters('ani_log_retention_days', 30);
$debug_data = apply_filters('ani_debug_data', $data, $operation);
// Example: Custom content validation
add_filter('ani_filter_content', function($content, $source) {
// Add custom spam detection
if (contains_spam_keywords($content)) {
return false; // Reject content
}
// Add custom formatting
$content = add_custom_formatting($content);
return $content;
}, 10, 2);
// Example: Custom AI prompt modification
add_filter('ani_ai_prompt', function($prompt, $type, $language) {
if ($language === 'ro') {
$prompt .= " Scrie în stil jurnalistic românesc.";
}
return $prompt;
}, 10, 3);
// Sanitization functions
function ani_sanitize_url($url) {
$url = esc_url_raw($url);
if (!filter_var($url, FILTER_VALIDATE_URL)) {
return false;
}
return $url;
}
function ani_sanitize_content($content) {
// Remove potentially dangerous content
$content = wp_kses_post($content);
// Additional sanitization
$content = sanitize_textarea_field($content);
return $content;
}
// CSRF Protection
if (!wp_verify_nonce($_POST['ani_nonce'], 'ani_action')) {
wp_die('Security check failed');
}
// Capability checking
function ani_check_permissions($action) {
if (!current_user_can('manage_options')) {
wp_die('Insufficient permissions');
}
// Additional role-based checks
$required_caps = array(
'configure' => 'manage_options',
'view_stats' => 'edit_posts',
'manage_feeds' => 'publish_posts'
);
if (!current_user_can($required_caps[$action])) {
return false;
}
return true;
}
// Multi-layer caching system
class ANI_Cache_Manager {
private $memory_cache = array();
private $transient_cache_duration = 3600;
public function get($key, $group = 'default') {
// Level 1: Memory cache (fastest)
if (isset($this->memory_cache[$group][$key])) {
return $this->memory_cache[$group][$key];
}
// Level 2: WordPress transients
$transient_key = "ani_{$group}_{$key}";
$value = get_transient($transient_key);
if ($value !== false) {
$this->memory_cache[$group][$key] = $value;
return $value;
}
return false;
}
public function set($key, $value, $group = 'default', $expiration = null) {
$expiration = $expiration ?: $this->transient_cache_duration;
// Store in memory
$this->memory_cache[$group][$key] = $value;
// Store in transients
$transient_key = "ani_{$group}_{$key}";
set_transient($transient_key, $value, $expiration);
}
}
// Performance tracking
class ANI_Performance_Monitor {
private $start_time;
private $start_memory;
public function start_timer($operation) {
$this->start_time = microtime(true);
$this->start_memory = memory_get_usage(true);
}
public function end_timer($operation) {
$execution_time = microtime(true) - $this->start_time;
$memory_used = memory_get_usage(true) - $this->start_memory;
// Log performance data
$this->log_performance($operation, $execution_time, $memory_used);
return array(
'execution_time' => $execution_time,
'memory_used' => $memory_used
);
}
}
// Enable debug mode in wp-config.php
define('ANI_DEBUG', true);
define('ANI_DEBUG_LOG', true);
define('ANI_DEBUG_LEVEL', 'verbose'); // basic, verbose, trace
// Or enable via plugin settings
add_action('ani_debug_mode_enabled', function() {
// Debug mode activated
ini_set('log_errors', 1);
ini_set('error_log', WP_CONTENT_DIR . '/ani-debug.log');
});
// Comprehensive logging
class ANI_Logger {
const LEVEL_ERROR = 1;
const LEVEL_WARNING = 2;
const LEVEL_INFO = 3;
const LEVEL_DEBUG = 4;
public static function log($message, $level = self::LEVEL_INFO, $context = array()) {
if (!defined('ANI_DEBUG') || !ANI_DEBUG) {
return;
}
$timestamp = date('Y-m-d H:i:s');
$level_name = self::get_level_name($level);
$log_entry = sprintf(
"[%s] %s: %s %s\n",
$timestamp,
$level_name,
$message,
!empty($context) ? json_encode($context) : ''
);
error_log($log_entry, 3, WP_CONTENT_DIR . '/ani-debug.log');
}
}
// Exception handling
try {
$result = $this->process_content($content);
} catch (ANI_API_Exception $e) {
ANI_Logger::log('API Error: ' . $e->getMessage(), ANI_Logger::LEVEL_ERROR, array(
'api_endpoint' => $e->getEndpoint(),
'response_code' => $e->getCode(),
'content_id' => $content['id']
));
// Retry logic
$this->schedule_retry($content, $e);
} catch (ANI_Content_Exception $e) {
ANI_Logger::log('Content Error: ' . $e->getMessage(), ANI_Logger::LEVEL_WARNING);
// Mark content as failed
$this->mark_content_failed($content['id'], $e->getMessage());
}
# Test specific components wp ani test rss-feed --feed-id=1 wp ani test openai-connection wp ani test scraping --url="example.com" # Debug operations wp ani debug process-queue wp ani debug clear-cache wp ani debug export-logs # Performance analysis wp ani stats performance --days=7 wp ani stats api-usage --detailed
// Debug API issues
if (ANI_DEBUG) {
ANI_Logger::log('API Request', ANI_Logger::LEVEL_DEBUG, array(
'endpoint' => $endpoint,
'payload' => $payload,
'headers' => $headers
));
ANI_Logger::log('API Response', ANI_Logger::LEVEL_DEBUG, array(
'status_code' => $response_code,
'response_body' => $response_body,
'execution_time' => $execution_time
));
}
// Debug content processing
if (ANI_DEBUG_LEVEL === 'verbose') {
ANI_Logger::log('Content Processing Step', ANI_Logger::LEVEL_DEBUG, array(
'step' => 'content_filtering',
'original_length' => strlen($original_content),
'filtered_length' => strlen($filtered_content),
'filters_applied' => $applied_filters
));
}