Weiterleitung ModRewrite 301 von altem CMS zu WordPress – Teil 5

Den Anfang unseres Tutorials verpasst? Hier geht es zum Teil 1.

Im eigentlichen Programm warden wir nicht alle Werte, die oben abgefragt, auch wirklich nutzen. Doch zu Testzwecken ist diese Abfrage sinnvoll.

Nun endlich können wir uns mit dem C#-Code beschäftigen:

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using MySql.Data.MySqlClient;

namespace wp_permalinks
{
 class Program
 {
 public static string sConnection = "data source=127.0.0.1;DATABASE=local;UID=root;PASSWORD=xxx;";

 static void Main(string[] args)
 {
 string sSQL = "";
 try
 {
 //Lies hier einmal alle aktiven Artikel aus der alten Artikel-Tabelle ein
 sSQL = "SELECT id, perm, titel FROM artikel WHERE status=1";

 using (MySqlConnection conn = new MySqlConnection(sConnection))
 {
 MySqlDataReader rdr = null;
 conn.Open();
 using (MySqlCommand cmd = new MySqlCommand(sSQL, conn))
 {
 rdr = cmd.ExecuteReader();
 if (rdr.HasRows)
 {
 while (rdr.Read())
 {
 //Prüfe, ob der Perm vorhanden ist
 if (rdr["perm"].ToString().Length < 1)
 {
 //Kein Perm vorhanden
 Ausgabe("Kein Perm für Datei ID " + rdr["id"].ToString() + " " + rdr["titel"].ToString(), true);
 }
 else
 {
 //hier ncoh einige spezifische Überprüfuungen

 //sind Leerzeichen im Perm? -> Fehler
 if (rdr["perm"].ToString().Contains(" ")) Ausgabe("Leerzeichen im Perm für Datei ID " + rdr["id"].ToString() + " " + rdr["titel"].ToString(), true);
 else
 {
 //Wenn zwei Bindestriche im Perm auftauchen, ist das unschön. Hinweis (kein Fehler) in Fehlertabelle
 if (rdr["perm"].ToString().Contains("--")) Ausgabe("HINWEIS: Doppelte -- im Perm für Datei ID " + rdr["id"].ToString() + " " + rdr["titel"].ToString(), true);

 GetNeuerPerm(rdr["perm"].ToString());
 }
 }
 }
 } //has rows
 } //Using
 } //using

 //Warte auf manuelles Ende
 Console.WriteLine("Fertig!");
 Console.ReadLine();

 }
 catch (MySqlException ex)
 {
 Console.WriteLine(ex.Message);
 }
 }

 private static void GetNeuerPerm(string sPerm)
 {
 string sSQL = "";
 try
 {
 //Erstelle nun den Perm, wie er ein der Zieltabelle vorhanden sein soll
 //Umschlüsselung von Unterstrich in Bindestrich
 string sNeuerPerm = sPerm.Replace("_", "-");

 //Lies hier einmal alle aktiven Artikel aus der alten Artikel-Tabelle ein
 sSQL = "SELECT a.id, c.slug FROM wp_posts as a " +
 "LEFT JOIN wp_term_relationships as b ON a.id=b.object_id "+
 "LEFT JOIN wp_terms as c ON b.term_taxonomy_id=c.term_id "+
 "WHERE a.post_name='" + sNeuerPerm + "'";

 using (MySqlConnection conn = new MySqlConnection(sConnection))
 {
 MySqlDataReader rdr = null;
 conn.Open();
 using (MySqlCommand cmd = new MySqlCommand(sSQL, conn))
 {
 rdr = cmd.ExecuteReader();
 if (rdr.HasRows)
 {
 while (rdr.Read())
 {
 //Schreibe hier die ModRewrite-Zeile
 //Redirect 301 /artikel/perm_mit_unterstrichen.html http://www.domaine.de/kategorie/perm-mit-bindestriche.html

 Ausgabe("Redirect 301 /artikel/" + sPerm + ".htm http://www.planet-polo.de/" + rdr["slug"].ToString() + "/" + sNeuerPerm + "-" + rdr["id"].ToString() + ".html");
 Console.WriteLine("ID " + rdr["id"].ToString() + " erfolgreich geschrieben.");
 }
 } //has rows
 else Console.WriteLine("*** FEHLER: Kein Ziel-Perm für " + sNeuerPerm);
 } //Using
 } //using

 }
 catch (MySqlException ex)
 {
 Console.WriteLine(ex.Message);
 }      
 }

 private static void Ausgabe(string sText, bool bFehler=false)
 {
 string sFile = "";
 try
 {
 //Die Ausgabedatei soll den aktuellen Tag + ".txt" erhalten
 if (bFehler) sFile = "Fehler-" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
 else sFile = DateTime.Now.ToString("yyyyMMdd") + ".txt";

 //Erzeuge die dDatei
 FileStream outStream = new FileStream(sFile, FileMode.Append);
 StreamWriter myWriter = new StreamWriter(outStream, System.Text.Encoding.Default);
 myWriter.WriteLine(sText);
 myWriter.Close();
 }
 catch (Exception ex)
 {
 Console.WriteLine("FEHLER in Ausgabe: " + ex.Message);
 }
 }

 }
}

Schreibe einen Kommentar