Tag: ASP3

  • 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).