Gå til innhold

HTTP-forespørsel som gir meg EOF/ingen data


Anbefalte innlegg

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. :whistle:

Endret av Ueland
Lenke til kommentar
Videoannonse
Annonse

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! :)

Lenke til kommentar
	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 av pgd
Lenke til kommentar

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.

Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...