0

Einfache XML-Serialisierung in C#

C# XML SerialisierungHeute möchte ich euch zeigen, wie man eine XML-Serialisierung in C# durchführen kann. Serialisierung selbst, bedeutet, dass man ein Objekt in eine andere, transportable Form umwandelt. Mittels XML-Serialisierung ist es uns zum Beispiel nötig, ein Objekt einer Klasse in Form einer XML-Datei abzuspeichern und auch wieder herzustellen.
Das kann Sinn machen, wenn man ein Objekt in seinem Zustand nach dem Schließen und erneuten Öffnen einer Anwendung wiederherstellen oder wenn man ein Objekt beispielsweise per HTTP übertragen möchte.

Für unser Beispiel habe ich folgende Klasse Blog erstellt:

public class Blog
{
    public string User { get; set; }
    public string Pass { get; set; }
    public string Subdomain { get; set; }
    public string BaseUrl { get; set; }
}

Die Methode zum Serialisieren sieht wie folgt aus:

public void SerializeBlogToXML(Blog blogObj)
{
    //Erstelle einen XML-Serialisierer für Objekte vom Typ Blog
    XmlSerializer serializer = new XmlSerializer(typeof(Blog));

    //Erstelle einen FileStream auf die Datei, in die unserer
    //Blog-Objekt in XML-Form gespeichert werden soll.
    FileStream file = new FileStream(Application.StartupPath
                                     + "\\blog.xml",
                                     FileMode.Create);
    //Serialisiere das übergebene Blog-Objekt (blogObj)
    //und schreibe es in den FileStream.
    serializer.Serialize(file, blogObj);

    //Schließe die XML-Datei.
    file.Close();
}

Nicht vergessen die passenden Using-Anweisungen zu schreiben!

using System.Xml.Serialization;
using System.IO;

Ohne diese würde die oben geschriebene Methode SerializeBlogToXML nicht ohne weitere Anpassungen laufen.

Das war es auch schon. Wenn man von meinen Kommentaren absieht, dann reichen ganze 4 Zeilen aus, um ein Objekt als XML-Datei abzuspeichern.

Ein kleines Beispiel zur Verwendung könnte zum Beispiel so aussehen:

private void buttonSerialisieren_Click(object sender, EventArgs e)
{
    //Blog-Objekt erstellen und mit Werten befüllen
    Blog blogObject = new Blog();
    blogObject.User = "maxmustermann";
    blogObject.Pass = "superpasswort";
    blogObject.Url = "www.code-bude.net";

    //Blog-Objekt serialisieren
    SerializeBlogToXML(blogObject);
}

Wenn alles geklappt hat, dürfte sich nun im Ausführungsverzeichnis eures Projektes eine Datei namens Blog.xml befinden. Diese sollte folgenden Inhalt haben:

<?xml version="1.0"?>
<Blog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <User>maxmustermann</User>
  <Pass>superpasswort</Pass>
  <Url>www.code-bude.net</Url>
</Blog>

Das einzige was jetzt noch fehlt, ist die Konvertierung eines nach XML serialisierten Objekts. Das geht sogar noch ein bisschen leichter, als das umwandeln in’s XML-Format.

public Blog DeserializeXmlToBlog()
{
    XmlSerializer serializer = new XmlSerializer(typeof(Blog));
    FileStream file = new FileStream(Application.StartupPath
                                        + "\\blog.xml",
                                        FileMode.Open);
    //Die Deserialize()-Methode gibt ein Object zurück. => casten!
    Blog blogList = serializer.Deserialize(file) as Blog;
    file.Close();
    return blogList;
}

Zum Abschluss noch mal ein Beispiel, in dem Serialisiert und Deserialisiert wird.

private void buttonSerialisieren_Click(object sender, EventArgs e)
{
    Blog blogObject = new Blog();
    blogObject.User = "maxmustermann";
    blogObject.Pass = "superpasswort";
    blogObject.Url = "www.code-bude.net";

    SerializeBlogToXML(blogObject);
    Blog blogFromXml = DeserializeXmlToBlog();
    MessageBox.Show(blogFromXml.Url);
}

Ich hoffe, ich habe das ganze verständlich genug beschrieben. Solltet ihr dennoch Fragen haben, schreibt mir einfach einen Kommentar.

Wer keine Lust hat, den Code von Hand zu tippen bzw. zu kopieren, der kann sich das Beispiel auch als Visual Studio 2010 Projekt herunterladen.

Viele Grüße,
Raffi

0

Artikel auf Blogspot erstellen – C# .NET Blogger API

Blogger C# API LogoHeute möchte ich euch zeigen, wie man mittels C# Blogartikel auf Blogger.com (Blogspot.com) erstellen kann. Hierfür benötigt ihr zu aller erst die Google.GData.Client.dll, welche ihr im Google. Net API Pack findet.
Das API-Pack könnte ihr euch hier von Google herunterladen. (Die Datei heißt Google_Data_API_Setup_2.0.1.0.msi. Beachtet bitte, dass sich die Versionsnummer – 2.0.1.0 – im Laufe der Zeit natürlich ändern kann.) Wenn ihr den Download abgeschlossen habt, installiert das Paket, öffnet ein neues Projekt im Visual Studio und bindet die Google.GData.Client.dll ein.
Die .dll-Datei findet ihr im Downloadverzeichnis des API-Pack. (Wie ihr eine DLL einbinden könnt, habe ich hier bereits beschrieben.)

Wenn ihr die DLL eingebunden habt, kann es auch schon losgehen. Einen Post aka Blogartikel könnt ihr wie folgt erstellen:

 

private static int AddPost(string title,
                                   string html,
                                   string[] labels,
                                   string user,
                                   string pass,
                                   string blogUrl
                                   bool isDraft)
{
	try
	{
		//Wird benötigt um Google Zertifikatfehler zu "umgehen"
		ServicePointManager.ServerCertificateValidationCallback =
			new RemoteCertificateValidationCallback
			(
				delegate { return true; }
			);

		//Eine Google Service Instanz wird erstellt. "blogger"
		//gibt den Dienst an, den wir nutzen wollen. "api_test"
		//gibt den Namen an, unter dem sich unsere Anwendung
		//ausweisen soll. Im Gegenteil zum Dienstparameter, der
		//für unser Beispiel auf "blogger" festgelegt ist, haben
		//wir beim Namen freie Wahl.
		Service service = new Service("blogger", "api_test");

		//Der Service Instanz werden die Benutzerdaten eines
		//gültigen Blogger (Google) Accounts überegeben.
		service.Credentials = new GDataCredentials(user, pass);

		//Ein neues Blogartikel Objekt wird (lokal) angelegt.
		AtomEntry newPost = new AtomEntry();

		//Die Überschrift des Blogartikels wird gesetzt
		newPost.Title.Text = title;

		//Der Inhalt des Blogartikel wird gesetzt.
		newPost.Content = new AtomContent();
		//Wenn ihr HTML-Code übergebt, solltet ihr zuvor sämtliche
		//Zeilenumbrüche entfernen, da Blogger sonst automatisch alle
		//Zeilenumbrüche durch <br /> ersetzt. Wenn man selbst schon
		//im Quelltext <br /> gesetzt hatte, wird einem sonst das
		//ganze Layout "zerfleddert".
		string[] breaks = new string[] { "\r\n", "\r", "\n" };
		foreach (string breakStr in breaks)
		{
			while (html.Contains(breakStr))
				html = html.Replace(breakStr, "");
		}
		newPost.Content.Content = html;
		newPost.Content.Type = "html";

		//Setzen der Labels für den Blogartikel.
		//(Labels bei Blogger entsprechen Kategorien/Tags)
		foreach (string labelRaw in labels)
		{
			AtomCategory cat = new AtomCategory();
			cat.Scheme = new Uri("http://www.blogger.com/atom/ns#");

			//Blogger verbietet bestimmte Zeichen in den Labels
			//Diese sollten zuvor herausgefiltert werden.
			string label = labelRaw;
			string[] forbiddenChars = new string[] { "&", "<", ">",
													 "@", "!", "," };
			foreach (string forbiddenChar in forbiddenChars)
			{
				while (label.Contains(forbiddenChar))
					label = label.Replace(forbiddenChar, "");
			}
			cat.Term = label;
			newPost.Categories.Add(cat);
		}

		//Festlegen, ob der Artikel direkt gepostet oder als Entwurf
		//gespeichert werden soll. (false = direkt Posten)
		newPost.IsDraft = isDraft;

		AtomEntry response = null;
		try
		{
			//Blogartikel absenden (Woher die blogUrl kommt,
                        //wird später im Artikel geklärt.
			response = service.Insert(new Uri(blogUrl), newPost);
		}
		catch (GDataRequestException iDontCare)
		{
			//Fehler beim Absenden aufgetreten
			if (iDontCare.ResponseString == "Blog has exceeded rate " +
								  "limit or otherwise requires word " +
								  "verification for new posts")
			{
				//Fehler tritt auf, wenn das Tageslimit an Posts
				//erreicht ist. (Mehr dazu weiter unten in
				//diesem Blogartikel.)
				return -2;
			}
			else
			{
				//Anderer Fehler aufgetreten
				throw iDontCare;
			}
		}
		if (response == null)
		{
			throw new Exception("Konnte keine Verbindung herstellen");
		}

		//Blogartikel erfolgreich abgesendet
		return 0;
	}
	catch
	{
		//Es ist ein Fehler aufgetreten
		return -1;
	}
}

Nun haben wir den größten Teil geschafft! Um nun einen Blogartikel zu posten, müssen wir nur noch die eben geschriebene Funktion aufrufen. Das könnte wie folgt aussehen:

Demo.AddPost("Meine Überschrift",
             "<b>das</b><br /><i>ist</i> ein test",
             new string[] { "test", "csharp", "api" },
             "maxmustermann@googlemail.com",
             "demo_passwort",
             "https://www.blogger.com/feeds/XXXXXX/posts/default");

Eine letzte Frage steht nun noch im Raum. Was ist die Blog-Url und wo kommt Sie her? Das klären wir nun. Die Url ist vom Grundaufbau her immer identisch. Lediglich die XXXXXXe müssen durch die ID des Blogs ersetzt werden. Eine Möglichkeit die komplette URL zu bekommen, möchte ich euch nachfolgend zeigen.
Nehmen wir an, euer Blog hat die URL: http://code-bude-test.blogspot.com – dann ist “code-bude-test” der Name des Blogs, den wir nun brauchen.

public static string SelectUserBlogPostUrl(string subdomain,
                                                   string user,
                                                   string pass)
{
	//Erstellen der Google Service Instanz
	ServicePointManager.ServerCertificateValidationCallback =
		new RemoteCertificateValidationCallback
		(
			delegate { return true; }
		);
	Service service = new Service("blogger", "api_test");
	service.Credentials = new GDataCredentials(user, pass);

	//Anfordern einer Liste mit allen Blogs, die unter
	//dem angegeben Google Account existieren
	FeedQuery query = new FeedQuery();
	query.Uri = new Uri("http://www.blogger.com/feeds/default/blogs");
	AtomFeed feed = service.Query(query);

	//Wenn die Liste mit den Blogs nicht null ist...
	string blogUrl = string.Empty;
	if (feed != null)
	{
		//Durchlaufe alle erhaltenen Blogs
		foreach (AtomEntry entry in feed.Entries)
		{
			//Überprüfe, ob der aktuelle Blog der gesuchte
			//Blog ist.
			if (entry.AlternateUri.Content.Contains(subdomain))
			{
				//Suche die Blog Post URL
				for (int i = 0; i < entry.Links.Count; i++)
				{
					if (entry.Links[i].Rel.Equals("http://schemas.google.com/g/2005#post"))
					{
						blogUrl = entry.Links[i].HRef.ToString();
					}
				}
				//Gebe die Blog Post Url zurück
				return blogUrl;
			}
		}
	}
	//Wenn keine URL gefunden wurde, gebe Blog Url
	//= string.empty zurück
	return blogUrl;
}

Nun haben wir alles zusammen. Mit den oben stehenden Funktionen könnt ihr nun die Blog Post Url herausfinden und mittels dieser und der AddPost-Funktion Blogartikel auf Blogger.com veröffentlichen.

Zum Abschluss noch ein paar Worte zum “Rate-Limit” (aka “Blog has exceeded rate limit or otherwise requires word verification for new posts”). Die Blogger API erlaubt nur eine gewisse Anzahl an Posts pro Tag. Eine genaue Zahl gibt Google nicht heraus. Aus Erfahrung kann ich jedoch sagen, dass es ziemlich genau 50 Artikel sind, die man am Tag veröffentlichen kann. Danach geht über die API gar nichts mehr.
Über die Weboberfläche von Blogger.com können jedoch weitere Artikel veröffentlicht werden. Hierbei muss nach Erreichen des Limits jedoch jedes Mal beim Veröffentlichen ein Captcha gelöst werden. Das Limit/die Sperre wird ziemlich genau nach 24 Stunden wieder zurückgesetzt.

So, das war’s dann aber auch wirklich für heute. Wenn ihr noch Fragen, oder noch besser, Anregungen und Ideen habt, dann schreibt einfach einen Kommentar.

Viele Grüße,
Raffi

54

Projekt: MySpace Loader – ein MySpace Downloader

english flag For english information scroll down please.

Ich habe die Tage mal wieder ein altes Projekt, welches noch zu Zeiten von net-blog.net enstanden ist, herausgekramt. Es geht um den MySpace Loader, welcher jedoch schon seit längerer Zeit nicht mehr funktionsfähig war. Die Betonung liegt auf war.
Nach einigen Stunden “Schönheitskur” und mehrere Operationen “am offenen Herzen” (am Quellcode), läuft er nun wieder.

Mit dem MySpace Loader könnt ihr, wie der Name schon sagt, Musik von MySpace herunterladen. Das Programm ermöglicht das Downloaden von mehrerern Songs auf einmal und kann diese dann auch in verschiedene Formate konvertieren und auf Wunsch mit ID3-Tags versehen. Das ganze ist, wie auch der Cloud Downloader, kostenlos. (Über eine Spende würde ich mich natürlich dennoch freuen.) Den Downloadlink findet ihr weiter unten im Artikel unter dem Youtube-Video.

Features:

  • Lädt jeden Song
  • Konvertiert auf Wunsch nach .mp3, .acc, .wma oder .ogg
  • Kostenlos (im Gegenteil zu z.B. Musicjacker)
  • Schnell, einfach und übersichtlich

MySpace Loader - Screenshot 1  MySpace Loader - Screenshot 2  MySpace Loader - Screenshot 3  MySpace Loader - Screenshot 4

Download: MySpace Loader 1.9

(You have to wait 5 seconds for download. After the 5 seconds click on the button on the upper right.)

 

English information:
The MySpace Loader is a piece of free software, developed and written by myself. With it you can download music from MySpace in less than 3 clicks for free. But that’s not all. The MySpace Loader also can convert your downloaded songs into different file formats like mp3, ogg or acc. If you like, it will automatically tag your songs with ID3-tags. If you want more information, watch the video at this article or write me a comment.
If you like my work, feel free to say thanks with a little donation. 

with best regards/viele Grüße,
Raffi

Du willst helfen? Dann Spende doch einfach. (Für deutsche Nutzer – €).
  
You want to help?
(For non-german users – $/USD)

0

Neue VirtualBox und Gasterweiterungen für Windows 8 erschienen

VirtualBox Windows 8Als ich gestern die VirtualBox startete, wurde ich mit der Meldung konfrontiert, dass es ein Update gäbe. Da hab ich doch gleich mal zugeschlagen und die neue Version (4.1.10) heruntergeladen und installiert.

Nach dem Update habe ich meine Windows 8 Maschine gebootet und nachgeschaut, ob es mittlerweile auch die passenden Gasterweiterungen gibt. Und siehe da, es gibt sie! Voller Freude wollte ich die Gasterweiterungen auch gleich installieren. Zack, das war wohl nichts. Während des Setups wurde der Bildschirm der virtuellen Maschine schwarz und auch nach einem Neustart wollte die Kiste nicht mehr so recht.
Also Windows 8 Consumer Preview Image gemountet und die Windowsinstallation wieder hergestellt. Nun startete die Maschine zwar wieder, aber die Metroapps wollten nicht mehr starten.

Langer Rede, kurzer Sinn – am Ende musste ich eine komplett neue virtuelle Maschine aufsetzen. Danach klappte es auch mit den Gasterweiterungen. Somit wird dann auch mein Tipp zum Setzen einer beliebigen Auflösung hinfällig.

Zum Schluss gibt’s noch ein paar Tipps zum installieren der Gasterweiterung:

  • Solltet ihr eine zusätzliche Bildschirmauflösung zur VirtualBox hinzugefügt haben, dann entfernt sie mit folgendem Befehl (Bei “NameMaschine” müsst ihr den Namen eurer virtuellen Box angeben):
    VBoxManage.exe setextradata "NameMaschine" CustomVideoMode1
    
  • Schaltet eure virtuelle Maschine vor der Installation der Gasterweiterungen herunter und verändert die Videoeinstellungen wie folgt:
    - Grafikspeicher mindestens 128MB
    - 3D-Beschleunigung muss aktiviert sein

Wenn ihr das beachtet und vielleicht sogar noch eine Sicherung anlegt, bevor ihr die Gasterweiterungen installiert, dann sollte auch nichts schief gehen.

Viele Grüße,
Raffi

5

Anleitung: Ubuntu auf einem Samsung Galaxy S2 installieren

Android Ubuntu ScreenshotHeute gibt es mal wieder einen Artikel zum Thema Android. Genauer gesagt geht es darum, wie ihr Ubuntu (Linux) parallel zu Android auf eurem Smartphone oder Tablet laufen lassen könnt. Darüber hatte ich auch bereits schon einmal gebloggt.
Heute jedoch möchte ich das ganze Mal Schritt-für-Schritt (anhand einer etwas anderen Methode) erklären.
Der Titel dieses Artikels ist genau genommen auch nicht ganz korrekt, denn wir werden das Ubuntu nicht installieren, sondern in einer Form von Livesystem laufen lassen – doch kommen wir zur Sache. Ich nutze für das Vorhaben mein Galaxy S2. Ob es auch mit anderen Smartphones klappt, konnte ich nicht testen, würde mich aber über Kommentare eurerseits freuen, falls ihr es ausprobiert.

Für unser Vorhaben benötigen wir folgende Dinge/Voraussetzungen:

Die beiden Apps findet ihr im Market in Google Play oder ihr klickt einfach auf die Namen der Apps in der obigen Liste. Das Shell-Script und das Ubuntu Image könnt ihr entweder von Google Docs herunterladen oder direkt von meinem Server.

Download von Google Docs

Download von www.code-bude.net

Wenn ihr alles heruntergeladen habt, entpackt die beiden .rar-Archive und dann kann es auch schon losgehen.

Ubuntu auf Android kopieren

Kopiert die beiden Dateien aus dem Archiv (ubuntu.img und ubuntu.sh) auf euer Galaxy S2. Ich habe dafür einen Ordner namens “ubuntu” auf der SD-Karte angelegt. Grundsätzlich seid ihr aber frei in der Wahl des Ordners/des Ordnernamens. Nur drauf aufs Smartphone müssen die beiden Dateien.

Wenn ihr fertig mit kopieren seid, öffnet ihr den Terminal Emulator und gebt folgende Befehle ein.

su
cd /sdcard/external_sd/ubuntu/
sh ubuntu.sh

Android Terminal EmulatorFür alle, denen jetzt ein großes Fragezeichen über dem Kopf schwirrt, erkläre ich kurz die Befehle. Mit dem Befehl “su” holen wir uns die Systemadministrationsrechte. Mit “cd” wechseln wir in den Ordner, den wir hinter “cd” angeben. Wenn ihr einen anderen Pfad für die beiden Dateien aus dem Archiv gewählt habt, dann müsst ihr natürlich euren Pfad an dieser Stelle angeben. Mit “sh” führen wir anschließend das Shell-Script “ubuntu.sh” aus.

Und weiter geht’s. Nachdem ihr die drei Befehle eingetippt habt, startet Ubuntu schon. Um nun auch noch etwas zu sehen, benötigen wir den android-vnc-viewer. Minimiert (nicht schließen) nun also den Terminal Emulator und öffnet den VNC Viewer.

Gebt folgende Daten an:

Password: ubuntu
Address: 127.0.0.1
Port: 5900
Color Format: 24 Bit

Android VNC Viewer Setup  Android VNC Viewer Setup 2

Wenn ihr nun auf Connect klickt, seid ihr schon fertig. Ihr könnt euch nun nach belieben in Ubuntu austoben. Wenn  ihr den ganzen Spuk wieder beenden wollt, fahrt Ubuntu über dessen Startmenü (Shutdown) herunter, disconnected danach den VNC Viewer (Android Menütaste -> Disconnect) und öffnet zum Schluss wieder den Terminal Emulator und schließt das Terminalfenster (Android Menütaste -> Fenster schließen).

Wem das Ganze nun zu schnell ging, der kann sich auch einfach eines der beiden Videos anschauen, die ich von dem ganzen Prozedere gemacht habe.

Ich hoffe, ihr hattet viel Spaß beim Lesen und Video schauen. Wenn ihr Fragen oder Tipps habt, schreibt mir einfach einen Kommentar.

Viele Grüße,
Raffi

weitere Seiten ... 1 2 3 4 5 6 7