Kodierung von String -> URL aufruf

blumenpeter

Aktives Mitglied
Hey Leute,

zur Zeit entwickel ich ein kleines Tool, welches meiner Zocker-Gemeinschaft (league of legends) eine Vereinfachung beim veranstalten von Turnieren bringen soll. Ich will den Anmeldeprozess sowie das Teambuilding automatisieren.

Der Kern funktioniert auch schon ohne Probleme, nur habe ich mit einigen Nicknames Probleme. Viele Spieler nutzen "komische"(mir ist der Name entfallen) Zeichen in ihren Nicks, womit ich nun zu kämpfen habe.

Ein Beispiel wäre der Spieler "Hi im Chên". Mit diesem Namen muss ich nun ein URL-Request (Riot) durchführen, damit ich mir die einzigartige ID holen kann. Der Aufruf gelingt mir aber (auf Grund der Leerzeichen und auf Grund der Zeichen) nicht. Andere Nicks haben bsp. auch Leerzeichen in der Mitte, die ich einfach durch stumpfes "replace" mit "%20" austausche - hier funktioniert der URL-Aufruf ohne Probleme!

Beim Ausführen mit dem oben genannten Nick, bekomme ich folgende Fehler (habe die leerzeichen auch durch "%20" ersetzt!):
java.io.FileNotFoundException: https://euw.api.pvp.net/api/lol/euw...?api_key=ba26e2ff-1866-4f9b-8dda-49927caec406
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
at java.net.URL.openStream(Unknown Source)
at zockernight.riotApiCall.apiUrlId(riotApiCall.java:25)
at zockernight.parser.getsummonersIDurl(parser.java:65)
at zockernight.parser.einlesen(parser.java:49)
at zockernight.main.main(main.java:8)

Hier erstelle ich die URL, mit der ich (unten) weiterarbeite. (als "String name" wird in diesem Fall "Hi%20im%20Chên" übergeben
Java:
public int getsummonersIDurl(String name) throws UnsupportedEncodingException{
		summonersName = name;
		summonersIDurl = "https://euw.api.pvp.net/api/lol/euw/v1.4/summoner/by-name/" + summonersName + "?api_key="+riotKey;
		return call.apiUrlId(summonersIDurl);
		
	}
Java:
package zockernight;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;

public class riotApiCall {
	URL url;
	InputStream is = null;
	BufferedReader br;
	String line;
	int sumID;

	public riotApiCall() {

	}

	public int apiUrlId(String urlString) {
		try {
			url = new URL(urlString);
			is = url.openStream(); // throws an IOException
			br = new BufferedReader(new InputStreamReader(is));

			while ((line = br.readLine()) != null) {
				if (line.contains("HTTP ERROR 404")) {
					return 0;
				} else {
					line = line.substring(line.indexOf("id") + 4,
							line.indexOf(","));
					//System.out.println(line);
					sumID = Integer.parseInt(line);
				}
			}
		} catch (MalformedURLException mue) {
			mue.printStackTrace();
		} catch (IOException ioe) {
			ioe.printStackTrace();
		} finally {
			try {
				if (is != null)
					is.close();
			} catch (IOException ioe) {
				// nothing to see here
			}
		}
		return sumID;
	}
}

Ich hoffe ihr könnt mir helfen und mir einen kleinen Denkanstoß geben. auch mit URLEncode habe ich es nicht funktionsfähig bekommen.

Grüße
blumenpeter
 
ich habe es jetzt nochmal mit dem URLEncoder versucht, und es hat auf den ersten Blick wieder nicht funktioniert, aber nur weil er aus den LZ ein "+" macht. Ich habe jetzt nach dem "encode" ein replace von "+" zu "%20" gemacht und nun nimmt er alles so auf, wie ich es verlange 😀

Vielen Dank!
 

Zurück
Oben