Непонятное поведение api.openweathermap.org

255
26 апреля 2017, 12:06

Всем привет. Написал простенький код для телеграм бота:

            let weather = require('./modules/weather');
bot.on('message', (msg) => {
let command = msg.text.toString().toLowerCase();
if (command && command.indexOf('погода') !== -1) {
    let arr = command.split(/\s/);
    weather(msg, arr[1]);
    return;
}
if (command && command === '/start') return;
bot.sendMessage(chatId, `Неверная команда`);
});  
module.exports = (msg, resp) => {
let chatId = msg.chat.id;
let city = resp.toString().toLowerCase();
let url = `http://api.openweathermap.org/data/2.5/weather?
q=${city}&lang=ru&units=metric&appid=${key}`;
let icons = null;
console.log(url);
request(url, (error, response, body) => {
    let data = JSON.parse(body);
    if(data.cod === '404') return bot.sendMessage(chatId, 'Нет такого 
города');
    icons = 
`http://openweathermap.org/img/w/${data.weather[0].icon}.png`;
    bot.sendPhoto(chatId, icons);
    bot.sendMessage(chatId, `В ${data.name} сейчас ${data.main.temp} 
градусов цельсия, влажность воздуха ${data.main.humidity}%, скорость 
   ветра ${data.wind.speed} м/с.`);
});
   };

один и тот же запрос из телеграма и браузера возвращает абсолютно разные вещи, хотя ссылки верные. Если точнее - запрашиваю Погоду Москвы, возвращает какой то финский городок. При том что я подставляю название города на кириллице. Подскажите пожалуйста

Answer 1

Вероятно api использует некую эвристику для вычисления правильного города в случае когда есть неоднозначность, возможно, используя ip адрес клиента.

Сами они рекомендуют запрашивать погоду по id города и предоставляют справочник: http://bulk.openweathermap.org/sample/

Либо можно уточнить запрос, добавив через запятую код страны по ISO 3166 (для России - ru)

api.openweathermap.org/data/2.5/weather?q=Moscow,ru
READ ALSO
Как устранить Google API 403 Forbidden?

Как устранить Google API 403 Forbidden?

Похоже что мое клиентское приложение действует только для одного аккаунтаКак сделать возможным использовать его для всех?

225
проверка формы на валидность/ javaScript

проверка формы на валидность/ javaScript

Добрый день уважаемые, подскажите, пожалуйста где я допускаю ошибку и почему мой простенький валидатор не работает

363
Instanceof в js

Instanceof в js

Можете объяснить мне разницу между

236
JS Frameworks подходит для сайтов с БД?

JS Frameworks подходит для сайтов с БД?

Сайт будет состоять из select\insert\update БД MySql и вывод в табличном виде с авторизацией по правам select\insert\update

204