[Solved] Διαύγεια opendata από C# .net 2.0

Συζητήσεις για τις γλώσσες του dot Net και για του Visual Studio της Microsoft

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

[Solved] Διαύγεια opendata από C# .net 2.0

Δημοσίευση από dva_dev » 24 Μάιος 2012 22:33

Προσπαθώ να πάρω μερικές πληροφορίες για συγκεκριμένα έγγραφα από το web service της διαύγειας, σύμφωνα με αυτά που αναφέρονται στο http://opendata.diavgeia.gov.gr/

Εχω κάνει κάποιες δοκιμές και σε php (οι οποίες παίζουν με κάποια εκδοχή του κώδικα, αλλά εξακολουθώ να έχω πρόβλημα).

Εχω λοιπόν τον εξής απλούστατο κώδικα:

Κώδικας: Επιλογή όλων

try
{
	ADA = "Β4ΩΛΧ-ΨΚΒ";
	//ADA = System.Web.HttpUtility.UrlEncode("Β4ΩΛΧ-ΨΚΒ");
	System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
	string s = "http://opendata.diavgeia.gov.gr/api/decisions?ada=" + ADA;
	doc.Load(s);
}
catch (WebException e)
{
	System.Diagnostics.Debug.Print(e.ToString());
}
To οποίο πάντα (μα πάντα) μου πετάει το εξής web exception

Κώδικας: Επιλογή όλων

A first chance exception of type 'System.Net.WebException' occurred in System.Xml.dll
System.Net.WebException: The remote server returned an error: (500) Internal Server Error.
   at System.Net.HttpWebRequest.GetResponse()
   at System.Xml.XmlDownloadManager.GetNonFileStream(Uri uri, ICredentials credentials)
   at System.Xml.XmlDownloadManager.GetStream(Uri uri, ICredentials credentials)
   at System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, Type ofObjectToReturn)
   at System.Xml.XmlTextReaderImpl.OpenUrlDelegate(Object xmlResolver)
   at System.Threading.CompressedStack.runTryCode(Object userData)
   at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
   at System.Threading.CompressedStack.Run(CompressedStack compressedStack, ContextCallback callback, Object state)
   at System.Xml.XmlTextReaderImpl.OpenUrl()
   at System.Xml.XmlTextReaderImpl.Read()
   at System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace)
   at System.Xml.XmlDocument.Load(XmlReader reader)
   at System.Xml.XmlDocument.Load(String filename)
   at Τest.TestADA.ADACheck(String ADA)
η διαφορά με τον php κώδικα (και τις php αποτυχίες) είναι ότι εδώ όταν πάρω internal server error, φαίνεται ότι κρασάρει ολόκληρο το web service στον server και δεν μπορώ να δω ούτε από web browser το xml δίνοντας τη διεύθυνση. Απλώς ο web server της διαύγειας απαντάει με το εξής:

Κώδικας: Επιλογή όλων

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Could not resolve view with name 'xmlView' in servlet with name 'diavgeia-api'
	org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1042)
	org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:798)
	org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716)
	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647)
	org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:552)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
	org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:344)
	org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:110)
	org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
	org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:98)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
	org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:95)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
	org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:79)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
	org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:55)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
	org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:36)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
	org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:178)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
	org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
	org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:150)
	org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
	org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.29 logs.

Apache Tomcat/6.0.29
Μετά από λίγο (δεν έχω μετρήσει να δώ αν είναι 1 λεπτό ή 10) συνέρχεται ο web server, μέχρι να ξανατρέξω τον κώδικα και να ξανακρασάρει :o

Υπάρχει καμιά πρόταση (εκτός από το να πουλήσω τον κώδικα σε τίποτα αντιεξουσιαστές και επίδοξους crackers), ώστε να παίρνω τις πληροφορίες που θέλω;
Εχω μπροστά μου κάποιο λάθος και δεν το βλέπω;
Δεν ζητάω πολλά, αυτό που δείχνει η διεύθυνση για παράδειγμα http://opendata.diavgeia.gov.gr/api/dec ... E%9A%CE%92

Αν υπάρχει θεός του internet μάλλον μου έχει θυμώσει. :evil:
Τελευταία επεξεργασία από το μέλος dva_dev την 26 Μάιος 2012 08:58, έχει επεξεργασθεί 1 φορά συνολικά.

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

[Solved] Διαύγεια opendata από C# .net 2.0

Δημοσίευση από dva_dev » 26 Μάιος 2012 08:58

Τελικά βρέθηκε λύση, από παλιότερο κώδικα που χρησιμοποιούσα για να διαβάζω τον html κώδικα μιας ιστοσελίδας. Χρειάστηκε βέβαια κάποιες μικρές τροποποιήσεις, φαντάζομαι επειδή το web service είναι αρρωστιάρικο, αλλά τελικά έπαιξε χωρίς να κρεμάει.

O τελικός κώδικας έγινε έτσι:

Κώδικας: Επιλογή όλων

public static bool CheckDiavgeiaADA(string ADA)
{
    try
    {
        //ADA = System.Web.HttpUtility.UrlEncode(ADA);
        string s = "http://opendata.diavgeia.gov.gr/api/decisions?ada=" + ADA;
        string xmlStr = GetWebResponse(s);
        XmlDocument doc = new XmlDocument();
        doc.LoadXml(xmlStr);
    }
    catch (WebException e)
    {
        System.Diagnostics.Debug.Print(e.ToString());
    }
    return false;
}

public static string GetWebResponse(string url)
{
    try
    {
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
        request.Method = WebRequestMethods.Http.Get;
        request.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.Reload);
        request.Accept = "*/*";
        request.KeepAlive = true;
        System.Net.HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        Stream dataStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(dataStream);
        String responseText = reader.ReadToEnd();
        reader.Close();
        dataStream.Close();
        response.Close();
        return responseText;
    }
    catch (System.Net.WebException ex)
    {
        System.Diagnostics.Debug.Write(ex.Message);
        return string.Empty;
    }
}
Εντάξει έτσι δεν είναι και πολύ χρήσιμος αλλά τουλάχιστον έχεις το xml document με το response του web service για να το κάνεις ότι θέλεις.

Απάντηση

Επιστροφή στο “dot Net και Visual Studio”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες