Monday, November 08, 2010 at 12:01 AM.

system.verbs.apps.trackback.ping

on ping (adrurl, title, permalink, excerpt, weblogName) {
	<<Changes
		<<4/25/03; 7:19:07 PM by DW
			<<Add Content-Length header for POST requests, per Ben Trott's suggestion.
		<<4/25/03; 12:41:58 PM by DW
			<<When Trackback was coming online, the Trotts changed from GET to POST. So for older sites that haven't upgraded, we have to use GET. As they upgrade we'll use POST.
				<<http://blogs.law.harvard.edu/crimson1/2003/04/25#a142
		<<4/24/03; 6:57:39 AM by DW
			<<Created. See the spec here:
				<<http://www.movabletype.org/docs/mttrackback.html
			<<Comments here:
				<<http://scriptingnews.userland.com/backissues/2002/10/21#When:3:15:48PM
	
	adrurl^.whenPing = clock.now ();
	
	local (urllist = string.urlSplit (adrurl^.pingUrl), server = urllist [2], path = urllist [3]);
	
	local (tc = clock.ticks (), xmltext);
	bundle { //make the request, 4/25/03 by DW
		if adrurl^.flGotUrlFromAbout {
			path = path + "&title=" + string.urlencode (title) + "&url=" + string.urlencode (permalink) + "&excerpt=" + string.urlencode (excerpt) + "&blog_name=" + string.urlencode (weblogName);
			xmltext = string.httpresultsplit (tcp.httpClient ("GET", server:server, path:path, ctFollowRedirects:5))}
		else {
			on encode (s) {
				s = string.replaceall (s, " ", "+");
				return (s)};
			local (body = "title=" + encode (title) + "&url=" + encode (permalink) + "&excerpt=" + encode (excerpt) + "&blog_name=" + encode (weblogName));
			xmltext = string.httpresultsplit (tcp.httpClient ("POST", server:server, path:path, ctFollowRedirects:5, data:body, datatype: "application/x-www-form-urlencoded", debug:false))}};
	adrUrl^.ctPingSeconds = (clock.ticks () - tc) / 60;
	
	local (xstruct);
	xml.compile (xmltext, @xstruct);
	adrurl^.xTrackbackResponse = xstruct;
	adrurl^.errorstring = "";
	adrurl^.flpinged = true;
	
	local (adrresponse = xml.getaddress (@xstruct, "response"));
	local (adrerror = xml.getaddress (adrresponse, "error"));
	if adrerror^ != "0" { //error
		try {adrurl^.errorstring = xml.getvalue (adrresponse, "message")}}};
bundle { //test code
	local (adrmsg = @tbtestManilaWebsite.["#discussionGroup"].messages.["0000005"]);
	local (adrurl = @adrmsg^.trackback.outbound.urls.["http://127.0.0.1/tbtest/2003/07/14#a4"]);
	local (title = adrmsg^.subject);
	local (permalink = "http://127.0.0.1/tbtest/2003/07/14#a5");
	local (excerpt = adrmsg^.newsitem.description);
	local (weblogname = "tbtest");
	ping (adrurl, title, permalink, excerpt, weblogname)}
<<bundle //more test code
	<<local (adrurl = @scratchpad.aPost.trackback.outbound.urls.["http://127.0.0.1/jaketest2/2003/04/24"])
	<<new (tableType, adrurl)
	<<local (title = "New comment prefs")
	<<local (permalink = "http://127.0.0.1/jaketest2/2003/04/24#a19")
	<<local (excerpt = "I just finished a pair of new preferences on the News Items preferences page...")
	<<local (weblogName = "Jake's Test Weblog")
	<<trackback.discoverPingInfo (adrurl)
	<<trackback.ping (adrurl, title, permalink, excerpt, weblogName)



This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.