Link detection in my Twitter script

I’ll just get on with my ASP3 Twitter reader written in VBScript so that I can leave the past behind me again. The first part is here.

VBScript version 5 has simple and good Regex support. Some features are missing, but it’s good. It is available through a class called RegExp, like so:

Set R=New RegExp

This is the basic concept (to run it, just add these lines and the line above to a vbs-file):

'What do I want to search for? Use the Pattern property.
R.Pattern="a"

'Case insensitive.
R.IgnoreCase=True

'Do the replacement and show the result in a message box.
MsgBox R.Replace("String to search", "(new value)")

'Case insensitive.
R.IgnoreCase=True

'Do the replacement and show the result in a message box.
MsgBox R.Replace("String to search", "(new value)")

To do the detection, I’ll use this script, downloaded from here:

(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?

And here is the working code:

<%
'Create and configure the DOM Document.
Set D = Server.CreateObject("MSXML2.DOMDocument.3.0")
D.async = False
D.setProperty "ServerHTTPRequest", True
D.validateOnParse = True
D.preserveWhiteSpace = False

'Download XML data (pointing to the user's RSS feed).
Rss="http://twitter.com/statuses/user_timeline/33177615.rss"
If Not D.Load(Rss) Then

 'Download failed.
 Response.write "<p>We can not connect to Twitter right now.</p>"

Else

 'Downloading went well. Extract the tweets.
 Set TweetList = D.getElementsByTagName("item")

 'Keep track on tweet count - I want to display five of them.
 TweetCount = 0

 'Create the Regex object and set the pattern.
 Set R = New RegExp
 R.Pattern = "(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?"

 For Each TweetNode In TweetList
  TweetCount = TweetCount + 1

  'Extract the items from the tweet node.
  Dt = TweetNode.childNodes(2).text
  Text = TweetNode.childNodes(1).text

  'If I want it, the feed contains the URL to the tweet.
  Url = TweetNode.childNodes(4).text

  'This is one of the ugly bits - I don't parse the date, I just grab the part that I want.
  Dt = Server.HtmlEncode(Mid(Dt,1,22))

  'The tweet starts with my username followed by a colon. I don't want that either.
  Text = Server.HtmlEncode(Mid(Text,13,Len(Text)))

  'Link detection!
  Set Matches = R.Execute(Text)
  If Matches.Count > 0 Then
   For I = 0 To Matches.Count - 1
    Text = R.Replace(Text, "<a href=""" & Matches(I) & """>" & Matches(I) & "</a>")
   Next
  End If

  'Display it!
  Response.Write "<p><b>" & Dt & "</b><br />" & Text & "</p>"

  'And just quit when five tweets are displayed.
  If TweetCount>=5 Then
   Exit For
  End If
 Next

 'Release reference to tweet list.
 Set TweetList = Nothing

End If

'Release reference to DOM object.
Set D = nothing
%>

Old meets new: Twitter and ASP3

I had a business case to display a Twitter feed on an ASP3 (VBScript based) page. The code contains a few sticky passages, but all in all it went very well many thanks to the enormous COM toolkit that Microsoft provides. This is how it can be done:

<%
'Create and configure the DOM Document.
Set D = Server.CreateObject("MSXML2.DOMDocument.3.0")
D.async = False
D.setProperty "ServerHTTPRequest", True
D.validateOnParse = True
D.preserveWhiteSpace = False

'Download XML data (pointing to the user's RSS feed).
Rss="http://twitter.com/statuses/user_timeline/33177615.rss"
If Not D.Load(Rss) Then

  'Download failed.
  Response.write "<p>We can not connect to Twitter right now.</p>"

Else

  'Downloading went well. Extract the tweets.
  Set TweetList = D.getElementsByTagName("item")

  'Keep track on tweet count - I want to display five of them.
  TweetCount = 0

  For Each TweetNode In TweetList
    TweetCount = TweetCount + 1

    'Extract the items from the tweet node.
    Dt = TweetNode.childNodes(2).text
    Text = TweetNode.childNodes(1).text

    'If I want it, the feed contains the URL to the tweet.
    Url = TweetNode.childNodes(4).text

    'This is one of the ugly bits - I don't parse the date, I just grab the part that I want.
    Dt = Server.HtmlEncode(Mid(Dt,1,22))

    'The tweet starts with my username followed by a colon. I don't want that either.
    Text = Server.HtmlEncode(Mid(Text,13,Len(Text)))

    'Display it!
    Response.Write "<p><b>" & Dt & "</b><br />" & Text & "</p>"

    'And just quit when five tweets are displayed.
    If TweetCount>=5 Then
      Exit For
    End If
  Next

  'Release reference to tweet list.
  Set TweetList = Nothing

End If

'Release reference to DOM object.
Set D = nothing
%>

This code does not take care of URL detection and such things. I will look into that too (here).