Blog 4 Umbraco 2.0.16 - Ping Dienste

Mittwoch, 16. Dezember 2009 von Immo Wache
Kategorien: Umbraco  Blog  deutsch  C#  Weihnachtskalender 

Original von Per Ploug Hansen

Heute geht es um die Einrichtung von automatischen Ping-Diensten für unser Blog, um damit Index-Dienste wie Google Blogsearch über unsere neuen Blogbeiträge zu informieren.

Wir werden das mit einem einfachen Event-Handler realisieren, der zunächst prüft, ob URLs zum Anpingen im Blog konfiguriert wurden. Diese URLs selbst werden wir zum Home-Dokument unseres Blogs mit Hilfe des Steuerelements Related Links hinzufügen.

image_1

Dadurch erzeugen wir in unserem Dokument eine einfache XML-Struktur, die Teil seiner gespeicherten Daten ist. Daher werden wir einfach jedes mal, wenn ein neuer Blog-Beitrag veröffentlicht wird, diese Daten rekursiv suchen und anschließend alle gefundenen URLs anpingen.

Zunächst ein kleiner Code-Schnipsel um rekursiv einen Wert zu finden:

private string GetValueRecursively(string alias, int nodeId)
{
    Document n = new Document(nodeId);
    Property p = n.getProperty(alias);
    if (p != null && !string.IsNullOrEmpty(p.Value.ToString()))
        return p.Value.ToString();
    else if (n.Parent != null)
        return GetValueRecursively(alias, n.Parent.Id);
    return string.Empty;
}

Damit können wir einfach den Alias des Datenelements und die ID des Dokuments übergeben, bei dem wir die Suche beginnen. Wenn in diesem Dokument nichts gefunden wird, so sucht die Methode im übergeordneten Dokument den Dokumentenbaum hinauf bis sie findet was sie sucht oder kein weiteres Eltern-Dokument mehr da ist. Für diesen Fall wird (als Notbremse) ein leerer String zurückgegeben.

Sobald wir damit fertig sind, werden wir die XML-Daten des Datentyps Related Links abfragen. Die Struktur besteht aus einem Elternelement <links>, welches Kindelemente <link> enthält. Diese Kindelemente besitzen Attribute mit den gespeicherten URLs, dem Namen und weiteren Meta-Daten. Zusätzlich bestimmen wir den Blog-Namen und die Blog-URL, die wir mit an den Ping-Dienst senden werden (damit dieser auch erfährt, wer ihn da gerade anpingt).

string blogName = GetValueRecursively("blogName", sender.Id);
string blogUrl = umbraco.library.NiceUrlFullPath(sender.Id);
string currentDomain = HttpContext.Current.Request.ServerVariables["SERVER_NAME"].ToLower();

if (!UmbracoSettings.UseDomainPrefixes)
    blogUrl = "http://" + currentDomain + blogUrl;

foreach (XmlNode link in xd.SelectNodes("//link [@type = 'external']"))
{
    string ping = link.Attributes["link"].Value;
    //Log.Add(LogTypes.Debug, sender.Id, ping + " n:" + blogName + " u:" + blogUrl);
    PingService(ping, blogName, blogUrl);
}

All das fassen wir in einem Event-Handler zusammen, der jedesmal dann ausgelöst wird, wenn ein Dokument mit dem Dokumenttyp Alias "BlogPost" veröffentlicht wird. Der eigentliche Ping wird in der Methode PingService behandelt, welche einfach alles zu einem XML-Stück zusammenpackt und es als HttpWebRequest an die URL sendet.

Fertig! Wir können jetzt jeden Dienst anpingen welcher XML-RPC Blog Pings unterstützt.

4 Kommentar(e) zu “Blog 4 Umbraco 2.0.16 - Ping Dienste”

  1. Kailey schrieb:
    IJWTS wow! Why can't I think of thigns like that?
  2. Trudy schrieb:
    Kudos! What a neat way of tihknnig about it.
  3. qgtudmbk schrieb:
    tHs3rE , [url=http://dijeapocbtjh.com/]dijeapocbtjh[/url], [link=http://kdtbvvhxksnk.com/]kdtbvvhxksnk[/link], http://ymjiqykitrdm.com/
  4. anmoapbjcxt schrieb:
    DjI4Be , [url=http://pqijxsnxmnyt.com/]pqijxsnxmnyt[/url], [link=http://zxofipcagcjj.com/]zxofipcagcjj[/link], http://wzuxlrmerwln.com/

Beitrag kommentieren:


wird nicht angezeigt


optional - bitte mit http://



Bitte geben Sie den im darüberliegenden Bild erkennbaren Sicherheitscode ein, um einen SPAM-Missbrauch des Formulars zu verhindern.