
مجموعه آثار

function imdb_fetcher_fetch_data(){ check_ajax_referer('imdb_fetcher_save_meta_box_data','nonce'); $imdb_id = sanitize_text_field($_POST['imdb_id']); $post_id = intval($_POST['post_id']); $post_type = sanitize_text_field($_POST['post_type']); if(empty($imdb_id)){wp_send_json_error(['message'=>'آیدی IMDb معتبر نیست.']);} if(!$post_id){ $post_id = wp_insert_post(['post_title'=>'Draft','post_type'=>$post_type,'post_status'=>'draft'],true); } // ---------- دریافت اطلاعات از TMDb (بدون IMDb) ---------- $tmdb_api_key = '12e807d785262c02292bd8ed8516d24f'; $proxy_base = 'http://tmdb2.tala-film.top/55/tmdb-api-proxy.php?url='; // ۱. پیدا کردن TMDb ID از طریق IMDB $find_url = "https://api.themoviedb.org/3/find/{$imdb_id}?api_key={$tmdb_api_key}&language=en-US&external_source=imdb_id"; $find_response = wp_remote_get($proxy_base . urlencode($find_url), ['timeout'=>15]); if(is_wp_error($find_response) || wp_remote_retrieve_response_code($find_response) !== 200){ wp_send_json_error(['message'=>'خطا در ارتباط با TMDb برای یافتن اثر.']); } $find_data = json_decode(wp_remote_retrieve_body($find_response), true); if(empty($find_data['movie_results']) && empty($find_data['tv_results'])){ wp_send_json_error(['message'=>'آیدی IMDb در TMDb پیدا نشد.']); } // تشخیص نوع (فیلم یا سریال) $media_type = 'movie'; $tmdb_id = 0; if(!empty($find_data['movie_results'][0])){ $media_type = 'movie'; $tmdb_id = $find_data['movie_results'][0]['id']; } elseif(!empty($find_data['tv_results'][0])){ $media_type = 'tv'; $tmdb_id = $find_data['tv_results'][0]['id']; } else { wp_send_json_error(['message'=>'نوع اثر (فیلم/سریال) قابل تشخیص نیست.']); } // ۲. دریافت جزییات کامل از TMDb $detail_url = "https://api.themoviedb.org/3/{$media_type}/{$tmdb_id}?api_key={$tmdb_api_key}&language=en-US&append_to_response=credits,release_dates,translations,external_ids,keywords,content_ratings,videos,images"; $detail_response = wp_remote_get($proxy_base . urlencode($detail_url), ['timeout'=>20]); if(is_wp_error($detail_response) || wp_remote_retrieve_response_code($detail_response) !== 200){ wp_send_json_error(['message'=>'خطا در دریافت جزییات از TMDb.']); } $detail = json_decode(wp_remote_retrieve_body($detail_response), true); if(empty($detail)){ wp_send_json_error(['message'=>'دادهای از TMDb دریافت نشد.']); } // ---------- استخراج فیلدهای مورد نیاز از $detail ---------- $title = $detail['title'] ?? $detail['name'] ?? ''; // سال انتشار $year = ''; if($media_type === 'movie' && !empty($detail['release_date'])){ $year = substr($detail['release_date'], 0, 4); } elseif($media_type === 'tv' && !empty($detail['first_air_date'])){ $year = substr($detail['first_air_date'], 0, 4); } // مدت زمان (دقیقه) $runtime_str = ''; if($media_type === 'movie' && !empty($detail['runtime'])){ $runtime_str = $detail['runtime'] . ' min'; } elseif($media_type === 'tv' && !empty($detail['episode_run_time'])){ $avg = is_array($detail['episode_run_time']) ? array_sum($detail['episode_run_time'])/count($detail['episode_run_time']) : $detail['episode_run_time']; $runtime_str = intval($avg) . ' min'; } // ژانرها $genres = []; if(!empty($detail['genres'])){ $genres = array_column($detail['genres'], 'name'); } $genres_str = implode(', ', $genres); // کشورها (از production_countries) $countries = []; if(!empty($detail['production_countries'])){ $countries = array_column($detail['production_countries'], 'name'); } // اگر خالی بود، از origin_country (برای سریال) استفاده کن if(empty($countries) && !empty($detail['origin_country'])){ $countries = $detail['origin_country']; } $countries_str = implode(', ', array_filter($countries)); // زبانها (از spoken_languages) $languages = []; if(!empty($detail['spoken_languages'])){ $languages = array_column($detail['spoken_languages'], 'name'); } $languages_str = implode(', ', array_filter($languages)); // کارگردان (از credits.crew) $directors = []; if(!empty($detail['credits']['crew'])){ foreach($detail['credits']['crew'] as $crew){ if($crew['job'] === 'Director'){ $directors[] = $crew['name']; } } } $directors_str = implode(', ', array_unique($directors)); // بازیگران (حداکثر ۵ نفر) $actors = []; if(!empty($detail['credits']['cast'])){ $cast = array_slice($detail['credits']['cast'], 0, 5); $actors = array_column($cast, 'name'); } $actors_str = implode(', ', array_filter($actors)); // ردهی سنی (US MPAA از release_dates) $rated = ''; if(!empty($detail['release_dates']['results'])){ foreach($detail['release_dates']['results'] as $rd){ if($rd['iso_3166_1'] === 'US' && !empty($rd['release_dates'][0]['certification'])){ $rated = $rd['release_dates'][0]['certification']; break; } } } if(empty($rated) && !empty($detail['content_ratings']['results'])){ foreach($detail['content_ratings']['results'] as $cr){ if($cr['iso_3166_1'] === 'US'){ $rated = $cr['rating']; break; } } } // جوایز – TMDb این را مستقیماً ندارد، میتوان از overview یا tagline استفاده کرد $awards_text = ''; if(!empty($detail['tagline'])){ $awards_text = $detail['tagline']; } elseif(!empty($detail['overview'])){ $awards_text = substr($detail['overview'], 0, 200); } // بودجه و فروش جهانی (فقط برای فیلم) $budget = ''; $gross_worldwide = ''; if($media_type === 'movie'){ if(!empty($detail['budget'])){ $budget = '$' . number_format($detail['budget']); } if(!empty($detail['revenue'])){ $gross_worldwide = '$' . number_format($detail['revenue']); } } // تمیز کردن اعداد (همان تابع قبلی) $budget_clean = $budget ? imdb_fetcher_money_clean($budget) : ''; $gross_worldwide_clean = $gross_worldwide ? imdb_fetcher_money_clean($gross_worldwide) : ''; // آمادهسازی آرایهی دادهها (با کلیدهای یکسان قبلی) $imdb_data = [ 'Title' => $title, 'Year' => $year, 'Runtime' => $runtime_str, 'Genre' => $genres_str, 'Country' => $countries_str, 'Language' => $languages_str, 'Director' => $directors_str, 'Actors' => $actors_str, 'Awards' => $awards_text, 'Rated' => $rated, 'Metascore' => '', // TMDb متااسکور ندارد 'BoxOffice' => $budget_clean ]; // ---------- بکگراند و پوستر (همان کد قبلی) ---------- $backdrop_path = $detail['backdrop_path'] ?? ''; $poster_path = $detail['poster_path'] ?? ''; $backdrop_url = $backdrop_path ? 'http://tmdb2.tala-film.top/55/tmdb-proxy.php?path=' . urlencode($backdrop_path) : ''; $poster_url = $poster_path ? 'http://tmdb2.tala-film.top/55/tmdb-proxy.php?path=' . urlencode($poster_path) : ''; if(!empty($backdrop_url)){ $attach_id = imdb_fetcher_set_backdrop_image($post_id, $backdrop_url); if($attach_id){ update_post_meta($post_id, 'post_backdrop', $attach_id); $meta_key = ($post_type==='series') ? 'tv_backdrop' : 'movies_backdrop'; $backdrop_url_local = wp_get_attachment_url($attach_id); if(function_exists('update_field')){ update_field($meta_key, $backdrop_url_local, $post_id); } else { update_post_meta($post_id, $meta_key, $backdrop_url_local); } } } if(!empty($poster_url)){ imdb_fetcher_set_featured_image($post_id, $poster_url); } // ---------- عنوان و اسلاگ ---------- $title_for_post = $imdb_data['Title'] ?? 'Unknown'; $year_for_post = str_replace('–','',$imdb_data['Year'] ?? ''); if($post_type==='post'){ $post_title="دانلود فیلم {$title_for_post} {$year_for_post} بدون سانسور"; $post_slug="{$title_for_post}-{$year_for_post}"; }else{ $post_title="دانلود سریال {$title_for_post} بدون سانسور"; $post_slug="{$title_for_post}"; } wp_update_post(['ID'=>$post_id,'post_title'=>$post_title,'post_name'=>sanitize_title($post_slug),'post_status'=>'draft']); // ---------- ذخیره متاها (دقیقاً مشابه قبل) ---------- $rating = $detail['vote_average'] ?? ''; $votes = $detail['vote_count'] ?? ''; $metascore = ''; // از TMDb نداریم $rated = $imdb_data['Rated'] ?? ''; $fields=[]; if($post_type==='series'){ $fields=[ 'title_english_s' => $title_for_post, 'title_persian' => '', 'imdb_rating_s' => $rating, 'votecounttv' => $votes, 'serial_meta_critic'=> $metascore, 'id_series_meta' => $imdb_id, 'first_air_date' => $detail['first_air_date'] ?? '', 'year_s' => $year_for_post, 'epi_runtime' => $imdb_data['Runtime'] ?? '', 'tv_rated' => $rated, 'awards_short' => imdb_fetcher_translate_awards($imdb_data['Awards'] ?? ''), ]; }else{ $fields=[ 'title_english' => $title_for_post, 'release_date' => $year_for_post, 'imdb_rating' => $rating, 'imdbvotecount' => $votes, 'id_imdb_film' => $imdb_id, 'runtime' => $imdb_data['Runtime'] ?? '', 'metascore_film' => $metascore, 'rated_meta' => $rated, 'awards_short' => imdb_fetcher_translate_awards($imdb_data['Awards'] ?? ''), 'budget' => $budget_clean, 'worldwide_gross'=> $gross_worldwide_clean ]; } foreach($fields as $key=>$val){ if(function_exists('update_field')){ update_field($key,$val,$post_id); }else{ update_post_meta($post_id,$key,$val); } } // ---------- ژانرها (همان کد) ---------- $genre_map = [ 'Action'=>'اکشن','Adventure'=>'ماجراجویی','Animation'=>'انیمیشن','Biography'=>'بیوگرافی', 'Comedy'=>'کمدی','Crime'=>'جنایی','Documentary'=>'مستند','Drama'=>'درام','Family'=>'خانوادگی', 'Fantasy'=>'فانتزی','History'=>'تاریخی','Horror'=>'ترسناک','Music'=>'موسیقی', 'Musical'=>'موزیکال','Mystery'=>'معمایی','Romance'=>'عاشقانه','Sci-Fi'=>'علمی تخیلی', 'Sport'=>'ورزشی','Thriller'=>'هیجان انگیز','War'=>'جنگی','Western'=>'وسترن' ]; $genres = explode(',', $imdb_data['Genre'] ?? ''); $genres = array_map('trim', $genres); $genres_fa = []; foreach($genres as $g){ $genres_fa[] = $genre_map[$g] ?? $g; } $taxonomy = ($post_type === 'series') ? 'genre-series' : 'genre-movies'; $term_ids = []; foreach($genres_fa as $g){ $term = term_exists($g, $taxonomy); if(!$term){ $term = wp_insert_term($g, $taxonomy); } if(!is_wp_error($term)){ $term_ids[] = is_array($term) && isset($term['term_id']) ? $term['term_id'] : $term; } } if(!empty($term_ids)){ wp_set_post_terms($post_id, $term_ids, $taxonomy, false); update_post_meta($post_id, 'genres_list', implode(', ', $genres_fa)); } // ---------- کشور (همان کد) ---------- $countries_raw = array_map('trim', explode(',', $imdb_data['Country'] ?? '')); $country_map = [ 'United States' => 'آمریکا','USA' => 'آمریکا','UK' => 'انگلستان','United Kingdom' => 'انگلستان', 'France' => 'فرانسه','Germany' => 'آلمان','Italy' => 'ایتالیا','Spain' => 'اسپانیا', 'Portugal' => 'پرتغال','Canada' => 'کانادا','Mexico' => 'مکزیک','Brazil' => 'برزیل', 'Argentina' => 'آرژانتین','Chile' => 'شیلی','Colombia' => 'کلمبیا','Peru' => 'پرو', 'Japan' => 'ژاپن','China' => 'چین','Hong Kong' => 'هنگکنگ','Taiwan' => 'تایوان', 'South Korea' => 'کره جنوبی','North Korea' => 'کره شمالی','India' => 'هند', 'Pakistan' => 'پاکستان','Iran' => 'ایران','Turkey' => 'ترکیه','Egypt' => 'مصر', 'South Africa' => 'آفریقای جنوبی','Morocco' => 'مراکش','Tunisia' => 'تونس', 'Algeria' => 'الجزایر','Nigeria' => 'نیجریه','Kenya' => 'کنیا','Russia' => 'روسیه', 'Ukraine' => 'اوکراین','Poland' => 'لهستان','Czech Republic' => 'جمهوری چک', 'Slovakia' => 'اسلواکی','Hungary' => 'مجارستان','Romania' => 'رومانی', 'Bulgaria' => 'بلغارستان','Greece' => 'یونان','Sweden' => 'سوئد','Norway' => 'نروژ', 'Denmark' => 'دانمارک','Finland' => 'فنلاند','Iceland' => 'ایسلند','Australia' => 'استرالیا', 'New Zealand' => 'نیوزیلند','Saudi Arabia' => 'عربستان','Qatar' => 'قطر', 'United Arab Emirates' => 'امارات','Lebanon' => 'لبنان','Syria' => 'سوریه', 'Iraq' => 'عراق','Israel' => 'اسرائیل','Jordan' => 'اردن','Armenia' => 'ارمنستان', 'Georgia' => 'گرجستان','Azerbaijan' => 'آذربایجان','Kazakhstan' => 'قزاقستان', 'Uzbekistan' => 'ازبکستان','Thailand' => 'تایلند','Vietnam' => 'ویتنام', 'Philippines' => 'فیلیپین','Malaysia' => 'مالزی','Indonesia' => 'اندونزی', 'Singapore' => 'سنگاپور' ]; $countries_fa = []; foreach ($countries_raw as $c) { if (!$c) continue; $translated = $country_map[$c] ?? $c; $countries_fa[] = $translated; } $country_tax = ($post_type === 'series') ? 'country-series' : 'country'; foreach ($countries_fa as $cn) { if (!term_exists($cn, $country_tax)) { wp_insert_term($cn, $country_tax); } } if (!empty($countries_fa)) { wp_set_post_terms($post_id, $countries_fa, $country_tax, false); update_post_meta($post_id, 'countries_list', implode(', ', $countries_fa)); } // ---------- زبان (همان کد) ---------- if (!empty($imdb_data['Language'])) { $languages = array_filter(array_map('trim', explode(',', $imdb_data['Language']))); $language_translate = [ 'English' => 'انگلیسی','Persian' => 'فارسی','Farsi' => 'فارسی', 'French' => 'فرانسوی','German' => 'آلمانی','Italian' => 'ایتالیایی', 'Spanish' => 'اسپانیایی','Japanese' => 'ژاپنی','Chinese' => 'چینی', 'Mandarin' => 'ماندارین','Cantonese' => 'کانتونی','Hindi' => 'هندی', 'Urdu' => 'اردو','Arabic' => 'عربی','Kurdish' => 'کردی','Pashto' => 'پشتو', 'Turkish' => 'ترکی','Azerbaijani' => 'آذری','Armenian' => 'ارمنی', 'Georgian' => 'گرجی','Russian' => 'روسی','Ukrainian' => 'اوکراینی', 'Polish' => 'لهستانی','Czech' => 'چکی','Slovak' => 'اسلواک', 'Slovenian' => 'اسلوونیایی','Croatian' => 'کرواتی','Serbian' => 'صربی', 'Bosnian' => 'بوسنیایی','Bulgarian' => 'بلغاری','Romanian' => 'رومانیایی', 'Hungarian' => 'مجارستانی','Greek' => 'یونانی','Dutch' => 'هلندی', 'Flemish' => 'فلاندری','Swedish' => 'سوئدی','Norwegian' => 'نروژی', 'Danish' => 'دانمارکی','Finnish' => 'فنلاندی','Icelandic' => 'ایسلندی', 'Portuguese' => 'پرتغالی','Brazilian Portuguese' => 'پرتغالی برزیلی', 'Malay' => 'مالایی','Indonesian' => 'اندونزیایی','Filipino' => 'فیلیپینی', 'Tagalog' => 'تاگالوگ','Thai' => 'تایلندی','Vietnamese' => 'ویتنامی', 'Khmer' => 'خمری (کامبوجی)','Lao' => 'لائوسی','Burmese' => 'برمهای', 'Mongolian' => 'مغولی','Nepali' => 'نپالی','Sinhala' => 'سینهالی', 'Tamil' => 'تامیلی','Telugu' => 'تلوگو','Bengali' => 'بنگالی', 'Punjabi' => 'پنجابی','Marathi' => 'مراتی','Gujarati' => 'گجراتی', 'Malayalam' => 'مالایالامی','Kannada' => 'کانادایی (هندی)','Hebrew' => 'عبری', 'Swahili' => 'سواحیلی','Zulu' => 'زولو','Afrikaans' => 'آفریکانس', 'Hausa' => 'هوسا','Amharic' => 'امهری','Somali' => 'سومالیایی', 'Berber' => 'بربری','Latin' => 'لاتین','Esperanto' => 'اسپرانتو', 'Ibo' => 'ایبو','Yoruba' => 'یوروبا','Maori' => 'مائوری', 'Samoan' => 'ساموایی','Tahitian' => 'تاهیتی','Fijian' => 'فیجیایی', 'Hawaiian' => 'هاوایی','Cherokee' => 'چروکی','Inuktitut' => 'اینوكتیتوت', 'Quechua' => 'کچوا','Guarani' => 'گوارانی','Nahuatl' => 'ناهواتل', 'Sanskrit' => 'سانسکریت','Tibetan' => 'تبتی','Uyghur' => 'اویغوری', 'Kazakh' => 'قزاقی','Uzbek' => 'ازبکی','Turkmen' => 'ترکمنی', 'Pashto' => 'پشتو','Sindhi' => 'سندی','Balochi' => 'بلوچی', 'Malagasy' => 'مالاگاسی', ]; $language_terms = []; $language_tags = []; foreach($languages as $lang){ $lang_fa = $language_translate[$lang] ?? $lang; $term = term_exists($lang_fa, 'language'); if($term && isset($term['term_id'])){ $language_terms[] = intval($term['term_id']); } else { $new_term = wp_insert_term($lang_fa, 'language'); if(!is_wp_error($new_term) && isset($new_term['term_id'])){ $language_terms[] = intval($new_term['term_id']); } } if(!in_array($lang_fa, $language_tags)){ $language_tags[] = $lang_fa; } } if(!empty($language_terms)){ wp_set_post_terms($post_id, $language_terms, 'language', false); } if(!empty($language_tags)){ wp_set_post_tags($post_id, $language_tags, true); } } // ---------- کارگردان (همان کد) ---------- $directors = array_map('trim', explode(',', $imdb_data['Director'] ?? '')); $director_tax = ($post_type === 'series') ? 'dir-series' : 'director'; foreach ($directors as $d) { if (!empty($d) && !term_exists($d, $director_tax)) { wp_insert_term($d, $director_tax); } } if (!empty($directors)) { wp_set_post_terms($post_id, $directors, $director_tax, false); update_post_meta($post_id, 'directors_list', implode(', ', $directors)); } // ---------- بازیگران (همان کد) ---------- $actors = array_map('trim', explode(',', $imdb_data['Actors'] ?? '')); $actors = array_slice($actors, 0, 5); $actors_tax = ($post_type === 'series') ? 'act-series' : 'actors'; foreach ($actors as $a) { if (!term_exists($a, $actors_tax)) { wp_insert_term($a, $actors_tax); } } wp_set_post_terms($post_id, $actors, $actors_tax, false); if (!empty($actors)) { update_post_meta($post_id, 'actors_list', implode(', ', $actors)); } // ---------- سال انتشار (همان کد) ---------- if (!empty($year)) { $release_tax = ($post_type === 'series') ? 'release-series' : 'release'; if (!term_exists($year, $release_tax)) { wp_insert_term($year, $release_tax); } wp_set_post_terms($post_id, [$year], $release_tax, false); update_post_meta($post_id, 'release_year', $year); } // ---------- ذخیره بودجه و فروش (همان کد) ---------- if (!empty($budget_clean)) { update_post_meta($post_id, 'budget_amount', $budget_clean); } if (!empty($gross_worldwide_clean)) { update_post_meta($post_id, 'gross_worldwide_amount', $gross_worldwide_clean); } wp_send_json_success(['post_id'=>$post_id]); } add_action('wp_ajax_imdb_fetcher_fetch_data','imdb_fetcher_fetch_data');

