Nachdem es letztens kurz und schmerzlos ging, musste ich noch etwas nachlegen. Denn: viele Seiten tragen die URL, an die der Trackback gesendet werden muss, in Metadaten mit sich herum. Man muss also die Trackback-Url, die in Form von
auf der Seite zu finden ist erst auslesen, und sein ziel dann ggf. ändern. Quick'n dirty könnte das so aussehen:
foreach (string targetUrl in targetUrlList)
{
// Trackback-URL holen (http://trackback.unblogbar.com/)
WebRequest request = WebRequest.Create(targetUrl);
request.Method = "GET";
WebResponse response = request.GetResponse();
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string content = reader.ReadToEnd();
reader.Close();
dataStream.Close();
Regex findTBUrl = new Regex("trackback:ping=\"(.*)\"", RegexOptions.IgnoreCase);
string finalTargetUrl = findTBUrl.Match(content).Groups[1].Value;
if (!string.IsNullOrEmpty(finalTargetUrl))
request = WebRequest.Create(finalTargetUrl);
else
request = WebRequest.Create(targetUrl);
// Trackback senden
request.Method = "POST";
string postData = string.Format("url={0}&blog_name={1}&title={2}&excerpt={3}", url, blogName, title, excerpt);
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
}