منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : كيف نستفيد من تقنية rss في برامجنا-
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
كاتب الموضوع : مهند بيسك أوغلو

ٌبسم الله الرحمن الرحيم
والصلاة والسلام على سيدنا محمد وعلى آله وصحبه أجمعين وبعد:
سنتطرق في هذا الموضوع إلى كيفية الاستفادة من تقنية RSS في برامجنا ولكن أريد أن أقول لك أننا سنعتمد كلياً على التعامل مع XML لذلك أرجو أن تكون لديك خلفية بسيطة حول القراءة من ملفات XML في Dot Net
على كل حال : هذا موضوع للأستاذ بدر: معلومة ::: Read From Xml File
كما أنني سأقوم بعرض لمحة بسيطة حول XMLوالتعامل معه.
==========================================
ما هي XML ؟
XML هي اختصار إلى eXtensible Markup Language : لغة الترميز الموسعة.
ما الفرق بينها وبين HTML ؟
XML: تقوم بتخزين البيانات وجعلها قابلة للنقل والتبادل بين بيئات العمل المختلفة
أما HTML : فهمها الأول و الأخير هو كيفية عرض البيانات .
كمبرمجي ويندوز قد يهمنا XML أكثر من HTML , وذلك لأنها لغة بارعة جداً في وصف بياناتها منذ أن بدأت عام 1998.وهي فعلاً تقنية عملاقة و مستقبلها فيما يبدو أنه باهر , وفي عام 2009 تم تطوير عشرات بل مئات اللغات التي تعتمد على هذه اللغة الرائعة وكانت RSS واحدة من هذه اللغات التي تم تطويرها و التي سنتحدث عنها اليوم إن شاء الله
لننظر الآن إلى هذا المثال:

كود :
<?xml version="1.0" encoding="UTF-8" ?>
<People>
<Person id="1">
<Name>
<First>Mohunnud</First>
<Last>Wahiba</Last>
</Name>
<Age>199</Age>
</Person>
</People>
نبدأ بأول سطر <?xml version="1.0" encoding="UTF-8" ?> وهو سطر الإعلان . حيث نحدد فيه نسخة XML ونظام التشفير.
<People> : يدعى هذا العنصر بالجذر Root ولا يمكن أن يحتوي الملف الواحد على أكثر من جذر.
<Person id="1"> : <Person> هي عبارة عن عنصر Element ستسألني عن <People> و أقول لك إنه أيضاً عنصر ولكن بما أنه أول عنصر فنحن نطلق عليه اسم جذر. والبالنسبة إلى "id="1 فهذه نطلق عليها اسم :
صفة Attribute . ويجب أن تكون محاطة بعلامتي الاقتباس.
<Name> : هذا مجرد عنصر ولكنه رزق بولدين هما <First> و <Last> على عكس العنصر المسكين <Age>
أي يمكننا أن نقول أن <Name> هو عنصر أب Parent أما <First> و <Last> فهما Child
ولا ننسى أن نقول أن Mohunnud الموجودة في العنصر <First> تسمى محتوى العنصر Element Content وكذلك الحال مع Wahiba.
هذا كل ما أستطيع تقديمه لك حول XML و الآن أود أن أعرض عليك كيفية التعامل معها في عالم Dot NET:
قبل كل شيء علينا استيراد نطاق الأسماء
Imports System.XML
ولكن هل من المعقول أن نتعامل مع XML على أنها قاعدة بيانات ولا يوجد في ملفنا السابق غير Person واحد؟؟
لذلك أضفت أكثر من Person وهذا هو الملف كاملاً.

كود :
<?xml version="1.0" encoding="UTF-8" ?>
<People>
<Person id="1">
<Name>
<First>Mohunnud</First>
<Last>Wahiba</Last>
</Name>
<Age>199</Age>
</Person>
<Person id="2">
<Name>
<First>Mustafa</First>
<Last>Maksoor</Last>
</Name>
<Age>16</Age>
</Person>
<Person id="3">
<Name>
<First>Anas</First>
<Last>Wahiba</Last>
</Name>
<Age>3</Age>
</Person>
</People>
نرجع إلى مجال الأسماء Xml ...ما نريد من مجال الأسماء هذا؟؟..نريد فئة تساعدنا على القراءة من ملفات XML
أي شخص يعرف معنى كلمة Reader بالعربي فسيقول لنا أن طلبنا عند XMLReader ..ولكن عوضاً عن هذه الفئة المجردة يمكننا استخدام فئة أخرى مشتقة منها وهي XmlTextReader .
لكي ننشأ متغير من هذه الفئة يمكننا ببساطة تمرير مسار الملف من خلال المشيد:

كود :
Dim xmlData As New XmlTextReader("C:\Mohunnud World\Test XML\people.XML")
هناك أسلوب خاص نتبعه في القراءة من ملفات XML :
أولاً : للقراءة والتحقق من القدرة على القراءة نستخدم xmlData.Read حيث تقوم هذه الدالة بقراءة جميع مكونات ملف XML , أقصد مكونات : أي عناصر Elements , أو صفات Attributes , أو تعليقات أو مساحات فارغة أو إلخ...
يجب استخدام الدالة xmlData.Read في حلقة دوران على هذا الشكل أو أي شكل آخر يكافئه:


كود :
While xmlData.Read
'…………………….
End While
أي طالما أنه بإمكاننا متابعة القراءة انتقل إلى المكون التالي.
ولكن هل نحن بحاجة إلى كل مكونات XML , أبداً لا ..حيث إننا لن نتعامل هنا إلا مع ال Elements
و أحياناً مع صفات العناصر.
لذلك يجب وضع جملة شرط لأحصل على ما يلزمني فقط :

كود :
While xmlData.Read
If xmlData.NodeType = XmlNodeType.Element Then
………………………………'
End If
End While
إذاً فالخاصية xmlData.NodeType هي التي تحدد ما هو نوع المكون.
بالإضافة إلى ذلك لدينا خاصية : xmlData.Name التي تعود باسم العنصر الحالي.
و لقراءة محتوى العنصر نستخدم الدالة xmlData.ReadString أما لقراءة صفة العنصر Attribute فإننا نستخدم xmlData.GetAttribute
و الآن بافتراض أن لدينا زر و مربع نص إليك هذا الكود الذي يجمع كل الكلام في الأعلى:

كود :
Dim xmlData As New XmlTextReader("C:\Mohunnud World\Test XML\people.XML")
While xmlData.Read
If xmlData.NodeType = XmlNodeType.Element Then
Select xmlData.Name
Case "Person"
TextBox1.Text &= xmlData.GetAttribute("id") & " : " & vbCrLf
Case "First"
TextBox1.Text &= "First Name is : " & xmlData.ReadString & vbCrLf
Case "Last"
TextBox1.Text &= "Last Name is : " & xmlData.ReadString & vbCrLf
Case "Age"
TextBox1.Text &= "His Age : " & xmlData.ReadString & vbCrLf

End Select
End If
End While
xmlData.Close()

قد تكون نتائج هذا الكود شبيهة بهذه الصورة :

هذا كل ما كنت أود اقوله لك بالنسبة للتعامل مع ملفات XML . فلنأتي الآن إلى التعرف إلى RSS ,نبدأ باسم الله:

أولاً ما هي RSS :
هي اختصار إلى : Really Simple Syndication أكثر ما تستخدم هذه التقنية في المواقع التي تحتاج إلى تحديث مستمر , مثل مواقع المدونات أو المواقع الإخبارية , مع RSS لم تعد بحاجة إلى زيارة مثلاً الموقع الإخباري لترى آخر الأخبار فمن خلال موقعك المشتركة في هذا الموقع الإخباري أو برنامجك يمكنك الحصول على عناوين أخر الأخبار مع وصلة إلى موقع الخبر.عندما تعمل برنامج يقدم هذه الخدمة فإنه يطلق على برنامجك اسم Aggregator
أو Reader Feed بالرغم من أن هذه التقنية ليست قديمة جداً من حوالي 1999 فإن آلاف المواقع حالياً تستخدمها. ومن عام 1999 حتى الآن ظهرت نسخ من هذه التقنية و كان آخرها Rss 2.0 التي سنتعلمها اليوم إن شاء الله.

مما يتألف ملف RSS ؟ عندما بدأنا في تعلم XML في هذا الموضوع كنا على حق وذلك لأن RSS ما هو إلا ملف بامتداد .xml هناك نقطة أريد توضيحها وهي: إذا نظرت إلى عناصر ملف Xml الذي تعملمناه في أول الموضوع
مثل People , Person, Name ....إلخ , يتضح لك أن أسماء هذه العناصر من تأليفي ويمكنك أيضاً تأليف أسماء عناصر أخرى مثل ما تريد قد يعرف التعامل معها برنامجك لأنك بكل بساطة تعرف ما أسماء العناصر. ولكن عندما نتحدث على RSS كتقنية عالمية يستخدمها الآلاف من المواقع , فهل من المعقول أن لكل موقع عناصره الخاصة يسميها كيفما ما يشاء ؟؟!! هذا المنطق مرفوض طبعاً , بل من الأمثل أن يكون هناك معيار موحد تستخدمه كل ملفات RSS. وهذا هوالذي أريد شرحه الآن :
قبل كل شيء هذاهو ملف RSS الذي سنتحدث عه:

كود :
<?xml version="1.0" encoding ="UTF-8" ?>
<rss version="2.0">
<channel>
<title></title>
<link></link>
<description></description>
<item>
<title></title>
<link></link>
<description></description>
</item>
</channel>
</rss>
نبدأ بأول سطر وهو سطر إعلام xml .
<?xml version="1.0" encoding ="UTF-8" ?>

ثاني سطر يمثل الجذر rss مع الصفة version .
<rss version="2.0">

ثالث سطر هو العنصر channel الذي يحتوي على ثلاث عناصر أساسية وهي title و describtion و link
title : عنوان الإذاعة (channel) مثال: منتدى فيجوال بيسك, مدونة النبهاني .....إلخ.
describtion : وصف الإذاعة (channel) مثال: كل ما تريد معرفته عن تقنية Dot NET
link : وصلة إلى موقع الإذاعة (channel) مثال : www.vb4arab.com

لكل إذاعة (channel) عناصر item تمثل مواد الإذاعة . ولكل item : title و describtion و link

أكيد أنه هناك أكثر من العناصر الثلاثة السابقة ولكن هذه العناصر الثلاثة هي العناصر الأساسية في كل ملف rss.

الآن....عرفنا سابقاً كيفية القراءة من ملف XML و كل ما تعلمناه ينطبق على تعاملنا مع ملفات RSS التي هي أولاً وأخيراً ملفات XML , ولكن إذا كان ملف XML موجود في حاسوبك.....
فمن أين سأحصل على ملف RSS ؟
أكيد من خلال الانترنيت ...
نعيد السؤال بتغيير "أين" إلى "كيف"
كيف سأحصل على ملف RSS ؟
هناك كائنان من نطاق الأسماء System.Net يوفران لي هذه الخدمة وهما WebRequest و WebResponse
ماذا نفعل بهذان الكائنان , أولاً ننشأ كائن من الفئة WebRequest مهمته تقديم الطلب إلى الموقع على هذا الشكل:

كود :
Dim rq As WebRequest = WebRequest.Create("http://www.alarabiya.net/rss/PoliticsPage.xml")
ملاحظة أقصد بالموقع أي مكان خدمة rss في موقع ما .

و بعد الفعل ردة فعل ...وبعد الطلب استجابة.. التي ستكون من خلال كائن WebResponse الذي يكون إنشاءه على هذا الشكل:

كود :
Dim rs As WebResponse = rq.GetResponse
و الآن كيف تتوقع أن تكون شكل الاستجابة ...... ؟
يبدو أنني لم أعد دقيقاً في طرح الأسئلة..
السؤال الأدق هو : كيف سنستفيد من هذه الاستجابة ؟
الجواب هو : من خلال rs.GetResponseStream التي تعود بقيمة من نوع Stream على هذا الشكل:
Dim ResponseStream As Stream = rs.GetResponseStream
إذاً بدأت الأمور تتوضح قليلاً ....
تذكر أننا أنشأنا الكائن xmlData على هذا الشكل :

كود :
Dim xmlData As New XmlTextReader(ResponseStream)
سيصبح على هذا الشكل

كود :
Dim rq As WebRequest = WebRequest.Create("http://www.tech2click.net/feed/")
Dim rs As WebResponse = rq.GetResponse
Dim ResponseStream As Stream = rs.GetResponseStream
Dim sR As New StreamReader(ResponseStream)
Me.TextBox1.Text = sR.ReadToEnd
اتمنى أن تكون فهمت الفكرة .......وعلى كل حال لم أعرفك شخصياً على ملف rss...فقط جهز لي نافذة ومربع نص..
و اكتب هذا الكود في أي حدث تريد :

كود :
Dim rq As WebRequest = WebRequest.Create("http://www.tech2click.net/feed/")
Dim rs As WebResponse = rq.GetResponse
Dim ResponseStream As Stream = rs.GetResponseStream
Dim xmlData As New XmlTextReader(ResponseStream)
While xmlData.Read
If xmlData.NodeType = XmlNodeType.Element Then
Select Case xmlData.Name
Case "title"
TextBox1.Text &= "Title is : " & xmlData.ReadString & vbCrLf
Case "link"
TextBox1.Text &= "link : " & xmlData.ReadString & vbCrLf
Case "description"
TextBox1.Text &= "description is : " & xmlData.ReadString & vbCrLf
Me.TextBox1.Text &= "====================" & vbCrLf
End Select
End If
End While
xmlData.Close()
قد يتأخر تنفيذ الكود قليلاً و لكن بعد فترة قليلة تلاحظ امتلاء مربع النص بملف XML وهذا ما نريده...
الآن ..إليك هذا الكود ..للتعامل مع RSS


Dim rq As WebRequest = WebRequest.Create("http://www.tech2click.net/feed/") Dim rs As WebResponse = rq.GetResponse Dim ResponseStream As Stream = rs.GetResponseStream Dim xmlData As New XmlTextReader(ResponseStream) While xmlData.Read If xmlData.NodeType = XmlNodeType.Element Then Select Case xmlData.Name Case "title" TextBox1.Text &= "Title is : " & xmlData.ReadString & vbCrLf Case "link" TextBox1.Text &= "link : " & xmlData.ReadString & vbCrLf Case "description" TextBox1.Text &= "description is : " & xmlData.ReadString & vbCrLf Me.TextBox1.Text &= "====================" & vbCrLf End Select End If End While xmlData.Close()
قد تظهر لك النتيجة على هذا الشكل:


===================----خاتمة----=============================
قد تلاحظ في الموضوع وجود نقص في الأمثلة والأكواد , وسبب ذلك هو أنني لا أحب تقديم الأكواد على طبق من فضة لذلك يجب علي التنويه بهذه الأمور:
1- طريقة اتعامل مع XMLفي موضوعنا ليست هي الوحيدة بل هناك أكثر من طريقة مثل: XmlDocument (أنا شخصياً أبحث في الطريقة XPath)
2- جميع الأكواد التي كتبتها سابقاً هي مجرد برمجة إجرائية غير محببة أبداً في برامجك الجادة , لذا يتوجب عليك تحويلها إلى برمجة كائنية التوجه OOP حسب أسلوبك.
3- يمكنك أيضاً إنشاء أداة تحاكي فيها شريط الأخبار..
4- التعامل مع Rss وتحديثها في برنامجك تكون سبب مقنع لاستعمالك BackgroundWorker
(راجع مقالي في المنتدى: ::برنامجك أكثر تجاوباً أكثر تفاعلاً مع BackgroundWorker ::

أخيراً...أتمنى من الله سبحانه وتعالى أن أكون قد وفقت في تقديم الموضوع...قد تجد أخطاء إملائية و نحوية وبرمجية في هذا الموضوع ..فهذا شيء طبيعي مع مبرمج بسيط مثلي...
الحقيقة هو أن هذا الموضوع هو جزء من مقال أضخم منه كنت أحضره لهذا المنتدى ولكن توقفت عنه لأسباب علمية...
على كل حال إذا استفدت من كل هذا الموضوع بمعلومة واحدة فإن هذا سينسيني كل تعبي....
أخوك مهند وهيبة.............

والله ولي التوفيق.........................


المراجع:
Wikipedia, the free encyclopedia
WWW.W3Schools.com
Microsoft Development Network
برمجة إطار عمل .NET باستخدام VisualBasic.NET – للأستاذ تركي العسيري –
طريقك الى .....xml اكس ام ال – للأستاذ عماد عدلي –