<p>Anfrage unterstützt keine Zeichen wie : " í " , " ë " , " å " ..</p>

Erstellt am 24. Aug. 2018  ·  3Kommentare  ·  Quelle: request/request

Zusammenfassung

Hallo, seit ein paar Tagen kämpfe ich mit einem Problem. Ich versuche, die Informationen über eine Stadt mit [openweathermap api](https://openweathermap.org/current) abzurufen. Eine normale Anfrage sieht so aus, zB:
http://api.openweathermap.org/data/2.5/weather?q= CITY &units=metric&appid= APIKEY

(Sie können dies in Ihrem Browser mit einem kostenlosen API-Schlüssel reproduzieren)

Ergebnis: (JSON)
{"coord":{"lon":-73.61,"lat":45.5},"weather":[{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03d"}],"base":"stations","main":{"temp":24.65,"pressure":1012,"humidity":38,"temp_min":24,"temp_max":25},"visibility":48279,"wind":{"speed":7.2,"deg":280,"gust":11.3},"clouds":{"all":40},"dt":1535058000,"sys":{"type":1,"id":3829,"message":0.0049,"country":"CA","sunrise":1535018756,"sunset":1535068008},"id":6077243,"name":"Montreal","cod":200}

Ich verwende diese Funktion, die mit dem Anfragemodul erstellt wurde:

``

function req (url, jsonStatus){
    const options = {
        uri: url,
        json: jsonStatus 
    }

    console.log(`Sent: ${options.uri}`)

    rp(options)
        .then(repos => {
            console.log(`Success: ${repos.sys.country}`) // Country code is returned
        })
        .catch(err => {
            console.log(`Error: ${err}`)
        })
}}
const owmUrl = `http://api.openweathermap.org/data/2.5/weather?q=${City}&units=metric&appid=${apiKey}`;
req(owmUrl, true);

Outpout(Konsole)(wobei Stadt 'montreal' ist):
`λ Knoten-App
Gesendet: http://api.openweathermap.org/data/2.5/weather?q=montreal&units=metric&appid= APIKEY

Erfolg: CA`

Wie Sie hier sehen, ist die Anfrage erfolgreich. Beim Versuch mit Städten mit Sonderzeichen wie "Chamberí" aus dem Browser geht alles gut, die URL sieht so aus:
http://api.openweathermap.org/data/2.5/weather?q=Chamberí&units=metric&appid= APIKEY

und das Ergebnis ist (wieder JSON):
{"coord":{"lon":-3.71,"lat":40.44},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}],"base":"stations","main":{"temp":27.24,"pressure":1020,"humidity":32,"temp_min":27,"temp_max":28},"visibility":10000,"wind":{"speed":3.6,"deg":110},"clouds":{"all":0},"dt":1535059800,"sys":{"type":1,"id":5488,"message":0.0039,"country":"ES","sunrise":1535002448,"sunset":1535050778},"id":3117735,"name":"Chamberí","cod":200}

aber wenn ich dies mit dem von mir erstellten Code sende, bekomme ich Folgendes:

λ node app Test Sent: http://api.openweathermap.org/data/2.5/weather?q=Chamberí&units=metric&appid=0ec25df3f69726843a58a325b97e845d Error: StatusCodeError: 404 - {"cod":"404","message":"city not found"}

Ich verstehe nicht, warum ich diesen Fehler erhalte, da das Ausprobieren derselben URL in meinem Browser einwandfrei funktioniert. Ich habe versucht, die Module request-promise und request-promise-any zu verwenden, aber beide geben den gleichen Fehler zurück.

Das stimmt was nicht und ich weiß nicht ob es an mir vom Modul liegt. Wenn ich Hilfe bekommen könnte, wäre ich sehr dankbar :)

Dank.

(Es tut mir leid, wenn etwas mit meiner Problemanfrage nicht stimmt, es ist das erste Mal, dass ich dies tue :))

Ihre Umgebung

| Software | Ausführung
| ---------------- | -------
| Anfrage | [email protected]
| Knoten | v10.9.0
| npm | 6.2.0
| Betriebssystem | Windows 8.1 x64
| Browser | Oper

Hilfreichster Kommentar

Wie kodiere ich URL-Parameter?

Codieren Sie den Städtenamen, wenn er Nicht-ASCII-Zeichen enthalten kann:

console.log(encodeURIComponent('Montreal'));
console.log(encodeURIComponent('Montréal'));
console.log(encodeURIComponent('Chamberí'));

Ausgabe:

Montr%C3%A9al
Chamber%C3%AD

Daten für Chamberí nach der Codierung des Namens vor der Anfrage:

{ coord: { lon: -3.71, lat: 40.44 },
  weather:
   [ { id: 800, main: 'Clear', description: 'clear sky', icon: '01n' } ],
  base: 'stations',
  main:
   { temp: 21.98,
     pressure: 1020,
     humidity: 49,
     temp_min: 21,
     temp_max: 23 },
  visibility: 10000,
  wind: { speed: 1.5, deg: 40 },
  clouds: { all: 0 },
  dt: 1535068800,
  sys:
   { type: 1,
     id: 5488,
     message: 0.0038,
     country: 'ES',
     sunrise: 1535088854,
     sunset: 1535137170 },
  id: 3117735,
  name: 'Chamberí',
  cod: 200 }

Alle 3 Kommentare

Wie kodiere ich URL-Parameter?

Codieren Sie den Städtenamen, wenn er Nicht-ASCII-Zeichen enthalten kann:

console.log(encodeURIComponent('Montreal'));
console.log(encodeURIComponent('Montréal'));
console.log(encodeURIComponent('Chamberí'));

Ausgabe:

Montr%C3%A9al
Chamber%C3%AD

Daten für Chamberí nach der Codierung des Namens vor der Anfrage:

{ coord: { lon: -3.71, lat: 40.44 },
  weather:
   [ { id: 800, main: 'Clear', description: 'clear sky', icon: '01n' } ],
  base: 'stations',
  main:
   { temp: 21.98,
     pressure: 1020,
     humidity: 49,
     temp_min: 21,
     temp_max: 23 },
  visibility: 10000,
  wind: { speed: 1.5, deg: 40 },
  clouds: { all: 0 },
  dt: 1535068800,
  sys:
   { type: 1,
     id: 5488,
     message: 0.0038,
     country: 'ES',
     sunrise: 1535088854,
     sunset: 1535137170 },
  id: 3117735,
  name: 'Chamberí',
  cod: 200 }

Danke schön !!

:+1:

Danke @davejagoda

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen