# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > ASP.NET Web Forms >  RadWeather - کتابخانه ای برای بازیابی اطلاعات مربوط به وضعیت آب و هوا

## Behrouz_Rad

RadWeather کتابخانه ای برای بازیابی اطلاعات مربوط به وضعیت آب و هوای یک شهر است که با C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎ نوشتم.
Demo ی این کتابخانه در آدرس ذیل قابل دسترس هست:
* 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 ها را دارد.

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

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

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

----------


## اوبالیت به بو

شرمنده!

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

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

----------


## Ali_M.Eghbaldar

سلام

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

----------


## Behrouz_Rad

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


مرسی لطف دارید.
متوجه منظورتون نشدم.

----------


## Ali_M.Eghbaldar

منظورم اینکه مثلا میشه فقط مقدار "                 دمای جاری (سانتیگراد)             " بعد از اجرا گرفت؟

----------


## Behrouz_Rad

> منظورم اینکه مثلا میشه فقط مقدار "                 دمای جاری (سانتیگراد)             " بعد از اجرا گرفت؟


بله می تونید. بدین منظور از خصیصه ی CurrentTemperature خصیصه ی Today استفاده کنید.

موفق باشید.

----------


## h.alizadeh

سلام ممنون آقای رادِ پیشقدم :)
یه لحظه دموتون این اررور رو داد:



> _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

> سلام ممنون آقای رادِ پیشقدم :)
> یه لحظه دموتون این اررور رو داد:


سلام خانم علیزاده :)
چیز مهمی نیست. به کتابخانه ارتباطی نداره. به کلید LSA که در Server برای رمزگشایی ViewState وجود داره مربوط میشه که الان درستش کردم و دیگه خطا نمیده.

موفق باشید.

----------


## اوبالیت به بو

سلام

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

اگر بخواهيم اين قسمت رو بدون 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

> سلام
> 
> آقاي بهروز راد خيلي سوال دارم.
> 
> اگر بخواهيم اين قسمت رو بدون Lambda Expressions بنويسيم چگونه خواهد شد و اينكه Where و Elements و Select جزو Linq هستند؟
>         public static List<City> GetCities(string country)
>         {
>             XElement document = XElement.Load(LOCATIONS_PATH);
> 
> ...


لطفاً اینگونه سوالات رو در بخش 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

سلام
اول تشکر می کنم بابت به اشتراک گذاشتن تجربیاتتون
به نظر من اگه در آینده Provider base نوشته بشه و از سرویس دهنده های مختلف پشتیبانی کنه و به یک کامپوننت تبدیل بشه عالی می شه

----------


## salehbagheri

> متاسفانه وب سرویس آب و هوای !Yahoo، شهرهای ایلام، اردبیل، سمنان، قزوین، قم، سنندج و ساری را ندارد. اگر دوستان کد این شهرها را پیدا کردند، به بنده اطلاع بدن.


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

----------


## persian_bigboy

بدک نیست ! قبلا در سایت خیلی بحث شده بود و اطلاعات هم زیاد گذاشته بودیم .

----------


## Behrouz_Rad

> به نظر من اگه در آینده Provider base نوشته بشه و از سرویس دهنده های مختلف پشتیبانی کنه و به یک کامپوننت تبدیل بشه عالی می شه


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



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


اطلاعات آب و هوای سایت سازمان هواشناسی کشور کامل نیست.

موفق باشید.

----------


## lahij.ir

سلام فوق العده زیبا کار میکنه اما اگه بخوایم همینو تحت ویندوز و exe بنویسیم با زبان vb.net باید چی کار کنیم ؟ میشه راهنمایی کنید

----------


## Behrouz_Rad

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

----------


## صادق صدقی

سلام
با این همیشه پست های منو پاک می کنی

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

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

----------


## raziee

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


منتظرش نباشید.
آقای راد زحمت کشیدند و کدهایی که نوشتند که شما با استفاده از اون ها میتونید خودتون برای برنامه های دسکتاپ بنویسید.

----------


## lahij.ir

یه نمونه ی ساده هم اگه بزارین توفیق میکنه  :لبخند گشاده!:  ممنون میشم  :لبخند گشاده!:  :تشویق:

----------


## Behrouz_Rad

> منتظرش نباشید.
> آقای راد زحمت کشیدند و کدهایی که نوشتند که شما با استفاده از اون ها میتونید خودتون برای برنامه های دسکتاپ بنویسید.


نوع مسیردهی فایل های Resource برنامه برای برنامه های تحت وب هست. برای اینکه در برنامه های تحت ویندوز هم قابل استفاده باشه، باید نوع مسیردهی Dynamic باشه. در نسخه ی بعدی این مورد رو لحاظ می کنم.

موفق باشید.

----------


## Behrouz_Rad

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

موفق باشید.

----------


## reza6966

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


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

----------


## Behrouz_Rad

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


یعنی شما می تونید با وب سرویس آب و هوای دلخواهتون ارتباط برقرار کنید و این کتابخانه رو توسعه بدید. در حال حاضر من از وب سرویس !Yahoo استفاده می کنم. شما می تونی مثلاً وب سرویس سایت WeatherBug رو به این پروژه اضافه کنی.

موفق باشید.

----------


## Behrouz_Rad

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

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

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

موفق باشید.

----------


## saeed zarei

سلام و تشکر خدمت آقا بهروز
من یه سوال داشتم و اون اینه که چطور میشه میزان بارندگی یک شهر را پیدا کرد و تو سایت قرار داد ؟
نمونه اون هم تو سایت جهاد کشاورزی زرین دشت وجود داره
خدایی کارم گیر کرده ، ممنون میشم کمکم کنید

یا علی مدد

----------


## Behrouz_Rad

> سلام و تشکر خدمت آقا بهروز
> من یه سوال داشتم و اون اینه که چطور میشه میزان بارندگی یک شهر را پیدا کرد و تو سایت قرار داد ؟
> نمونه اون هم تو سایت جهاد کشاورزی زرین دشت وجود داره
> خدایی کارم گیر کرده ، ممنون میشم کمکم کنید
> 
> یا علی مدد


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

موفق باشید.

----------


## blackcats

بابا تو دیگه کی هستی!!!!!
دمت گرم اخوی

----------


## HamidNch

خيلي عاليه.واقعا ممنون آقاي راد.
يه سوال داشتم چطوري استان قزوين رو بهش اضافه كنم.

----------


## Behrouz_Rad

> خيلي عاليه.واقعا ممنون آقاي راد.
> يه سوال داشتم چطوري استان قزوين رو بهش اضافه كنم.


خواهش می کنم. پست اصلی رو با دقت مطالعه بفرمایید تا جواب سوالتون رو پیدا کنید.

موفق باشید.

----------


## Ahmadgolagha

با سلام و تشکر
*واقعا عالیه*

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


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

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

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

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

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

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

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

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

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

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

----------


## Behrouz_Rad

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

تشكر مجدد از شما جناب راد.
من كلمه Qazvin رو سرچ كردم اما چيزي نياورد،ممكنه قزوين رو نداشته باشه.

----------


## peyman-rashidi

untitled.jpg

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

----------


## Behrouz_Rad

Demo ای از پروژه ی مشکل دار رو ضمیمه بفرمایید.

----------


## peyman-rashidi

Weather.zip
ممنون از لطف شما

----------


## Behrouz_Rad

شما از نسخه ی 2.0 پروژه استفاده کردید، در حالی که محتویات پوشه ی WeatherData رو از پوشه ی WeatherData مربوط به نسخه ی 3.0 کتابخانه کپی کردید!
در نسخه ی 3.0، ساختار فایل های XML مربوط به PressureState تغییر کردند.

موفق باشید.

----------


## ad.davachi

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

----------


## Behrouz_Rad

متد DownloadString کلاس WebClient

----------


## Sundown

آقای راد اگر امکان داره یک بار آخرین نسخه را با آخرین نسخه از پوشه WeatherData آپلود کنید
چون ظاهرا به خاطر تغییرات در پوشه و فایل Dll دچار عدم سازگاری با هم شده اند.

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

با تشکر

----------


## Behrouz_Rad

> آقای راد اگر امکان داره یک بار آخرین نسخه را با آخرین نسخه از پوشه WeatherData آپلود کنید
> چون ظاهرا به خاطر تغییرات در پوشه و فایل Dll دچار عدم سازگاری با هم شده اند.


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



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


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



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


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



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


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

موفق باشید.

----------


## saeidrp

با سلام 
من از کد نویسی و برنامه نویسی چیزی نمی دانم.
آقا بهروز آیا امکان دارد که اسکریپت قابل نصب مانند دموی بر نامه شما را جهت دانلود قرار دهید.؟

----------


## NR_Nazifi

سلام ممنون از کدتون خیلی بدرد می خوره
فقط یه سوال اینکه ایا امکان تغییر تصاویر است؟ چون تصاویرش خیلی کم کیفیت هستند!

----------


## ASP.NET2

سلام
آیا راهی هستش که بشه تصاویر مربوط به وضعیت آب و هوا رو تغییر داد؟
با تشکر

----------


## mehrdad_shahian

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

ممنون

----------


## Rohollaes

واقعا ممنون جناب راد ...

----------


## mahdi.violin

سلام.
میشه وضعیت آب و هوا بر اساس آی پی کاربر باشه ؟

----------


## vham.ro

سلام یه مشکل کوچیک داشتم لصفا اساتید راهنماییم کنید .

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

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

----------


## vham.ro

کسی نمیتونه کمک کنه من برنامه رو رو سیستم Local اجرا کردم و لی مقدار متد weather خالی NULL میشه اگه کار خاصی باید انجام بشه لطفا بگین

----------


## mb.programmer

مرسی از زحمت اگه بزارین روی github.com خیلی خوبه تا هم راحت تر پیدا بشه هم دوستان بتونن کد رو fork کنن

----------


## minamorsali

خیلی خیلی متشکرم بخاطر این کنترل واقعا عالی بود و مشکل منو حل کرد.

----------


## minamorsali

ببخشید آقای راد،امکان تغییر تصاویر وجود نداره؟ تصاویر خود یاهو بی کیفیته...

----------


## Behrouz_Rad

> ببخشید آقای راد،امکان تغییر تصاویر وجود نداره؟ تصاویر خود یاهو بی کیفیته...


به صورت روشی از پیش تعبیه شده خیر، اما کدهای این کتابخانه در دسترس هست. می تونید به دلخواه خودتون تغییر بدید.

----------


## minamorsali

من با استفاده از کد وضعیت هوا در حالت انگلیسی (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

> سلام یه مشکل کوچیک داشتم لصفا اساتید راهنماییم کنید .
> 
>  string dataPath = Application.StartupPath;
>             IWeather weather = new Weather(new YahooProvider(dataPath))
>                 .GetForecast(2254294, "fa", DegreesUnit.Celsius);
> 
> تابع weather  مقدار null  را بر میگرداند مسیر  dataPath   دقیقا به چه آدرسی اشاره میکنه ؟


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

----------


## minamorsali

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

----------


## mbasirati

سلام
از زحمت شما جناب آقای راد خیلی تشکر میکنم.
برای من این ارور رو داد. علتش چیه؟ به خط شماره 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: 
> 
> 
> ...

----------


## ghosse

سلام دوست عزیز
برای نسخه ی تحت ویندوز هم باید از دستورات فوق پیروی کرد یا این دستورات فقط مربوط به وب میباشد؟؟؟
اگر لطف کنید جواب من را به ایمیل زیر ارسال کنید
hiddeneblis@yahoo.com
با تشکر از لطفتان

----------


## mahasti

سلام
من مراحله بالارو دقیق انجام دادم ولی weather =null میشه باید چیکارکنم؟

----------


## notlikeothers

درود.دوستان چرا این سرویس یاهو کار نمیکنه؟؟؟؟

----------


## notlikeothers

درود.دوستان چرا این سرویس یاهو کار نمیکنه؟

----------

