PDA

View Full Version : RadWeather - کتابخانه ای برای بازیابی اطلاعات مربوط به وضعیت آب و هوا



Behrouz_Rad
شنبه 27 شهریور 1389, 20:32 عصر
RadWeather کتابخانه ای برای بازیابی اطلاعات مربوط به وضعیت آب و هوای یک شهر است که با C#‎‎‎‎‎‎‎‎‎‎‎‎‎ نوشتم.
Demo ی این کتابخانه در آدرس ذیل قابل دسترس هست:

http://weather.codepro.ir (http://weather.codepro.ir/)

این کتابخانه از وب سرویس آب و هوای سایت !Yahoo استفاده می کند.

فایل ضمیمه، شامل Source کتابخانه و مثال هایی در مورد نحوه ی استفاده از آن در یک پروژه ی Web و Desktop است.

برای استفاده، فایل RadWeather.dll را Add Reference کرده و دو namespace با عناوین RadWeather و RadWeather.Providers را به صفحه معرفی کنید.
شما با کلاس Weather سر و کار خواهید داشت. این کلاس دارای متدها و خصیصه های ذیل است:

1) خصیصه ی Astronomy به منظور بازیابی ساعت طلوع و غروب آفتاب و دارای خصیصه های ذیل است:
Sunrise: ساعت طلوع آفتاب
Sunset: ساعت غروب آفتاب

2) خصیصه ی Atmosphere به منظور بازیابی اطلاعات جَو و دارای خصیصه های ذیل است:
Humidity: میزان رطوبت هوا (درصد)
Visibility: میزان دید (مایل یا کیلومتر)
Pressure: فشار هوا (پوند بر اینچ مربع یا میلی بار)
PressureState: وضعیت فشار هوا (یکنواخت، افزایشی، کاهشی)

3) خصیصه ی Wind به منظور بازیابی اطلاعات باد و دارای خصیصه های ذیل است:
Chill: دمای باد (فارنهایت یا سانتیگراد)
Direction: درجه ی جهت باد (بین صفر تا 360)
Speed: سرعت باد (مایل در ساعت یا کیلومتر در ساعت)

4) خصیصه ی Today به منظور بازیابی اطلاعات آب و هوای جاری و دارای خصیصه های ذیل است:
DayName: عنوان روز (شنبه، یکشنبه، دوشنبه، ...)
ImageUrl: آدرس تصویر وضعیت جوی (از سایت !Yahoo خوانده می شود)
LowTemperature: حداقل دمای امروز (فارنهایت یا سانتیگراد)
HighTemperature: حداکثر دمای امروز (فارنهایت یا سانتیگراد)
Condition: وضعیت جوی امروز (همانند "آفتابی"، "برفی"، "بارانی" و ...)
CurrentTemperature: دمای جاری (فارنهایت یا سانتیگراد)
CurrentCondition: وضعیت جوی جاری (همانند "آفتابی"، "برفی"، "بارانی" و ...)
5) خصیصه ی Tomorrow به منظور بازیابی اطلاعات آب و هوای روز بعد و دارای خصیصه های ذیل است:

DayName: عنوان روز (شنبه، یکشنبه، دوشنبه، ...)
ImageUrl: آدرس تصویر وضعیت جوی (از سایت !Yahoo خوانده می شود)
LowTemperature: حداقل دما (فارنهایت یا سانتیگراد)
HighTemperature: حداکثر دما (فارنهایت یا سانتیگراد)
Condition: وضعیت جوی (همانند "آفتابی"، "برفی"، "بارانی" و ...)6) خصیصه ی NextDays به منظور بازیابی اطلاعات آب و هوای روزهای بعد از روز جاری و دارای خصیصه های Day3، Day2، Day1 و Day4 است. هر یک از این 4 خصیصه دارای زیر خصیصه های خصیصه ی Tomorrow هستند.
دقت داشته باشید که Day1 همان Tomorrow هست. در حقیقت به دو شکل می توانید به اطلاعات آب و هوای روز بعد دسترسی داشته باشید.

7) متد GetForecast وظیفه ی بازیابی اطلاعات آب و هوا را بر عهده داشته و مقدار برگشتی آن شی ای از نوع کلاس Weather است. مثالی در مورد نحوه ی استفاده:


string dataPath = Server.MapPath(".");
IWeather weather = new Weather(new YahooProvider(dataPath))
.GetForecast(cityCode, "fa", DegreesUnit.Celsius);
if (weather != null)
{
// do something with weather
}

در صورتی که خطایی در ارتباط با وب سرویس سایت !Yahoo رخ دهد، مقدار برگشتی متد GetForecast برابر با null خواهد بود.

متد GetForecast سه امضای مختلف دارد (Overloading). در امضای اول، این متد حداقل نیاز به کد شهر دارد. در امضای دوم، به مشخصه ی زبان مورد استفاده نیز (همانند fa یا en) نیاز است. این کتابخانه از Localization پشتیبانی می کند و به راحتی می توان زبان های دلخواه را به آن اضافه کرد. در امضای سوم، واحد مورد نظر برای نمایش اطلاعات نیز تعیین می شود. پارامتر آخر این امضا با استفاده از یکی از مقادیر Fahrenheit (فارنهایت) یا Celsius (سانتیگراد) یک Enum با نام DegreesUnit مقداردهی می شود. توجه داشته باشید که با انتخاب مقدار Fahrenheit یا Celsius، بقیه ی واحدها نیز به طور خودکار متناسب با آنها تغییر می کنند. با انتخاب Fahrenheit، بقیه ی مقادیر خصیصه ها نیز از مایل، مایل در ساعت و پوند بر اینچ مربع استفاده می کنند. با انتخاب Celsius، بقیه ی مقادیر خصیصه ها نیز از کیلومتر، کیلومتر در ساعت و میلی بار استفاده می کنند.
نکته: در صورتی که از امضای اول استفاده کنید، از زبان انگلیسی و واحد فارنهایت استفاده خواهد شد.

این کتابخانه از 4 فایل Resource استفاده می کند. این 4 فایل باید در 4 پوشه ی مجزا در پوشه ای با نام WeatherData قرار داده شوند.
پوشه ی Locations که فایلی با نام Locations.xml در آن وجود دارد، نگهدارنده ی کد شهرهای یک کشور است. مثالی از محتوای این فایل:


<Locations>
<Country name="IR">
<Cities>
<City latinName="Ahvaz" farsiName="اهواز">2254294</City>
<City latinName="Shiraz" farsiName="شیراز">2255202</City>
</Cities>
</Country>
</Locations>
البته تگ های فوق در اینجا به درستی نمایش داده نمی شوند. در فایل xml به شکل صحیح هستند.
تگ Country خاصیتی با نام name دارد که مشخصه ی یک کشور را مشخص می کند. البته این مشخصه اختیاری است اما در عرف، مشخصه ی کشور ایران عبارت IR است. تگ های City نیز به ازای هر شهر ایجاد می شوند و سینتکس آنها کاملاً گویای همه چیز است.
سوال: کد شهر مورد نظر را از کجا به دست آورم؟
پاسخ: وارد آدرس http://weather.yahoo.com شوید. نام لاتین شهر مورد نظر را در قسمت Enter city or zip code وارد و بر روی دکمه ی Go کلیک کنید. به عنوان مثال، با وارد کردن عبارت Ahvaz، به آدرس http://weather.yahoo.com/iran/khuzestan/ahvaz-2254294/ هدایت می شوید. در این حالت، عدد 2254294، کد شهر اهواز است که باید آن را با سینتکسی که پیشتر دیدید در فایل Locations.xml قرار دهید.
من این کار را برای تمامی مراکز استان های ایران انجام و در فایل Locations.xml قرار دادم. متاسفانه وب سرویس آب و هوای !Yahoo، شهرهای ایلام، اردبیل، سمنان، قزوین، قم، سنندج و ساری را ندارد. اگر دوستان کد این شهرها را پیدا کردند، به بنده اطلاع بدن.
پوشه ی Conditions، حاوی فایل های Localization برای عنوان وضعیت جوی همانند "آفتابی"، "برفی"، "بارانی" و ... است. نام این فایل ها باید مشخصه ی زبان مورد استفاده ای باشد که می خواهید به متد GetForecast پاس دهید. به عنوان مثال، فایل fa.xml مشخص کننده ی زبان فارسی است و به متد GetForecast نیز باید عبارت fa پاس داده شود. می توانید این فایل را باز کرده و ترجمه هایی که انجام دادم را بنا به نیاز خودتون اصلاح کنید. معادل انگلیسی کلمات فارسی در فایل en.xml وجود دارند.
فایل های پوشه ی PressureState نیز از قوانین نامگذاری فایل های پوشه ی Conditions پیروی می کنند. این پوشه، فایل های Localization برای وضعیت فشار هوا را نگهداری می کند.
در پوشه ی Days نیز فایل های Localization مربوط به عناوین روزهای هفته نگهداری می شود.

بیشترین تلاش من بر روی Provider based شدن کتابخانه و قابل توسعه بودن اون بود که به لطف IoC و Dependency Injection این مهم محقق شد. اگر دوست دارید که از سرویسی به جز سرویس آب و هوای !Yahoo استفاده کنید، فقط کافی است اینترفیس های IProvider و IPath رو پیاده سازی کنید. اینترفیس IProvider شامل دو متد است. متد GetForecastRss برای بازیابی rss مربوطه و متد ConvertForecastToWeather برای تبدیل rss به اینترفیس IWeather.
اینترفیس IWeather دارای خصیصه های مورد نیاز برای تبدیل rss به اشیای معادل است.
اینترفیس IPath نیز خصیصه ی DataPath برای معرفی مسیر Resource ها را دارد.

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

در صورتی که هرگونه پیشنهاد، انتقاد یا نظری در رابطه با این کتابخانه داشتید، در همین تاپیک مطرح بفرمایید.

موفق باشید. :لبخندساده:

اوبالیت به بو
شنبه 27 شهریور 1389, 20:47 عصر
شرمنده!

من براي ابراز احساسات نتونستم خودم رو كنترل كنم.

زبان قاصد (قاثد، صاسد) است از سخن گفتن.

Ali_M.Eghbaldar
شنبه 27 شهریور 1389, 20:51 عصر
سلام

این کتابخانه ای بود که واقعا تو این سایت جاش خالی
کاره بسیار خوب و بزرگی بود.
فقط یک سوال ؟!
این DLL شما این قابایت داره که بشه تک تک عناصر ازش استخراج کرد؟

Behrouz_Rad
شنبه 27 شهریور 1389, 20:55 عصر
سلام

این کتابخانه ای بود که واقعا تو این سایت جاش خالی
کاره بسیار خوب و بزرگی بود.
فقط یک سوال ؟!
این DLL شما این قابایت داره که بشه تک تک عناصر ازش استخراج کرد؟
مرسی لطف دارید.
متوجه منظورتون نشدم.

Ali_M.Eghbaldar
شنبه 27 شهریور 1389, 21:03 عصر
منظورم اینکه مثلا میشه فقط مقدار " دمای جاری (سانتیگراد) " بعد از اجرا گرفت؟

Behrouz_Rad
شنبه 27 شهریور 1389, 21:07 عصر
منظورم اینکه مثلا میشه فقط مقدار " دمای جاری (سانتیگراد) " بعد از اجرا گرفت؟
بله می تونید. بدین منظور از خصیصه ی CurrentTemperature خصیصه ی Today استفاده کنید.

موفق باشید.

h.alizadeh
شنبه 27 شهریور 1389, 23:01 عصر
سلام ممنون آقای رادِ پیشقدم :)
یه لحظه دموتون این اررور رو داد:


Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.

Behrouz_Rad
یک شنبه 28 شهریور 1389, 00:18 صبح
سلام ممنون آقای رادِ پیشقدم :)
یه لحظه دموتون این اررور رو داد:
سلام خانم علیزاده :)
چیز مهمی نیست. به کتابخانه ارتباطی نداره. به کلید LSA که در Server برای رمزگشایی ViewState وجود داره مربوط میشه که الان درستش کردم و دیگه خطا نمیده.

موفق باشید.

اوبالیت به بو
یک شنبه 28 شهریور 1389, 00:25 صبح
سلام

آقاي بهروز راد خيلي سوال دارم.

اگر بخواهيم اين قسمت رو بدون Lambda Expressions بنويسيم چگونه خواهد شد و اينكه Where و Elements و Select جزو Linq هستند؟

public static List<City> GetCities(string country)
{
XElement document = XElement.Load(LOCATIONS_PATH);

List<City> cities = document.Elements("Country")
.Where(e => e.Attribute("name").Value.Equals(country))
.Elements("Cities").Elements("City").OrderBy(c => c.Attribute("farsiName").Value)
.Select(c => new City(c.Attribute("latinName").Value, c.Attribute("farsiName").Value, c.Value.GetIntValueOrDefault()))
.ToList();

return cities;
}

Behrouz_Rad
یک شنبه 28 شهریور 1389, 00:38 صبح
سلام

آقاي بهروز راد خيلي سوال دارم.

اگر بخواهيم اين قسمت رو بدون Lambda Expressions بنويسيم چگونه خواهد شد و اينكه Where و Elements و Select جزو Linq هستند؟

public static List<City> GetCities(string country)
{
XElement document = XElement.Load(LOCATIONS_PATH);

List<City> cities = document.Elements("Country")
.Where(e => e.Attribute("name").Value.Equals(country))
.Elements("Cities").Elements("City").OrderBy(c => c.Attribute("farsiName").Value)
.Select(c => new City(c.Attribute("latinName").Value, c.Attribute("farsiName").Value, c.Value.GetIntValueOrDefault()))
.ToList();

return cities;
}

لطفاً اینگونه سوالات رو در بخش C#‎‎ مطرح بفرمایید...

.......................

ما به دو شکل می تونیم با LINQ سر و کار داشته باشیم. یا با Query Syntax یا Method Syntax. البته Query Syntax در زمان کامپایل به Method Syntax تبدیل میشه. من در اینجا از Method Syntax استفاده کردم. در بقیه ی متدهای بازیابی که با عبارت Get شروع می شوند، از Query Syntax استفاده کردم. از همون ها می تونی ایده بگیری.

بله، Where و Select از خانواده ی Method Syntax برای هسته ی LINQ هستند اما Elements مختص LINQ to XML هست.

موفق باشید.

iman_ad
یک شنبه 28 شهریور 1389, 22:41 عصر
سلام
اول تشکر می کنم بابت به اشتراک گذاشتن تجربیاتتون
به نظر من اگه در آینده Provider base نوشته بشه و از سرویس دهنده های مختلف پشتیبانی کنه و به یک کامپوننت تبدیل بشه عالی می شه

salehbagheri
دوشنبه 29 شهریور 1389, 00:15 صبح
متاسفانه وب سرویس آب و هوای !Yahoo، شهرهای ایلام، اردبیل، سمنان، قزوین، قم، سنندج و ساری را ندارد. اگر دوستان کد این شهرها را پیدا کردند، به بنده اطلاع بدن.

یک سؤال: مگه خود ایران هواشناسی نداره که از Yahoo سرویس میگیرید؟

persian_bigboy
دوشنبه 29 شهریور 1389, 08:01 صبح
بدک نیست ! قبلا در سایت خیلی بحث شده بود و اطلاعات هم زیاد گذاشته بودیم .

Behrouz_Rad
دوشنبه 29 شهریور 1389, 08:30 صبح
به نظر من اگه در آینده Provider base نوشته بشه و از سرویس دهنده های مختلف پشتیبانی کنه و به یک کامپوننت تبدیل بشه عالی می شه

در نسخه ی بعد انشاا...

یک سؤال: مگه خود ایران هواشناسی نداره که از Yahoo سرویس میگیرید؟
اطلاعات آب و هوای سایت سازمان هواشناسی کشور کامل نیست.

موفق باشید.

lahij.ir
دوشنبه 29 شهریور 1389, 11:30 صبح
سلام فوق العده زیبا کار میکنه اما اگه بخوایم همینو تحت ویندوز و exe بنویسیم با زبان vb.net باید چی کار کنیم ؟ میشه راهنمایی کنید

Behrouz_Rad
دوشنبه 29 شهریور 1389, 12:16 عصر
در نسخه ی بعد انشاا...

صادق صدقی
سه شنبه 30 شهریور 1389, 04:33 صبح
سلام
با این همیشه پست های منو پاک می کنی

اما خدائیش باید تشکر کرد

منتظره تحت ویندوزش هم هستیم

raziee
سه شنبه 30 شهریور 1389, 11:00 صبح
منتظره تحت ویندوزش هم هستیم
منتظرش نباشید.
آقای راد زحمت کشیدند و کدهایی که نوشتند که شما با استفاده از اون ها میتونید خودتون برای برنامه های دسکتاپ بنویسید.

lahij.ir
سه شنبه 30 شهریور 1389, 11:30 صبح
یه نمونه ی ساده هم اگه بزارین توفیق میکنه :لبخند: ممنون میشم :لبخند::تشویق:

Behrouz_Rad
سه شنبه 30 شهریور 1389, 14:35 عصر
منتظرش نباشید.
آقای راد زحمت کشیدند و کدهایی که نوشتند که شما با استفاده از اون ها میتونید خودتون برای برنامه های دسکتاپ بنویسید.
نوع مسیردهی فایل های Resource برنامه برای برنامه های تحت وب هست. برای اینکه در برنامه های تحت ویندوز هم قابل استفاده باشه، باید نوع مسیردهی Dynamic باشه. در نسخه ی بعدی این مورد رو لحاظ می کنم.

موفق باشید.

Behrouz_Rad
چهارشنبه 31 شهریور 1389, 15:20 عصر
نسخه ی دوم این کتابخانه منتشر شد.
توضیحات و فایل ضمیمه را از پست اصلی دانلود بفرمایید.
قابلیت های این نسخه عبارت اند از:

1) Provider based
2) نمایش اطلاعات آب و هوای روز بعد (حداقل دما، حداکثر دما، وضعیت جوی)
3) سازگاری برای اجرا در برنامه ی Desktop
4) انتخاب مسیر دلخواه برای فایل های Resource


موفق باشید.

reza6966
چهارشنبه 31 شهریور 1389, 16:04 عصر
بیشترین تلاش من بر روی Provider based شدن کتابخانه و قابل توسعه بودن اون بود که به لطف IoC و Dependency Injection این مهم محقق شد. اگر دوست دارید که از سرویسی به جز سرویس آب و هوای !Yahoo استفاده کنید، فقط کافی است اینترفیس های IProvider و IPath رو پیاده سازی کنید. اینترفیس IProvider شامل دو متد است. متد GetForecastRss برای بازیابی rss مربوطه و متد ConvertForecastToWeather برای تبدیل rss به اینترفیس IWeather.

ممنون جناب آقای راد
میشه راجب Provider based یه توضیحی بدید ؟؟؟ من متوجه کارایی این خصیصه و اینکه کلا چی هست نشدم ....
ممنون می شم

Behrouz_Rad
چهارشنبه 31 شهریور 1389, 18:10 عصر
ممنون جناب آقای راد
میشه راجب Provider based یه توضیحی بدید ؟؟؟ من متوجه کارایی این خصیصه و اینکه کلا چی هست نشدم ....
ممنون می شم
یعنی شما می تونید با وب سرویس آب و هوای دلخواهتون ارتباط برقرار کنید و این کتابخانه رو توسعه بدید. در حال حاضر من از وب سرویس !Yahoo استفاده می کنم. شما می تونی مثلاً وب سرویس سایت WeatherBug رو به این پروژه اضافه کنی.

موفق باشید.

Behrouz_Rad
یک شنبه 04 مهر 1389, 14:06 عصر
نسخه ی سوم این کتابخانه منتشر شد.

توضیحات و فایل ضمیمه را از پست اصلی دانلود بفرمایید.

به دلیل برخی تغییرات کلیدی در این کتابخانه، توضیحات آن را مجدداً و با توجه به آخرین تغییرات بازنویسی کردم.

در این نسخه، قابلیت نمایش آب و هوای 4 روز آینده (حداقل دما، حداکثر دما، عنوان وضعیت جوی، تصویر وضعیت جوی) اضافه شده است.

موفق باشید.

saeed zarei
دوشنبه 05 مهر 1389, 17:30 عصر
سلام و تشکر خدمت آقا بهروز
من یه سوال داشتم و اون اینه که چطور میشه میزان بارندگی یک شهر را پیدا کرد و تو سایت قرار داد ؟
نمونه اون هم تو سایت جهاد کشاورزی زرین دشت وجود داره
خدایی کارم گیر کرده ، ممنون میشم کمکم کنید

یا علی مدد

Behrouz_Rad
سه شنبه 06 مهر 1389, 00:03 صبح
سلام و تشکر خدمت آقا بهروز
من یه سوال داشتم و اون اینه که چطور میشه میزان بارندگی یک شهر را پیدا کرد و تو سایت قرار داد ؟
نمونه اون هم تو سایت جهاد کشاورزی زرین دشت وجود داره
خدایی کارم گیر کرده ، ممنون میشم کمکم کنید

یا علی مدد
وب سرویس آب و هوای !Yahoo میزان بارندگی شهر رو نمایش نمیده. اما وب سرویس سایت WeatherBug.com این قابلیت رو داره. RadWeather قابل توسعه نوشته شده. شما می تونی وب سرویس WeatherBug رو به اون اضافه کنی.

موفق باشید.

blackcats
سه شنبه 06 مهر 1389, 07:57 صبح
بابا تو دیگه کی هستی!!!!!
دمت گرم اخوی

HamidNch
سه شنبه 06 مهر 1389, 11:53 صبح
خيلي عاليه.واقعا ممنون آقاي راد.
يه سوال داشتم چطوري استان قزوين رو بهش اضافه كنم.

Behrouz_Rad
سه شنبه 06 مهر 1389, 14:05 عصر
خيلي عاليه.واقعا ممنون آقاي راد.
يه سوال داشتم چطوري استان قزوين رو بهش اضافه كنم.
خواهش می کنم. پست اصلی رو با دقت مطالعه بفرمایید تا جواب سوالتون رو پیدا کنید.

موفق باشید.

Ahmadgolagha
چهارشنبه 07 مهر 1389, 11:00 صبح
با سلام و تشکر
واقعا عالیه

راجع به نسخه وب


چند نکته و سوال :

بعضی جمله ها شاید خبری باشه و سوالی نباشه اگه نظری داشتید بدید

1- نتونستم روزهای آینده رو حذف کنم، مثلا اگه روز چهارم بخوام پاک کنم خطا میده. (آدرس محل پروژه شما تو داکیومنت رو هم میده)

2- بعضی موقع ها شکل آب و هوا یه شکل متنی هست که نوشتهHAZE (شاید مشکل یاهو باشه که تو ذوق می زنه)

3- برای استفاده نمونه شما با masterpage باید namespace رو هم برای مسترپیج گذاشت و هم برای صفحه، نمی شه یه حالتی بشه مثل همه dll ها که فقط using گذاشت

4- اگه مسترپیج از namespace استفاده کنه در صورت تاثیر داره مثلا چند کیلو بایت اضافه میشه

5- کلاس SiteHelper چه کار می کنه؟ چرا وقتی از پروژه حذفش می کنیم اتفاق خاصی نمیفته؟

6- پوشه WeatherData را علی الظاهر آدرس دهی پویا داره و فقط در اول صفحه مقدار گرفته، چرا وقتی آدرس پوشه رو عوض می کنیم فقط از آدرس شما می خونه؟ (فکر کنم تو فایل dll مقدار پویا نیست)

7- حتما باید از دو dll استفاده کرد؟ (هر کدوم را پاک کنیم خطا می ده)

8- اسم صفحه هم نباید Waether باشه (محض اطلاع دوستان)

Behrouz_Rad
چهارشنبه 07 مهر 1389, 12:42 عصر
Ahmadgolagha@
کمی بیشتر روی جمله بندی هات دقت کن. صحبت عامیانه و نگارش متن با هم دیگه متفاوت هستند.



1- نتونستم روزهای آینده رو حذف کنم، مثلا اگه روز چهارم بخوام پاک کنم خطا میده. (آدرس محل پروژه شما تو داکیومنت رو هم میده)

متوجه نشدم. روز رو حذف کنی؟ از چی حذف کنی؟ چرا حذف کنی؟



2- بعضی موقع ها شکل آب و هوا یه شکل متنی هست که نوشتهHAZE (شاید مشکل یاهو باشه که تو ذوق می زنه)

این تصاویر از سایت !Yahoo دریافت میشن.



3- برای استفاده نمونه شما با masterpage باید namespace رو هم برای مسترپیج گذاشت و هم برای صفحه، نمی شه یه حالتی بشه مثل همه dll ها که فقط using گذاشت

خیر نیازی نیست. در یکی از اونها قرار بدی کافیه.


4- اگه مسترپیج از namespace استفاده کنه در صورت تاثیر داره مثلا چند کیلو بایت اضافه میشه

در صورت؟ منظورت سرعته؟ namespace فقط راهنمای کامپایلر برای پیدا کردن مسیر فراخوانی متد مورد نظر هست. وقتی شما از متدی استفاده نمی کنی، وجود namespace در برنامه تاثیری نداره.



5- کلاس SiteHelper چه کار می کنه؟ چرا وقتی از پروژه حذفش می کنیم اتفاق خاصی نمیفته؟

این کلاس ارتباطی با کتابخانه نداره و برای پروژه ی Demo ازش استفاده می کنم. متدی با نام GetCities داره که لیست شهرهای یک کشور رو بازیابی می کنه. از این متد برای اضافه کردن لیست شهرها به DropDownList استفاده کردم.



6- پوشه WeatherData را علی الظاهر آدرس دهی پویا داره و فقط در اول صفحه مقدار گرفته، چرا وقتی آدرس پوشه رو عوض می کنیم فقط از آدرس شما می خونه؟ (فکر کنم تو فایل dll مقدار پویا نیست)

پوشه ی WeatherData رو هر جایی که دوست داشته باشی می تونی قرار بدی. مثلاً اگر اون رو در پوشه ای با نام test در ریشه ی اصلی قرار میدی، به شکل ذیل می تونی مسیر اون رو برای کلاس YahooProvider آماده کنی:


string dataPath = Path.Combine(Server.MapPath("."), "test");



7- حتما باید از دو dll استفاده کرد؟ (هر کدوم را پاک کنیم خطا می ده)

خیر. فقط فایل RadWeather.dll کافی هست.


8- اسم صفحه هم نباید Waether باشه (محض اطلاع دوستان)

خیر. میتونه باشه. اگر دقت کرده باشی، تیم توسعه ی ASP.NET در ابتدای نام کلاس صفحه ی Default.aspx، کاراکتر _ رو قرار داده تا اگر شما کلاسی با نام Default به پروژت اضافه کردی، با فایل کلاس صفحه ی Default.aspx اشتباه گرفته نشه. از همین روش هم می تونی برای صفحه ی Weather.aspx استفاده کنی. در دایرکتیو Page نیز مقدار عبارت Inherits رو باید برابر با Weather_ قرار بدی.

موفق باشید.

HamidNch
پنج شنبه 08 مهر 1389, 13:41 عصر
تشكر مجدد از شما جناب راد.
من كلمه Qazvin رو سرچ كردم اما چيزي نياورد،ممكنه قزوين رو نداشته باشه.

peyman-rashidi
چهارشنبه 17 آذر 1389, 08:37 صبح
63255

با سلام و خسته نباشيد و تشكر از كار خوبتون
من با vb كدهاي شما رو پياده سازي كردم دقيقا طبق دستورالعمل تون ولي اين error رو مي ده
البته اينو بگم كه حتي پروژه تست شما رو كه ضميمه بود اجرا كردم همين error داد
لطفا راهنماييم كنيد

Behrouz_Rad
چهارشنبه 17 آذر 1389, 19:46 عصر
Demo ای از پروژه ی مشکل دار رو ضمیمه بفرمایید.

peyman-rashidi
شنبه 20 آذر 1389, 10:47 صبح
63444
ممنون از لطف شما

Behrouz_Rad
شنبه 20 آذر 1389, 21:44 عصر
شما از نسخه ی 2.0 پروژه استفاده کردید، در حالی که محتویات پوشه ی WeatherData رو از پوشه ی WeatherData مربوط به نسخه ی 3.0 کتابخانه کپی کردید!
در نسخه ی 3.0، ساختار فایل های XML مربوط به PressureState تغییر کردند.

موفق باشید.

ad.davachi
چهارشنبه 22 دی 1389, 01:52 صبح
سلام با تشکر از تاپیک خوبتون من از این آب و هوا تو سایتم استفاده کردم. روی 2 ویندوز 7 و xp امتحان کردم کار می کنه و مشکلی نداره. اما روی ویندوز سرور کار نمی کنه.مشکلش اینه که نمی تونه به اینترنت وصل بشه.من هر چی گشتم قسمتی که به اینترنت وصل می شه رو نتونسم پیدا کنم(توی کد) .لطفا بگید چطور به اینترنت وصل میشه.من باید چه کار کنم؟

Behrouz_Rad
چهارشنبه 22 دی 1389, 15:07 عصر
متد DownloadString کلاس WebClient

Sundown
جمعه 24 دی 1389, 11:59 صبح
آقای راد اگر امکان داره یک بار آخرین نسخه را با آخرین نسخه از پوشه WeatherData آپلود کنید
چون ظاهرا به خاطر تغییرات در پوشه و فایل Dll دچار عدم سازگاری با هم شده اند.

چند پیشنهاد:
یک : بهتر بود برای توابع و خصیصه ها SUmmery تعریف می کردید تا استفاده از dll خواناتر باشه.
ثانیا : بهتر بود File Version رو هم برای هر نسخه از dll تغییر می دادید تا راحت بشه فهمید هر dll مربوط به کدام نسخه است.
ثالثا : اگر راهی داشته باشه که dll نیازی به پوشه weatherData نداشته باشه خیلی بهتر و شکیل تر خواهد شد.

با تشکر

Behrouz_Rad
شنبه 25 دی 1389, 06:55 صبح
آقای راد اگر امکان داره یک بار آخرین نسخه را با آخرین نسخه از پوشه WeatherData آپلود کنید
چون ظاهرا به خاطر تغییرات در پوشه و فایل Dll دچار عدم سازگاری با هم شده اند.

خیر دوست من. هیچ مشکلی وجود نداره. من الان مجدداً پروژه رو دانلود و اجرا کردم و مشکلی وجود نداشت. اگر به مشکلی برخورد کردید در این تاپیک مطرح بفرمایید.


بهتر بود برای توابع و خصیصه ها SUmmery تعریف می کردید تا استفاده از dll خواناتر باشه.

Property ها و متدها بسیار واضح هستند اما بله بهتر هست که این کار انجام بشه.


بهتر بود File Version رو هم برای هر نسخه از dll تغییر می دادید تا راحت بشه فهمید هر dll مربوط به کدام نسخه است.

چون تغییرات خیلی سریع بود، ترجیح دادم که همگی تحت یک نسخه باشند.


اگر راهی داشته باشه که dll نیازی به پوشه weatherData نداشته باشه خیلی بهتر و شکیل تر خواهد شد.

به دلیل Provider-based و قابل سفارشی بودن این کامپوننت، این کار امکان پذیر نیست. اگر استفاده کننده دوست داشته باشه که عبارت های موجود رو تغییر بده، به راحتی از طریق فایل های Resource امکان پذیر هست.

موفق باشید.

saeidrp
شنبه 23 بهمن 1389, 00:49 صبح
با سلام
من از کد نویسی و برنامه نویسی چیزی نمی دانم.
آقا بهروز آیا امکان دارد که اسکریپت قابل نصب مانند دموی بر نامه شما را جهت دانلود قرار دهید.؟

NR_Nazifi
سه شنبه 03 خرداد 1390, 15:36 عصر
سلام ممنون از کدتون خیلی بدرد می خوره
فقط یه سوال اینکه ایا امکان تغییر تصاویر است؟ چون تصاویرش خیلی کم کیفیت هستند!

ASP.NET2
جمعه 28 بهمن 1390, 19:38 عصر
سلام
آیا راهی هستش که بشه تصاویر مربوط به وضعیت آب و هوا رو تغییر داد؟
با تشکر

mehrdad_shahian
شنبه 26 فروردین 1391, 00:00 صبح
سلام
من از شما بابت کدتون تشکر میکنم.خیلی عالی هستش. ولی من اینو توی یکی از سایتهام اسفاده کردم.وقتی سایت رو روی سیستم خودم(local) اجرا میکنم اطلاعات اب و هوا رو نشون میده ولی وقتی روی هاست میریزم ارور میده.و جای اعداد خطای "خطا در دریافت اطلاعات" رو میده.میخواسم بدونم تغییرات خاصی میخواد برای پابلیش روی هاست یا نه؟

ممنون

Rohollaes
شنبه 20 خرداد 1391, 15:41 عصر
واقعا ممنون جناب راد ...

mahdi.violin
جمعه 13 مرداد 1391, 11:33 صبح
سلام.
میشه وضعیت آب و هوا بر اساس آی پی کاربر باشه ؟

vham.ro
یک شنبه 07 آبان 1391, 20:57 عصر
سلام یه مشکل کوچیک داشتم لصفا اساتید راهنماییم کنید .



string dataPath = Application.StartupPath;
IWeather weather = new Weather(new YahooProvider(dataPath))
.GetForecast(2254294, "fa", DegreesUnit.Celsius);



تابع weather مقدار null را بر میگرداند مسیر dataPath دقیقا به چه آدرسی اشاره میکنه ؟

vham.ro
دوشنبه 08 آبان 1391, 18:57 عصر
کسی نمیتونه کمک کنه من برنامه رو رو سیستم Local اجرا کردم و لی مقدار متد weather خالی NULL میشه اگه کار خاصی باید انجام بشه لطفا بگین

mb.programmer
چهارشنبه 28 فروردین 1392, 11:15 صبح
مرسی از زحمت اگه بزارین روی github.com (http://www.github.com) خیلی خوبه تا هم راحت تر پیدا بشه هم دوستان بتونن کد رو fork کنن

minamorsali
دوشنبه 23 اردیبهشت 1392, 12:12 عصر
خیلی خیلی متشکرم بخاطر این کنترل واقعا عالی بود و مشکل منو حل کرد.

minamorsali
سه شنبه 24 اردیبهشت 1392, 10:56 صبح
ببخشید آقای راد،امکان تغییر تصاویر وجود نداره؟ تصاویر خود یاهو بی کیفیته...

Behrouz_Rad
سه شنبه 24 اردیبهشت 1392, 11:31 صبح
ببخشید آقای راد،امکان تغییر تصاویر وجود نداره؟ تصاویر خود یاهو بی کیفیته...
به صورت روشی از پیش تعبیه شده خیر، اما کدهای این کتابخانه در دسترس هست. می تونید به دلخواه خودتون تغییر بدید.

minamorsali
سه شنبه 04 تیر 1392, 21:21 عصر
من با استفاده از کد وضعیت هوا در حالت انگلیسی (condition) یک سوئیچ نوشتم و در هر حالت عکس مناسب رو برگردوندم.اینطوری دیگه حتما نیاز به استفاده از عکسهای یاهو نیست:
string dy = weatheren.Today.Condition;
switch (dy)
{
case "tornado":
return "/theme_fa/images/weather/tornado.png";
break;
case "tropical storm":
return "/theme_fa/images/weather/tropical storm.png";
break;
case "hurricane":
return "/theme_fa/images/weather/hurricane.png";
break;
case "severe thunderstorms":
return "/theme_fa/images/weather/severe thunderstorms.png";
break;
case "thunderstorms":
return "/theme_fa/images/weather/thunderstorms.png";
break;
case "mixed rain and snow":
return "/theme_fa/images/weather/mixed rain and snow.png";
break;
case "mixed rain and sleet":
return "/theme_fa/images/weather/mixed rain and sleet.png";
break;
case "mixed snow and sleet":
return "/theme_fa/images/weather/mixed snow and sleet.png";
break;
case "freezing drizzle":
return "/theme_fa/images/weather/freezing drizzle.png";
break;
case "drizzle":
return "/theme_fa/images/weather/drizzle.png";
break;
case "freezing rain":
return "/theme_fa/images/weather/freezing rain";
break;
case "showers"://ok
return "/theme_fa/images/weather/showers.png";
break;

case "snow flurries":
return "/theme_fa/images/weather/snow flurries.png";
break;
case "light snow showers":
return "/theme_fa/images/weather/light snow showers.png";
break;
case "blowing snow":
return "/theme_fa/images/weather/blowing snow.png";
break;
case "snow":
return "/theme_fa/images/weather/snow.png";
break;
case "hail":
return "/theme_fa/images/weather/hail.png";
break;
case "sleet":
return "/theme_fa/images/weather/sleet.png";
break;
case "dust"://ok
return "/theme_fa/images/weather/dust";
break;
case "foggy"://ok
return "/theme_fa/images/weather/foggy.png";
break;
case "haze"://ok
return "/theme_fa/images/weather/haze.png";
break;
case "smoky":
return "/theme_fa/images/weather/smoky.png";
break;
case "blustery":
return "/theme_fa/images/weather/blustery.png";
break;
case "windy"://ok
return "/theme_fa/images/weather/windy.png";

break;
case "cold":
return "/theme_fa/images/weather/cold.png";
break;
case "cloudy":
return "/theme_fa/images/weather/cloudy.png";
break;
case "mostly cloudy (night)":
return "/theme_fa/images/weather/mostly cloudy (night).png";
break;
case "mostly cloudy (day)"://ok
return "/theme_fa/images/weather/mostly cloudy (day).png";
break;
case "partly cloudy (night)"://ok
return "/theme_fa/images/weather/partly cloudy (night).png";
break;
case "partly cloudy (day)"://ok
return "/theme_fa/images/weather/partly cloudy (day).png";
break;
case "clear (night)":
return "/theme_fa/images/weather/clear (night).png";
break;
case "sunny"://ok
return "/theme_fa/images/weather/sunny.png";
break;
case "fair (night)"://ok
return "/theme_fa/images/weather/fair (night).png";
break;
case "fair (day)"://ok
return "/theme_fa/images/weather/fair (day).png";
break;
case "mixed rain and hail":
return "/theme_fa/images/weather/mixed rain and hail.png";
break;
case "hot":
return "<img src='/theme_fa/images/weather/hot.png";
break;
case "isolated thunderstorms":
return "/theme_fa/images/weather/isolated thunderstorms.png";
break;
case "scattered thunderstorms":
return "/theme_fa/images/weather/scattered thunderstorms.png";
break;
case "scattered showers":
return "/theme_fa/images/weather/scattered showers.png";
break;
case "heavy snow":
return "/theme_fa/images/weather/heavy snow.png'/><br/>";
break;
case "scattered snow showers":
return "/theme_fa/images/weather/scattered snow showers.png";
break;
case "partly cloudy":
return "/theme_fa/images/weather/partly cloudy.png";
break;
case "thundershowers":
return "/theme_fa/images/weather/thundershowers.png";
break;
case "snow showers":
return "/theme_fa/images/weather/snow showers.png";
break;
case "isolated thundershowers":
return "/theme_fa/images/weather/isolated thundershowers.png";
break;
case "not available":
return weather.Today.ImageUrl;
break;
default:
return weather.Today.ImageUrl;
break;
}

minamorsali
سه شنبه 04 تیر 1392, 21:23 عصر
سلام یه مشکل کوچیک داشتم لصفا اساتید راهنماییم کنید .



string dataPath = Application.StartupPath;
IWeather weather = new Weather(new YahooProvider(dataPath))
.GetForecast(2254294, "fa", DegreesUnit.Celsius);



تابع weather مقدار null را بر میگرداند مسیر dataPath دقیقا به چه آدرسی اشاره میکنه ؟




datapath به مسیری اشاره داره که پوشه WeatherData که اطلاعات xml مربوط به آب و هوا وجود داره در آن هست.

minamorsali
سه شنبه 04 تیر 1392, 21:29 عصر
یه سوالی داشتم آقای راد:
با توجه به اینکه یاهو برای بعضی شهرها (مثل ایلام قزوین و..) وحتی شهرستانها وضعیت آب و هوا رو نداره اگه کد اون شهر رو بهش بدیم ارور :Specified argument was out of the range of valid values رو دریافت میکنیم..راه حل چیه؟
اگه قرار باشه از پرووایدر دیگری مثل weatherbug استفاده کنیم چطور باید این کار رو بکنیم؟ چه کدی باید به کتابخانه اضافه کرد؟
باز هم متشکر از کنترل خوب و کاملتون

mbasirati
یک شنبه 20 مرداد 1392, 17:00 عصر
سلام
از زحمت شما جناب آقای راد خیلی تشکر میکنم.
برای من این ارور رو داد. علتش چیه؟ به خط شماره 15 گیر داده!


Object reference not set to an instance of an object.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error:


Line 13: {
Line 14: string dataPath = Server.MapPath(".");
Line 15: IWeather weather = new Weather(new YahooProvider(dataPath))
Line 16: .GetForecast(2232705, "fa", DegreesUnit.Celsius);
Line 17: if (weather != null)

ghosse
چهارشنبه 06 فروردین 1393, 00:00 صبح
سلام دوست عزیز
برای نسخه ی تحت ویندوز هم باید از دستورات فوق پیروی کرد یا این دستورات فقط مربوط به وب میباشد؟؟؟
اگر لطف کنید جواب من را به ایمیل زیر ارسال کنید
hiddeneblis@yahoo.com
با تشکر از لطفتان

mahasti
دوشنبه 11 فروردین 1393, 14:59 عصر
سلام
من مراحله بالارو دقیق انجام دادم ولی weather =null میشه باید چیکارکنم؟

notlikeothers
چهارشنبه 15 اردیبهشت 1395, 06:12 صبح
درود.دوستان چرا این سرویس یاهو کار نمیکنه؟؟؟؟

notlikeothers
چهارشنبه 15 اردیبهشت 1395, 06:14 صبح
درود.دوستان چرا این سرویس یاهو کار نمیکنه؟