Ractamainus Mesaj tarihi: Mayıs 25, 2009 Paylaş Mesaj tarihi: Mayıs 25, 2009 istediğim lokasyonun hava durumu bilgilerini çekebileceğim, güvenilir ve uptime'ı yüksek (bu önemli), hızlı bir web servisi biliyor musunuz? xml, json.. ne olursa olsun, bir standart olsun da. mümkünse bedava ama paralıya da razıyım (yani umarım razı ederim). hele bir siz dökülüverin de.. yahu her yer bu konuda web servisi kaynar diye düşünürdüm. bulamadım. karışıklık olmasın; ben işleyecek veri istiyorum. gadget tarzı bir şey değil. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Genel Yönetici GERGE Mesaj tarihi: Mayıs 25, 2009 Genel Yönetici Paylaş Mesaj tarihi: Mayıs 25, 2009 Benim bir openbox menu scriptim vardı vaktinde hazırladığım, dur bir onu bulayım. (arandı burada) ... İşte! Scripye kendimce birkaç değişiklik yapmıştım ama neresine hatırlamıyorum, orijinalini de bulamadım şimdi. gweather.py #!/usr/bin/python import sys import urllib from string import maketrans #from xml.sax import make_parser, handler from xml.sax import handler, parseString class ElementProcesser(handler.ContentHandler): def startElement(self, name, attrs): if name == "city": print "<separator label='" + attrs[data] + "' />" elif name == "current_conditions": print "<separator label='Current condidtions' />" elif name == "condition": print "<item label='Weather: " + attrs[data] + "' />" elif name == "humidity": print "<item label='" + attrs[data] + "' />" elif name == "wind_condition": print "<item label='" + attrs[data] + "' />" elif name == "day_of_week": print "<separator label='" + self.getDayOfWeek(attrs[data]) + "' />" #Celsius elif name == "temp_c": print "<item label='Temperature " + attrs[data] + " C' />" #elif name == "low": # print "<item label='Minimum " + attrs[data] + " C' />" #elif name == "high": # print "<item label='Maximum " + attrs[data] + " C' />" #Fahrenheit #elif name == "temp_f": #print "<item label='Temperature " + attrs[data] + " F' />" #elif name == "low": #print "<item label='Minimun " + attrs[data] + " F' />" #elif name == "high": #print "<item label='Maximun " + attrs[data] + " F' />" def endElement(self, name): if name == "current_conditions": print "<separator label='Forecast' />" def startDocument(self): print '<openbox_pipe_menu>' def endDocument(self): print '</openbox_pipe_menu>' def getDayOfWeek(self,day): #English if day == "Mon": return "Monday" elif day == "Tue": return "Tuesday" elif day == "Wed": return "Wednesday" elif day == "Thu": return "Thursday" elif day == "Sat": return "Saturday" elif day == "Sun": return "Sunday" else: return day # You should use your local version of google to have the messages in your language and metric system f = urllib.urlopen("http://www.google.com/ig/api?weather=istanbul") xml = f.read() f.close() #Avoid problems with non english characters trans=maketrans("xe1xe9xedxf3xfa","aeiou") xml = xml.translate(trans) #parser.parse("http://www.google.es/ig/api?weather="+sys.argv[1]) parseString(xml,ElementProcesser()) Umarın işine yarar, xml olarak alıyordu şu sayfadan: http://www.google.com/ig/api?weather=istanbul Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Gutshot Mesaj tarihi: Mayıs 25, 2009 Paylaş Mesaj tarihi: Mayıs 25, 2009 firefox'un ubiquity diye bir eklentisi var. burada ctrl + space ile ubiquity açıp "weather x" komutuyla istediğin yerin hava durumunu, rüzgar yönü ve hızını, nem oranın görebilirsin. http://labs.mozilla.com/2008/08/introducing-ubiquity/ browser'dan bağımsız versiyonu için: http://www.launchy.net/ Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Ractamainus Mesaj tarihi: Mayıs 25, 2009 Konuyu açan Paylaş Mesaj tarihi: Mayıs 25, 2009 gerge, çok sağol. muhtemelen o servisi kullanacağım. google'ın resmen böyle bir api duyurmaması biraz kıl bir şey.. yarın öbür gün xml'de bir değişiklik olma ihtimali korkutuyor ama.. "google yapmaz yaaa" havalarındayım biraz. yahoo'nun weather api varmış, şimdi baktım ama saçma bir çıktı veriyor. sevmedim. bu arada google için bir kaç ipucu; ingilizce ve fahrenheit olarak: http://www.google.com/ig/api?weather=istanbul,turkey&hl=en-us ingilizce ve celsius: http://www.google.com/ig/api?weather=istanbul,turkey&hl=en-gb türkçe ve celsius: http://www.google.com/ig/api?weather=istanbul,turkey&hl=tr gutshot sana da teşekkürler ama aradığım şey ubiquity değil. kendisinden haberdarım zaten =) launchy'i de kullanıyorum ^^ Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Genel Yönetici GERGE Mesaj tarihi: Mayıs 25, 2009 Genel Yönetici Paylaş Mesaj tarihi: Mayıs 25, 2009 Accuweather ile BBC Weather'a bak. Onların da var buna benzer şeyleri. KDE'de ikisini de kullanan plasmoidler var. Sıralarıyla: yaWP ve LCD Weather Station. Belki kaynak kodlarından alarak birşeyler hazırlayabilirsin kendine. Bunlar daha güvenli olabilir, ben KDE 4 çıktığından beri LCD'yi kullanıyorum, daha yüzüstü bırakmadı. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
dasaaa Mesaj tarihi: Mayıs 25, 2009 Paylaş Mesaj tarihi: Mayıs 25, 2009 rainmeter kullan.. koy desktop'ına.. bulunduğun yerin datasını da weather com'dan aldırıcaksın.. çogüzel olacak Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Mum_Chamber Mesaj tarihi: Mayıs 25, 2009 Paylaş Mesaj tarihi: Mayıs 25, 2009 dasaa bunlar aliyorlar gunesle ayi carpip bolup birseyler yapiyorlar, ondan metinsel olarak lazim. gadget gibi degil =) Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Ractamainus Mesaj tarihi: Mayıs 26, 2009 Konuyu açan Paylaş Mesaj tarihi: Mayıs 26, 2009 (güneş x ay)²/dünya formül bu dasaaa ^^ bbc weather, şöyle bir çıktı veriyor. format rss sonuçta, güzel. ama lokasyon isimlerini sorgulayamıyoruz. url içinde numerik olarak biz göndereceğiz (istanbul 74 gibi..). bu yöntemi pek beğenmedim. en azından hala google'ın ki bu konuda daha iyi. accuweather.com ise api'sini kapalı tutmuş. "süper bir fikrin mi var? bizle iletişim kur" kafalarında.. ilgimi çekmedi açıkçası. weather.com'a baktım. o da private bir api sağlıyor ama benim reklamımı da göstereceksin diyor. o da ilgimi çekmedi o yüzden. "bunları deli gibi niye yazıyorsun buraya" demeyin. işi düşenlere kaynak olsun diye. ya da deli diyin ya ne biliyim.. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Ractamainus Mesaj tarihi: Haziran 3, 2009 Konuyu açan Paylaş Mesaj tarihi: Haziran 3, 2009 google xml'i için bir parser yazmıştım. fonksiyonel olarak tamamen çalışıyor ama bir kaç dil seçeneği falan daha ekleyecektim. ne zamandır öyle bekliyor, bakamadım daha sonra açıkçası. daha fazla bekletmenin bir anlamı yok, ben kullanacağım zaman bir kaç düzenleme daha yaparım. lakin bu haliyle paylaşıyım istedim: dll şurada: http://madyalman.googlepages.com/GoogleWeather.dll öncelikle parse ettiği xml şu: http://www.google.com/ig/api?weather=istanbul&hl=tr kullanımı şöyle: WeatherReporter wr = new WeatherReporter("İstanbul,turkey"); Console.WriteLine(wr.Information.City); Console.WriteLine(wr.Current.TempC); Console.WriteLine(wr.Current.TempF); Console.WriteLine(wr.Current.Humidity); Console.WriteLine(wr.Current.Condition); Console.WriteLine(wr.Current.WindCondition); Console.WriteLine(wr.Forecasts[0].TempLow); Console.WriteLine(wr.Forecasts[0].TempHigh); Console.WriteLine(wr.Current.WindConditionConverted); gibi.. bu da kod: kaynak kodu public class WeatherReporter { string xmlUrl = @"http://www.google.com/ig/api?weather="; string xmlError = String.Empty; ForecastInformation information; CurrentConditions current; ForecastConditions temp; List forecasts; public ForecastInformation Information { get { return information; } } public CurrentConditions Current { get { return current; } } public List Forecasts { get { return forecasts; } } public string XmlError { get { return xmlError; } } /// /// Gets weather conditions from Google. /// Language: Turkish. /// Unit: Celsius. /// /// The name of a city like "istanbul" or "istanbul,turkey". public WeatherReporter(string location) { GetWeather(xmlUrl + location + @"&hl=tr"); } /// /// Gets weather conditions from Google. /// Unit is dependant to language. /// /// The name of a city like "istanbul" or "istanbul,turkey". /// Sets the language of values. public WeatherReporter(string location, Language lang) { GetWeather(GetUrlByLang(location, lang)); } /// /// Gets weather conditions from Google. /// /// /// /// public WeatherReporter(string location, Language lang, Unit unit) { GetWeather(GetUrlByLang(location, lang), unit); } private void GetWeather(string url) { GetXmlData(url); } private void GetWeather(string url, Unit unit) { GetXmlData(url); if (String.IsNullOrEmpty(XmlError)) { Unit xmlUnit; switch (information.UnitSystem) { case "SI": xmlUnit = Unit.SI; break; case "US": xmlUnit = Unit.US; break; default: xmlUnit = Unit.SI; break; } if (xmlUnit != unit) { Regex getNumber = new Regex(@"[+-]?d+"); Match matchedNumber = getNumber.Match(current.WindCondition); current.WindConditionConverted = ConvertVelocityTo(unit, matchedNumber.Value).ToString(); for (int i = 0; i < forecasts.Count; i++) { ConvertForecastFields(i, unit); } } } } private void GetXmlData(string url) { try { WebRequest request = WebRequest.Create(url); request.Credentials = CredentialCache.DefaultCredentials; WebResponse response = request.GetResponse(); string respEncode = response.ContentType.Split('=')[1]; Encoding encode = Encoding.GetEncoding(respEncode); Stream stream = response.GetResponseStream(); StreamReader sReader = new StreamReader(stream, encode); string textXml = sReader.ReadToEnd(); XElement root = XElement.Parse(textXml); var queryInformation = from el in root.Element("weather").Descendants("forecast_information") select new ForecastInformation { City = el.Element("city").Attribute("data").Value, PostalCode = el.Element("postal_code").Attribute("data").Value, LatitudeE6 = el.Element("latitude_e6").Attribute("data").Value, LongitudeE6 = el.Element("longitude_e6").Attribute("data").Value, ForecastDate = el.Element("forecast_date").Attribute("data").Value, CurrentDateTime = el.Element("current_date_time").Attribute("data").Value, UnitSystem = el.Element("unit_system").Attribute("data").Value }; information = queryInformation.FirstOrDefault(); var queryCurrent = from el in root.Element("weather").Descendants("current_conditions") select new CurrentConditions { Condition = el.Element("condition").Attribute("data").Value, TempF = el.Element("temp_f").Attribute("data").Value, TempC = el.Element("temp_c").Attribute("data").Value, Humidity = el.Element("humidity").Attribute("data").Value, Icon = el.Element("icon").Attribute("data").Value, WindCondition = el.Element("wind_condition").Attribute("data").Value }; current = queryCurrent.FirstOrDefault(); List queryForecast = (from el in root.Element("weather").Descendants("forecast_conditions") select new ForecastConditions { Day = el.Element("day_of_week").Attribute("data").Value, TempLow = el.Element("low").Attribute("data").Value, TempHigh = el.Element("high").Attribute("data").Value, Icon = el.Element("icon").Attribute("data").Value, Condition = el.Element("condition").Attribute("data").Value }).ToList(); forecasts = queryForecast; } catch (Exception ex) { xmlError = ex.ToString(); } } private string GetUrlByLang(string location, Language lang) { string langValue = String.Empty; switch (lang) { case Language.EnGb: langValue = "en-gb"; break; case Language.EnUs: langValue = "en-us"; break; case Language.Fr: langValue = "fr"; break; case Language.Tr: langValue = "tr"; break; } return xmlUrl + location + @"&hl=" + langValue; } private void ConvertForecastFields(int i, Unit unit) { temp = forecasts[i]; temp.TempLow = ConvertTemperatureTo(unit, temp.TempLow).ToString(); temp.TempHigh = ConvertTemperatureTo(unit, temp.TempHigh).ToString(); forecasts[i] = temp; } private static double ConvertTemperatureTo(Unit unit, string temperature) { double convertedTemp = Double.Parse(temperature); if (unit == Unit.SI) return Math.Round((convertedTemp - 32) * 5 / 9); else if (unit == Unit.US) return Math.Round((convertedTemp * 9 / 5) + 32); else return 1000; } private static double ConvertVelocityTo(Unit unit, string velocity) { double convertedTemp = Double.Parse(velocity); if (unit == Unit.SI) return Math.Round(convertedTemp * 1.60934271339163); else if (unit == Unit.US) return Math.Round(convertedTemp * 0.621371689); else return 1000; } public enum Language { EnGb, EnUs, Fr, Tr }; public enum Unit { SI, US }; public struct ForecastInformation { public string City; public string PostalCode; public string LatitudeE6; public string LongitudeE6; public string ForecastDate; public string CurrentDateTime; public string UnitSystem; } public struct CurrentConditions { public string Condition; public string TempF; public string TempC; public string Humidity; public string Icon; public string WindCondition; public string WindConditionConverted; } public struct ForecastConditions { public string Day; public string TempLow; public string TempHigh; public string Icon; public string Condition; } } smileys smile upon me Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Öne çıkan mesajlar