سلام دوستان؛ برای به دست اوردن تاریخ تعطیلات ایران، وب سرویس یا فایل جیسون موجود هست؟
البته وب سرویس پولی هست، ولی میخوام بدونم رایگان هست فعلا کارمو راه بندازه؟
ممنون
سلام..
من برای یکی از پروژه ها از 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() ) ) );
} );
}
به این شکل
سلام اگه اجازه بدید فایل دیتابیسش رو بدم بهتون
اینجا رو نگاه کنید
https://jdf.scr.ir/tarikh
فقط باید استخراجش کنید از سایت ژئوفیزیک هم می تونید بردارید اگه پیداش کنید
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() ) ) );
} );
}
به نظرم خودت بسازی بهترین کارو کردی وبسرویس ها یه روزی نابود میشن هوش مصنوعی داره جاشون پر میکنه خودت تو سرور خودت بساز همیشه راحت کن خودتو
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟