29. marts 2004 - 17:53Der er
17 kommentarer og 1 løsning
musik side
Jeg har en del mp3 album på computeren og kunne godt tænke mig at man kunne gå ind på en side feks. A.asp og se alle de kunstner der starter med A. Herfra skal man så kunne trykke på en kunstner og så se alle kunstnerens album hvor der også bliver vist et lille billede af albummet. Når man så har fundet et album og trykket på det, så skal man naturligvis kunne se alle musikfilerne samt downloade enkelt filer eller hele albummet.
"samt downloade enkelt filer eller hele albummet"? Det vil jeg mene er ulovligt, med mindre at du har fået tilladelse af Abba, Johnny Madsen, og alle de andre kunster, som du har mp3 filer af! :-)
jeg ville have løst dette ved at lægge alle filer ind i en database. det bliver nemmere at holde styr på samt at søge i.
jeg ville have løst det på følgende måde:
- du laver en "crawler" - et script der løber alle dine filer (i e:\musik) igennem. scriptet tolker første folder, under e:\musik, som artist, anden folder som album og derefter filnavnet. - for hver artist scriptet støder på, så tjekker det om denne artist allerede eksisterer i din database. hvis artisten ikke eksisterer, så lægger scriptet artisten i basen. - samme princip følges for album - samme princip følges for filnavn
herefter kan du lave en side der lister ud alle dine filer. du kan søge efter artister, album og filnavn ... *meget* mere simpelt end at skulle behandle filer på samme måde.
Du er bekymret for at du ikke kan få opdateret dine filnavn hvis du lægger dine filer ind i basen ? scriptet tager højde for dette. denne 'crawler' jeg ville have lavet matcher filer og opføringer i basen så det eneste du skal gøre, når du skifter navn på en fil, er at køre crawleren igen
for at bruge denne kode, skal du gøre et par ting.
1) Opret en access database (denne database skal ikke indeholde nogen tabeller) 2) Kopier koden ind i en .asp fil 3) Skriv navnet på databasen ind i 'strDSN' variabelen 4) Tjek at 'strStartPath' peger på dit musik katalog 5) Kør filen
scriptet antager at din folder struktur ikke er dybere end 2 niveauer (artist\album\fil).
scriptet kan selvfølgelig laves lidt mere intelligent, så din filstruktur ikke er låst fast af scriptet (eller vice versa) ... dette er mere bare for at vise hvad du kan gøre
--nute Jeg har retter scriptet, så min endelige side ser sådan ud: OPDATER.ASP ----------- <html>
<head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <title>Ny side 1</title> </head>
<body> <%@ language="VBScript" %>
<% Dim objConn : Set objConn = Server.CreateObject( "ADODB.Connection" ) Dim strDSN : strDSN = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath( "db1.mdb" ) objConn.Open strDSN
Dim arrPathFormat : arrPathFormat = SPLIT( "artist\album\file", "\" ) 'Dim strStartPath : strStartPath = "G:\musik" Dim strStartPath : strStartPath = "G:\-[ MUSIC ]-" Dim objFSO : Set objFSO = Server.CreateObject( "Scripting.FileSystemObject" ) Dim objFolder
Dim objSubFolder, objTempfolder, objFile, i, intTab Dim strSelectSQL, strInsertArtistSQL, strInsertAlbumSQL, strInsertFileSQL, strTempSQL, strTempID, arrTemp
Dim objRS
strSelectSQL = "SELECT [TABLE]ID FROM [TABLE] where Trim( LCase( [TABLE]Name ) ) = " strInsertArtistSQL = "INSERT INTO artist ( artistName ) VALUES( ""[ARTISTNAME]"" )" strInsertAlbumSQL = "INSERT INTO album ( albumName, artistID ) VALUES ( ""[ALBUMNAME]"", ""[ARTISTID]"" )" strInsertFileSQL = "INSERT INTO file ( fileName, albumID, fileType ) VALUES ( ""[FILENAME]"", ""[ALBUMID]"", ""[FILETYPE]"" )"
' Deleting tables for i = 0 To UBound( arrPathFormat ) on error resume next objConn.Execute( "DROP TABLE " & arrPathFormat( i ) ) Response.Write( "Tables dropped<br>" ) next ' Creating tables objConn.Execute( "CREATE TABLE artist (artistID counter not null primary key, artistName Text)" ) Response.Write( "Table <b>artist</b> created<br>" ) objConn.Execute( "CREATE TABLE album ( albumID counter not null primary key, albumName Text, artistID Number)" ) Response.Write( "Table <b>album</b> created<br>" ) objConn.Execute( "CREATE TABLE file ( fileID counter not null primary key, fileName Text, albumID Number, fileType Text)" ) Response.Write( "Table <b>file</b> created<br>" )
Call traverseFolders( strStartPath, 0 )
sub traverseFolders( strFolder, intTable )
Set objFolder = objFSO.GetFolder( strFolder ) for each objFile in objFolder.Files Call insertItem( UBound( arrPathFormat ), objFile ) next
for each objSubFolder in objFolder.SubFolders strTempID = getID( intTable, objSubFolder.Name ) if( strTempID = "-1" ) then Call insertItem( intTable, objSubFolder ) end if Call traverseFolders( objSubFolder, intTable + 1 ) next
if( strTempID <> "-1" ) then strTempSQL = Replace( strTempSQL, "[ALBUMID]", strTempID ) else strTempSQL = Replace( strTempSQL, "[ALBUMID]", -1 ) end if end select
if( InStr( strTempSQL, "ERROR" ) = 0 ) then Response.Write( "adding <b>" & arrPathFormat( intPathIndex ) & "</b>: " & objItem.Name & "<br>" ) objConn.Execute( strTempSQL ) else Response.Write( strTempSQL & "<br>" ) end if end sub objConn.Close Set objConn = nothing %> </body>
</html>
Der bliver godtnok opretter tabeller i db men der bliver ikke lagt nogle oplysninger ind. Den bruger 10 min. hvor den prøver at loade siden og jeg kan høre noget aktivitet på hdd. Men ellers sker der ikke noget. Ville det iøvrigt ikke være hurtigere at køre en crawler direkte fra db?? Jeg har kun 8-10 album lige nu mens vi tester, men jeg tænker at hvis jeg havde 500 ville det måske tage flere timer.
Det du kan gøre, for at debugge, er at tjekke for om den faktisk løber alle dine foldere og filer igennem. Dette kan du gøre ved at skifte denne linie:
men som jeg skrev tidligere: scriptet antager at du har en folder struktur der er *kun* to niveauer dyb. Dvs. at hvis du har en folderstruktur der er 3 niveauer dyb, så vil scriptet fejle.
--nute Nu har jeg vent og drejet de få linjer jeg kan rette i, men jeg kan stadigvæk ikke få det til at køre. Mine filer ligger sådan: Indhold af G:\Musik\Love_Shop
30-03-2004 05:44 <DIR> . 30-03-2004 05:44 <DIR> .. 30-03-2004 05:45 <DIR> Sendt fra himlen 0 fil(er) 0 byte
Indhold af G:\Musik\Love_Shop\Sendt fra himlen
30-03-2004 05:45 <DIR> . 30-03-2004 05:45 <DIR> .. 26-03-2004 06:50 5.889.590 01 - Copenhagen Dreaming.mp3 26-03-2004 06:51 6.047.579 02 - Kr‘mmersj‘l.mp3 26-03-2004 06:51 7.411.798 03 - En Nat Bliver Det Sommer.mp3 26-03-2004 06:52 4.603.739 04 - Love Goes On Forever.mp3 26-03-2004 06:52 5.499.634 05 - Sig Det Aldrig Mere.mp3 26-03-2004 06:53 8.767.239 06 - Alle Har En Dr›m At Befri.mp3 26-03-2004 06:54 5.572.359 07 - Fuck Min H›jdeskr‘k.mp3 26-03-2004 06:54 5.190.554 08 - Bellavista Sol.mp3 26-03-2004 06:55 7.276.379 09 - Billeder Af Verden.mp3 26-03-2004 06:56 7.059.458 10 - Fremmedlegion‘r.mp3 26-03-2004 06:57 8.029.332 11 - Dr›mmens K›benhavn.mp3 26-03-2004 06:57 4.752.323 12 - I Den Nye By.mp3 26-03-2004 06:58 6.201.179 13 - Min Elvis.mp3 26-03-2004 06:58 6.994.257 14 - Pia Larsen.mp3 26-03-2004 06:59 6.459.478 15 - Bin Laden Blues.mp3 26-03-2004 07:00 10.565.927 16 - Du Er Kommet For At G†.mp3 26-03-2004 07:00 1.001.378 Love Shop - Sendt Fra Himlen - Back.jpg 26-03-2004 07:01 513.988 Love Shop - Sendt Fra Himlen - CD.jpg 26-03-2004 07:01 671.467 Love Shop - Sendt Fra Himlen - Front.jpg
Og disse linjer har jeg rettet i:
Dim strDSN : strDSN = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath( "db1.mdb" )
'Dim strStartPath : strStartPath = "g:\Musik" Dim strStartPath : strStartPath = "g:\-[ MUSIK ]-"
Der bliver oprettet 3 tabellet i db1.mdb men så sker der ikke mere. Jeg er nød til at genstarte IIS da databasen ellers er låst ??
Hvis jeg starter asp filen direkte.. altså udenom IIS så kører den meget hurtigt igennem uden fejl, men der kommer stadigvæk ingen oplysninger i db1
Scriptet er ikke blevet fortolket. Men jeg havde sat et par linjer ind som html. Opdaterer nu....Vent og Opdateringen er færdig.
Og begge disse linjer blev skrevet hvis jeg åbnede siden direkte i explore.
Du havde begge disse linjer i scriptet
'Dim strStartPath : strStartPath = "g:\Musik" Dim strStartPath : strStartPath = "g:\-[ MUSIK ]-"
For mig at se er de ens bortset fra at pathen er skrevet anderledes, og jeg har prøvet at køre dem begge, men uden held. men nu har jeg indsat Dim strStartPath : strStartPath = "g:\Musik" Da det er den der peger direkte på mine kunstner. Men jeg kan stadigvæk ikke få det til at virke.
du kan ikke sammenligne at åbne en asp side direkte i IE, men at åbne den via IIS. for at asp koden på din side skal kunne udføre noget som helst, så *skal* siden køres via IIS.
du skriver:
"for mig at se er de ens bortset fra at pathen er skrevet anderledes" - hvis pathen er skrevet anderledes ... hvordan kan de så være ens ???? Dette er en angivelse til hvor dine filer ligger. hvis du ikke har en folder, under g-drevet, der hedder -[ MUSIK ]-, så giver det jo ikke nogen mening i at prøve dette ?
men ... prøv at kør scriptet efter du har udkommenteret den linie jeg referer til. hvis ikke dette giver en bedre pointer til hvad der er galt, så er jeg nødt til at lave en debug version til dig.
Jeg er her stadigvæk, men jeg har bare ikke haft tid til at rode med tingene. Det er ikke lykkedes mig at få crawleren til at køre endnu. Jeg vender snart tilbage, så vi kan få det til virke.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.