2009-02-15 16 views
7

एक छोटा ऐप लिखा है जो खोज वेबसाइटों का एक समूह एक्सेस करता है और परिणाम को एक शब्द दस्तावेज़ में रखता है, जो दिन में कुछ सौ बार चलाता है।सक्रिय इंटरनेट कनेक्शन के लिए जाँच करें

यह कई स्थानीय फ़ोल्डरों में अलग-अलग खोज परिणामों को सहेजता है ताकि अगली बार उन शब्दों की खोज की जा सके, यह वेबसाइट को फिर से लोड करने के बजाय स्थानीय रूप से पकड़ लेता है।

यह ठीक काम करता है - भले ही यह तेज़ न हो। लोग प्रभावित होते हैं क्योंकि कुछ हफ्ते पहले उन्होंने सचमुच छः अलग-अलग खोज वेबसाइटों को लोड करके, खोज कर, और फिर शब्दों को एक दस्तावेज़ दस्तावेज़ में कॉपी और चिपकाकर मैन्युअल रूप से किया था।

हालांकि, हमारे कार्यालय का इंटरनेट अविश्वसनीय है, और यह दिन में आखिरी आधा रहा है। इसका मतलब है कि स्थानीय फ़ोल्डर्स में लगभग 400 खराब खोजों को सहेजा गया है, और अंतिम दस्तावेजों में डाला गया है।

जब कोई व्यक्ति खोज रहा था तो वे बता सकते थे कि इंटरनेट टूटा हुआ था और वे बाद में अपनी खोज करेंगे। जाहिर है, हालांकि, यह ऐप नहीं बता सकता है, और क्योंकि मैं एपीआई या कुछ भी नहीं उपयोग कर रहा हूं, और क्योंकि मैं वीबीए पर्यावरण का उपयोग करने के लिए सीमित हूं (मुझे एमजेड टूल्स की अनुमति भी नहीं है), मुझे कुछ रास्ता खोजने की ज़रूरत है जांचें कि इंटरनेट प्रोग्राम प्रवाह के साथ जारी रखने से पहले काम कर रहा है, बहुत सारे संदर्भों पर भरोसा किए बिना, और अधिमानतः "404 पेज नहीं मिला" वाक्यांश के लिए स्क्रीनक्रैप किए बिना।

मैं वीबी से बहुत परिचित नहीं हूं, और वीबीए मुझे कई तरीकों से बर्बाद कर रहा है, इसलिए शायद ऐसा करने का कुछ आसान तरीका है, यही कारण है कि मैं यहां पूछ रहा हूं।

किसी भी मदद की सराहना करें।

उत्तर

6

आप चीजों

उदा के लिए जाँच करने के लिए MSXML पुस्तकालय & उपयोग XMLHttpRequest वर्ग इस्तेमाल कर सकते हैं

On Error Resume Next 
Dim request As MSXML2.XMLHTTP60 
request.Open "http://www.google.com" 
request.Send 
Msgbox request.Status 

स्थिति आपको अनुरोध के साथ हुई HTTP स्थिति कोड देगा। आपको अपने परिदृश्य के आधार पर कुछ और चेक करना पड़ सकता है।

उम्मीद है कि मदद करता है।

+1

मुझे यकीन नहीं है कि ओपी को शब्द में खोज परिणाम कैसे मिल रहे हैं, लेकिन उसे इस विधि का उपयोग करना चाहिए और request.responseText। –

+1

यूआरएल –

+0

dkusleika से पहले ओपन मेथड पैरामीटर को परिभाषित करने की आवश्यकता है - मैंने इसके बारे में कुछ पढ़ा और एक नाटक किया, लेकिन एक्सएमएल को पार्सिंग/मैनिप्लेट करने के बारे में जानने के लिए समय नहीं था। ऐप इसके बजाय दस्तावेज़ों का उपयोग करता है। यह भयानक है, लेकिन यह एक दोपहर में वितरित करने के सुझाव से चला गया, और इसका मेरा नाम नहीं है। मैं दुर्भाग्य से प्रोग्रामर नहीं हूं :) – user51498

2

दुर्भाग्य से, यह एक मुश्किल सवाल का एक सा कारणों की एक जोड़ी के लिए जवाब देने के लिए है:

  1. आप एक गैर इंटरनेट कनेक्शन चालू कैसे परिभाषित करते हैं? क्या आप एक वैध आईपी पते की जांच करते हैं? क्या आप बाहर पिंग करते हैं? आप कैसे जानते हैं कि आपको इन चीजों की जांच करने की अनुमति है? आप कैसे जानते हैं कि कंप्यूटर का फ़ायरवॉल/एंटीवायरस भद्दा व्यवहार नहीं कर रहा है?
  2. एक बार जब आप यह स्थापित कर लें कि कनेक्शन काम कर रहा है, तो कनेक्शन क्या होता है यदि कनेक्शन मध्यस्थता को छोड़ देता है?

संभवतः ऐसा करने के तरीके हैं जो आप करना चाहते हैं, लेकिन बहुत से "विवरण में शैतान" टाइप चीजें पॉप अप होती हैं। क्या आपके पास यह जांचने का कोई तरीका है कि सहेजी गई खोज मान्य है? यदि ऐसा है, तो यह संभवतः ऐसा करने का सबसे अच्छा तरीका होगा।

21

जाहिर है, आपकी समस्या में कई स्तर हैं। आपको "इंटरनेट से कनेक्ट" को परिभाषित करके शुरू करना चाहिए, और विफलता पर अमान्य फ़ाइलों को लिखना शामिल नहीं है जिसमें फॉलबैक रणनीतियों को विकसित करना है।

का सवाल है "मैं जुड़ा" सवाल है, तो आप Win32 एपीआई दोहन की कोशिश कर सकते हैं:

Private Declare Function InternetGetConnectedState Lib "wininet.dll" _ 
(ByRef dwflags As Long, ByVal dwReserved As Long) As Long 

Public Function GetInternetConnectedState() As Boolean 
    GetInternetConnectedState = InternetGetConnectedState(0&,0&) 
End Function 

अपने नेटवर्क सेटअप के आधार पर (प्रॉक्सी/नेट/फ़ायरवॉल प्रतिबंधों आदि), विंडोज हो सकता है हालांकि आपके बारे में इस बारे में एक अलग राय।

HTTP हेडर में गेटवे टाइमआउट (गेटवे टाइमआउट, 404, जो कुछ भी होने की उम्मीद है) में वापसी की स्थिति की जांच करने की कोशिश कर रहे पृष्ठों को प्राप्त करने का प्रयास करना भी एक तरीका हो सकता है।

+0

मैं इस के लिए एक अजीब अपवाद होना चाहिए वास्तव में ऑनलाइन नहीं। आश्चर्य है कि अगर इसे किसी भी तरह से बढ़ाया जा सकता है, लेकिन सब कुछ एक महान और सरल समाधान है। – seegoon

2

शाकल्पेश के उत्तर और टिप्पणियों पर बिल्डिंग, XMLHTTP60 ऑब्जेक्ट द्वारा लौटाए गए XML को पार्स किए बिना वेब पेज को Word में प्राप्त करने के दो तरीके हैं (कम से कम)।

(नायब 200 का HTTP स्थिति कोड इंगित करता है कि "अनुरोध सफल रहा" - here देख)

  • एक पाठ फ़ाइल के लिए बाहर XMLHTTP60.ResponseText लिखना और फिर उस पाठ फ़ाइल
पर Documents.Open फोन
If (xhr.Status = 200) Then 
    hOutFile = FreeFile 
    Open "C:\foo.html" For Output As #hOutFile 
    Print #hOutFile, xhr.responseText 
    Close #hOutFile 
End If 

// ... 

Documents.Open "C:\foo.html" 

इस नुकसान यह है कि कुछ जुड़ा हुआ तत्वों खो दिया जा सकता है और आप करेंगे एक संदेश बॉक्स जब फ़ाइल XMLHTTP60 वस्तु के साथ

  • जांच URL की स्थिति को खोलता है और फिर Documents.Open का उपयोग के रूप में पहले URL खोलने के लिए:
If (xhr.Status = 200) Then 
    Documents.Open "http://foo.bar.com/index.html" 
End If 

वहाँ एक मामूली है मौका है कि XMLHTTP60 अनुरोध सफल हो सकता है और Documents.Open एक विफल (या इसके विपरीत)। उम्मीद है कि इस एक काफी असामान्य घटना जब वीपीएन लेकिन के माध्यम से जुड़े हालांकि

3

उपयोग निम्नलिखित कोड अपने संदर्भ में इंटरनेट कनेक्शन पहले anable एक्सएमएल v6.0 के लिए जाँच करने

Function checkInternetConnection() As Integer 
'code to check for internet connection 
'by Daniel Isoje 
On Error Resume Next 
checkInternetConnection = False 
Dim objSvrHTTP As ServerXMLHTTP 
Dim varProjectID, varCatID, strT As String 
Set objSvrHTTP = New ServerXMLHTTP 
objSvrHTTP.Open "GET", "http://www.google.com" 
objSvrHTTP.setRequestHeader "Accept", "application/xml" 
objSvrHTTP.setRequestHeader "Content-Type", "application/xml" 
objSvrHTTP.Send strT 
If err = 0 Then 
checkInternetConnection = True 
Else 
    MsgBox "Internet connection not estableshed: " & err.Description & "", 64, "Additt !" 
End If 
End Function 
संबंधित मुद्दे