PDA

View Full Version : دریافت بی وقفه ی اطلاعات از یک سایت



RAMA2009
یک شنبه 07 تیر 1394, 22:52 عصر
سلام
سایت زیر رو ببینید:
http://www.tsetmc.com/Loader.aspx?ParTree=15
این اطلاعات در ساعات 8:30 الی 12:30 دائما در حال تغییر هستند
به کدی احتیاج دارم که بتونم وقتی به اینترنت متصل بودم بعضی از فیلدهای داخل سایت ذکر شده رو داخل برنامه تحت ویندوزم نمایش بدم. مثلا فیلدهای "مقدار" و "درصد" از "شاخص کل" و همچنین "تعداد معاملات" و "ارزش معاملات" به صورت بی وقفه داخل کادر متن یا لیبل نمایش بدم.
- سرعت از اهمیت ویژه ای برخوردار هست بعضی از دوستان روش web browser رو معرفی کردن که سرعتش خیلی پایین بود و بنظرم روش معقولی نبود، بعضی دیگه هم http web request رو مطرح کردن که کار نکرد و موفق نشدم.
این کار اسم خاصی داره؟ منبع آموزشی کامل وجود داره؟ نمونه سورس چطور؟
لطفا راهنمایی بفرمایید.
سی شارپ یا وی بی دات نت فرقی نداره. هردو باشه که چه بهتر. ممنون.

علیرضا.ا
دوشنبه 08 تیر 1394, 00:34 صبح
چرا از webclient استفاده نمیکنی؟
با استفاده از تایمر هر یک ثانیه کل سورس سایت رو دانلود کن
بعد اون تیکه ای که لازم داری رو بردار.
نمونه سورس کار با وب کلاینت:

Dim uriString as String
uriString = "http://www.google.com"

Dim myWebClient As New WebClient()

Console.WriteLine("Accessing {0} ...", uriString)

Dim myStream As Stream = myWebClient.OpenRead(uriString)

Console.WriteLine(ControlChars.Cr + "Displaying Data :" + ControlChars.Cr)
Dim sr As New StreamReader(myStream)
Console.WriteLine(sr.ReadToEnd())

myStream.Close()

RAMA2009
دوشنبه 08 تیر 1394, 00:42 صبح
چرا از webclient استفاده نمیکنی؟
با استفاده از تایمر هر یک ثانیه کل سورس سایت رو دانلود کن
بعد اون تیکه ای که لازم داری رو بردار.
نمونه سورس کار با وب کلاینت:

Dim uriString as String
uriString = "http://www.google.com"

Dim myWebClient As New WebClient()

Console.WriteLine("Accessing {0} ...", uriString)

Dim myStream As Stream = myWebClient.OpenRead(uriString)

Console.WriteLine(ControlChars.Cr + "Displaying Data :" + ControlChars.Cr)
Dim sr As New StreamReader(myStream)
Console.WriteLine(sr.ReadToEnd())

myStream.Close()
دوست عزیز اینجوری سرعت خیلی پایین میاد - خیلی خیلی خیلی
بعد هم دقیقا مشکل من همینه که نمیتونم اون تیکه ای میخوامو بردارم!

علیرضا.ا
دوشنبه 08 تیر 1394, 00:55 صبح
با اطلاعات من تنها راه سریع تر از webbrowser همینه...

اگه میخای در یه زمان چند تا کار مختلف انجام بدی میتونی برنامه رو موازی بنویسی (parallel programming)

RAMA2009
دوشنبه 08 تیر 1394, 02:16 صبح
با اطلاعات من تنها راه سریع تر از webbrowser همینه...

اگه میخای در یه زمان چند تا کار مختلف انجام بدی میتونی برنامه رو موازی بنویسی (parallel programming)

آخه شما میفرمایید:"با استفاده از تایمر هر یک ثانیه کل سورس سایت رو دانلود کن"، مثلا من بخوام برای فیلدهای قیمت و درصد (فقط دو فیلد) برای 100 مورد سهم، کل صفحه ی مربوط به هر سهم رو دائم دانلود کنم که تا نهایتا همین دو فیلد مربوط به هر سهم رو نمایش بدم، آیا به نظر شما این کار اصلا منطقی هست؟!!! این کار هم سرعت رو پایین میاره هم ترافیک زیادی مصرف میکنه که جالب نیست. حتما باید روش دیگه ای باشه... توی سایت های زبان اصلی هم چیز خاصی پیدا نکردم :| :(( درضمن من هنوز توی استخراج فیلدهای مورد نظرم مشکل دارم، اما گویا مشکلات جدی تری مثل همین سرعت و مصرف بی رویه ی ترافیک هم پیش رو هست...

علیرضا.ا
دوشنبه 08 تیر 1394, 02:24 صبح
تقریبا مطمئنم هیچ راهی برای اینی که میخای وجود نداره
مگه اینکه خود سایت یه امکانی به تو بده مثلا توی یه صفحه فقط اطلاعات مربوط به اون سهم رو بگه...
البته هر 1 ثانیه هم لازم نیست رفرش بشه. میتونی هر 5 ثانیه این کار رو انجام بدی یا موازی برنامه بنویسی تا برنامه هنگ نکنه

RAMA2009
دوشنبه 08 تیر 1394, 12:48 عصر
سلام این سایت وب سرویس با هزینه ی ماهیانه 300 هزار تومان ارائه میده که برای من صرف نداره.
اما یک چیز جالب توی سایت پیدا کردم که خواستم با شما در میون بذارم و اون اینه:
دریافت و نمایش اطلاعات لحظه ای بازار در Excel
دریافت و نمایش اطلاعات لحظه ای (دیده بان بازار) از سایت tsetmc به راحتی مقدور می باشد. ولی متاسفانه روش انجام این کار برای کاربران سایت (حتی دوستان حرفه ای) شناخته شده نیست.

برای اتصال به دیده بان بازار و دریافت اطلاعات مراحل زیر را طی کنید:

Excel را باز کنید.
در بخش Data گزینهFrom Other Source و سپس From XML Data Import را انتخاب کنید
در بالای صفحه دیده بان بازار یک خروجی Excel قرار دارد، لینک آن را در صفحه باز شده در Excel وارد کنید. (لینک http://members.tsetmc.com/tsev2/exce...hPlus.aspx?d=0 (http://members.tsetmc.com/tsev2/excel/MarketWatchPlus.aspx?d=0))
در صغحه های بعدی با مقدار پیش فرض Excel موافقت کنید.
اطلاعات در Excel نمایش داده می شود.

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

علیرضا.ا
دوشنبه 08 تیر 1394, 13:41 عصر
با اون که خیلی سخت و زمانبر میشه
سایت رو دیدم الان
با AJAX داره رفرش میشه
میگردم ببینم میشه به سورس مقصد دسترسی داشت یا نه

علیرضا.ا
سه شنبه 09 تیر 1394, 14:51 عصر
اطلاعاتی که از صفحه میخای رو دقیق بگو کجاست؟ + اکسل رو پیدا نکردم اون کجاس؟:/
این چند تا منبع رو پیدا کردم ولی نمیدونم کدومش رو میخای دقیقا؟


http://www.tsetmc.com/tsev2/res/loader.aspx?t=j&85
http://www.tsetmc.com/tsev2/data/MFLast.aspx
http://www.tsetmc.com/tsev2/feed/CodalFeed.aspx?type=RSS
http://www.tsetmc.com/tsev2/data/CodalTopNew.aspx

RAMA2009
سه شنبه 09 تیر 1394, 20:39 عصر
اطلاعاتی که از صفحه میخای رو دقیق بگو کجاست؟ + اکسل رو پیدا نکردم اون کجاس؟:/
این چند تا منبع رو پیدا کردم ولی نمیدونم کدومش رو میخای دقیقا؟


http://www.tsetmc.com/tsev2/res/loader.aspx?t=j&85
http://www.tsetmc.com/tsev2/data/MFLast.aspx
http://www.tsetmc.com/tsev2/feed/CodalFeed.aspx?type=RSS
http://www.tsetmc.com/tsev2/data/CodalTopNew.aspx

سلام دوست عزیز ممنون از توجهتون
برای اکسل بعد از وارد شدن به لینک زیر طبق عکس ضمیمه شده عمل کنید:
http://www.tsetmc.com/Loader.aspx?ParTree=15
132784
اما من امتحان کردم اطلاعات رو به صورت لحظه ای نشون نمیده. برای روز دوم که خواستم اکسل رو اجرا کنم دیگه اجرا نشد :|

در مورد این که میگید اطلاعاتی که میخام کجاست:
اینجا نزدیک 600 تا سهم هست هر سهمی صفحه ی مربوط به خودش رو داره که من مثلا از این سهم در این لینک:
http://www.tsetmc.com/Loader.aspx?ParTree=151311&i=35425587644337450
فیلد آخرین معامله و قیمت پایانی رو با درصدی که نشون داده میخوام دریافت کنم:
132785

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

علیرضا.ا
چهارشنبه 10 تیر 1394, 00:52 صبح
اها حالا بهتر شد:)
منبع اطلاعات اینجاست:


http://www.tsetmc.com/tsev2/data/instinfodata.aspx?i=35425587644337450&c=27+

بین هر چند تا عدد ; یا , هست که مربوط به بخش های مختلفه

بهترین راه حل واسه کار شما اینه که این صفحه رو هر چند ثانیه دانلود کنی و اطلاعات رو از روش بخونی
حجم صفحه سایت ~ 200KB
حجم این صفحه ~ 1KB
سرعت کار تقریبا 200 برابر میشه:)

RAMA2009
چهارشنبه 10 تیر 1394, 01:21 صبح
اها حالا بهتر شد:)
منبع اطلاعات اینجاست:


http://www.tsetmc.com/tsev2/data/instinfodata.aspx?i=35425587644337450&c=27+

بین هر چند تا عدد ; یا , هست که مربوط به بخش های مختلفه

بهترین راه حل واسه کار شما اینه که این صفحه رو هر چند ثانیه دانلود کنی و اطلاعات رو از روش بخونی
حجم صفحه سایت ~ 200KB
حجم این صفحه ~ 1KB
سرعت کار تقریبا 200 برابر میشه:)

ببخشید این لینک رو از کجا آوردید؟ میشه توضیح بدید؟
بله اطلاعات اینجا هست میشه یه نمونه سورس برای دانلود و خوندنش بذارید؟ چطوری میتونم روی اطلاعات مورد نیازم ست کنم و دریافتش کنم؟ بنظرم این خیلی عالیه :تشویق: :قلب:

علیرضا.ا
چهارشنبه 10 تیر 1394, 10:41 صبح
ببخشید این لینک رو از کجا آوردید؟ میشه توضیح بدید؟
بله اطلاعات اینجا هست میشه یه نمونه سورس برای دانلود و خوندنش بذارید؟ چطوری میتونم روی اطلاعات مورد نیازم ست کنم و دریافتش کنم؟ بنظرم این خیلی عالیه :تشویق: :قلب:
آوردم دیگه :D
یه راهش بررسی کد های جاوا اسکریپت و قسمت اجاکس هست.یه راه دیگش با مرورگر از منوی Developer Tools
بیشتر توضیح بدم هنگ میکنی. اگه میخای توضیح میدم واست;)

از اینجا به بعد میاد توی برنامه نویسی ویندوز کار سختی نیست.
با استفاده از وب کلاینت که بالا گفتم صفحه رو دانلود کن.
بعد اطلاعات رو با ; اسپلیت کن
بعد عناصر ارایه ی بالا رو با , اسپلیت کن ( تقریبا یه چیزی در میاد شبیه ماتریس )
بعد ببین کدوم عدد رو لازم داری با اندیس اون رو توی لیبل نشون بده.


الان لپتاپ همرام نیست - بگو توی چه زبانی میخای دستم رسید بنویسم واست :)

RAMA2009
چهارشنبه 10 تیر 1394, 20:48 عصر
آوردم دیگه :D
یه راهش بررسی کد های جاوا اسکریپت و قسمت اجاکس هست.یه راه دیگش با مرورگر از منوی Developer Tools
بیشتر توضیح بدم هنگ میکنی. اگه میخای توضیح میدم واست;)

از اینجا به بعد میاد توی برنامه نویسی ویندوز کار سختی نیست.
با استفاده از وب کلاینت که بالا گفتم صفحه رو دانلود کن.
بعد اطلاعات رو با ; اسپلیت کن
بعد عناصر ارایه ی بالا رو با , اسپلیت کن ( تقریبا یه چیزی در میاد شبیه ماتریس )
بعد ببین کدوم عدد رو لازم داری با اندیس اون رو توی لیبل نشون بده.


الان لپتاپ همرام نیست - بگو توی چه زبانی میخای دستم رسید بنویسم واست :)

بله اگه میشه بیشتر توضیح بدید، چون برای حدود 500 600 تا سهم بتونم این لینک رو بدست بیارم و اطلاعاتشو بخونم. میدونید من با اینکه توی برنامه نویسی چجوری میخوایم به همین کدهای جاوا و قسمت اجاکس دسترسی داشته باشیم هنگم، مرورگر من فایرفاکس هستش، تو قسمت developer هیچکدوم از ابزارهاش این لینکی که شما دادین رو بهم نداد.
واقعا اگر لطف بکنید و یک سورس قرار بدید کمک خیلی بزرگی به من و خیلیای دیگه میکنید، به زبان وی بی دات نت یا سی شارپ. واقعا از کمکتون و اطلاعاتی که دادید ممنونم، آدمایی که قلبشون مثه شما بزرگ باشه و از کمک کردن به دیگران دریغ نکنن خیلی کم اند. :قلب::تشویق:

علیرضا.ا
پنج شنبه 11 تیر 1394, 00:00 صبح
توی کروم از منوی network میتونی پیداش کنی
توی سیستم خونه فایر فاکس ندارم راهنماییت کنم.
البته پیدا کردن لینکش زیاد سخت نیست فقط لازمه از لینک صفحه ی سهم عدد مربوط به سهم رو خارج کنی بزاری توی لینکی که بالا دادم...
مثلا برای اینی که گفتی لینک صفحه اینه:

http://www.tsetmc.com/Loader.aspx?ParTree=151311&i=35425587644337450
عددی که اخر لینک هست (35425587644337450) رو باید توی این لینک بزاری:

http://www.tsetmc.com/tsev2/data/instinfodata.aspx?i=ADAD&c=27
یا مثلا برای این سهم:

http://www.tsetmc.com/Loader.aspx?ParTree=151311&i=778253364357513
لینک اینه:

http://www.tsetmc.com/tsev2/data/instinfofast.aspx?i=778253364357513&c=57+

البته هنوز نفهمیدم این 27 یا 57 چی هستن. توی سورس قالب با متغیری به نام CsecVal تعریف شده...

لپتاپ دستم برسه هم فایرفاکس رو بهت میگم هم نمونه کد بهت میدم.

RAMA2009
پنج شنبه 11 تیر 1394, 13:38 عصر
بله از منوی developer زیر منوی network بخش request URL این لینک رو میده، پیدا کردم هم توی کروم هم اپرا و فایرفاکس، ممنون از راهنمایی هات. ببخشید من زیاد سوال میکنم
این request چیه تقریبا هر یه ثانیه یه request اضافه میشه که توی جدول network نشون داده میشه؟
توی برنامه نویسی برای دسترسی به این لینک باید مستقیما لینک بدیم؟ یا روش دیگه ای استفاده میکنید؟
بی صبرانه منتظر کمک های ارزشمندت هستم :قلب:

علیرضا.ا
پنج شنبه 11 تیر 1394, 16:45 عصر
یه قسمتی از اطلاعات صفحه هر ثانیه باید به روز بشه. یه راه به روز آوری اطلاعات اینه که کلا صفحه رفرش بشه و اطلاعات جدید نشون داده بشه.( همونی که اول میخاستی با وب بروزر انجام بدی) این کار هم قشنگ نیست هم ترافیک زیادی هم برای کاربر هم برای سایت ایجاد میکنه.
این جا یه فناوری به اسم AJAX به کار میاد.
حالا اجاکس چیه و چیکار میکنه؟
اجاکس یه فناوریه برای دریافت اطلاعات از سرور بدون رفرش شدن صفحه. توی این سایت یه سری اطلاعات باید از سرور دریافت بشن ولی نه کل صفحه. برای همین طراح این سایت اومد اطلاعاتی که لازمه دوباره دریافت بشن رو توی یه لینکی قرار داد (همونی که بهت دادم)
با یه سری کد جاوا اسکریپت و با استفاده از اجاکس هر چند ثانیه اطلاعات از این صفحه دریافت میشن و توی صفحه جایگزین قبلی ها میشن.

منوی network همه ی ارتباطات با شبکه رو ثبت میکنه. برای همین هر ثانیه یکی به لیست اضافه میشه.

توی برنامه نویسی چون گفتی تعداد خیلی زیادی سهم هست یه ارایه درست میکنیم از عدد مخصوص هر سهم.

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

بعد توی یه combobox اسم هر سهم رو به ترتیبی که توی ارایه لینکشونو وارد کردی مینویسی . هر کدوم انتخاب شد ایندکس اون رو ذخیره میکنی معادل ایندکس اون رو از ارایه میخونی و به تابع پاس میدی.

الگوریتم رو تقریبا کامل توضیح دادم. اگه میتونی خودت کدبزنی که هیچ اگ نمیتونی مینویسم برات:)

RAMA2009
پنج شنبه 11 تیر 1394, 20:46 عصر
مرسی برای الگوریتم مشکلی ندارم، فقط برای یک سهم یه نمونه سورس میخوام که نحوه ی ارتباط برقرار کردن و خوندن اطلاعات رو ببینم چجوریه. ممنون:قلب:
خیلی خیلی ممنون از توضیحات کامل و عالی که دادین.
الان من این کدو توی وی بی زدم:


Imports System
Imports System.Net
Imports System.IO
Public Class Form1

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim uriString As String
uriString = "http://www.tsetmc.com/tsev2/data/instinfodata.aspx?i=35425587644337450&c=27+"

Dim myWebClient As New WebClient()

MsgBox("Accessing {0} ..." + uriString)

Dim myStream As Stream = myWebClient.OpenRead(uriString)

MsgBox(ControlChars.Cr + "Displaying Data :" + ControlChars.Cr)
Dim sr As New StreamReader(myStream)
MsgBox(sr.ReadToEnd())

myStream.Close()
End Sub
End Class


ولی اینو نشون میده:

132837

Displaying Data هم چیزی نشون نمیده.

علیرضا.ا
جمعه 12 تیر 1394, 00:27 صبح
با وب کلاینت واس منم همون رو نشون میده. فکر کنم هدر خاصی برای صفحه باید ارسال بشه
با وب بروزر هم بنویسی واسه این حجم اطلاعات زیاد سنگین نمیشه
فعلا سورس با وب بروزر رو نوشتم. با روش دیگه باشه یذره روش کار کنم بهت میگم..

اول یه ماژول میسازی این کد رو بزار توی اون:


Imports System.Runtime.CompilerServices
Module Module1
<Extension()> _
Public Sub Add(Of T)(ByRef arr As T(), item As T)
Array.Resize(arr, arr.Length + 1)
arr(arr.Length - 1) = item
End Sub
Public WebBrowser1 As New WebBrowser
End Module


روی فرم یه لیبل . یه باتن و یک کمبوباکس بزار. اینم کد فرم:

Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
AddHandler WebBrowser1.DocumentCompleted, AddressOf WebBrowser1_DocumentCompleted
ComboBox1.SelectedIndex = 0
End Sub


Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim Araay As String() = {"35425587644337450&c=27+", "778253364357513&c=57+"}
read_data(Araay(ComboBox1.SelectedIndex))
End Sub


Private Sub read_data(ByVal num As String)
WebBrowser1.Navigate("http://www.tsetmc.com/tsev2/data/instinfofast.aspx?i=" + num)
End Sub


Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs)
Dim sourceString As String = WebBrowser1.DocumentText.ToString()
Dim T1, T2 As String()
Dim FinalArray As String() = {}
T1 = sourceString.Split(";")
For Each w As String In T1
T2 = w.Split(",")
For Each w0 As String In T2
FinalArray.Add(w0)
Next
Next
Label1.Text = FinalArray(0)
End Sub
End Class




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

RAMA2009
جمعه 12 تیر 1394, 01:30 صبح
:لبخند::کف: وااای خدای من بالاخره شد... کاش که میشد هزار بار تشکر کرد!

فقط من مفهوم کد داخل ماژول و کد داخل WebBrowser1_DocumentCompleted رو نفهمیدم میشه یه توضیحی هم بدین؟ ممنون
البته فهمیدم که اطلاعات رو داخل آرایه ی FinalArray ریختید که میتونیم با اندیس دادن بخش مورد نظر رو بخونیم. اما تا بحال با split کار نکردم و از مفهومش سر در نمیارم... چرا یبار ";" و یبار "," ؟
-
برای استفاده در تایمر مگه فقط کافی نیست که سورس کامندباتون رو فراخوانی کنیم؟ یا همون سورس رو توی تامیر بنویسیم؟
-
در مورد اون یکی روش اگه به نتیجه رسیدید خیلی خوشحال میشم اینجا هم به ما آموزش بدید...
-
کاملا مشخصه که سطح اطلاعات برنامه نویسیتون بالاست - در کنارش و البته مهم تر اینکه از ارائه ی دانشتون دریغ نمیکنید که واقعا قابل تحسینه، میخوام به عنوان استاد من به من بگین در این راستا اطلاعاتم رو چطوری کامل تر و بهتر بکنم؟ شما چطوری به این سطح رسیدید؟ چه منبعی رو برای مطالعه و یادگیری بیشتر معرفی میکنید؟ واقعا ممنون
:قلب:

علیرضا.ا
جمعه 12 تیر 1394, 11:56 صبح
خواهش میکنم . من خودم شاگرد بیش نیستم:)
سطح برنامه نویسیم کجاش بالاست. هیچی بلد نیستم:):D
برای برنامه نویسی فقط دو چیز لازمه. علاقه و پشتکار. اگه میخای برنامه نویسیت بهتر بشه خیلی زیاد تمرین کن.برای پیدا کردن سوال هم کجا بهتر از اینجا. من خودم واسه اینکه یاد بگیرم دارم یکی در میون سوالات بچه های همینجا رو حل میکنم.(یکیش خودت:D)
یه پیشنهادی هم که من دارم واسه برنامه نویس شدن خوندن کتاب اصلا ارزش نداره. من خودم هیچ وقت کتاب نمیخونم. البته نمیگم کتاب بده ها, اما برای شروع خوب نیست. هر وقت راه افتادی کتاب بخون و تکنیک هایی که توی کتاب گفته رو یاد بگیر.

اما برنامه:
توی ماژول یه وب بروزر پابلیک ساختیم با یه Extension برای ارایه ها. وب بروزر رو ساختیم که همه ی رویداد های فرم بهش دسترسی داشته باشن. اون Extension هم برای این نوشتیم که به ارایه متد add رو اضافه کنه (تا جایی که یادمه توی وی بی برای لیست ها اضافه کردن داریم ولی برای ارایه ها نداریم). اینکه چجوری کار میکنه مهم نیست:D

میریم سراغ WebBrowser1_DocumentCompleted :
وب بروزر یه ررویدادی داره به اسم DocumentCompleted که وقتی ادرسی که بهش دادی کامل بارگزاری شد اونو انجام بده.
ما این کد رو نوشتیم:


Dim sourceString As String = WebBrowser1.DocumentText.ToString()
Dim T1, T2 As String()
Dim FinalArray As String() = {}
T1 = sourceString.Split(";")
For Each w As String In T1
T2 = w.Split(",")
For Each w0 As String In T2
FinalArray.Add(w0)
Next
Next
Label1.Text = FinalArray(0)

خط یک : سورس اون صفحه ( همون اعداد) رو میریزیم توی متغیر sourceString
خط دو : دو تا متغیر کمکی از نوع ارایه ای از رشته ها میسازیم.
خط سه: متغیر اصلیمون رو میسازیم مقدار دهی پیشفرض لازمه انجام بشه ( اون متدی که توی ماژول نوشتیم یه جوریه که سایز ارایت باید مشخص باشه واسه همین مقدار دهی پیشفرض (برابر صفر ) میکنیم)
خط چهار:تابع split میاد یه رشته رو بر اساس یه کارکترجدا میکنه و هر بخش رو توی ارایه T1 میریزه. اون طراح سایت توی صفحه متغیر ها رو با ; و , و @ از هم جدا کرده. ما هم همه رو جدا میکنیم (واسه @ ننوشتم. خودت بنویس;) ) و اونی که لاز داریم رو برمیداریم...
خط پنج: یه حلقه میسازیم به ازای همه ی ایتم های اون ارایه ای که توی مرحله قبل ایجاد شده
خط شش: هر عضو رو میاد بر اساس , جدا میکنه و میریزه توی T2
خط هفت و هشت: به ازای همه ی اعضای T2 اون عضو رو میریزیم توی ارایه ی نهایی. ( اگه واسه @ هم میخای کد بزنی یه فور دیگه به جای همین مرحله میزنی واسه T2 و اسپلیت شده رو میریزی توی T3 . بعد توی اون فور به ازای همه ی اعضای T3 همه رو میریزی توی ارایه ی نهایی- در حقیقت سه تا فور تو در تو میشه-)
خط نه و ده که هیچی
خط یازده هم میاد اولین عضو ارایه رو نشون میده...


واسه ی تایمر هم فقط کافیه فراخوانی تابع read_data رو توی تایمر تیک بزاری. همه چی خودار انجام میشه:)

علیرضا.ا
چهارشنبه 17 تیر 1394, 00:46 صبح
این هم روش گرفتن سورس سایت بدون وب بروزر:



Dim wreq As System.Net.HttpWebRequest = System.Net.WebRequest.Create("http://www.tsetmc.com/tsev2/data/instinfodata.aspx?i=35425587644337450&c=27")
wreq.AutomaticDecompression = Net.DecompressionMethods.GZip
Dim wres As System.Net.WebResponse = wreq.GetResponse
Dim s As System.IO.Stream = wres.GetResponseStream
Dim sr As New System.IO.StreamReader(s)
Dim html As String = sr.ReadToEnd
MessageBox.Show(html)

RAMA2009
چهارشنبه 17 تیر 1394, 03:06 صبح
این هم روش گرفتن سورس سایت بدون وب بروزر:



Dim wreq As System.Net.HttpWebRequest = System.Net.WebRequest.Create("http://www.tsetmc.com/tsev2/data/instinfodata.aspx?i=35425587644337450&c=27")
wreq.AutomaticDecompression = Net.DecompressionMethods.GZip
Dim wres As System.Net.WebResponse = wreq.GetResponse
Dim s As System.IO.Stream = wres.GetResponseStream
Dim sr As New System.IO.StreamReader(s)
Dim html As String = sr.ReadToEnd
MessageBox.Show(html)



:قلب: واقعا سنگ تموم گذاشتین علیرضا جان بخدا من دیگه روم نمیشه سوال بپرسم، :خجالت: از کدها چیزی نفهمیدم اگر براتون مقدور هست کمی توضیح میدید؟
برای این روش هم سعی میکنم مثل روش وب بروزر داده ها رو از هم تفکیک کنم و بخونمشون، اگر به مشکل برخوردم ازتون کمک میگیرم. خیلی خیلی ممنون.

با عرض معذرت سوال دیگه ای هم دارم:
این لینک رو ببینید:
http://www.tsetmc.com/Loader.aspx?ParTree=111C1417

میخوام ستونهای "گروه های صنعت"، "تابلو"، "نماد" و "نام" رو ببرم توی پایگاه داده (اکسس یا SQL).
پایگاه داده و columnها از قبل ایجاد شده، و فقط باید اطلاعات خوانده و وارد پایگاه داده بشه. میشه یه حلقه گذاشت و همشو ریخت توی پایگاه داده؟ فقط برای یک یا دو موردش نمونه سورس ببینم بقیش دستم میاد میتونی این لطف رو در حقم کنی؟ :خجالت:
اینجا با توجه به فرمت خاصی که داره روش فرق میکنه و من بلد نیستم :ناراحت:

علیرضا.ا
چهارشنبه 17 تیر 1394, 03:55 صبح
توضیح دادنش یذره سخته.
بخام سربسته بگم:
روی سرور این سایت Gzip فعاله (یه نوع فشرده سازی) . مرورگر های معمولی و وب بروزر خودشون بعد از دریافت اطلاعات اونها رو دیکد میکنن و نشون میدن ولی با اون روشی که اول گفتم اطلاعات دیکد نمیشدن واسه همین اون مدلی نشون میداد. توی این اگه دقت کنی میاییم اطلاعات رو دیکامپرس یا دیکد میکنیم...

مشکلت تفکیک داده هاست یا تفکیک و ریختن توی پایگاه داده؟
واسه تفکیک فردا کدش رو میزارم واست:)

RAMA2009
چهارشنبه 17 تیر 1394, 12:40 عصر
توضیح دادنش یذره سخته.
بخام سربسته بگم:
روی سرور این سایت Gzip فعاله (یه نوع فشرده سازی) . مرورگر های معمولی و وب بروزر خودشون بعد از دریافت اطلاعات اونها رو دیکد میکنن و نشون میدن ولی با اون روشی که اول گفتم اطلاعات دیکد نمیشدن واسه همین اون مدلی نشون میداد. توی این اگه دقت کنی میاییم اطلاعات رو دیکامپرس یا دیکد میکنیم...

مشکلت تفکیک داده هاست یا تفکیک و ریختن توی پایگاه داده؟
واسه تفکیک فردا کدش رو میزارم واست:)

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

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

علیرضا.ا
چهارشنبه 17 تیر 1394, 18:02 عصر
این هم تفکیک اطلاعات:

Dim t2(), group, panel, symbol, name, substring, STR() As String
Dim wreq As System.Net.HttpWebRequest = System.Net.WebRequest.Create("http://www.tsetmc.com/Loader.aspx?ParTree=111C1417")
wreq.AutomaticDecompression = Net.DecompressionMethods.GZip
Dim wres As System.Net.WebResponse = wreq.GetResponse
Dim s As System.IO.Stream = wres.GetResponseStream
Dim sr As New System.IO.StreamReader(s)
Dim html As String = sr.ReadToEnd
STR = html.ToLower().Replace(vbCrLf, "").Replace(html.Substring(0, html.IndexOf("<tr>")), "").Replace(html.Substring(html.LastIndexOf("</tr>") + 4, html.Length - html.LastIndexOf("</tr>") - 4), "").Replace("<tr>", "").Replace("</tr>", "#").Replace("<td align=""right"">", "").Replace("<td>", "").Replace("</td>", "*").Replace(vbCrLf, "").Split("#")
For Each t1 As String In STR
t2 = t1.Split("*")
group = t2(2).Trim()
panel = t2(3).Trim()
symbol = t2(6).Trim()
name = t2(7).Trim()
If (name.IndexOf("<") >= 0 And name.IndexOf(">") >= 0) Or (symbol.IndexOf("<") >= 0 And symbol.IndexOf(">") >= 0) Then
substring = name.Substring(0, name.IndexOf(">") + 1)
name = name.Replace(substring, "")
substring = name.Substring(name.LastIndexOf("<"), 4)
name = name.Replace(substring, "").Trim()
substring = symbol.Substring(0, symbol.IndexOf(">") + 1)
symbol = symbol.Replace(substring, "")
substring = symbol.Substring(symbol.LastIndexOf("<"), 4)
symbol = symbol.Replace(substring, "").Trim()
End If
MessageBox.Show(group + vbCrLf + panel + vbCrLf + symbol + vbCrLf + name)
Next


کد سادست ولی یذره زیاد شد.فکر کنم راه ساده هم داشته باشه ولی در سطح اطلاعات من نیس دیگه :):D
اگه جاییش رو نفهمیدی بگو توضیح بدم واست

RAMA2009
چهارشنبه 17 تیر 1394, 21:51 عصر
ارزش لطف شما خیلی زیاده واقعا ممنون
اگه ممکنه راجع به خط 8 توضیح میدین؟ و کار IF
من خواستم اطلاعات رو بریزم توی TextBox که Error داد ولی msgbox میزنم درست میشه :متفکر: سر در نیاوردم عکسش رو ضمیمه کردم براتون.
ممنون133047

علیرضا.ا
پنج شنبه 18 تیر 1394, 00:38 صبح
ارور به خاطر اخرین مورد هست. توی ارایه STR اخرین عنصر خالی هست. به خاطر همین ارور میده.
یه راه حلش اینه:

Dim t2(), STR(), group, panel, symbol, name As String
Dim final As String = ""
Dim wreq As System.Net.HttpWebRequest = System.Net.WebRequest.Create("http://www.tsetmc.com/Loader.aspx?ParTree=111C1417")
wreq.AutomaticDecompression = Net.DecompressionMethods.GZip
Dim wres As System.Net.WebResponse = wreq.GetResponse
Dim s As System.IO.Stream = wres.GetResponseStream
Dim sr As New System.IO.StreamReader(s)
Dim html As String = sr.ReadToEnd
STR = html.ToLower().Replace(vbCrLf, "").Replace(html.Substring(0, html.IndexOf("<tr>")), "").Replace(html.Substring(html.LastIndexOf("</tr>") + 4, html.Length - html.LastIndexOf("</tr>") - 4), "").Replace("<tr>", "").Replace("</tr>", "#").Replace("<td align=""right"">", "").Replace("<td>", "").Replace("</td>", "*").Split("#")
For Each t1 As String In STR
t2 = t1.Split("*")
Try
group = t2(2).Trim()
panel = t2(3).Trim()
symbol = t2(6).Trim()
name = t2(7).Trim()
If (name.IndexOf("<") >= 0 And name.IndexOf(">") >= 0) Or (symbol.IndexOf("<") >= 0 And symbol.IndexOf(">") >= 0) Then
name = name.Replace(name.Substring(0, name.IndexOf(">") + 1), "")
name = name.Replace(name.Substring(name.LastIndexOf("<"), 4), "").Trim()
symbol = symbol.Replace(symbol.Substring(0, symbol.IndexOf(">") + 1), "")
symbol = symbol.Replace(symbol.Substring(symbol.LastIndexOf ("<"), 4), "").Trim()
End If
final += group + " * " + panel + " * " + symbol + " * " + name + vbCrLf
Catch
MessageBox.Show("All done :)")
End Try
TextBox1.Multiline = True
TextBox1.Text = final
Next



الان دکمه رو که بزنی بسته به سرعت سیستمت چندین ثانیه( شاید یک دیقه یا بیشتر) زمان میبره و بعد از اون همه ی اطلاعات به ترتیب زیر هم توی تکست باکس نشون داده میشه. توی دیتابیس ریختن اذیت نمیکنه اینجا چون یه متن خیلی خیلی خیلی زیاد تولید میشه طول میکشه...

در مورد خط هشت:
ما اول اومدیم سورس سایت رو دانلود کنیم. چون فقط یه جدول رو خاستیم یه تیکه هایی از کد رو حذف کردم. تبدیل به حروف کوچک و حذف اینتر هم توی همون خط انجام میشه. توی همون خط به جای تگ بسته ی هر سلول جدول ستاره و به جای تگ بسته ی هر سطر مربع گزاشتم. بعد هم اسپلیت شد با مربع و...

اون شرط هم برای حذف لینک قسمت نام و نماد هست. برای حذف تگ لینک از این کد استفاده کردم. اگه با ساختار تگ های HTML آشنا باشی سریع تر میفهمی چی شد.. در کل این سوال تقریبا هیچ ربطی به ویژوال بیسیک و کد نوشتن اون نداشت. بیشتر کار با تگ های HTML بود تا وی بی :)

RAMA2009
پنج شنبه 18 تیر 1394, 16:36 عصر
:قلب: خیلی ممنون. :)
من یه پیشنهاد دارم اگه جسارت نباشه، در این زمینه از مقدماتی تا پیشرفته هیچ منبع آموزشی کامل و جامعی نداریم، اگر شما بتونید در این زمینه یه کتاب تهیه کنید خیلی خوب میشه، رایگان یا فروشش رو خودتون میدونید ولی در این زمینه اگه کتابی باشه من خریدار هستم... یا اینکه یه تاپیک جداگانه ایجاد کنید و تمام مسائل مربوط به این بحث رو کامل کنید خیلی خوب میشه. مطمئنا خیلی نکات دیگه هست که قابل آموزش هست... و مطمئنا در این مسیر من و امثال من باز هم به مشکلات و مجهولات دیگه ای برمیخوریم که نیاز داریم استاد خوش قلبی مثل شما راهنمای ما باشه...

علیرضا.ا
پنج شنبه 18 تیر 1394, 18:46 عصر
:قلب: خیلی ممنون. :)
من یه پیشنهاد دارم اگه جسارت نباشه، در این زمینه از مقدماتی تا پیشرفته هیچ منبع آموزشی کامل و جامعی نداریم، اگر شما بتونید در این زمینه یه کتاب تهیه کنید خیلی خوب میشه، رایگان یا فروشش رو خودتون میدونید ولی در این زمینه اگه کتابی باشه من خریدار هستم... یا اینکه یه تاپیک جداگانه ایجاد کنید و تمام مسائل مربوط به این بحث رو کامل کنید خیلی خوب میشه. مطمئنا خیلی نکات دیگه هست که قابل آموزش هست... و مطمئنا در این مسیر من و امثال من باز هم به مشکلات و مجهولات دیگه ای برمیخوریم که نیاز داریم استاد خوش قلبی مثل شما راهنمای ما باشه...
لطف دارین...
اطلاعات من در این زمینه شاید از صد در صد, سه درصد هم نباشه!
توی این انجمن دوستانی هستن که خیلی خیلی بیشتر از من بلد هستن ولی مشغلشون اجازه نمیده بیان تاپیک ها رو جواب بدن:)
من هم فقط تاپیک هایی که در حد توانم باشه جواب میدم که این زبان رو یادم نره...:)