راکت

تاریخ تعطیلات رسمی ایران

13 پاسخ

سلام دوستان؛ برای به دست اوردن تاریخ تعطیلات ایران، وب سرویس یا فایل جیسون موجود هست؟

البته وب سرویس پولی هست، ولی میخوام بدونم رایگان هست فعلا کارمو راه بندازه؟

ممنون

ثبت پرسش جدید

پاسخ‌ها

13
حسام موسوی
حسام موسوی
@hesammousavi

تخصص: طراح و برنامه نویس

این api بهتون کمکی نمیکنه ؟
https://farsicalendar.com

امین شیخی
امین شیخی
@isheykhi

سلام..
من برای یکی از پروژه ها از https://farsicalendar.com استفاده کردم و پاسخگوی نیازم بود.
البته چون دیگه به سرویس دهنده های داخلی اعتمادی ندارم اطلاعات مورد نیازم را در جداول خودم ذخیره کردم.

شاید پاسخ شما همین‌جا باشد

coarad supp
coarad supp
@coaradsupp

تخصص: برنامه نویس لاراول

@hesammousavi
ممنون حسام جان، بررسیش میکنم

@isheykhi
ممنون امین جان؛ ینی این وب سرویس کل تاریخ های تعطیل رسمی یکسال رو برمیگردونه؟ چون من بررسیش کردم باید روزا رو جداجدا واسش فرستاد

coarad supp
coarad supp
@coaradsupp

تخصص: برنامه نویس لاراول

@hesammousavi
@isheykhi

به این شکل تونستم از سایت time.ir تعطیلات و مناسبت ها رو بگیرم، میذارم شاید کسی نیاز داشت، از این پکیج استفاده کردم

"symfony/dom-crawler": "^5.0",

// مناسبت های سال جاری
    public function vacations() {
//      Cache::forget( 'vacations' );
        $data = \Illuminate\Support\Facades\Cache::remember( 'vacations' , \Carbon\Carbon::now()->addMonth() , function () {
            $crawler   = new Crawler( file_get_contents( 'https://www.time.ir/fa/eventyear-%d8%aa%d9%82%d9%88%db%8c%d9%85-%d8%b3%d8%a7%d9%84%db%8c%d8%a7%d9%86%d9%87' ) );
            $year      = $crawler->filter( '#ctl00_cphTop_Sampa_Web_View_EventUI_EventYearCalendar10cphTop_3417_txtYear' )->attr( 'value' );
            $vacations = $crawler->filter( '.eventsCurrentMonthWrapper' )->each( function ( Crawler $node , $i ) use ( $year ) {
                $ul       = $node->filter( 'ul' );
                $days     = $ul->filter( 'li' )->each( function ( Crawler $node , $i ) {
                    return $node->filter( 'span' )->eq( 0 )->text();
                } );
                $holidays = $ul->filter( 'li' )->each( function ( Crawler $node , $i ) {
                    return $node->attr( 'class' ) == 'eventHoliday' ? true : false;
                } );
                $reasons  = $ul->filter( 'li' )->each( function ( Crawler $node , $i ) {
                    if ( $node->filter( 'span' )->eq( 1 )->text() ) {
                        return str_replace( $node->filter( 'span' )->eq( 1 )->text() , '' , str_replace( $node->filter( 'span' )->text() , '' , $node->text() ) );
                    } else {
                        return str_replace( $node->filter( 'span' )->text() , '' , $node->text() );
                    }
                } );
                $data     = [];
                foreach ( $days as $key => $day ) {
                    $date = $year . '/' . ( new Helper() )->day_date( $day );
                    if ( $index = array_search( $date , array_column( $data , 'date' ) ) ) {
                        $data[ $index ] = [
                            'date'    => $date ,
                            'holiday' => ( $data[ $index ][ 'holiday' ] || $holidays[ $key ] ) ,
                            'reason'  => $data[ $index ][ 'reason' ] . ' # ' . $reasons[ $key ]
                        ];
                    } else {
                        array_push( $data , [
                            'date'    => $date ,
                            'holiday' => $holidays[ $key ] ,
                            'reason'  => $reasons[ $key ]
                        ] );
                    }
                }

                return $data;
            } );

            return $vacations;
        } );

        return $data;
    }

    // تعطیلات سال جاری
    public function holidays() {
        return \Illuminate\Support\Facades\Cache::remember( 'holidays' , \Carbon\Carbon::now()->addMonth() , function () {
            return array_values( array_filter( array_map( function ( $item ) {
                return array_values( array_filter( $item , function ( $value ) {
                    return $value[ 'holiday' ];
                } ) );
            } , $this->vacations() ) ) );
        } );
    }

به این شکل

امیر ام
امیر ام
@amir.amini65

تابع Helper() وجود نداره داخل کدتون لاین ۲۴ @coaradsupp

محمدصادق عبداللهی
محمدصادق عبداللهی
@mimsadAlef

تخصص: junior full stack developer

سلام اگه اجازه بدید فایل دیتابیسش رو بدم بهتون
اینجا رو نگاه کنید
https://jdf.scr.ir/tarikh
فقط باید استخراجش کنید از سایت ژئوفیزیک هم می تونید بردارید اگه پیداش کنید

soheil barati
soheil barati
@soheilbarati98

تابع Helper رو مشخص نکردید!
خط 24 ام...
@coaradsupp

محمد قربانی
محمد قربانی
@mohammadghorbani1992

تخصص: برنامه نویس لاراول

function day_date($string)
{
    $string = strtr($string, ['۰' => '0', '۱' => '1', '۲' => '2', '۳' => '3', '۴' => '4', '۵' => '5', '۶' => '6', '۷' => '7', '۸' => '8', '۹' => '9']);
    $day    = preg_replace('/[^0-9]/', '', $string);
    $month  = preg_replace('/[0-9]+/', '', $string);
    $month  = strtr($month, [' فروردین' => '1', ' اردیبهشت' => '2', ' خرداد' => '3', ' تیر' => '4', ' مرداد' => '5', ' شهریور' => '6', ' مهر' => '7', ' آبان' => '8', ' آذر' => '9', ' دی' => '10', ' بهمن' => '11', ' اسفند' => '12']);
    return str_pad($month, 2, "0", STR_PAD_LEFT) . '/' . str_pad($day, 2, "0", STR_PAD_LEFT);
}
$string = strtr($string, ['۰' => '0', '۱' => '1', '۲' => '2', '۳' => '3', '۴' => '4', '۵' => '5', '۶' => '6', '۷' => '7', '۸' => '8', '۹' => '9']);

توی این ارایه کلیدها باید اعداد فارسی باشه

@soheilbarati98
@amir.amini65

ببخشید دیر جواب دادم

محمد پورممی
محمد پورممی
@m.pourmami

تخصص: برنامه نویس وب

@coaradsupp @mohammadghorbani1992
درود بر شما، قطعه کد شمارو من استفاده کردم و کار کرد دستتون درد نکنه، فقط برای استخراجِ تعطیل ها شاید اون موقع که شما نوشتین مشکلی نداشته ولی الان من متوجه شدم که درست کار نمیکنه اونم بخاطر اینه که به آخرِ کلاسِ eventHoliday یه اسپیس اضافه شده توی سایتِ time.ir و اونطوری نمیتونست تعطیلات رسمی رو تشخیص بده، من قطعه کد فیکس شده رو اینجا میزارم دوستان استفاده کنند.

// مناسبت های سال جاری
public function vacations() {
//        \Illuminate\Support\Facades\Cache::forget( 'vacations' );
    $data = \Illuminate\Support\Facades\Cache::remember( 'vacations' , \Carbon\Carbon::now()->addMonth() , function () {
        $crawler   = new Crawler( file_get_contents( 'https://www.time.ir/fa/eventyear-%d8%aa%d9%82%d9%88%db%8c%d9%85-%d8%b3%d8%a7%d9%84%db%8c%d8%a7%d9%86%d9%87' ) );
        $year      = $crawler->filter( '#ctl00_cphTop_Sampa_Web_View_EventUI_EventYearCalendar10cphTop_3417_txtYear' )->attr( 'value' );
        $vacations = $crawler->filter( '.eventsCurrentMonthWrapper' )->each( function ( Crawler $node , $i ) use ( $year ) {
            $ul       = $node->filter( 'ul' );
            $days     = $ul->filter( 'li' )->each( function ( Crawler $node , $i ) {
                return $node->filter( 'span' )->eq( 0 )->text();
            } );
            $holidays = $ul->filter( 'li' )->each( function ( Crawler $node , $i ) {
                return $node->attr( 'class' ) == 'eventHoliday ';
            } );
            $reasons  = $ul->filter( 'li' )->each( function ( Crawler $node , $i ) {
                if ( $node->filter( 'span' )->eq( 1 )->text() ) {
                    return str_replace( $node->filter( 'span' )->eq( 1 )->text() , '' , str_replace( $node->filter( 'span' )->text() , '' , $node->text() ) );
                } else {
                    return str_replace( $node->filter( 'span' )->text() , '' , $node->text() );
                }
            } );
            $data = [];
            foreach ( $days as $key => $day ) {
                $date = $year . '/' . $this->day_date( $day );
                if ( $index = array_search( $date , array_column( $data , 'date' ) ) ) {
                    $data[ $index ] = [
                        'date'    => $date ,
                        'holiday' => ( $data[ $index ][ 'holiday' ] || $holidays[ $key ] ) ,
                        'reason'  => $data[ $index ][ 'reason' ] . ' # ' . $reasons[ $key ]
                    ];
                } else {
                    array_push( $data , [
                        'date'    => $date ,
                        'holiday' => $holidays[ $key ] ,
                        'reason'  => $reasons[ $key ]
                    ] );
                }
            }

            return $data;
        } );

        return $vacations;
    } );

    return $data;
}

function day_date($string)
{
    $string = strtr($string, ['۰' => '0', '۱' => '1', '۲' => '2', '۳' => '3', '۴' => '4', '۵' => '5', '۶' => '6', '۷' => '7', '۸' => '8', '۹' => '9']);
    $day    = preg_replace('/[^0-9]/', '', $string);
    $month  = preg_replace('/[0-9]+/', '', $string);
    $month  = strtr($month, [' فروردین' => '1', ' اردیبهشت' => '2', ' خرداد' => '3', ' تیر' => '4', ' مرداد' => '5', ' شهریور' => '6', ' مهر' => '7', ' آبان' => '8', ' آذر' => '9', ' دی' => '10', ' بهمن' => '11', ' اسفند' => '12']);
    return str_pad($month, 2, "0", STR_PAD_LEFT) . '/' . str_pad($day, 2, "0", STR_PAD_LEFT);
}

// تعطیلات سال جاری
public function holidays() {
    return \Illuminate\Support\Facades\Cache::remember( 'holidays' , \Carbon\Carbon::now()->addMonth() , function () {
        return array_values( array_filter( array_map( function ( $item ) {
            return array_values( array_filter( $item , function ( $value ) {
                return $value[ 'holiday' ];
            } ) );
        } , $this->vacations() ) ) );
    } );
}
نیما نوابی
نیما نوابی
@nimanv

تخصص: برنامه نویسی

به نظرم خودت بسازی بهترین کارو کردی وبسرویس ها یه روزی نابود میشن هوش مصنوعی داره جاشون پر میکنه خودت تو سرور خودت بساز همیشه راحت کن خودتو

hossein masoomi
hossein masoomi
@hosseinmasoomi506

بهترین راه حل
persian holidays

امیرحسین مقیسه
امیرحسین مقیسه
@amirmoghi3

@hosseinmasoomi506
واگعی بود :) 😘

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام