PDA

View Full Version : گرفتن سورس سایت



aleas2
جمعه 15 شهریور 1392, 12:48 عصر
سلام خسته نباشید دوستان بنده نیاز دارم یه برنامه برای جمع آوری ایمیل از سطح سایت ها بنویسم شاید در روز نیاز باشه سورس 10 ها هزار سایت بررسی کنم برای جمع آوری ایمیل !

بهترین روش برای دریافت سورس سایت چی که اگر مثلا گرفتن سورس حداکثر بیش از 1 دقیقه طول کشید از اون سایت صرف نظر کنه

با Inet1.OpenURL میشه سورس سایت گرفت ولی بعضی اوقات گرفتن سورس سایت ممکنه حتی بیشتر از 1 دقیقه طول بکشه که باعث هنگ کردن برنامه بشه میدونین که این کد تا سورس نگیره از این کد
Inet1.OpenURL
عبور نمیکنه

aleas2
یک شنبه 17 شهریور 1392, 18:55 عصر
دوستان چی شد کسی راه حلی نمیدونه؟

mmssoft
یک شنبه 17 شهریور 1392, 19:02 عصر
از این ماژول میشه استفاده کرد :


Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal sURL As String, ByVal sHeaders As String, ByVal lHeadersLength As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
Private Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer
Private Const IF_FROM_CACHE = &H1000000
Private Const IF_MAKE_PERSISTENT = &H2000000
Private Const IF_NO_CACHE_WRITE = &H4000000
Private Const BUFFER_LEN = 256

Public Function GetSource(sURL As String) As String
Dim sBuffer As String * BUFFER_LEN, iResult As Integer, sData As String
Dim hInternet As Long, hSession As Long, lReturn As Long
hSession = InternetOpen("vb wininet", 1, vbNullString, vbNullString, 0)
If hSession Then hInternet = InternetOpenUrl(hSession, sURL, vbNullString, 0, IF_NO_CACHE_WRITE, 0)
If hInternet Then
iResult = InternetReadFile(hInternet, sBuffer, BUFFER_LEN, lReturn)
sData = sBuffer
Do While lReturn <> 0
iResult = InternetReadFile(hInternet, sBuffer, BUFFER_LEN, lReturn)
sData = sData + Mid(sBuffer, 1, lReturn)
Loop
End If
iResult = InternetCloseHandle(hInternet)
GetSource = sData
End Function

aleas2
یک شنبه 17 شهریور 1392, 19:29 عصر
ممنون خب توسط این ماژول چطور میشه تعیین کرد که گرفتن سورس اگر حداکثر بیش از 1 دقیقه طول کشید از گرفتن سورس سایت صرف نظر کنه؟

mmssoft
یک شنبه 17 شهریور 1392, 20:29 عصر
از تایمر استفاده کنید

aleas2
یک شنبه 17 شهریور 1392, 20:37 عصر
راستش درست متوجه منظورت نمیشم دقیقا چ تو تایمر باید بنویسم؟
اینجور در نظر بگیر تو listbox1 تعدادی آدرس سایت هسته حالا میخوام برنامه به ترتیب سورس سایت هارو بریزه داخل textbox اگر گرفتن سورس سایت یه سایت بیش از یک دقیقه طول کشید از اون سایت صرف نظر کنه بره سراغ سایت بعدی؟

aleas2
پنج شنبه 21 شهریور 1392, 11:02 صبح
دوستان باور کنید این سؤال واسه بنده مهمه لطفا یکی از بزرگان راهنمایی کنند ممنون میشم

vbhamed
شنبه 23 شهریور 1392, 08:23 صبح
سلام
Inet يك متد داره به نام GetChunk كه مي‌تونه چيزي كه قرار دانلود بشه رو قسمت قسمت بگيره نه يكدفعه
با استفاده از اون شما مي‌تونيد سورس سايت رو تيكه تيكه دريافت كنيد و خب قاعدتا گرفتن تيكه ها زياد زمان نميبره اما در حين دانلود اگر ديدين زمان بيشتر از 1 دقيقه شد دانلود رو متوقف كنيد
ضمنا با اين روش هر چقدر هم طول بكشه سيستم هنگ نمي‌كنه
فايل ضميمه رو ببينيد

aleas2
شنبه 23 شهریور 1392, 09:37 صبح
سلام
Inet يك متد داره به نام GetChunk كه مي‌تونه چيزي كه قرار دانلود بشه رو قسمت قسمت بگيره نه يكدفعه
با استفاده از اون شما مي‌تونيد سورس سايت رو تيكه تيكه دريافت كنيد و خب قاعدتا گرفتن تيكه ها زياد زمان نميبره اما در حين دانلود اگر ديدين زمان بيشتر از 1 دقيقه شد دانلود رو متوقف كنيد
ضمنا با اين روش هر چقدر هم طول بكشه سيستم هنگ نمي‌كنه
فايل ضميمه رو ببينيد

شرمنده عزیز بنده برنامه نویسیم پیشرفته نیسته !
این سورسی دادین جای کامپیوتر خودم هنگ کردم اگر ممکنه خودتون یه نمونه ساده از روش استفاده متد GetChunk بگین و اینکه اگر بیش از یک دقیقه طول کشید چطور inet متوقف کنم و سایت بعدی رو باز کنم؟


شرمنده میشم خودتون یه نمونه ساده بذارین

vbhamed
شنبه 23 شهریور 1392, 10:58 صبح
سلام
قبل از همون متدي كه GetChunk درونش اجرا ميشه زمان رو بخونيد (با تابع Timer نه كنترل تايمر) و در حلقه اي هم كه GetChunk اجرا ميشه دوباره تابع Timer رو بخونيد و با مقدار اوليه مقايسه كنيد، اگر بيشتر از 1 دقيقه شد (البته زمان به ميكروثانيه بر مي‌گرده) از حلقه خارج بشين