سلام دوستان؛ برای به دست اوردن تاریخ تعطیلات ایران، وب سرویس یا فایل جیسون موجود هست؟
البته وب سرویس پولی هست، ولی میخوام بدونم رایگان هست فعلا کارمو راه بندازه؟
ممنون
این api بهتون کمکی نمیکنه ؟
https://farsicalendar.com
سلام..
من برای یکی از پروژه ها از https://farsicalendar.com استفاده کردم و پاسخگوی نیازم بود.
البته چون دیگه به سرویس دهنده های داخلی اعتمادی ندارم اطلاعات مورد نیازم را در جداول خودم ذخیره کردم.
شاید پاسخ شما همینجا باشد
@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() ) ) );
} );
}
به این شکل
تابع Helper() وجود نداره داخل کدتون لاین ۲۴ @coaradsupp
سلام اگه اجازه بدید فایل دیتابیسش رو بدم بهتون
اینجا رو نگاه کنید
https://jdf.scr.ir/tarikh
فقط باید استخراجش کنید از سایت ژئوفیزیک هم می تونید بردارید اگه پیداش کنید
تابع Helper رو مشخص نکردید!
خط 24 ام...
@coaradsupp
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']);
توی این ارایه کلیدها باید اعداد فارسی باشه
ببخشید دیر جواب دادم
@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() ) ) );
} );
}بهترین راه حل
persian holidays
@hosseinmasoomi506
واگعی بود :) 😘