Blog 4 Umbraco 2.0.16 - Ping Dienste
Mittwoch, 16. Dezember 2009 von Immo WacheKategorien: 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.
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.
Montag, 16. Mai 2011 um 17:11 UhrIJWTS wow! Why can't I think of thigns like that?
Dienstag, 17. Mai 2011 um 17:32 UhrKudos! What a neat way of tihknnig about it.
Samstag, 21. Mai 2011 um 14:05 UhrtHs3rE , [url=http://dijeapocbtjh.com/]dijeapocbtjh[/url], [link=http://kdtbvvhxksnk.com/]kdtbvvhxksnk[/link], http://ymjiqykitrdm.com/
Montag, 30. Mai 2011 um 10:17 UhrDjI4Be , [url=http://pqijxsnxmnyt.com/]pqijxsnxmnyt[/url], [link=http://zxofipcagcjj.com/]zxofipcagcjj[/link], http://wzuxlrmerwln.com/