25-04-14, 12:42 PM
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
كلكم تعرفون الدوال Functions و الروتينات Subs العادية.
الفرق بينهما(من واقع تجربتي) شيء واحد :
. الدالة ترجع قيمة والروتين لايرجع قيمة .
في المثال "الناسخ الديناميكي" استخدمت الاثنين.
مثلا اردت سحب محتوى صفحة مثلا من عنوان :
وتعلمون اننا نحتاج عملية السحب عدة مرات مثلا لسحب روابط الصور والمرفقات والسكريبتات والستايل.
فنحتاج هنا الى دالة واحدة نسحب من خلالها المحتوى مرة واحدة مثلا
الان لنجهز دالة تقوم بالمطلوب
لنسميها
getpagestrings
الان الدالة جاهزة ولاحظ كيفية صياغتها
انظر للملون (مدري ليه عجزت الون جزء معين بالمحرر الحالي ) هذا هو الذي يهمنا وهو نفس الروتين العادي الا اننا هنا نستطيع معرفة المحتوى لذلك انظر لاخر الدالة لكلمة:
الان لنعود الى الخطوة السابقة وهي رغبتنا بسحب محتوى صفحة
عرفنا سابقا رابط url واسندنا له رابط لموضوع احد الاخوة الفضلاء sooriaty03 وهو رابط
http://vb4arb.com/vb/thread-205.html
الان لنقم بالتجربة
هل رايتم؟
اسندنا رابط للدالة والدالة اعادت لنا محتوى الصفحة وهكذا لن نضطر للقراءة لمحتوى صفحة كل ما اردنا معرفة المحتوى بل المحتوى جاهز بالمتغير المحلي html
الان نحتاج لامر سحب روابط الصور من المحتوى html الذي جهزناه فما هو هذا الامر؟
1-دالة.
2-روتين عادي sub
؟
------
الجواب بما اننا نحتاج قيمة معادة فنحن نضظر لاستخدام الدالة Function
لذلك فلنجهز دالة سحب روابط الصور
انظر لصياغة الدالة جيدا وقارنها بما قبلها
لاحظ كلمة content وذلك نعني ان المحتوى جاهز ونريد البحث ضمنه
ثم دقق في النوع القيمة المعادة وهو مبين اخر السطر
ثم انظر الى جملة التعريف التالية:
نفس نوع الدالة اي نقوم بتجميع كل الروابط ضمن قائمة ونعيدها الى المستفسر بالجملة التالية:
الان لنرجع للخطوة السابقة وهي رغبتنا بسحب روابط الصور بواسطة هذه الدالة
لاحظ جيدا هذه الجملة
لان الدالة ستعيد قائمة بالروابط لذلك ناسب ان نستخدم حلقة لتمر على كل بنود هذه القائمة
انظر للعمل كيف يكون من استبدال لروابط الصور في المحتوى html لكن دقق في الخطوة التالية:
وهي اننا حصلنا على روابط عدة ونريد امر لتحميل اي رابط بشكل فوري فماهو الامر؟
1- دالة.
2-روتين عادي
؟
الان نحن لا نحتاج قيم معادة لذلك سنستخدم روتين عادي Sub
لنقم بتجهيزه بحيث يحتاج وسيطة رابط للصورة او اي ملف لتحميله
انظر للسطور الاولى ضمن الروتين
اول شيء ننظف الرابط من اي عوائق قد تسبب خطا
ثم التاكد من هل الرابط داخلي ام خارجي فان كان يبدا بـ http فهو خارجي ولا اشكال من طلب التحميل من غير اسناد له روابط اخرى.
وان كان داخلي فبلا شك نحتاج اسناد له روابط وهي بلا شك روابط المنتدى نفسه وهي المتغيرات التي ترونها
اول كلمة يعني http
والثانية تعني فقط الدومين vb4arb.com والخط المائل واسم مجلد المنتدى
الباقي في الروتين سهل
المهم لنرجع قليلا الى
طلبنا من الروتين تحميل رابط الصورة وبما ان رابط الصورة قد يحتوي جمل وكلمات اخرى لا نحتاجها فقد استخدمنا عبارة split لان الرابط ضمن جملة مثل
فموقع الرابط هو رقم 1 لان رقم 0 هو
لنفس الطريقة لكل انواع الملفات في الصفحة وبعد ان تمر على كل محتويات الصفحة يتبقى حفظ الصفحة معدلة بحيث يتم استبدال الروابط الى مكان واحد ان احببت يعني بدل ان تنشي للازرار مجلد وللايقونات مجلد وللاستايل مجلد ضعهم بمجلد واحد .
والكود الاخير هو
بهذه الفكرة تم نسخ اغلب او قل الصفحات المهمة هنا
http://vb4arb.com/vb/thread-2634-post-13...l#pid13098
السلام عليكم ورحمة الله وبركاته
كلكم تعرفون الدوال Functions و الروتينات Subs العادية.
الفرق بينهما(من واقع تجربتي) شيء واحد :
. الدالة ترجع قيمة والروتين لايرجع قيمة .
في المثال "الناسخ الديناميكي" استخدمت الاثنين.
مثلا اردت سحب محتوى صفحة مثلا من عنوان :
PHP كود :
http://vb4arb.com/vb/thread-205.html
فنحتاج هنا الى دالة واحدة نسحب من خلالها المحتوى مرة واحدة مثلا
PHP كود :
dim url as string="http://vb4arb.com/vb/thread-205.html
"
الان لنجهز دالة تقوم بالمطلوب
لنسميها
getpagestrings
PHP كود :
Private Function getpagestrings(ByVal url As String) As String
Dim html As String = ""
Dim wc As New WebClient
wc.Encoding = Encoding.UTF8
aa:
If My.Computer.Network.IsAvailable Then
If My.Computer.Network.Ping(justdo.Trim) = False Then
' fil_frmstate("تم فقد الاتصال .. تفقد الاسلاك بينما نعاود المحاولة")
fil_lblstate("تم فقد الاتصال .. تفقد الاسلاك بينما نعاود المحاولة")
GoTo aa
End If
Else
' fil_frmstate("تم فقد الاتصال .. تفقد سلك الايثرنت بينما نعاود المحاولة")
fil_lblstate("تم فقد الاتصال .. تفقد سلك الايثرنت بينما نعاود المحاولة")
GoTo aa
End If
Try
html = wc.DownloadString(url)
Catch ex As Exception
If url.Contains(justdo) Then
' fil_frmstate("تم فقد الاتصال .. تفقد سلك الايثرنت بينما نعاود المحاولة")
fil_lblstate("تم فقد الاتصال .. تفقد سلك الايثرنت بينما نعاود المحاولة")
GoTo aa
End If
End Try
Return html
End Function
PHP كود :
Private Function getpagestrings( ByVal url As String ) As String
PHP كود :
Return html
الان لنعود الى الخطوة السابقة وهي رغبتنا بسحب محتوى صفحة
عرفنا سابقا رابط url واسندنا له رابط لموضوع احد الاخوة الفضلاء sooriaty03 وهو رابط
http://vb4arb.com/vb/thread-205.html
الان لنقم بالتجربة
PHP كود :
dim html as string=getpagestrings(url)
اسندنا رابط للدالة والدالة اعادت لنا محتوى الصفحة وهكذا لن نضطر للقراءة لمحتوى صفحة كل ما اردنا معرفة المحتوى بل المحتوى جاهز بالمتغير المحلي html
الان نحتاج لامر سحب روابط الصور من المحتوى html الذي جهزناه فما هو هذا الامر؟
1-دالة.
2-روتين عادي sub
؟
------
الجواب بما اننا نحتاج قيمة معادة فنحن نضظر لاستخدام الدالة Function
لذلك فلنجهز دالة سحب روابط الصور
PHP كود :
Private Function getpicslinks(ByVal content As String) As List(Of String)
'<img src="http://im80.gulfup.com/306wzE.png?dateline=1395740337"
Dim piclink As New List(Of String)
Dim str As String = "(<img src="").*\.(gif|png|jpg|jpeg|bmp)"
Dim reg As New Regex(str)
Dim coll As MatchCollection = reg.Matches(content)
For Each ma As Match In coll
' MsgBox(ma.Value)
piclink.Add(ma.Value)
Next
Return piclink
End Function
انظر لصياغة الدالة جيدا وقارنها بما قبلها
PHP كود :
Private Function getpicslinks(ByVal content As String) As List(Of String)
ثم دقق في النوع القيمة المعادة وهو مبين اخر السطر
PHP كود :
As List(Of String)
كود :
Dim piclink As New List(Of String)
PHP كود :
Return piclink
الان لنرجع للخطوة السابقة وهي رغبتنا بسحب روابط الصور بواسطة هذه الدالة
PHP كود :
'=======تحميل الصور
For Each pic In getpicslinks(html)
fil_lblstate("سرد الصور لحفظها")
If thbgw.CancellationPending Then
Exit For
Exit Sub
End If
fil_lblstate("استبدال روابط الصور")
html = html.Replace(pic.Split("""")(1), "images\" & IO.Path.GetFileName(pic.Split("""")(1)))
If IO.File.Exists("mybb\images\" & IO.Path.GetFileName(pic.Split("""")(1))) = False Then
fil_lblstate("تحميل الصورة: " & pic.Split("""")(1))
downloadpic(pic.Split("""")(1))
End If
Next
لاحظ جيدا هذه الجملة
PHP كود :
For Each pic In getpicslinks(html)
لان الدالة ستعيد قائمة بالروابط لذلك ناسب ان نستخدم حلقة لتمر على كل بنود هذه القائمة
انظر للعمل كيف يكون من استبدال لروابط الصور في المحتوى html لكن دقق في الخطوة التالية:
وهي اننا حصلنا على روابط عدة ونريد امر لتحميل اي رابط بشكل فوري فماهو الامر؟
1- دالة.
2-روتين عادي
؟
الان نحن لا نحتاج قيم معادة لذلك سنستخدم روتين عادي Sub
لنقم بتجهيزه بحيث يحتاج وسيطة رابط للصورة او اي ملف لتحميله
PHP كود :
Private Sub downloadpic(ByVal url As String)
url = url.Replace("./", "")
If url.StartsWith("http") = False Then
url = url.Insert(0, bade & justdo & "/" & foru & "/")
End If
Dim wc As New WebClient
wc.Encoding = Encoding.UTF8
aa:
If My.Computer.Network.IsAvailable Then
If My.Computer.Network.Ping(justdo) = False Then
fil_lblstate("تم فقد الاتصال ..تاكد مما لديك بينما نحاول مرة اخرى")
Threading.Thread.Sleep(200)
GoTo aa
End If
Else
fil_lblstate("تم فقد الاتصال ..تاكد من تركيب كبل الايثرنت")
Threading.Thread.Sleep(200)
GoTo aa
End If
fil_lblstate("تحميل الملف: " & IO.Path.GetFileName(url))
On Error Resume Next
wc.DownloadFile(url, Application.StartupPath & "/mybb/images/" & IO.Path.GetFileName(url))
End Sub
انظر للسطور الاولى ضمن الروتين
PHP كود :
url = url.Replace("./", "")
If url.StartsWith("http") = False Then
url = url.Insert(0, bade & justdo & "/" & foru & "/")
End If
ثم التاكد من هل الرابط داخلي ام خارجي فان كان يبدا بـ http فهو خارجي ولا اشكال من طلب التحميل من غير اسناد له روابط اخرى.
وان كان داخلي فبلا شك نحتاج اسناد له روابط وهي بلا شك روابط المنتدى نفسه وهي المتغيرات التي ترونها
bade & justdo & "/" & foru & "/"
يعني فيه زيادة الجا لها لاريح دماغي من اكواد التحقق من صيغة الرابطاول كلمة يعني http
والثانية تعني فقط الدومين vb4arb.com والخط المائل واسم مجلد المنتدى
الباقي في الروتين سهل
المهم لنرجع قليلا الى
PHP كود :
downloadpic(pic.Split("""")(1))
PHP كود :
<img src="الرابط هنا" alt=""
فموقع الرابط هو رقم 1 لان رقم 0 هو
<img src=
لنفس الطريقة لكل انواع الملفات في الصفحة وبعد ان تمر على كل محتويات الصفحة يتبقى حفظ الصفحة معدلة بحيث يتم استبدال الروابط الى مكان واحد ان احببت يعني بدل ان تنشي للازرار مجلد وللايقونات مجلد وللاستايل مجلد ضعهم بمجلد واحد .
والكود الاخير هو
PHP كود :
'=======================الصفحة الاولى==========================
IO.File.WriteAllText(Application.StartupPath & "\mybb\" & IO.Path.GetFileName(turl), html, Encoding.UTF8)
'=======================الصفحة الاولى==========================
بهذه الفكرة تم نسخ اغلب او قل الصفحات المهمة هنا
http://vb4arb.com/vb/thread-2634-post-13...l#pid13098