jagreygoose icon

Google Books Library XML Output to CSV & SQL

jagreygoose | PRO | 06/17/14 11:07:58 PM UTC | 0 ⭐ | 393 👁️ | Never ⏰ | []
PowerShell |

5.94 KB

|

None

|

0 👍

/

0 👎

# Output Google Books Library XML Files to CSV & SQL
# For creating labels for new library books & SQL INSERT statements
set-executionpolicy unrestricted
 
$googleXML =  Read-Host "Enter the path to the Google books xml file ( D:\AR_Middle_years.xml )"#"D:\AR_Middle_years.xml" "Enter the path to the Google books xml file ( D:\AR_Middle_years.xml )"
$configDir = Read-Host "Enter the path to the configuration file ( D:\config.xml )"
$outputDir =  "D:\" #"Enter root directory for output ( D:\ )"
 
#Load XML file exported from Google Books
[xml]$books = Get-Content $googleXML -ErrorAction Stop
#Load configuration file
[xml]$config = Get-Content $configDir -ErrorAction Stop
 
 
 #Get Unique ID set as integer
 [int]$UID = $config.Configuration.UID
 #Set input file name without extension or path
 $fileNameWE = [io.path]::GetFileNameWithoutExtension($googleXML)
 
 #Create a Powershell Object from imported XML
 #Add the auto incrementing UID value from the configuration file
 $bookObj = $books.library.books.book | ForEach-Object {
      New-Object PSCustomObject -Property @{
        "ISBN" = $_.identifier.value
        "Title" = $_.title
        "Author" = $_.contributor
        "Barcode" = 'e' + $UID++
      }
 }
     
 
#
#concatenate SQL INSERT Statement
#
 
     $biblioQuery = 'INSERT IGNORE INTO biblio ' #SQL Command, table name, ' ' blank space at the end.
     $biblio_copyQuery = 'INSERT IGNORE INTO biblio_copy '
     $biblio_fieldQuery = 'INSERT IGNORE INTO biblio_field '
     $sqlArray = @() #Initialize an empty array
 
#
#Set database column names
#
 
#biblio table
$biblioID = 'bibid';
$b_COL2 = 'create_dt'; $b_COL3 = 'last_change_dt'; $b_COL4 = 'last_change_userid'; $b_COL5 = 'material_cd'; $b_COL6 = 'collection_cd'; $b_COL7 = 'call_nmbr1'; $b_COL10 = 'title'; $b_COL13 = 'author'; $b_COL19 = 'opac_flg';    
$b_VAL2 = 'now()';     $b_VAL3 = 'now()';          $b_VAL4 = '1';                  $b_VAL5 = '2';           $b_VAL6 = '1';             $b_VAL7 = '';           $b_VAL10 = '';      $b_VAL13 = '';       $b_VAL19 = 'Y';
 
 
#biblio_copy table
$b_c_COL2 = 'copyid'; $b_c_COL3 = 'create_dt'; $b_c_COL4 = 'copy_desc'; $b_c_COL5 = 'barcode_nmbr'; $b_c_COL6 = 'status_cd'; $b_c_COL7 = 'status_begin_dt'; $b_c_COL10 = 'renewal_count';
$b_c_VAL2 = '';      $b_c_VAL3 = 'now()';     $b_c_VAL4 = '';          $b_c_VAL5 = '';             $b_c_VAL6 = 'in';        $b_c_VAL7 = 'now()';           $b_c_VAL10 = '0';
 
#biblio_field table
$b_f_COL2 = 'fieldid'; $b_f_COL3 = 'tag'; $b_f_COL4 = 'ind1_cd'; $b_f_COL5 = 'ind2_cd'; $b_f_COL6 = 'subfield_cd'; $b_f_COL7 = 'field_data'
$b_f_VAL2 = '1';       $b_f_VAL3 = '20';  $b_f_VAL4 = 'N';       $b_f_VAL5 = 'N';       $b_f_VAL6 = 'a';            
     
     
 #Populate $sqlArray
 $bookObj | ForEach-Object{
     $VAL1 =  $_.Barcode
     $VAL3 =  $_.Title.replace("'","") 
     $VAL4 =  $_.Author.replace("'","")
     $VAL2 =  $_.ISBN
     $sqlArray += Write-Output "/* $VAL3 by $VAL4 (Barcode: $VAL1, ISBN: $VAL2) */"
     $sqlArray += Write-Output $biblioQuery"("$b_COL2","$b_COL3","$b_COL4","$b_COL5","$b_COL6","$b_COL7","$b_COL10","$b_COL13","$b_COL19") VALUES ("$b_VAL2","$b_VAL3",'"$b_VAL4"','"$b_VAL5"','"$b_VAL6"','"$VAL2"','"$VAL3"','"$VAL4"','"$b_VAL19"');"
     $sqlArray += Write-Output $biblio_copyQuery"("$biblioID","$b_c_COL2","$b_c_COL3","$b_c_COL5","$b_c_COL6","$b_c_COL7","$b_c_COL10") SELECT biblio.bibid,'"$b_c_VAL2"',biblio.create_dt,'"$VAL1"','"$b_c_VAL6"',biblio.create_dt,'"$b_c_VAL10"' FROM biblio WHERE biblio.title = '"$VAL3"' AND biblio.author = '"$VAL4"';"
     $sqlArray += Write-Output $biblio_fieldQuery"("$biblioID","$b_f_COL2","$b_f_COL3","$b_f_COL4","$b_f_COL5","$b_f_COL6","$b_f_COL7") SELECT biblio.bibid,'"$b_f_VAL2"','"$b_f_VAL3"','"$b_f_VAL4"','"$b_f_VAL5"','"$b_f_VAL6"', biblio.call_nmbr1 FROM biblio WHERE biblio.title = '"$VAL3"' AND biblio.author = '"$VAL4"';"
     $sqlArray += Write-Output ""
 }
 
 
 #
 #Create Output Files
 #
 
 
if (!(Test-Path -path $outputDir"LibraryLabels")) {
 
New-Item $outputDir"LibraryLabels\SQL" -type directory
New-Item $outputDir"LibraryLabels\CSV" -type directory
Write-Host "New Directories Created:"
Write-Host $outputDir"LibraryLabels\SQL"
Write-Host $outputDir"LibraryLabels\CSV"
 
}
 
 
 #Set the format to export the SQL Statments
 $sqlArray | out-file  -force -Encoding "UTF8" -filepath $outputDir"LibraryLabels\SQL\"$fileNameWE"_sqlOutput_"$((Get-Date).ToString("yyyy-MM-dd")).sql
 
#Use select to order columns and export to csv
 $bookObj | Select Title, Author, ISBN, Barcode | Export-Csv -NoTypeInformation -Path $outputDir"LibraryLabels\CSV\"$fileNameWE"_labelOutput_"$((Get-Date).ToString("yyyy-MM-dd")).csv
 
 
 #
 #Update Configuration File
 #
 
 $config.Configuration | ForEach-Object { $_.UID = $UID.ToString() } #convert from int to string
 $config.Save($configDir) #save xml
 
 
#
#Provide 15 seconds of feedback before script end
#
 
#If the path to the files the script creates exist show a success message, otherwise throw error
if (!(Test-Path -path $outputDir"LibraryLabels\SQL\"$fileNameWE"_sqlOutput_"$((Get-Date).ToString("yyyy-MM-dd")).sql)-and (Test-Path -path $outputDir"LibraryLabels\CSV\"$fileNameWE"_labelOutput_"$((Get-Date).ToString("yyyy-MM-dd")).csv)) {
 
Write-Host "Warning! Files could not be created."
 
}
ELSE {
 
Write-Host "Success! Files Created:"
Write-Host $outputDir"LibraryLabels\SQL\"$fileNameWE"_sqlOutput_"$((Get-Date).ToString("yyyy-MM-dd")).txt
Write-Host $outputDir"LibraryLabels\CSV\"$fileNameWE"_labelOutput_"$((Get-Date).ToString("yyyy-MM-dd")).csv
}
 
#Confirm that UID has been correctly incremented and is written to the configuration file
Write-Host UID in configuration file updated to: $config.Configuration.UID
 
#After messages are written to the console, sleep for 15 seconds then -END
Start-Sleep -s 15
 
#
#Example Configuration File
#
 
#<?xml version="1.0" encoding="utf-8"?>
#<Configuration>
#    <UID>8231</UID>
#</Configuration>

Comments