Avatar billede hinca Nybegynder
29. marts 2004 - 17:53 Der 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.

filerne ligger på følgende måde.

E:\musik\Abba\ALBUM1\track1.mp3
E:\musik\Abba\ALBUM1\track2.mp3
E:\musik\Abba\ALBUM1\front.jpg
E:\musik\Johnny Madsen\ALBUM1\track1.ogg
E:\musik\Johnny Madsen\ALBUM1\track2.ogg
E:\musik\Johnny Madsen\ALBUM1\front.jpg
E:\musik\Johnny Madsen\ALBUM1\back.jpg
E:\musik\Johnny Madsen\ALBUM2\track1.mp3
E:\musik\Johnny Madsen\ALBUM2\track2.mp3
E:\musik\Johnny Madsen\ALBUM2\front.jpg

Håber det er forklaret nogenlunde klart..

\\Claus
Avatar billede thesurfer Nybegynder
29. marts 2004 - 17:59 #1
"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! :-)
Avatar billede nute Nybegynder
29. marts 2004 - 18:08 #2
som skrevet i http://www.eksperten.dk/spm/482121 @ 29/03-2004 16:19:50

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

/nute
Avatar billede nute Nybegynder
29. marts 2004 - 18:52 #3
jeg har smidt noget kode på:

http://xperimentum.com/xperten/483422/crawler.txt

så du kan se hvad der kan laves.

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).

kør det og se om det er noget du ønsker

/nute
Avatar billede nute Nybegynder
29. marts 2004 - 18:57 #4
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
Avatar billede hinca Nybegynder
30. marts 2004 - 06:50 #5
--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

end sub

function getID( intPathIndex, strName )
    strTempSQL = Replace( strSelectSQL, "[TABLE]", arrPathFormat( intPathIndex ) )
    strTempSQL = strTempSQL & """" & strName & """"
    Set objRS = objConn.Execute( strTempSQL )
    Dim strReturn : strReturn = "-1"
   
    if( NOT objRS.EOF ) then
        strReturn = objRS( arrPathFormat( intPathIndex ) & "ID" )
    end if
    objRS.Close
    getID = strReturn
end function

sub insertItem( intPathIndex, objItem )
   
    Dim arrTemp
    select case arrPathFormat( intPathIndex )
        Case arrPathFormat( 0 )
            strTempSQL = strInsertArtistSQL
            strTempSQL = Replace( strTempSQL, "[ARTISTNAME]", objItem.Name )
        Case arrPathFormat( 1 )
            arrTemp = Split( objItem, "\" )
            strTempID = arrTemp( Ubound( arrTemp ) - 1 )
            strTempID = getID( intPathIndex - 1, strTempID )
           
            if( strTempID <> "-1" ) then
                strTempSQL = Replace( strInsertAlbumSQL, "[ALBUMNAME]", objItem.Name )
                strTempSQL = Replace( strTempSQL, "[ARTISTID]", strTempID )
            else
                strTempSQL = "ERROR: " & arrPathFormat( intPathIndex ) & " not found"
            end if
        Case arrPathFormat( 2 )
            Dim strFileName, strFileType
            arrTemp = Split( objItem, "\" )
            strTempID = arrTemp( Ubound( arrTemp ) - 1 )
            strTempID = getID( intPathIndex - 1, strTempID )
            strFileName = LEFT( objItem.Name, InStr( objItem.Name, "." ) - 1 )
            strFileType = RIGHT( objItem.Name, 3 )
            strTempSQL = Replace( strInsertFileSQL, "[FILENAME]", strFileName )
            strTempSQL = Replace( strTempSQL, "[FILETYPE]", LCase( strFileType ) )
           
            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.

//Claus
Avatar billede nute Nybegynder
30. marts 2004 - 10:03 #6
hmm ... så er det noget galt. jeg har 27 artister, 64 album og 791 filer liggende her, og scriptet kører på under 1 minut.

har du skrive rettigheder til basen ? (højreklik > properties > security > system skal have write)

/nute
Avatar billede nute Nybegynder
30. marts 2004 - 10:11 #7
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:

Call insertItem( UBound( arrPathFormat ), objFile )

ud med

Response.Write( "<b>" & arrPathFormat(2) & "</b>: " & objFile.Name & "<br>" )

og denne linie:

Call insertItem( intTable, objSubFolder )

med denne linie:

Response.Write( "<b>" & arrPathFormat(intTable) & "</b>: " & objSubFolder.Name & "<br>" )

nå skal den skrive ud alle filer og foldere.

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
Avatar billede nute Nybegynder
30. marts 2004 - 10:12 #8
hvis den ikke skriver ud en eneste folder eller fil, så har du en forkert reference til din folder - med andre ord: denne linie er forkert:

Dim strStartPath    : strStartPath = "G:\-[ MUSIC ]-"

/nute
Avatar billede hinca Nybegynder
30. marts 2004 - 17:43 #9
--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

//Claus
Avatar billede nute Nybegynder
30. marts 2004 - 17:48 #10
du skriver:

Indhold af G:\Musik\Love_Shop

(( med andre ord, så ligger dine filer under 'G:\Musik' ))

scriptet kigger i:

Dim strStartPath    : strStartPath = "g:\-[ MUSIK ]-"

(( med andre ord, så kigger den i forkert folder ))

hvis du starter asp filen "direkte" ??? udenom IIS ?? hvordan kan du køre en asp-siden udenom IIS ?? hvad er det så, der fortolker asp koderne ??

/nute
Avatar billede hinca Nybegynder
30. marts 2004 - 19:58 #11
--Nute

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.

//Claus
Avatar billede nute Nybegynder
30. marts 2004 - 22:46 #12
prøv at udkommentér den linie der indeholder:

on error resume next

får du nu nogen fejl beskeder ?

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.

/nute
Avatar billede nute Nybegynder
13. april 2004 - 10:29 #13
sker der noget her ?
Avatar billede hinca Nybegynder
14. april 2004 - 06:02 #14
Nute..

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.

Menuen du lavede virker rigtigt godt.

//Claus
Avatar billede svart Nybegynder
25. juni 2004 - 17:47 #15
hinca minder dig lige på at du har en del spørgsmål ude og ialt 750 point.

Du har blandt andet glemt mig og per-olof på dette spørg: http://www.eksperten.dk/spm/509880
Avatar billede hinca Nybegynder
10. januar 2005 - 08:53 #16
Hej igen Nute.
Kan du ikke smide et svar her, så vi kan få lukket.
http://www.eksperten.dk/spm/483422

Mange tak for hjælpen indtil nu, og undskyld jeg har været fraværende så længe.

//Claus
Avatar billede nute Nybegynder
10. januar 2005 - 09:57 #17
...
Avatar billede nute Nybegynder
10. januar 2005 - 09:57 #18
...
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester