url - finances - yahoo weather api forecast code
Hacer la solicitud de la API de Yahoo Weather con OAuth 1 (4)
Solución actual A mediados de abril de 2016: Yahoo está permitiendo solicitudes de YQL sin Oauth nuevamente debido a la indignación del desarrollador
Puede volver a escribir una consulta sin ninguna autenticación como la siguiente:
https://query.yahooapis.com/v1/public/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&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys
Respuestas anteriores a continuación en caso de que fueran de ayuda para alguien. Durante ciertos periodos de los cambios de Yahoo funcionaron.
A continuación se presentan versiones anteriores de esta respuesta por razones históricas que también pueden funcionar
Respuesta actualizada después de la última ronda de actualizaciones de Yahoo: solución insegura de OAuth
Deberá crear una cuenta de Yahoo y luego crear una aplicación web en https://developer.yahoo.com/apps/create/
A continuación, deberá utilizar una biblioteca de OAuth para codificar correctamente su ID de cliente y Secreto de cliente. Aquí hay un ejemplo en JavaScript basado en una página de ejemplo de Yahoo y un artículo de blog de 2008 por Paul Donnelly . Esto genera una URL codificada para usar para solicitar un feed del tiempo.
//Fill in your consumer Key & Secret from Yahoo''s App & adjust location as needed.
//This Key & Secret combination is invalid & won''t work for you
var consumerKey = "dj0yJmk9NkRjbXpjUEhPbjlnJmQ9WVdrOVFUQTFaV2wxTjJrbXnHbz3NQSktJnM9Y29uc3VtZXJzZWNyZXQmeD0wOQ--";
var consumerSecret = "9bea8a9k3934d16365ek7e23e0abo1bba4q5c03c";
var locationToQuery = "90210"; //Can be zip code or anything that works in the query select woeid from geo.places(1) where text=<Your Location>
var makeSignedRequest = function(ck,cs,loc) {
var encodedurl = "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%22"+loc+"%22)&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys";
var accessor = { consumerSecret: cs, tokenSecret: ""};
var message = { action: encodedurl, method: "GET", parameters: [["oauth_version","1.0"],["oauth_consumer_key",ck]]};
OAuth.setTimestampAndNonce(message);
OAuth.SignatureMethod.sign(message, accessor);
var parameterMap = OAuth.getParameterMap(message);
var baseStr = OAuth.decodeForm(OAuth.SignatureMethod.getBaseString(message));
var theSig = "";
if (parameterMap.parameters) {
for (var item in parameterMap.parameters) {
for (var subitem in parameterMap.parameters[item]) {
if (parameterMap.parameters[item][subitem] == "oauth_signature") {
theSig = parameterMap.parameters[item][1];
break;
}
}
}
}
var paramList = baseStr[2][0].split("&");
paramList.push("oauth_signature="+ encodeURIComponent(theSig));
paramList.sort(function(a,b) {
if (a[0] < b[0]) return -1;
if (a[0] > b[0]) return 1;
if (a[1] < b[1]) return -1;
if (a[1] > b[1]) return 1;
return 0;
});
var locString = "";
for (var x in paramList) {
locString += paramList[x] + "&";
}
var finalStr = baseStr[1][0] + "?" + locString.slice(0,locString.length - 1);
return finalStr;
};
//Use the encodedURL to make your request
var encodedURL = makeSignedRequest(consumerKey, consumerSecret, locationToQuery);
Debe tenerse en cuenta que nunca debe mostrar su clave de consumidor o secreto de consumidor al público. Puede usar sus propias credenciales de Yahoo en este Plunkr: http://plnkr.co/edit/EvLbgs
Respuesta original
Lamentablemente a partir de este momento, los servidores no pueden crear esa aplicación. Idealmente, una vez que estén en la copia de seguridad, puede usar el código del lado del servidor para hacer la parte de la verdad. Intentaré editar esta respuesta cuando eso suceda. Según Yahoo, la URL será la misma excepto sin la parte / public. La gran diferencia será que debe enviar los encabezados de solicitud con la URL que autentica su cuenta.
Aquí hay una solución temporal hasta entonces. Aún puedes usar una consulta YQL geo.places con un código postal para obtener el woeid.
select * from geo.places where text=90210 limit 1
Luego puedes tomar tu Woeid desde allí y usarlo en la siguiente URL para obtener un feed XML:
http://weather.yahooapis.com/forecastrss?w=WOEID_GOES_HERE
He creado un Plunker como ejemplo de esta solución temporal aquí: http://plnkr.co/edit/dClPDtnToMhHqvKpfCzj?p=preview
Aquí está la esencia de todo esto usando jQuery:
var zipCode = 90210;
$.ajax({
dataType: "json",
headers: { "Accept": "application/json; odata=verbose" },
url: "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20geo.places%20where%20text%3D"+zipCode+"%20limit%201&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys",
beforeSend: function(xhr){xhr.setRequestHeader(''Accept'', ''application/json; odata=verbose'');},
success: function(data){
$.getJSON("https://query.yahooapis.com/v1/public/yql?callback=?", {
q: "select * from xml where url=/"https://weather.yahooapis.com/forecastrss?w="+data.query.results.place.locality1.woeid+"/"",
format: "json"
},function (data) {
var weather = data.query.results.rss.channel;
var html = ''<div><span class="temperature">''+weather.item.condition.temp+''<span class="degree">°</span><sup>''+weather.units.temperature+''</sup></span><br><span class="wind-chill">Feels like: ''+weather.wind.chill+''<span class="degree">°</span></span></div></a>'';
$("#weather").html(html);
});
},
});
Me encontré con un problema con Yahoo Weather API porque no me estaba dando ningún dato. Después de visitar el sitio web de YDN, descubrí que todas las solicitudes deben actualizarse a OAuth 1 a partir del 15 de marzo (¡pero lo conseguí trabajando hoy mismo!). También se dice que incluye la clave de la aplicación de Yahoo y el secreto. ¿Cuál debería ser la url de solicitud ahora, cuando debo usar mi clave de aplicación y mi secreto?
Antes, recibí dicha cadena de solicitud: https://query.yahooapis.com/v1/public/yql?q=SOME_QUERY&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=
ACTUALIZAR
13 minutos después de que originalmente hice esta pregunta, las llamadas a la API con / v1 / public / endpoint están funcionando nuevamente. Pero todavía es interesante para mí obtener una respuesta a mi pregunta.
ACTUALIZAR
Está abajo de nuevo :(
Aparentemente, se supone que ya no funciona con la API pública . Por ahora, se le pedirá que utilice OAuth a través de la Secret Key
.
Finalmente conseguimos que nuestro clima de yql volviera a funcionar con la autorización de dos patas con yosdk:
Y usando este script
<?php
include_once("yosdk/lib/Yahoo.inc");
define("API_KEY","your-api-key-here");
define("SHARED_SECRET","your-secret-here");
YahooLogger::setDebug(true);
$twoleg = new YahooApplication (API_KEY, SHARED_SECRET);
$query = ''select * from weather.forecast where woeid in (select woeid from geo.places(1) where text="84054") and u="f"'';
print_r ($results);
Encontré esto en esta discusión: ( ¿Cómo empiezo con outh for YQL para datos de stock históricos? )
Si simplemente reemplaza
con
deberia de funcionar ;)