2012-08-09 22 views
9

मैंने Google के मौसम API से जानकारी खींचने का निर्णय लिया - मैं जिस कोड का उपयोग कर रहा हूं वह ठीक काम करता है।Google मौसम API 403 त्रुटि

  XmlDocument widge = new XmlDocument(); 
      widge.Load("https://www.google.com/ig/api?weather=Brisbane/dET7zIp38kGFSFJeOpWUZS3-"); 
      var weathlist = widge.GetElementsByTagName("current_conditions"); 
      foreach (XmlNode node in weathlist) 
      { 

       City.Text = ("Brisbane"); 
       CurCond.Text = (node.SelectSingleNode("condition").Attributes["data"].Value); 
       Wimage.ImageUrl = ("http://www.google.com/" + node.SelectSingleNode("icon").Attributes["data"].Value); 
       Temp.Text = (node.SelectSingleNode("temp_c").Attributes["data"].Value + "°C"); 
     } 
    } 

जैसा कि मैंने कहा, मैं XML फ़ाइल से आवश्यक डेटा खींचने के लिए और प्रदर्शित यह, हालांकि पेज ताजा है या एक मौजूदा सत्र अभी भी सक्रिय है, तो कर रहा हूँ, मैं निम्न त्रुटि प्राप्त:

WebException was unhandled by user code - The remote server returned an error: 403 Forbidden Exception.

मुझे आश्चर्य है कि क्या यह उस विशेष XML फ़ाइल तक पहुंचने के लिए किसी प्रकार की पहुंच सीमा के साथ किया जा सकता है?

इसके अलावा अनुसंधान और सुझावों

के रूप में नीचे वर्णित के अनुकूलन, इस किसी भी तरह सबसे अच्छा अभ्यास कर रहा है, लेकिन मैं पकड़ मैं अब अपवाद के लिए उपयोग शामिल किया है। मैं इस कोड को पेज_लोड पर चलाता हूं इसलिए मैं पेज पर पोस्ट-बैक करता हूं। मैंने तब से कोई समस्या नहीं देखी है। निष्पादन के अनुसार मैं अत्यधिक चिंतित नहीं हूं - मैंने लोड समय में कोई वृद्धि नहीं देखी है और यह समाधान अस्थायी है क्योंकि यह सभी परीक्षण उद्देश्यों के लिए है। मैं अभी भी याहू के मौसम एपीआई का उपयोग करने की प्रक्रिया में हूं।

 try 
     { 
      XmlDocument widge = new XmlDocument(); 
      widge.Load("https://www.google.com/ig/api?weather=Brisbane/dET7zIp38kGFSFJeOpWUZS3-"); 
      var list2 = widge.GetElementsByTagName("current_conditions"); 
      foreach (XmlNode node in list2) 
      { 

       City.Text = ("Brisbane"); 
       CurCond.Text = (node.SelectSingleNode("condition").Attributes["data"].Value); 
       Wimage.ImageUrl = ("http://www.google.com/" + node.SelectSingleNode("icon").Attributes["data"].Value); 
       Temp.Text = (node.SelectSingleNode("temp_c").Attributes["data"].Value + "°C"); 

      } 
     } 
     catch (WebException exp) 
     { 
      if (exp.Status == WebExceptionStatus.ProtocolError && 
       exp.Response != null) 
      { 
       var webres = (HttpWebResponse)exp.Response; 
       if (webres.StatusCode == HttpStatusCode.Forbidden) 
       { 
        Response.Redirect(ithwidgedev.aspx); 
       } 

      } 
     } 

गूगल लेख को दर्शाता हुआ एपीआई से निपटने

Google API Handle Errors

धन्यवाद त्रुटि के:

https://stackoverflow.com/a/12011819/1302173 (403 और याद पकड़ो)

https://stackoverflow.com/a/11883388/1302173 (त्रुटि हैंडलिंग और जनरल गूगल एपीआई जानकारी)

https://stackoverflow.com/a/12000806/1302173 (रिस्पांस हैंडलिंग/json कैशिंग - भविष्य की योजनाओं)

वैकल्पिक

मैं इस महान खुला स्रोत विकल्प हाल ही में

OpenWeatherMap - Free weather data and forecast API

उत्तर

12

इस सेवा का एक परिवर्तन/आउटेज से संबंधित है पाया । देखें: http://status-dashboard.com/32226/47728

enter image description here

मैं एक वर्ष से अधिक के लिए गूगल की मौसम एपीआई का उपयोग किया गया है एक फोन सर्वर को खिलाने के लिए इतना है कि पॉलीकॉम फोन एक मौसम पेज प्राप्त करते हैं। यह एक साल से अधिक के लिए त्रुटि मुक्त चला गया है। 7 अगस्त 2012 तक लगातार 403 त्रुटियां होती हैं।

मैं प्रति घंटे एक बार सेवा का हिट करता हूं (जैसा कि हमेशा होता है) इसलिए मुझे नहीं लगता कि अनुरोध की आवृत्ति समस्या है। अधिक संभावना है कि 403 की अंतःविषय प्रकृति कॉन्फ़िगरेशन परिवर्तन के आंशिक रोल-आउट या Google पर एक सीडीएन परिवर्तन से संबंधित है।

Google मौसम API वास्तव में एक प्रकाशित एपीआई नहीं है। यह एक आंतरिक सेवा थी जिसे स्पष्ट रूप से iGoogle पर उपयोग के लिए डिज़ाइन किया गया था, इसलिए समर्थन का स्तर अनिश्चित है। मैंने कल googleapis ट्वीट किया और कोई प्रतिक्रिया नहीं मिली।

यह इस तरह के रूप में एक को बढ़ावा मौसम एपीआई के लिए स्विच करने के लिए बेहतर हो सकता है: WUnderground Weather या Yahoo Weather

मैं जोड़ लिया है निम्नलिखित 'जब तक परिभाषित' त्रुटि से निपटने पर्ल कोड अपने आप को कल इस से निपटने के लिए, लेकिन अगर समस्या बनी रहती है मैं एक और अधिक पूरी तरह से समर्थित सेवा करने के लिए स्विच जाएगा:

my $url = "http://www.google.com/ig/api?weather=" . $ZipCode ; 

my $tpp = XML::TreePP->new(); 
my $tree = $tpp->parsehttp(GET => $url); 

my $city = $tree->{xml_api_reply}->{weather}->{forecast_information}->{city}->{"-data"}; 

unless (defined($city)) { 
    print "The weather service is currently unavailable. \n"; 
    open (MYFILE, '>/home/swarmp/public_html/status/polyweather.xhtml'); 
    print MYFILE qq(<?xml version="1.0" encoding="utf-8"?>\n); 
    print MYFILE qq(<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "xhtml11.dtd">\n); 
    print MYFILE qq(<html xmlns="http://www.w3.org/1999/xhtml">\n); 
    print MYFILE qq(<head><title>Weather is Unavailable!</title></head>\n); 
    print MYFILE qq(<body>\n); 
    print MYFILE qq(<p>\n); 
    print MYFILE qq(The weather service is currently unavailable from the data vendor.\n); 
    print MYFILE qq(</p>\n); 
    print MYFILE qq(</body>\n); 
    print MYFILE qq(</html>\n); 
    close MYFILE; 
    exit(0); 
}... 
+2

उत्कृष्ट उत्तर! मुझे अनुमान लगाया जाएगा कि iGoogle की समाप्ति इस सेवा को प्रभावित कर रही है। मुझे अस्पष्टता से पता था कि एपीआई "केवल विजेट उपयोग के लिए" थी इसलिए मुझे लगता है कि यह अत्यधिक आश्चर्यजनक नहीं है कि सेवा विश्वसनीयता के साथ समस्याएं हैं। मैं उन विकल्पों का उपयोग करने और संभवतः आपके अपवाद हैंडलिंग के पीछे विचारों को अनुकूलित करने में देखता हूं। एक बार फिर धन्यवाद! – mitchimus

+2

शीश! अपनी कोशिश/ब्रेक को हर किसी को तोड़ दें ... +1 –

+0

अगस्त 27, 2012 तक सेवा लगातार 403 त्रुटि और एक संदेश से प्रतिक्रिया दे रही है कि आप स्वचालित प्रश्न भेज रहे हैं .: – ClearCrescendo

0

मैंने पाया कि आप तो Google मौसम सेवा काम करता है, एक स्वच्छ ब्राउज़र (जैसे क्रोम पर नई विंडो गुप्त मोड) में अनुरोध का प्रयास करें। कुकीज़ की संभावित समस्या?

+3

दुर्भाग्यवश ताजा ब्राउज़र काम नहीं कर रहा है। मुद्दा यह है कि सेवा का इस्तेमाल कभी भी मौसम विजेट iGoogle के बाहर उपयोग करने के लिए नहीं किया गया था। कई कारकों के कारण, iGoogle धीरे-धीरे चरणबद्ध हो रहा है, मुझे आश्चर्य नहीं है कि हमारे पास प्रदर्शन समस्याएं हैं। मैं याहू एपीआई के लिए अगले दिन या दो में अपना कोड पोस्ट करूंगा। लेकिन मुझे नहीं लगता कि हम में से कोई भी वास्तव में ब्राउज़र की स्थिति के बावजूद मुद्दों का अंत देखने जा रहा है। – mitchimus

1

यही वही बात है जिसे हमने पाया।

अनुरोध हेडर की तुलना किसी बुरे अनुरोध और कार्य अनुरोध में करें। काम करने के अनुरोध में कुकीज़ शामिल हैं। लेकिन वे कहाँ से हैं?

Google से अपनी सभी ब्राउज़र कुकीज़ हटाएं। मौसम एपीआई कॉल अब आपके ब्राउज़र में काम नहीं करेगा। Google.com पर ब्राउज़ करें और फिर मौसम एपीआई पर ब्राउज़ करें, यह फिर से काम करेगा।

Google एकाधिक एपीआई कॉल को ब्लॉक करने के लिए कुकीज़ की जांच करता है। सभी मौसम एपीआई अनुरोधों को संभालने से पहले कुकीज प्राप्त करने से समस्या ठीक हो जाएगी। कुकीज़ एक वर्ष में समाप्त हो जाएगी। मुझे लगता है कि आप साल में एक बार फिर अपने आवेदन को फिर से शुरू कर देंगे। ताकि आप एक नया प्राप्त कर सकें। प्रत्येक अनुरोध के लिए कुकीज़ प्राप्त करना एक ही समस्या में समाप्त होगा: बहुत सारे अनुरोध।

एक टिप: मौसम अक्सर बदलता नहीं है, इसलिए जेसन जानकारी को कैश करें (शायद एक घंटे के लिए)। यह अनुरोध के रूप में समय लेने वाले संचालन को कम करेगा!

1

यह किसी भी तरह का सबसे अच्छा अभ्यास नहीं है, लेकिन मैं कुछ WP7 और मेट्रो ऐप्स में इस एपीआई का भारी उपयोग करता हूं। मैं इसे अपवाद (अधिकांश समय 403) पकड़कर और पकड़ के अंदर सेवा को फिर से कॉल करके इसे संभालता हूं, अगर Google अंत में कोई त्रुटि होती है तो यह आमतौर पर संक्षेप में होती है और केवल 1 या 2 अतिरिक्त कॉल में परिणाम देती है।

संबंधित मुद्दे