Ueland Skrevet 8. juni 2007 Skrevet 8. juni 2007 (endret) Hepp, Jobber med et lite program som skal automatisk sortere mp3 filer i en gitt mappe, og flytte disse til en gitt målmappe. For å få litt konsistens i data har jeg gjort det slik at programmet sjekker en lokal artistdatabasefil for å se om artisten faktisk eksisterer (for å unngå dublikater), jeg har og lagt inn en ekstra sjekk som skal slå opp i Last.fm sitt API, men problemet er at API-forespørselen feiler i Java. Først fikk jeg Unexpected end of file, etter en kodeendring får jeg nada tilbake, documentLength på -1 tilsier jo at noe fjaser bra. Er det noen som ser hva som er feil i siterte eksempelkode tr? public boolean checkArtistExternally(String artist) { System.out.println("|--Starting lookup of \""+artist+"\" at Last.fm in 2 seconds..."); try { Thread.sleep(2000); }catch(Exception e) { System.out.println(e); } String line = ""; String HTML = ""; int lines = 0; try { //URL lastfm = new URL("http://ws.audioscrobbler.com/1.0/artist/"+artist+"/toptracks.xml"); artist = artist.replace(" ", "%20"); URL u = new URL("http://ws.audioscrobbler.com/1.0/artist/"+artist+"/toptracks.xml"); URLConnection conn = u.openConnection(); conn.setDoInput(true); System.out.println(conn.getContentType()); InputStream input = conn.getInputStream(); BufferedReader r = new BufferedReader(new InputStreamReader(input)); while ((line = r.readLine()) != null) { HTML += line; } r.close(); input.close(); }catch(Exception e) { System.out.println(e); System.exit(0); } System.out.println("FOUND "+lines+" LINES!!"); return true; } Når det er type tredve grader er det litt vanskelig å finne løsningen. Endret 8. juni 2007 av Ueland
gunnard Skrevet 8. juni 2007 Skrevet 8. juni 2007 Vet ikke om det har noe å si, men bare et par ting jeg ville gjort annerledes: - Slenge inn conn.setUseCaches(false) (f. eks. etter conn.setDoInput(true)) - Hvis mer enn " " er URL-kodet burde du bruke URLEncoder.encode(artist, "UTF-8") (hvis artisten har noen andre tegn som skal konverteres kan det jo hende du prøver å koble deg opp mot feil dokument) - Trenger du input.close()? Mulig jeg tar feil, men tror det holder å lukke BufferedReader'en (iallfall har det holdt for meg) Lykke til!
Ueland Skrevet 8. juni 2007 Forfatter Skrevet 8. juni 2007 Inntil videre har jeg løst det med å bare kalle wget, litt ondskapsfull hack men nå fungerer hvertfall ting som det skal. Får forsøke meg videre på overnevnte problem når det blir litt kaldere i luften.
pgdx Skrevet 9. juni 2007 Skrevet 9. juni 2007 (endret) public boolean checkArtistExternally(String artist) { System.out.println("|--Starting lookup of \"" + artist + "\" at Last.fm in 2 seconds..."); try { Thread.sleep(2000); } catch (Exception e) { System.out.println(e); } String line = ""; String HTML = ""; int lines = 0; try { artist = artist.replace(" ", "%20"); URL u = new URL("http://ws.audioscrobbler.com/1.0/artist/" + artist + "/toptracks.xml"); URLConnection conn = u.openConnection(); conn.setDoInput(true); conn.setUseCaches(false); System.out.println(conn.getContentType()); InputStream input = conn.getInputStream(); BufferedReader r = new BufferedReader(new InputStreamReader(input)); do { line = r.readLine(); if (line != null) { HTML += line + "\n"; lines++; } } while ( line != null); r.close(); input.close(); } catch (Exception e) { System.out.println(e); System.exit(0); } System.out.println("FOUND " + lines + " LINES!!"); System.out.println(HTML); return true; } Endret 9. juni 2007 av pgd
Qwark Skrevet 9. juni 2007 Skrevet 9. juni 2007 Jeg la inn en debuglinje i while løkken System.out.println(line); Søkte etter Raga Rockers og fikk ut all infoen fra siden, Fikk java.io.FileNotFoundException ved søk på Sy Snootles Så eksempelkoden din fungerer som den skal.
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå