Net_CDDB
[ class tree: Net_CDDB ] [ index: Net_CDDB ] [ all elements ]

Source for file CDDB_Mdb2_Import.php

Documentation is available at CDDB_Mdb2_Import.php

  1. <?php
  2.  
  3. /**
  4.  * 
  5.  * 
  6.  * 
  7.  */
  8.  
  9. define('NET_CDDB_MDB2_DSN''mysql://root@127.0.0.1/freedb');
  10.  
  11. //define('NET_CDDB_FREEDB_PATH', '/Volumes/keith.palmer/freedb');
  12. define('NET_CDDB_FREEDB_PATH''/Users/keith/Sites/Net/docs/FreeDB');
  13.  
  14. require_once 'MDB2.php';
  15.  
  16. require_once 'Net/CDDB.php';
  17.  
  18. require_once 'Net/CDDB/Utilities.php';
  19.  
  20. require_once 'Net/CDDB/Disc.php';
  21.  
  22. $options = array(
  23.     'portability' => MDB2_PORTABILITY_ALL ^ MDB2_PORTABILITY_EMPTY_TO_NULL,
  24.     );
  25. $mdb2 =MDB2::factory(NET_CDDB_MDB2_DSN$options);
  26. $mdb2->setFetchMode(MDB2_FETCHMODE_ASSOC);
  27. $mdb2->connect();
  28. if (PEAR::isError($mdb2)) {
  29.     die($mdb2->getMessage());
  30. }
  31.  
  32. //$mdb2->exec('DELETE FROM artist');
  33. //$mdb2->exec('DELETE FROM disc');
  34. //$mdb2->exec('DELETE FROM track');
  35.  
  36. $dirs = array(
  37.     'blues'
  38.     'classical'
  39.     'country'
  40.     'data'
  41.     'folk'
  42.     'jazz'
  43.     'misc'
  44.     'newage'
  45.     'reggae'
  46.     'rock'
  47.     'soundtrack'
  48.     );
  49.  
  50. foreach ($dirs as $dir{
  51.     Net_CDDB_MDB2_Import($mdb2NET_CDDB_FREEDB_PATH . '/' $dir);
  52. }
  53.  
  54. /**
  55.  * 
  56.  */
  57. function Net_CDDB_MDB2_Import(&$mdb2$dir)
  58. {
  59.     $dh opendir($dir);
  60.     if ($dh{
  61.         
  62.         print('Analyzing directory: ' $dir "\n");
  63.         $category basename($dir);
  64.         
  65.         while (false !== ($file readdir($dh))) {
  66.             if (strlen($file== 8 and $file{0!= '.'{
  67.                 
  68.                 $disc = new Net_CDDB_Disc(Net_CDDB_Utilities::parseRecord(file_get_contents($dir '/' $file)));
  69.                 
  70.                 // First, check to see if the artist is already in the database
  71.                 $artist_id Net_CDDB_MDB2_Import_artist($disc->getArtist());
  72.                 
  73.                 // Check to see if the genre is already in the database
  74.                 $genre_id Net_CDDB_MDB2_Import_genre($disc->getGenre());
  75.                 
  76.                 $disc_id Net_CDDB_MDB2_Import_disc($disc->getDiscId()$category$disc->getArtist()$disc->getTitle()$disc->getDiscYear()$disc->getGenre()$disc->getDiscLength()$disc->getRevision()$disc->getProcessedBy()$disc->getSubmittedVia()$disc->getDiscExtraData()$disc->getDiscPlayorder());
  77.                 
  78.                 for ($i = 0; $i $disc->numTracks()$i++)
  79.                 {
  80.                     Net_CDDB_MDB2_Import_track($disc_id$i + 1$disc->getTrackArtist($i)$disc->getTrackTitle($i)$disc->getTrackOffset($i)$disc->getTrackExtraData($i));
  81.                 }
  82.             }
  83.         }
  84.     }
  85.     else
  86.     {
  87.         print('Could not open directory: ' $dir "\n");
  88.     }
  89. }
  90.  
  91. {
  92.     global $mdb2;
  93.     
  94.     if (strlen($name> 255)
  95.     {
  96.         $name substr($name0255);
  97.     }
  98.     
  99.     $res $mdb2->query('SELECT id FROM artist WHERE name = ' $mdb2->quote($name));
  100.     if ($res->numRows()) {
  101.         $id $res->fetchone(0);
  102.     else {
  103.         $id $mdb2->nextID('artist__id');
  104.         $res $mdb2->exec('INSERT INTO artist ( id, name, create_datetime, mod_datetime ) VALUES ( ' $id ', ' $mdb2->quote($name', NOW(), NOW() ) ');
  105.         
  106.         if (PEAR::isError($res)) {
  107.             print_r($res);
  108.             die($res->getMessage());
  109.         }
  110.     }
  111.     
  112.     return $id;
  113. }
  114.  
  115. {
  116.     global $mdb2;
  117.     
  118.     if (strlen($name> 64)
  119.     {
  120.         $name substr($name064);
  121.     }
  122.     
  123.     $res $mdb2->query('SELECT id FROM genre WHERE name = ' $mdb2->quote($name'text'));
  124.     if ($res->numRows()) {
  125.         $id $res->fetchone();
  126.     else {
  127.         $id $mdb2->nextID('genre__id');
  128.         $res $mdb2->exec('INSERT INTO genre (id, name, create_datetime) VALUES ( ' $id ', ' $mdb2->quote($name'text'', NOW() )');
  129.         
  130.         if (PEAR::isError($res)) {
  131.             print_r($res);
  132.             die($res->getMessage());
  133.         }
  134.     }
  135.     
  136.     return $id;
  137. }
  138.  
  139. {
  140.     global $mdb2;
  141.     
  142.     $res $mdb2->query('SELECT id FROM category WHERE name = ' $mdb2->quote($name));
  143.     if ($res->numRows()) {
  144.         $id $res->fetchone(0);
  145.     else {
  146.         $id $mdb2->nextID('category__id');
  147.         $res $mdb2->exec('INSERT INTO category ( id, name, create_datetime ) VALUES ( ' $id ', ' $mdb2->quote($name', NOW() )');
  148.         
  149.         if (PEAR::isError($res)) {
  150.             print_r($res);
  151.             die($res->getMessage());
  152.         
  153.     }
  154.     
  155.     return $id;
  156. }
  157.  
  158. function Net_CDDB_MDB2_Import_disc($discid$category_name$artist_name$title$year$genre_name$length$revision$processed_by$submitted_via$extra$playorder)
  159. {
  160.     global $mdb2;
  161.     
  162.     $artist_id Net_CDDB_MDB2_Import_artist($artist_name);
  163.     $genre_id Net_CDDB_MDB2_Import_genre($genre_name);
  164.     $category_id Net_CDDB_MDB2_Import_category($category_name);
  165.     
  166.     $res $mdb2->query('SELECT id FROM disc WHERE discid = ' $mdb2->quote($discid' AND category_id = ' $category_id);
  167.     if ($res->numRows()) {
  168.         $id $res->fetchone(0);
  169.     else {
  170.         $id $mdb2->nextID('disc__id');
  171.         $res $mdb2->exec('INSERT INTO disc ( id, discid, category_id, artist_id, title, year, genre_id, length, revision, processed_by, submitted_via, extra_data, playorder ) VALUES ( ' $id ', ' $mdb2->quote($discid', ' $category_id ', ' $artist_id ', ' $mdb2->quote($title', ' $year ', ' $genre_id ', ' $length ', ' $revision ', ' $mdb2->quote($processed_by', ' $mdb2->quote($submitted_via', ' $mdb2->quote($extra', ' $mdb2->quote($playorder' ) ');
  172.         
  173.         if (PEAR::isError($res)) {
  174.             print_r($res);
  175.             die($res->getMessage());
  176.         }
  177.     }
  178.     
  179.     return $id;
  180. }
  181.  
  182. function Net_CDDB_MDB2_Import_track($disc_id$track_num$artist_name$title$offset$extra)
  183. {
  184.     global $mdb2;
  185.     
  186.     $artist_id Net_CDDB_MDB2_Import_artist($artist_name);
  187.     
  188.     $res $mdb2->query('SELECT disc_id FROM track WHERE disc_id = ' $disc_id ' AND num = ' $mdb2->quote($track_num));
  189.     
  190.     if (PEAR::isError($res)) {
  191.         print_r($res);
  192.         die($res->getMessage("\n");
  193.     }
  194.     
  195.     if ($res->numRows()) {
  196.         // Already inserted, don't bother
  197.         ;
  198.     else {
  199.         // Insert the track record
  200.         $res $mdb2->exec('INSERT INTO track ( disc_id, num, artist_id, title, toffset ) VALUES ( ' $disc_id ', ' $track_num ', ' $artist_id ', ' $mdb2->quote($title', ' $offset ' ) ');
  201.         
  202.         if (PEAR::isError($res)) {
  203.             print_r($res);
  204.             die($res->getMessage());
  205.         }
  206.     }
  207. }
  208.  
  209. ?>

Documentation generated on Mon, 11 Mar 2019 14:56:54 -0400 by phpDocumentor 1.4.4. PEAR Logo Copyright © PHP Group 2004.