
I've now added Digg submission capability to this blog. To add a post you like to Digg, just click the Digg This Story button. ;)
My [mis]adventures in programming and the .NET Framework.
Hey, everyone. I do have a programming related post today.
I have been coding in JavaScript, XML/HTML and CSS to create the above simple Digg API AIR application, which retrieves the top (e.g. newest) story for each category on Digg.
I have as good as finished it and will be releasing the AIR installation package (*.air) and source code (*.zip) for anyone who is interested in the AIR platform to look at.
Although I could have done an XmlHttp request without any additional framework, I did use the Prototype JavaScript framework for this project.
Here is a quick rundown of the files used in my application and their purpose:
DiggAPI.xml - This is the file which specifies the name, copyright information and file to use for content, etc. An XML file such as this is a standard requirement in any AIR application.
DiggAPI.html - The application content. This contains all of the HTML code for my application and calls to the neccessary JavaScript functions in my external *.js files.
sampleCert.pfx - The certificate used to sign the AIR application. All AIR applications must be signed to be built, even if not by a recognised body such as VeriSign.
script/AIRAliases.js - JavaScript file containing code used by the AIR runtime. Referencing this file provides convenient aliases for use in your code. Included with AIR SDK.
script/prototype.js - JavaScript file containing code for the Prototype framework. I used the cross-browser new Ajax.request
provided by Prototype in my application.
script/DiggAPI.js - JavaScript file containing my code used by the application.
style/DiggAPI.css - Style sheet used to format my links and text colours, etc in my application.
style/digg.png - Digg guy logo image used in my application.
Check back soon for included AIR package and source code. Happy coding. :)
/*
Syntax highlighter for source code
Copyright (c) 2007 Samuel Saint-Pettersen
This script is licensed under the GPL
http://www.gnu.org/copyleft/gpl.html
*/
function syntaxHighlight()
{
var element = "code"; // element for source code
var attrib = "class"; // attibute for language
// count all code elements
var codes = document.getElementsByTagName(element);
// get contents and class value for each code element
for(var a = 0; a < codes.length; a++)
{
var code = codes[a];
var contents = code.innerHTML;
var language = code.className;
if(language == "boo")
{
// define first keywords
var keyw1 = new Array();
keyw1[0] = "def";
keyw1[1] = "print";
keyw1[2] = "if";
// colour first keywords
for(var b = 0; b < keyw1.length; b++)
{
var regex = new RegExp(keyw1[i], "ig");
var matched = contents.match(regex);
var keyword = matched.toString();
var repl = keyword.fontcolor("blue");
codes[i].innerHTML = contents.replace(regex, repl);
}
}
}
}
Rather than having to think up my own characters and backgrounds, I thought the online personas of several members
themselves each exuded a type of character that was ripe for parody or playful exploitation - not excluding myself
(Phait). As this strip is mostly intended for the community, some of it's attempted humor might only be effective
for the members themselves. Though, I have tried to keep it fair to members and non-members alike.
// Digg API script
// version 1.0
// Copyright (c) 2007 Samuel Saint-Pettersen
// Released under the GPL licence
// http://www.gnu.org/copyleft/gpl.html
// ---------------------------------------------------------------------
// This is a Greasemonkey user script.
// To install it, you need Greasemonkey:
// http://greasemonkey.mozdev.org
// ---------------------------------------------------------------------
// ==UserScript==
// @name Digg API script
// @version 1.0
// @author Samuel Saint-Pettersen
// @description Utilise the Digg API
// @include *
// ==/UserScript==
(function() {
GM_xmlhttpRequest({
method: 'GET',
url: "http://services.digg.com/stories/topic/gadgets?count=1&
appkey=http://apidoc.digg.com&type=xml",
onload: function(responseDetails) {
var response = responseDetails.status;
var returned = responseDetails.responseText;
if(response != "200")
{
// if the request fails, display error message
alert("Error retrieving Digg Data");
}
else
{
// display Digg data in message box
alert(returned);
}
}});
})();
/*
Simple application to access the Digg API
Version: 1.0
Language: Boo
Environment: SharpDevelop
Author: Samuel Saint-Pettersen
---------------------------------------------------------------------
Prerequisites:
* Boo libraries (included with)
* Microsoft .NET 2.0 Framework
---------------------------------------------------------------------
*/
namespace DiggAPI
import System
import System.Collections
import System.IO
import System.Net
import System.Text
import System.Xml
import System.Web
print "Digg API application\n"
// base request url
burl = "http://services.digg.com/stories/topic/gadgets?count=3&appkey="
// encode appkey
appkey = HttpUtility.UrlEncode("http://apidoc.digg.com")
// full request url
address = burl + appkey + "&type=xml"
// create request
request = cast(HttpWebRequest, WebRequest.Create(address))
// method
request.Method = "GET"
// get reponse
response = cast(HttpWebResponse, request.GetResponse())
// get response stream into reader
reader = StreamReader(response.GetResponseStream(), Encoding.UTF8)
// print response
print reader.ReadToEnd()
print "\n"
// clean up
reader.Close()
// wait for key press
print "Press any key to continue...\n"
Console.ReadKey(true)
request.UserAgent = appkey;
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS d- s: a-- C++ L++ w E-
W++ P PS+ PE PGP- Y+ t---
X+ tv+ b+ DI+ D G e
-----END GEEK CODE BLOCK-------