سه شنبه ۰۱ آبان ۱۴۰۳

Tuesday, October 22, 2024 GMT +3:30

ساخت فید خوان آر اس اس (RSS Feed Reader) با PHP

php-rss-reader

همانطور که می دانیم استفاده از فید آر اس اس (RSS Feed یا خوراک وب) یکی از روش های متداول و کاربردی برای اطلاع از آخرین به روز رسانی محتوای سایت ها و وبلاگ ها است که خیلی از کاربران ترجیح می دهند از این طریق مطالب صفحه مورد علاقه خودشان را پیگیری و دنبال کنند، اما استفاده از این امکان تنها به همین مورد محدود نمی شود، خرجی RSS قابلیتی را فراهم می کند که می توانیم به فرض لیستی از مطالب به روز سایت ها یا وبلاگ ها را به صورت لینک باکس طراحی کرده و در وبلاگ یا سایت خود به نمایش درآوریم یا خلاصه ای از تازه ترین مطالب بخش های مختلف سایت ها یا وبلاگ های مختلف را در صفحه سایت یا وبلاگمان به بازدیدکننده گان نمایش داده و یا هر ایده ی دیگری که به ذهنمان می رسد را با اطلاعات موجود در فید اجرایی کنیم، به هر صورت با ذکر این مقدمه قصد داریم نحوه ساخت فید خوان آر اس اس (RSS Feed Reader) را با برنامه نویسی PHP آموزش دهیم.

فیدخوان آر اس اس (RSS Feed Reader) چیست؟


هر فید وب حاوی اطلاعاتی در چارچوب زبان XML است که در فایلی با همین پسوند ذخیره و نگهداری می شوند، به طور معمول این اطلاعات درون تگ های XML درج شده اند و به صورت خام چندان خوانا و قابل استفاده نیستند، به همین دلیل به برنامه یا اسکریپتی نیاز خواهیم داشت تا فایل فید را دریافت، اطلاعات موجود در آن را تجزیه و تحلیل نموده و در نهایت مطابق با هدف و نیازمان به خروجی صفحات HTML ارسال کند، با این تفسیر منظور از فیدخوان آر اس اس (RSS Feed Reader) برنامه ای است که قابلیت استخراج اطلاعات فیدهای RSS را داشته باشد و بدین منظور در وب به طور معمول یکی از زبان های برنامه نویسی سمت سرور مانند PHP مورد استفاده قرار می گیرد.

آشنایی با شیوه نگارش (Syntax) فید آر اس اس (RSS Feed)


قبل از اینکه به قسمت کدنویسی PHP بپردازیم بد نیست با شیوه نگارش (Syntax) یک نمونه فید آر اس اس (RSS Feed) آشنا شویم چرا که برنامه PHP که خواهیم نوشت ابتدا محتوای فایل XML مقصد (فید آر اس اس) را به عنوان اطلاعات ورودی دریافت و سپس تجزیه تحلیل خواهد کرد، بر همین اساس یک فید آر اس اس معمولی از تگ های خاصی به زبان XML استفاده می کند که در نمونه زیر ساختار کلی آن درج شده است:
<?xml version="1.0" encoding="UTF-8"?> 
<rss version="2.0"> 
<channel>
<title>عنوان فید</title>
<link>https://webgoo.ir</link> 
<description>توضیح</description>
<language>fa</language>
<copyright>Copyright</copyright>
<item>
<title>عنوان مطلب</title>
<description>توضیح مطلب</description>
<link>لینک مطلب</link>
<guid>لینک مطلب</guid>
<pubDate>تاریخ مطلب به میلادی</pubDate>
<source url="https://webgoo.ir/rss.xml">وبگو</source> 
</item>
</channel>
</rss>
توضیح:
- هر فید آر اس اس از تگ های کلیدی تشکیل شده که هر کدام برای نگهداری محتوای خاصی کاربرد دارند، به طور مثال تگ title عنوان مطلب و تگ link آدرس URL مطلب را در خود جای می دهند، یا از description برای پیش نمایش مطلب و pubDate برای درج تاریخ ایجاد آن استفاده می کنیم.
- کد PHP که در ادامه بررسی خواهیم کرد با دریافت فایل XML فید به عنوان ورودی، تگ های موجود در آن را تجزیه کرده و نتایج به دست آمده را به نحو دلخواه در خروجی نمایش می دهد.

کد PHP فید خوان آر اس اس (RSS Feed Reader)


برای استخراج و نمایش محتوای فیدهای آر اس اس در سایت یا وبلاگمان (در صورت استفاده از هاست و دامنه شخصی) می توانیم از توابع زیر که به زبان PHP نوشته شده اند استفاده کنیم، بدین منظور کافی است آدرس فید را جایگزین مقادیر پیش فرض در کد نمائیم.
<?php
//تنظیمات
$url = 'https://webgoo.ir/rss.xml';//آدرس فید
$num = '5';//تعداد آیتم

//تبدیل اطلاعات فید به آرایه
function xmlToArray($text){
    $regexp = '/<(\w+)[^>]*>(.*?)<\/\\1>/s';
    preg_match_all($regexp, $text, $match);
    $loop = 0;
    
    foreach($match[1] as $key=>$val){
        if(preg_match($regexp, $match[2][$key])){
            @$array[$val][$loop] = xmlToArray($match[2][$key]);
        } else {
            @$array[$val] = $match[2][$key];
        }
        
        $loop++;
    }
    
    return $array;
}

//آماده سازی فید جهت ایجاد خروجی
function displayFeed($url, $num){
    $template = '<div class="rss-item"> &raquo; <a href="#link#" target="_blank">#title#</a></div>' . "\n";
    
    if($rss = @file_get_contents($url)){
        $rss = xmlToArray($rss);
        
        if(is_array($rss)){
            $code = "";
            $count = 0;
            
            foreach($rss['rss'][0]['channel'][0]['item'] as $val){
                $tpl = strtolower($template);
                
                foreach($val as $key => $val2){
                    $val2 = html_entity_decode(htmlentities(@strip_tags($val2)));
                    $tpl = str_replace("#" . strtolower($key) . "#", $val2, $tpl);
                }
                
                if($count < $num){
                    $code .= $tpl;
                }
                
                ++$count;
            }
        } else {
            return false;
        }
        
        echo $code;
        return true;
    } else {
        return false;
    }
}

//چاپ خروجی
echo '<div class="rss-block">' . "\n";
displayFeed("$url", $num);
echo '</div>';
?>
توضیح:
- آدرس فید مد نظر را در ابتدای کدها در متغیر url جایگزین می کنیم (حتما باید آدرس کامل را به صورت http://www یا //:http درج کنیم)، این آدرس به طور معمول به فرمت xml ختم می شود (اگر آدرس به فرمت xml ختم نشد خروجی آن باید به زبان XML باشد).
- دقت کنیم که محتوای فید از نظر استاندار کدنویسی معتبر باشد، برای این منظور می توانیم از سرویس اعتبارسنجی W3C در آدرس زیر استفاده کنیم:
https://validator.w3.org/feed/
- در تابع displayFeed ابتدا محتویات فید مقصد را با روش file_get_contents دریافت و جهت تجزیه و استخراج اطلاعات تگ ها تابع xmlToArray را با مقادیر دریافت شده به عنوان آرگیومنت فراخوانی می کنیم.
- تابع xmlToArray مقادیر دریافتی از فید را با استفاده از روش preg_match_all و preg_match تجزیه کرده و نتیجه را به صورت آریه قابل استفاده در تابع displayFeed برمی گرداند.
- در ادامه، تابع displayFeed به صورت داینامیک الگوی هشتگ های موجود در متغیر template را با آرایه دریافتی مقایسه کرده و مقادیر متناظر آنها را جایگزین می کند تا سرانجام نتیجه برنامه در هر دور حلقه foreach ایجاد و در نهایت به مرورگر ارسال شود.
- با توجه به استفاده از تابع strtolower در کدنویسی برنامه، اسکریپت به بزرگ یا کوچک بودن حروف حساس نیست.
- خروجی کد بالا در بلاکی با آی دی rss-block تولید می شود و هر آیتم، کلاسی با نام rss-item دارد، از این کلاس ها می توانیم برای ایجاد تنظیمات و استایل CSS دلخواه استفاده کنیم (نمونه پیش فرض در انتهای همین صفحه به صورت پیش نمایش آنلاین درج شده است).

تنظیمات و استایل CSS قابل اعمال بر روی فید خوان PHP


کد بالا در حالت پیش فرض تنها لینک مطالب را به صورت HTML خروجی می دهد، اما همانطور که پیش تر گفتیم در صورت نیاز می توانیم محتوای هر کدام از تگ های RSS را در خروجی داشته باشیم، به طور مثال متن مربوط به توضیحات مطالب را با افزودن تگ description به صورت #description# به متغیر template علاوه بر لینک ها در خروجی نمایش دهیم، در نمونه کد زیر این کار را برای مقادیر تاریخ و توضیحات آیتم های فید انجام داده ایم:
$template = '<div class="rss-item"> &raquo; <a href="#link#" target="_blank">#title#</a><br>#description#<br>#pubDate#</div>' . "\n";
برای اعمال استایل دلخواه نیز می توانیم در فایل CSS مقادیر مورد نظر خود را به کلاس های rss-block و rss-item نسبت دهیم، مثال:
<style>
.rss-block{
    border:1px #666 solid;
    padding:4px;
    line-height:18px;
}
.rss-block a{
    text-decoration:none;
    color:#06C;
}
.rss-block a:hover{
    color:#09F;
}
.rss-item{
    height:auto;
}
</style>

پیش نمایش اسکریپت فید خوان آر اس اس


نمونه کامل کد فید خوان آر اس اس با برنامه نویسی PHP و پیش نمایش آنلاین آن در لینک زیر قابل تست و بررسی است.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>وبگو | فید خوان آر اس اس با PHP</title>
<!-- Webgoo.ir -->
<style>
body {
    font-family: Tahoma, Geneva, sans-serif;
    font-size: 12px;
    direction: rtl;
}
.rss-block {
    border:1px #666 solid;
    padding:4px;
    line-height:18px;
}
.rss-block a {
    text-decoration:none;
    color:#06C;
}
.rss-block a:hover {
    color:#09F;
}
.rss-item {
    height:auto;
}
</style>
</head>
<body>
<?php
//تنظیمات
$url = 'https://webgoo.ir/rss.xml';//آدرس فید
$num = '5';//تعداد آیتم

//تبدیل اطلاعات فید به آرایه
function xmlToArray($text){
    $regexp = '/<(\w+)[^>]*>(.*?)<\/\\1>/s';
    preg_match_all($regexp, $text, $match);
    $loop = 0;
    
    foreach($match[1] as $key=>$val){
        if(preg_match($regexp, $match[2][$key])){
            @$array[$val][$loop] = xmlToArray($match[2][$key]);
        } else {
            @$array[$val] = $match[2][$key];
        }
        
        $loop++;
    }
    
    return $array;
}

//آماده سازی فید جهت ایجاد خروجی
function displayFeed($url, $num){
    $template = '<div class="rss-item"> &raquo; <a href="#link#" target="_blank">#title#</a><br>#description#<br>#pubDate#</div>' . "\n";
    
    if($rss = @file_get_contents($url)){
        $rss = xmlToArray($rss);
        
        if(is_array($rss)){
            $code = "";
            $count = 0;
            
            foreach($rss['rss'][0]['channel'][0]['item'] as $val){
                $tpl = strtolower($template);
                
                foreach($val as $key => $val2){
                    $val2 = html_entity_decode(htmlentities(@strip_tags($val2)));
                    $tpl = str_replace("#" . strtolower($key) . "#", $val2, $tpl);
                }
                
                if($count < $num){
                    $code .= $tpl;
                }
                
                ++$count;
            }
        } else {
            return false;
        }
        
        echo $code;
        return true;
    } else {
        return false;
    }
}

//چاپ خروجی
echo '<div class="rss-block">' . "\n";
displayFeed("$url", $num);
echo '</div>';
?>
</body>
</html>
پیش نمایش آنلاین
دسته بندی: آموزش کاربردی » PHP
related مطالب بیشتر:
ارسال پارامتر به URL و دریافت مقادیر با PHP
تبدیل تاریخ میلادی، شمسی با مبدل JDF در PHP
نمایش قسمتی از متن و پاراگراف با PHP
نمایش آمار بازدیدها با PHP بدون استفاده از دیتابیس
نحوه نمایش متن و تصاویر اتفاقی در PHP و MySQL
دیدگاه
more ۹۰ دیدگاه برای این مطلب ارسال شده است.
more دیدگاه جدید بر اساس تاریخ ارسال در انتهای دیدگاه های موجود نمایش داده می شود.
ehsan
۱۰:۳۶ ۱۳۹۲/۰۷/۲۶
ممنون از پاسخگویی سریع شما من این کار انجام دادم ولی کل بلاک متحرک می شه در صورتیکه اگه بخوام خبرها بصورت تک تک و پشت سر هم بصورت اسکرول عمودی متحرک باشن نمی شه
می توانید تگ را در قسمت خروجی در داخل بلاک div اضافه کنید، برای حالت عمودی نیز از خاصیت direction با مقادیر up برای marquee استفاده کنید.
ehsan
۱۲:۲۶ ۱۳۹۲/۰۷/۲۷
سلام
ممنون که با حوصله به سوالام جواب می دین شاید با این jquery منظورم برسونم می خواستم خبرهام به یکی از این مدل ها نشون داده شه.و می خواستم بدونم که اصلا می شه این دو یعنی کد شما و این jquery باهم استفاده کرد بازم ممنون از راهنماییهای خوبتون
http://www.ijquery.ir/effect/%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D8%A2%D8%AE%D8%B1%DB%8C%D9%86-%D8%A7%D8%AE%D8%A8%D8%A7%D8%B1-%D8%A8%D9%87-%D8%B5%D9%88%D8%B1%D8%AA-%D8%A7%D8%B3%DA%A9%D8%B1%D9%88%D9%84%DB%8C/
لطفا این آدرس ببینید
jQuery یک کتابخانه جاوا اسکریپتی سمت کاربر است (یعنی در مرورگر اجرا می شود) و با PHP که یک زبان سمت سرور است هیچ تداخلی ندارد (می توانید آنها را تلفیق کنید)! یعنی می توانید خروجی PHP را طوری ارسال کنید که متناسب با ورودی jQuery باشد، چه کد حاضر و چه سایر کدهای مشابه به شرط تنظیم دقیق خروجی برای استفاده در صفحات وب به صورت سفارشی مشکلی نخواهند داشت (فقط باید دقت کنید خروجی HTML نهایی بر اساس نمونه، به صورت صحیح در سورس دستورات jQuery چاپ شود).
ehsan
۱۳:۳۱ ۱۳۹۲/۰۷/۲۷
سلام
ممنون از سایت عالی که داری همین حالا با یکم دست کاری تو کدها و راهنمایی های خوب شما نتیجه ای که می خواستم گرفتم بازم از راهنمایی های شما متشکرم
پرویز
۰۹:۱۶ ۱۳۹۲/۰۸/۱۰
ببخشید برای تغییر زبان سایت از چه زبان برنامه نویسی استفاده می شود؟ با تشکر
هر زبانی که قابلیت ایجاد محتوای داینامیک را داشته باشد می تواند برای اینگونه موارد به کار بیاید، به طور مثال PHP، ASP و...
معمولا برنامه نویسان یک یا چند فایل زبان تعریف می کنند که در آن هر جمله به یک متغیر نسبت داده می شود، سپس در کدهای خود فایل را وارد کرده و از آن متغیر استفاده می کنند، به این صورت با تغییر مقادیر متغیر در فایل زبان، یا با تغییر مقادیر آدرس دایرکتوری فایل زبان (که به فرض می تواند دایرکتوری fa یا en و... در یک سشن آی دی ذخیره شود)، خروجی نیز متفاوت خواهد بود.
محسن
۱۸:۵۶ ۱۳۹۲/۰۸/۱۲
با سلام و تشکر از سایت وزینتون یک سوال دارم:
چطور میشه تو این حلقه های foreach به جز خوندن 5 عدد ، کاری کرد که هر تیتر و لینکش رو تکی تکی چاپ کنه
یعنی دستور echo رو کجای این foreach و با چه متغیری بذارم تا بتونم یکی یکی دسترسی داشته باشم (تعداد مثلا 5 خبر ولی تکی تکی چاپ کنه)
هرچند منظورتان از خروجی تک تک مشخص نیست، اما به روش های مختلف می توانید رفتار کد را تغییر دهید، به طور مثال دستورات echo قسمت خروجی را حذف و بلاک اصلی را به قسمت template اضافه کنید:
$template = '<div class="rss-block"><div class="rss-item"> &raquo; <a href="#link#" target="_blank">#title#</a></div></div>'
متغیر code نیز در ایجاد خروجی نقش اصلی دارد که می توانید مطابق نیازتان آن را ویرایش کنید، در حالت پیشرفته تر می توان خروجی را به صورت آرایه دریافت و از کلیدها و مقادیر استفاده کرد.
۱۵:۱۹ ۱۳۹۲/۰۸/۲۸
سلام و خسته نباشید
برای این فید
http://razagh.com/ask/?qa=feed/qa.rss 
نمایش داده نمیشود
لطفا راهنمایی بفرمایید
فید بررسی شد، مشکلی در نمایش آن وجود نداشت، لطفا جزئیات بیشتری از خطای دریافتی درج کنید.
۰۱:۱۹ ۱۳۹۲/۰۹/۱۰
با سلام
و ممنون از سایت کاربری تون
چطور میتونیم تعداد کاراکترهایی که در تیتر فید ها نمایش داده میشه رو محدود کنیم؟
( یعنی اگر تیتر یک فید خیلی بزرگ بود، بیشتر از مقداری که مشخص می کنیم رو نشون نده و سه نقطه قرار بده)
آموزشی جداگانه در این خصوص در سایت وجود دارد، عبارت "پاراگراف" را در قسمت جستجو وارد کنید، آموزشی تحت عنوان "نمایش قسمتی از متن و پاراگراف با PHP" را با این مطلب ترکیب کنید!
ehsan
۱۸:۱۳ ۱۳۹۲/۰۹/۱۱
سلام و خسته نباشید
شاید سوالم بی ربط باشه اما با توجه به سرعت پاسخگویی شما ترجیع دادم مطرح کنم من به هر سایتی مراجعه کردم با زدن آیکن نارنجی رنگ من و به آدرس صفحه با فرمت xml برد اما سایت نارنجی
http://narenji.ir
اینطور نیست می شه آدرس rss ش بگین ممنون اگه فکر می کنین جنبه تبلیغاتی داره جواب ندین بازم ممنون
آدرس فید این سایت:
http://narenji.ir/feed
ehsan
۱۹:۳۰ ۱۳۹۲/۰۹/۱۱
سلام مجدد
ممنون ممنون ممنون
از پاسخگویی سریع شما
حسین
۱۹:۱۳ ۱۳۹۲/۰۹/۱۸
سلام. سوالی خدمتتون داشتم. من میخوام مقادیری از یک فایل xml رو به اینصورت دریافت کنم.
میخوام تمام اطلاعات واقع در تمام تگ های item رو به صورت یک آرایه به دست بیارم.
یعنی اگه کد xml به این صورت باشه:
<item>
<title>title 1</title>
<description>description 1</description>
<pubDate>Mon, 09 Dec 2013 16:40:05 GMT</pubDate>
</item>
<item>
<title>title 2</title>
<description>description 2</description>
<pubDate>Mon, 09 Dec 2013 16:40:05 GMT</pubDate>
</item>
مثلا اینطوری بدست بیاد. اگه item شماره یک رو درخواست کردم title, description و... اون item رو بدست بیارم.
امیدوارم مفهومش واضح باشه. از وبتون خیلی خیلی ممنونم
می توانید از تابع simplexml_load_string استفاده کنید، مثال:
<?php
$xml_file = file_get_contents('http://webgoo.ir/rss.xml');
$rss_parse = simplexml_load_string($xml_file);
//print_r($rss_parse);
echo $rss_parse->channel->title.'<br>';
echo $rss_parse->channel->item[0]->title;
?>
نکته: فایل XML مورد نظر باید از نظر کدنویسی استاندارد یا به اصطلاح well-formed باشد.
۲۱:۳۰ ۱۳۹۲/۰۹/۱۹
سلام، خیلی اسکریپت جالب و پر کاربردیه. کلی دنبال گشتم تا اینجا پیداش کردم. ممنون. خیلی کمکم کرد.
محسن
۱۴:۱۵ ۱۳۹۲/۱۰/۳۰
لطفاً بگویید چطور می توانیم از RSS به عنوان یک اخبار استفاده کنیم که خبرهای تازه جهان را برایمان شرح دهد.
با تشکر.
در هر سایتی معمولا یک آیکن یا لینک برای دریافت اطلاعات آن به صورت RSS وجود دارد، با Subscribe کردن یا همان افزودن فید مورد نظر به فید خوان مرورگر (یا هر برنامه مرتبط دیگری)، می توانید آخرین اطلاعات آن سایت را به صورت سرتیتر وار در آن مرورگر یا برنامه داشته باشید.
davood
۲۳:۵۴ ۱۳۹۲/۱۱/۱۳
سلام ممنون از آموزش خوبتون خیلی استفاده کردم
فقط یه سوال وقتی روی لینک خبرها کلیک می کنیم به سایت مربوطه میرود، چه طوری می تونیم خبر ها رو تو سایت خودمون نمایش بدیم، مثل سایت varzesh3.com و seratnews.ir اینا از rss استفاده میکنن و خبر ها رو تو سایت خودشون نمایش میدن.
اگر امکان دارد کمک کنید
ممنون
می توانید لینک ها را به صورت غیر مستقیم باز کنید، به فرض به عنوان پارامتر، از طریق متد GET به یک فایل PHP بفرستید و در آن فایل، آن را با توابعی مانند file_get_contents فراخوانی یا به عنوان آدرس iframe در قسمت src جایگزین کنید.
reza
۱۸:۴۲ ۱۳۹۲/۱۱/۱۵
با سلام و خسته نباشید
تو بعضی از description ها تصویر وجود داره ، چگونه میشه تصویر رو از میان متن ها استخراج کرد؟
به نظر می توانید از روش زیر استفاده کنید:
preg_match_all('/<img[^>]+>/i', $html, $result); 
نتیجه به صورت یک آرایه خروجی داده می شود (متغیر فرضی html همان مقدار ورودی و result آرایه خروجی است).
نکته 1: سورس مقادیر ورودی صرفا باید با تابع html_entity_decode تبدیل به تگ شده تا قابل تجزیه با دستور بالا باشد (htmlentities و strip_tags نباید استفاده شوند، در اینجا مقادیر ورودی همان متغیر val2 است).
نکته 2: روش بالا تست نشده!.
reza
۰۹:۴۱ ۱۳۹۲/۱۱/۱۶
خیلی خیلی ممنون کارم تا جایی راه افتاد
more لطفا پیش از ارسال دیدگاه نکات زیر را مد نظر داشته باشید:
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.



 refresh
10 × 10
4 × 7
20 × 20
=
آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
سیدعباسی
با تشکر از شما استاد خیلی خوب بود من میخوام فقط آخرین لینک رو بصورت خروجی داشته باشم که شامل post باشه یعنی فقط این...
۱۴۰۳/۰۷/۲۸

سیدعباسی
برای کدی که فرستادم من از این الگو استفاده می کنم میخواهم از لینکهایی شروع کنه که شامل عدد باشن و آدرس سایت به...
۱۴۰۳/۰۷/۲۸

سیدعباسی
با سلام و خسته نباشید من میخوام از سایت مپ زیر لینک اول که شامل post است رو استخراج کنم یعنی خروجی من این نباشه...
۱۴۰۳/۰۷/۲۸

سیدعباسی
با سلام من میخوام از متن زیر لینکش رو دربیارم و در آخر مقدار 3088 رو بصورت خروجی نهایی داشته باشم با...
۱۴۰۳/۰۷/۰۷

مجتبی
سلام وقت بخیر میخوام یک روز به تاریخ دریافتی اضافه شه ممنون میشم راهنمایی کنید
۱۴۰۳/۰۶/۲۰

پرتو
سلام خوبید؟ خسته نباشیذ ببخشید مزاحم شدم می خواستم بگم من به شما ایمیل زدم ولی هنوز شما جواب ندادین می تونم بپرسم چرا سوال...
۱۴۰۳/۰۶/۱۵
  در انتظار بررسی: ۰
 پاسخگویی به سوالات ممکن است تا ۲۴ ساعت زمان ببرد.