+3
Answered

js weather на yahoo более не работает, что делать? яха ввела какуюто авторизацию

Александр Агеев 5 years ago in JS modules updated by Андрей Sam 5 years ago 27

с сайта yahoo api:

To increase the security measure and better serving our YDN customers, weather data source will enforce OAuth 1 starting March 15, 2016. Please update your API calls with OAuth 1 enabled (via the OAuth /v1/yql end point if using YQL) using your Yahoo App key and secret.



new: https://query.yahooapis.com/v1/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20(select%20woeid%20from%20geo.places(1)%20where%20text%3D%22nome%2C%20ak%22)&format=json

Answer

+1
PINNED
Answered

Мы починили погодный виджет. Он доступен на нашем сайте в разделе "Загрузки"

http://www.iridiummobile.ru/download/software/#tab2

Поддерживаю!

На запросы по HTTP сервер теперь отвечает следующее:


<yahoo:error xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" xml:lang="en-US" yahoo:uri="http://yahoo.com">

<yahoo:description>
Please provide valid credentials. OAuth oauth_problem="OST_OAUTH_PARAMETER_ABSENT_ERROR", realm="yahooapis.com"
</yahoo:description>

Так что без поддержки iRidium v.2.2.3 HTTPS этот модуль теперь бесполезен надо переделывать все под другой погодный движок.


Можно надеяться, что в v3 pro HTTPS будет или может кто-то возьмется переписать библиотеку OAuth.io JavaScript SDK с Github (https://github.com/oauth-io/oauth-js) под iRidium AV & Custom Systems (TCP)

Не только в v3, но и в 2.3 HTTPS есть =)

Да, извиняюсь. Ввел в заблуждение. Просто осталась заноза в памяти от темы URL (https) in the Image Property

Under review

Здравствуйте!


Да, вы правы. К сожалению, Yahoo изменило API для работы с их сервисом погоды. В данный момент ищем решение этой проблемы.

+1
PINNED
Answered

Мы починили погодный виджет. Он доступен на нашем сайте в разделе "Загрузки"

http://www.iridiummobile.ru/download/software/#tab2

+1

Спасибо! Все работает!

Добавлю и свои "3 копейки":

1. Чтобы при старте не ругался, что город не найден, правим в строке 228:

// Weather Data

var DefaultData = [1,1,1,"Moscow"];

2. Для замены английских названий погодных условий меняем строки с полем "condition", такие как:

iToday_text.Text = json.results.channel.item["condition"]["text"];

на

iToday_text.Text = iConditionsRus[json.results.channel.item["condition"]["code"]];

и вставляем в тело скрипта переменную:


var iConditionsRus = ["торнадо",

"тропический шторм ",
"ураган",
"сильные грозы",
"грозы",
"смешанный дождь и снег",
"смешанные дождь и мокрый снег",
"переменная облачность",
"переменная облачность",
"морось",
"ледяной дождь",
"метель",
"метель",
"легкая метель",
"переменная облачность",
"поземка",
"снег",
"град",
"гололедица",
"пыль",
"туманно",
"дымка",
"смог",
"порывистый ветер",
"ветрено",
"холодно",
"облачно",
"переменная облачность",
"переменная облачность",
"переменная облачность",
"переменная облачность",
"ясно",
"солнечно",
"ясно",
"ясно",
"смешанные дождь и град ",
"жара",
"местами грозы",
"возможна гроза",
"возможна гроза",
"местами дождии",
"сильный снег",
"дождь со снегом",
"сильный снег",
"облачно с прояснениями",
"гроза",
"снег с дождем",
"местами грозы"];


пару слов скажите, что сделали - интересно

только это?:

Device = IR.CreateDevice(IR.DEVICE_CUSTOM_HTTP_TCP, "YahooWeatherWidget", "query.yahooapis.com", 80);

что-то не совпадает прогноз по Moscow с реальностью. По яхе - снег, за окном - красота: солнце. погода.PNG

теперь города не циферками, а названием?


Здравствуйте!


пару слов скажите, что сделали - интересно


Если у вас остался старый модуль, то вы можете сами сравнить что поменялось. Изменения главным образом коснулись запроса на получение погоды.


что-то не совпадает прогноз по Moscow с реальностью.


Данный вопрос наверно правильней будет задать компании Yahoo. В модуле отображается лишь то, что было получено с их сайта. За достоверность данных мы ответственности не несем. К тому же вы сравниваете погоду Yahoo с погодой из Yandex. Было бы правильней тогда сравнивать с тем что сейчас отображается на сайте Yahoo и в нашем модуле. Уверен что данные будут совпадать.

Да, теперь города можно вводить просто названиями, но и zip код также работает. Причем названия можно вводить как на кирилице, так и на латинице. К тому же появилась возможность переключения между цельсиями и фаренгейтами.


Вопросы:

- как с минимальными манипуляциями заменить старую версию на новую? Достаточно ли поменять только скрипт или же нужно полностью заменить виджет? Может просто какие-то окна поменять? Просто виджет этот, например, у меня претерпел некоторые изменения и не хочется опять проделывать эту работу.

- нашел переменную var DefaultData, но замена названия города не приводит к желаемому результату. Не знаю, как у остальных, но в моих проектах планшеты либо лежат на диване, либо висят на стене. Никто с ними по миру не ездит и погоду в других городах не смотрит. Подскажите, как, изменить скрипт, чтобы всегда был выбран нужный (единственный город).

Евгений, можете поменять только скрипт и попап Weather_Add_City. Остальное насколько мне известно не подверглось изменению. Также после переноса попапа Weather_Add_City скорее всего необходимо будет заново настроить макросы на некоторых его элементах.


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


Было


Стало


Заменил только скрипт и все заработало, как прежде. Окно выбора города даже не трогал, т.к. не используется.

Спасибо!

+1

В v3 не работает =(

Отлично все работает!


Объявление переменной iPressure 2 раза это опечатка или так должно быть?

var iPressure = 0;

if(iPopup.GetItem("Pressure") != null)

iPressure = iPopup.GetItem("Pressure");


Да, вы правы. Это опечатка. Спасибо за информацию!

1. по переменным на русском - спасибо Madmss за массив. Только позиция 11 и 12 совпадают.

2. почему картинку описывающую погоду в настоящий момент берут из forcast[0] а не из condition? Condition должен быть свежее и точнее имхо. Да и наблюдение показывает, что меняется cond в течение дня, а форкаст остается неизменным

3. в чем глубинный смысл брать ночные картинки для 4-х кодов, а остальные дневные. Они какие-то особенные?

function LinkCreate(image){

switch(image){

case 27:

case 29:
case 31:
case 33:
return image += "n";
break;
default:
return image += "d";
};
};



Пожалуйста!
Да, в английской версии они записаны одинаково "showers". По этому первую в списке "метель" недавно я поменял на "ливень" (основываясь на реальных метеонаблюдениях ;))

Оригинал можно посмотреть в документации тут: https://developer.yahoo.com/weather/documentation.html

а можно на сайт в раздел JS модули положить обновленную для v3 версию - в русском и английском вариантах?

Буквально вчера заметил неприятную вещь у Yahoo.

Скрипт стал возвращать "кривое" значение давления. Выяснилось, что при запросе в метрических единицах от Yahoo приходит какое-то невразумительное значение давления. При запросе в ам.единицах - все правильно.

Пришлось написать набор функций преобразования в метрические значения и конвертировать ответ самостоятельно.


С ув. Андрей.

формулой превращения свинца в золото поделитесь?

+1

Да пожалуйста )
На красоту кода не претендую - дело такое.. )
Да и авторства там моего практически нет. Просто сел и аккуратно собрал все, что нашел по углам инета в один пакетик. YahooConvertions.js


С ув. Андрей

Немного ошибся в скрипте. Для перевода миль в км надо не делить на 1.8, а умножить на 1.60934.

Не сильно влияет, но для справедливости стоит подправить. )

+3

Подправленный скрипт здесь. Заодно подправил обработку направления ветра.

Кстати, даже если запрос слать с указанием единиц выдачи в F, то Yahoo сама устраивает кашу в выдаче - считает, что для Москвы (к примеру) надо выдать давление в фунтах на кв.дюйм, а видимость и скорость ветра в км. и км/ч. Но температура все равно в F. Будьте внимательны при разборе ответа.

И еще одна деталь - в ответе в параметрах ветра "chill" выдается не что иное, как ощущаемая температура в F,

Вот такие вот нюансики.


Ну и пример вызова:


iFeels.Text = FtoC(json.results.channel.item["condition"]["temp"]) + " (" + FtoC(json.results.channel ["wind"]["chill"])+")"; - выдаст температуру в С и в скобках - ощущаемую температуру.


С ув. Андрей. YahooConvertions.js

Андрей, непонятно деление на 3,6 в ф myWindDirection

без деления вроде точнее.

ageev@smarthouse.moscow

Вообще говоря, это дело вкуса. Получилось почти спонтанно - сидел и думал, как полученные градусы в смысловые понятия перевести и натолкнулся на схожее решение. К тому моменту и сам уже похожую конструкцию сконструлил...

Пожалуй, особая точность и не нужна - все и так достаточно грубо - по секторам в 45 градусов.. Можно и тупо сразу переводить. Как удобнее - так и надо делать. Может быть, даже и не надо ничего делить. Меньше вычислений - меньше тормозов.


С ув. Андрей