Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

Allgemeines

Die folgende C#-Klasse DDBRest demonstriert den Abruf von Daten (speziell des Views eines Datensatzes) über die API der Deutschen Digitalen Bibliothek. Eine ausführbare Datei kann sowohl mit dem freien und plattformunabhänigen Mono-Compiler (wie nachfolgend verwendet) als auch mit der kommerziellen Implementierung von Microsoft erstellt werden. Die Quelltextdatei DDBRest.cs kann heruntergeladen und mit den folgenden Befehlen compiliert sowie ausgeführt werden. Der Dateipfad des C#-Mono-Compilers mcs sollte in der Umgebungsvariablen PATH des Betriebssystems definiert sein, andernfalls muss der vollständige Pfad mit Dateinamen (bspw. C:\Programme\Mono-3.2.3\bin\mcs) angegeben werden.

Info

Download

Code Block
titleWindows
linenumberstrue
languagetext
> mcs DDBRest.cs
> DDBRest
Code Block
titleUNIX
linenumberstrue
languagetext
> mcs DDBRest.cs
> mono DDBRest.exe

Es ist zu beachten, dass nur Daten abgefragt werden können, wenn ein gültiger API Key angegeben wird (Variable key). Andernfalls wird eine Exception mit dem Hinweis „Forbidden“ geworfen.

Nach erfolgreichem Ausführen des Programms wird auf der Konsole dreimal der gleiche Datensatz ausgegeben:

  1. Datensatz im XML-Format mit Authentifizierung über den HTTP request header
  2. Datensatz im JSON-Format mit Authentifizierung über den HTTP request header
  3. Datensatz im JSON-Format mit Authentifizierung über den Query Parameter

Quelltext

Code Block
titleKlasse {{DDBRest}}
linenumberstrue
languagec#
using System;
using System.Collections;
using System.IO;
using System.Net;

namespace DDBRest
{
    class DDBRest
    {

        public static String httpGet(String urlStr, Hashtable properties)
        {

            if (properties == null)
            {
                properties = new Hashtable();
            }

            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(urlStr);
            request.Method = "GET";

            foreach (DictionaryEntry key in properties)
            {
                // restricted headers (this needs to be continued!)
                // see http://msdn.microsoft.com/en-us/library/system.net.webclient.headers.aspx
                if (String.Compare(key.Key.ToString(), "Accept", true) == 0)
                {
                    request.Accept = key.Value.ToString();
                }
                else
                {
                    request.Headers.Add(key.Key + ": " + key.Value);
                }
            }

            String s = String.Empty;
            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            {
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    throw new IOException(response.StatusDescription);
                }

                Stream dataStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(dataStream);
                s = reader.ReadToEnd();
                reader.Close();
                dataStream.Close();
                response.Close();
            }

            return s;
        }

        static void Main(string[] args)
        {
            String url = "https://api.deutsche-digitale-bibliothek.de/items/OAXO2AGT7YH35YYHN3YKBXJMEI77W3FF/view";
            String key = "abcdefgh12345678";

            try
            {
                // get XML data via HTTP request header authentication
                String httpXmlResult = httpGet(url, new Hashtable() {
                    {"Authorization", "OAuth oauth_consumer_key=\"" + key + "\""},
                    {"Accept", "application/xml"}
                });
                Console.WriteLine(httpXmlResult); // print results

                // get JSON data via HTTP request header authentication
                String httpJsonResult = httpGet(url, new Hashtable() {
                    {"Authorization", "OAuth oauth_consumer_key=\"" + key + "\""},
                    {"Accept", "application/json"}
                });
                Console.WriteLine(httpJsonResult); // print results

                // get JSON data via query parameter authentication
                // remember: use URL encoded Strings online -> System.Uri.EscapeDataString(s) or HttpUtility.UrlEncode(s)
                String queryJsonURL = url + "?oauth_consumer_key=" + System.Uri.EscapeDataString(key);
                String queryJsonResult = httpGet(queryJsonURL, null);
                Console.WriteLine(queryJsonResult); // print results
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}