lundi 25 mai 2015

Kodierung von String -> URL aufruf

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

java.io.FileNotFoundException: http://ift.tt/1KhLVDB
at sun.net.http://www.protocol.http.HttpURLConn...tream0(Unknown Source)
at sun.net.http://www.protocol.http.HttpURLConn...Stream(Unknown Source)
at sun.net.http://www.protocol.https.HttpsURLCo...Stream(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 Code:

  1.  
  2. public int getsummonersIDurl(String name) throws UnsupportedEncodingException{
  3. summonersName = name;
  4. summonersIDurl = "http://ift.tt/1dt9Ky1; + summonersName + "?api_key="+riotKey;
  5. return call.apiUrlId(summonersIDurl);
  6.  
  7. }

Java Code:

  1.  
  2. package zockernight;
  3.  
  4. import java.io.BufferedReader;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.io.InputStreamReader;
  8. import java.net.MalformedURLException;
  9. import java.net.URL;
  10. import java.net.URLEncoder;
  11.  
  12. public class riotApiCall {
  13. URL url;
  14. InputStream is = null;
  15. String line;
  16. int sumID;
  17.  
  18. public riotApiCall() {
  19.  
  20. }
  21.  
  22. public int apiUrlId(String urlString) {
  23. try {
  24. url = new URL(urlString);
  25. is = url.openStream(); // throws an IOException
  26.  
  27. while ((line = br.readLine()) != null) {
  28. if (line.contains("HTTP ERROR 404")) {
  29. return 0;
  30. } else {
  31. line = line.substring(line.indexOf("id") + 4,
  32. line.indexOf(","));
  33. //System.out.println(line);
  34. sumID = Integer.parseInt(line);
  35. }
  36. }
  37. } catch (MalformedURLException mue) {
  38. mue.printStackTrace();
  39. } catch (IOException ioe) {
  40. ioe.printStackTrace();
  41. } finally {
  42. try {
  43. if (is != null)
  44. is.close();
  45. } catch (IOException ioe) {
  46. // nothing to see here
  47. }
  48. }
  49. return sumID;
  50. }
  51. }


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


Kodierung von String -> URL aufruf

0 commentaires:

Enregistrer un commentaire