Advertisement
polypeptide147

New one

May 4th, 2018
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 8.07 KB | None | 0 0
  1. <?php
  2.     $HostName = "hostname";
  3.     $HostUser = "user";
  4.     $HostPass = "pass";
  5.     $DatabaseName = "db";
  6.     $conn = new mysqli($HostName, $HostUser, $HostPass, $DatabaseName);
  7.    
  8.     if ($conn->connect_error) {
  9.         die("Connection failed: " . $conn->connect_error);
  10.     }
  11.  
  12.  
  13. $page = file_get_contents("test.txt");
  14.  
  15. $courses = [];
  16.  
  17. $doc                      = new DOMDocument();
  18. $doc->recover             = true;
  19. $doc->strictErrorChecking = false;
  20.    
  21. // Open DB then delete DB
  22.  
  23. // @ hides the warnings
  24. @$doc->loadHTML( $page );
  25.  
  26. $tr_list = $doc->getElementsByTagName( 'tr' );
  27.  
  28. if ( $tr_list->length > 0 ) {
  29.     foreach ( $tr_list as $tr ) {
  30.         $tr_id = $tr->getAttribute( 'id' );
  31.         if ( substr( $tr_id, 0, 4 ) == 'crn_' ) {
  32.             $course = [
  33.                 'id'            => $tr_id,
  34.                 'cs_id'         => '',
  35.                 'link'          => '',
  36.                 'restrictions'  => false,
  37.                 'prerequisites' => false,
  38.                 'online'        => false,
  39.                 'hybrid'        => false,
  40.                 'crn'           => '',
  41.                 'title'         => '',
  42.                 'text'          => '',
  43.                 'credits'       => '',
  44.                 'meetings'      => [],
  45.                 'part_of_term'  => '',
  46.                 'instructors'   => [],
  47.                 'capacity'      => 0,
  48.                 'seats_avail'   => 0,
  49.             ];
  50.             if ( $tr->childNodes->length > 0 ) {
  51.                 foreach ( $tr->childNodes as $c => $td ) {
  52.                     // Using switch, will need adjusted if the returned table ever modified....
  53.                     switch ( $c ) {
  54.                         case 0:
  55.                             // BEGIN: TD that will lists course/section & options
  56.                             $a_list = $td->getElementsByTagName( 'a' );
  57.                             if ( $a_list->length > 0 ) {
  58.                                 foreach ( $a_list as $a ) {
  59.                                     $course['cs_id'] = trim( $a->textContent );
  60.                                     $course['link']  = $a->getAttribute( 'href' );
  61.                                     break;
  62.                                 }
  63.                             }
  64.                             $div_list = $td->getElementsByTagName( 'div' );
  65.                             if ( $div_list->length > 0 ) {
  66.                                 foreach ( $div_list as $div ) {
  67.                                     $img_list = $div->getElementsByTagName( 'img' );
  68.                                     if ( $img_list->length > 0 ) {
  69.                                         foreach ( $img_list as $img ) {
  70.                                             $title = trim( $img->getAttribute( 'title' ) );
  71.                                             if ( $title == 'restrictions' ) {
  72.                                                 $course['restrictions'] = true;
  73.                                             } elseif ( $title == 'prerequisite required' ) {
  74.                                                 $course['prerequisites'] = true;
  75.                                             }
  76.                                         }
  77.                                     }
  78.                                 }
  79.                             }
  80.                             break; // END: TD that will list options
  81.                         case 1:
  82.                             // CRN Number
  83.                             $course['crn'] = trim( $td->textContent );
  84.                             break;
  85.                         case 2:
  86.                             // BEGIN: TD that will lists types (Online/Hybrid)
  87.                             $img_list = $td->getElementsByTagName( 'img' );
  88.                             if ( $img_list->length > 0 ) {
  89.                                 foreach ( $img_list as $img ) {
  90.                                     $title = strtolower( trim( $img->getAttribute( 'title' ) ) );
  91.                                     if ( $title == 'online course' ) {
  92.                                         $course['online'] = true;
  93.                                     } elseif ( $title == 'hybrid course' ) {
  94.                                         $course['hybrid'] = true;
  95.                                     }
  96.                                 }
  97.                             }
  98.                             break; // END: TD that will lists types (Online/Hybrid)
  99.                         case 3:
  100.                             // BEGIN: Course Title/Text
  101.                             $p_list = $td->getElementsByTagName( 'p' );
  102.                             if ( $p_list->length > 0 ) {
  103.                                 foreach ( $p_list as $p ) {
  104.                                     $class = trim( $p->getAttribute( 'class' ) );
  105.                                     if ( $class == 'course_title' ) {
  106.                                         $course['title'] = trim( $p->textContent );
  107.                                     } elseif ( $class == 'course_text' ) {
  108.                                         $course['text'] = trim( $p->textContent );
  109.                                     }
  110.                                 }
  111.                             }
  112.                             break; // END: Course Title/Text
  113.                         case 4:
  114.                             // Number of credits
  115.                             $course['credits'] = trim( $td->textContent );
  116.                             break;
  117.                         case 5:
  118.                             // BEGIN: Course Meeting
  119.                             $meeting_list = $td->getElementsByTagName( 'span' );
  120.                             if ( $meeting_list->length > 0 ) {
  121.                                 foreach ( $meeting_list as $meeting ) {
  122.                                     $meeting_class = trim( $meeting->getAttribute( 'class' ) );
  123.                                     if ( $meeting_class == 'meeting' ) {
  124.                                         $meeting_set = [
  125.                                             'meeting_day'  => '',
  126.                                             'meeting_time' => '',
  127.                                             'start_date'   => '',
  128.                                             'end_date'     => '',
  129.                                             'location'     => ''
  130.                                         ];
  131.  
  132.                                         $abbr_list = $meeting->getElementsByTagName( 'abbr' );
  133.                                         if ( $abbr_list->length > 0 ) {
  134.                                             // BEGIN: Meeting Days of Week & Location
  135.                                             foreach ( $abbr_list as $abbr ) {
  136.                                                 $class = trim( $abbr->getAttribute( 'class' ) );
  137.                                                 switch ( $class ) {
  138.                                                     case "meeting-day":
  139.                                                         $meeting_set['meeting_day'] = trim( $abbr->textContent );
  140.                                                         break;
  141.                                                     case "location":
  142.                                                         $meeting_set['location'] = trim( $abbr->textContent );
  143.                                                         break;
  144.                                                 }
  145.                                             } // END: Meeting Days of Week & Location
  146.                                         }
  147.  
  148.                                         $span_list = $meeting->getElementsByTagName( 'span' );
  149.                                         if ( $span_list->length > 0 ) {
  150.                                             // BEGIN: Meeting Times & Dates
  151.                                             foreach ( $span_list as $span ) {
  152.                                                 $class = trim( $span->getAttribute( 'class' ) );
  153.                                                 switch ( $class ) {
  154.                                                     case "meeting-time":
  155.                                                         $meeting_set['meeting_time'] = trim( $span->textContent );
  156.                                                         break;
  157.                                                     case "meeting-start-date":
  158.                                                         $meeting_set['start_date'] = trim( $span->textContent );
  159.                                                         break;
  160.                                                     case "meeting-end-date":
  161.                                                         $meeting_set['end_date'] = trim( $span->textContent, "- \t\n\r\0\x0B" );
  162.                                                         break;
  163.                                                 }
  164.                                             } // END: Meeting Times & Dates
  165.                                         }
  166.  
  167.                                         $course['meetings'][] = $meeting_set;
  168.                                     }
  169.                                 }
  170.                             }
  171.                             break; // END: Course Meetings
  172.                         case 6:
  173.                             // Part of Term
  174.                             $course['part_of_term'] = trim( $td->textContent );
  175.                             break;
  176.                         case 7:
  177.                             // BEGIN: Get Instructor Name / Link (or just note if none)
  178.                             $a_list   = $td->getElementsByTagName( 'a' );
  179.                             $inst_set = [];
  180.                             if ( $a_list->length > 0 ) {
  181.                                 foreach ( $a_list as $a ) {
  182.                                     $course['instructors'][] =
  183.                                         [
  184.                                             'name'    => trim( $a->textContent ),
  185.                                             'primary' => ( $a->getAttribute( 'data-primary-instructor' ) == 'Y' ),
  186.                                             'email'   => substr( $a->getAttribute( 'href' ), 7 )
  187.                                         ];
  188.                                 }
  189.                             }
  190.  
  191.                             if ( count( $course['instructors'] ) == 0 ) {
  192.                                 // No instructor, grab note
  193.                                 $span_list = $td->getElementsByTagName( 'span' );
  194.                                 if ( $span_list->length > 0 ) {
  195.                                     foreach ( $span_list as $span ) {
  196.                                         $class = trim( $span->getAttribute( 'class' ) );
  197.                                         if ( $class == 'instructor' ) {
  198.                                             $course['instructors'][] =
  199.                                                 [
  200.                                                     'name'  => trim( $span->textContent ),
  201.                                                     'email' => false
  202.                                                 ];
  203.                                             break;
  204.                                         }
  205.                                     }
  206.                                 }
  207.                             }
  208.                             break; // END: Get Instructor Name / Link (or just note if none)
  209.  
  210.                         case 8:
  211.                             // Capacity
  212.                             $course['capacity'] = trim( $td->textContent );
  213.                             break;
  214.  
  215.                         case 9:
  216.                             // Seats Available
  217.                             $course['seats_avail'] = trim( $td->textContent );
  218.                             break;
  219.  
  220.                     }
  221.                 }
  222.             }
  223.             $courses[] = $course;
  224.            
  225.             foreach ($courses as $key=>$course)
  226.             {
  227.                 if (is_array($course)) {
  228.                     foreach($course as $key2=>$course2) {
  229.                         print($course2);
  230.                         print ("\n");
  231.                     }
  232.                 } else {
  233.                     // handle everything else here
  234.                 }
  235.             }
  236.            
  237.             /*
  238.             foreach ($courses as $course)
  239.             {
  240.                 // INSERT: run query to insert
  241.             }
  242.            
  243.             $courses[] = $course;
  244.            
  245.             If (is_array($course)) {
  246.                 Foreach($course as $key2=>$course2) {
  247.                     print($course2);
  248.                     print ("\n");
  249.                 }
  250.             } else {
  251.                 // handle everything else here
  252.             }
  253.              */
  254.  
  255.             //$courses[] = $course;
  256.         }
  257.     }
  258. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement