Delicious API methods
May 18, 2010 • JP • No Comments • Rate This Article
• Links to this article

In a previous post, I mentioned that Delicious (a Yahoo! company) is changing their API to use YQL, a query language based on SQL. So I'm stopping development on any delicious-related code and posting it here for reference only.
After delicious switches to YQL some time after June, this code will probably stop working. Consider this post a code dump of (soon to be) unsupported code.
Note that this isn't all of the available methods, only the ones I completed code for before learning of the switch to YQL, but it does cover most of the useful methods.
You'll also need to grab the helper functions and paste them into a standard module in the same project.
Please call the delicious API methods sparingly, and read the API documentation for suggestions on how often to use various methods. Before calling any method that returns bookmarks, use the GetLastPostsUpdate Function to see if you need to call the function at all.
For reference: Delicious API
Find out when the last update occurred
This function "returns the last update time for the user, as well as the number of new items in the user's inbox since it was last visited." (from Delicious API)
Dim xml As Object ' MSXML2.XMLHTTP
Dim result As String
Dim tempFile As String
Dim tempString() As String
Dim xmlDoc As Object ' MSXML2.DOMDocument
Dim update As Object ' MSXML2.IXMLDOMNode
tempFile = environ("temp") & "\deliciouslastpostsupdate.xml"
Set xml = CreateObject("MSXML2.XMLHTTP")
xml.Open "GET", "https://" & userid & ":" & password & "@api.del.icio.us/v1/posts/update", False
xml.Send
result = xml.responseText
' create XML file from result
Call CreateXMLFile(tempFile, result)
' create XML doc
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
With xmlDoc
.async = False
.validateOnParse = False
.Load tempFile
End With
' check that the XML doc loaded
If LoadError(xmlDoc) Then
Exit Function
End If
' get first level nodes
Set update = xmlDoc.childNodes(1)
' resize array
ReDim tempString(1 To 2)
tempString(1) = update.Attributes.getNamedItem("time").nodeTypedValue
tempString(2) = update.Attributes.getNamedItem("inboxnew").nodeTypedValue
GetLastPostsUpdate = tempString
End Function
Sample usage
Dim lastPostUpdateTime() As String
Dim userid As String
Dim password As String
userid = "some user id"
password = "some password"
lastPostUpdateTime = GetLastPostsUpdate(userid, password)
Debug.Print lastPostUpdateTime(1)
Debug.Print lastPostUpdateTime(2)
End Sub
Add new bookmark
This function will add a new bookmark to the specified user's account. You must provide the following pieces of information:
- The userid and password of the account
- The (url encoded) URL of the bookmark you want to add
- The (url encoded) description of the URL
The following items are optional:
- Notes for the item (an extended description)
- A (url encoded) list of tags for the URL (space delimited)
- A datestamp (see Add Posts for a description of how to pass the date)
- Boolean variable indicating if the bookmark should replace an existing one (if it already exists)
- Boolean variable indicating if the bookmark should be private (True = public, False = Private)
description As String, Optional notes As String, Optional tags As String, _
Optional datestamp As String, Optional replaceURL As Boolean = False, _
Optional sharedbookmark As Boolean = True) As Boolean
Dim xml As Object ' MSXML2.XMLHTTP
Dim result As String
Dim tempFile As String
Dim tempString() As String
Dim xmlDoc As Object ' MSXML2.DOMDocument
Dim xmlDocRoot As Object ' MSXML2.IXMLDOMNode
Dim resultCode As Object ' MSXML2.IXMLDOMNode
Dim toReplace As String
Dim toShare As String
toReplace = Choose(replaceURL, "no", "yes")
toShare = Choose(sharedbookmark, "no","yes")
tempFile = environ("temp") & "\deliciousaddpost.xml"
Set xml = CreateObject("MSXML2.XMLHTTP")
xml.Open "GET", "https://" & userid & ":" & pwd & "@api.del.icio.us/v1/posts/add?" & _
"url=" & URLEncode(url) & "&description=" & URLEncode(description) & "&extended=" & _
URLEncode(notes) & "&tags=" & URLEncode(tags) & "&dt=" & datestamp & "&replace=" & _
toReplace & "&shared=" & toShare, False
xml.Send
result = xml.responseText
' create XML file from result
Call CreateXMLFile(tempFile, result)
' create XML doc
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
With xmlDoc
.async = False
.validateOnParse = False
.Load tempFile
End With
' check that the XML doc loaded
If LoadError(xmlDoc) Then
Exit Function
End If
' get first level nodes
Set resultCode = xmlDoc.childNodes(1)
AddPost = (resultCode.Attributes.getNamedItem("code").nodeTypedValue = "done")
End Function
Sample usage
In this example, I want to add the URL for the URLEncode Function as a delicious bookmark. As a description for the bookmark I want "URL Encode for VBA" and the tags should be "VBA" and "URLEncode".
Dim userid As String
Dim password As String
Dim URL As String
userid = "some user id"
password = "some password"
URL = "http://www.freevbcode.com/ShowCode.Asp?ID=5137"
Debug.Print AddPost(userid, password, URL, "URL Encode for VBA", , "VBA URLEncode")
End Sub
Delete a bookmark
Deleting a post is as simple as calling the correct method with the URL of the bookmark you want to remove.
Dim xml As Object ' MSXML2.XMLHTTP
Dim result As String
Dim tempFile As String
Dim tempString() As String
Dim xmlDoc As Object ' MSXML2.DOMDocument
Dim xmlDocRoot As Object ' MSXML2.IXMLDOMNode
Dim resultCode As Object ' MSXML2.IXMLDOMNode
tempFile = environ("temp") & "\deliciousdeletepost.xml"
Set xml = CreateObject("MSXML2.XMLHTTP")
xml.Open "GET", "https://" & userid & ":" & pwd & _
"@api.del.icio.us/v1/posts/delete?" & "url=" & _
URLEncode(url), False
xml.Send
result = xml.responseText
' create XML file from result
Call CreateXMLFile(tempFile, result)
' create XML doc
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
With xmlDoc
.async = False
.validateOnParse = False
.Load tempFile
End With
' check that the XML doc loaded
If LoadError(xmlDoc) Then
Exit Function
End If
' get first level nodes
Set resultCode = xmlDoc.childNodes(1)
DeletePost = (resultCode.Attributes.getNamedItem("code").nodeTypedValue = "done")
End Function
Sample usage
I change my mind — I want to get rid of that bookmark I just added.
Dim userid As String
Dim password As String
Dim URL As String
userid = "some user id"
password = "some password"
URL = "http://www.freevbcode.com/ShowCode.Asp?ID=5137"
Debug.Print DeletePost(userid, password, URL)
End Sub
Get bookmarks from a given day
Returns one or more posts on a single day matching the arguments. If no date or url is given, most recent date will be used. (from Delicious API)
The arguments are similar to those used with the AddPost function.
Optional datestamp As String, Optional url As String, _
Optional hashes As String, Optional meta As Boolean = True) As String()
Dim xml As Object ' MSXML2.XMLHTTP
Dim result As String
Dim tempFile As String
Dim tempString() As String
Dim xmlDoc As Object ' MSXML2.DOMDocument
Dim xmlDocRoot As Object ' MSXML2.IXMLDOMNode
Dim posts As Object ' MSXML2.IXMLDOMNodeList
Dim post As Object ' MSXML2.IXMLDOMNode
Dim i As Long
tempFile = environ("temp") & "\deliciouspostsbydate.xml"
Set xml = CreateObject("MSXML2.XMLHTTP")
xml.Open "GET", "https://" & userid & ":" & pwd & _
"@api.del.icio.us/v1/posts/get?" & "tag=" & _
URLEncode(tags) & "&dt=" & datestamp & _
"&url=" & URLEncode(url) & "&hashes=" & URLEncode(hashes) & _
"&meta=" & meta, False
xml.Send
result = xml.responseText
' create XML file from result
Call CreateXMLFile(tempFile, result)
' create XML doc
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
With xmlDoc
.async = False
.validateOnParse = False
.Load tempFile
End With
' check that the XML doc loaded
If LoadError(xmlDoc) Then
Exit Function
End If
' get first level nodes
Set xmlDocRoot = GetRootNode(xmlDoc)
Set posts = GetChildNodes(xmlDocRoot)
' resize array
ReDim tempString(1 To posts.Length, 1 To 7)
For i = 1 To posts.Length
Set post = posts.item(i - 1)
tempString(i, 1) = post.Attributes.getNamedItem("href").nodeTypedValue
tempString(i, 2) = post.Attributes.getNamedItem("description").nodeTypedValue
tempString(i, 3) = post.Attributes.getNamedItem("extended").nodeTypedValue
tempString(i, 4) = post.Attributes.getNamedItem("hash").nodeTypedValue
tempString(i, 5) = post.Attributes.getNamedItem("meta").nodeTypedValue
tempString(i, 6) = post.Attributes.getNamedItem("tag").nodeTypedValue
tempString(i, 7) = post.Attributes.getNamedItem("time").nodeTypedValue
Next i
GetPostsByDate = tempString
End Function
Sample usage
Dim tempString() As String
Dim userid As String
Dim password As String
Dim i As Long, j As Long
userid = "some user id"
password = "some password"
tempString = GetPostsByDate(userid, password, , , , , True)
For i = 1 To UBound(tempString)
For j = 1 To UBound(tempString, 2)
Debug.Print tempString(i, j)
Next j
Next i
End Sub
Return recently added bookmarks
This function returns a list of bookmarks, up to 100, optionally filtered by a single tag.
Optional numberOfResults As Long = 15, _
Optional forceRefresh As Boolean = False) As String()
Dim xml As Object ' MSXML2.XMLHTTP
Dim result As String
Dim tempFile As String
Dim tempString() As String
Dim xmlDoc As Object ' MSXML2.DOMDocument
Dim xmlDocRoot As Object ' MSXML2.IXMLDOMNode
Dim posts As Object ' MSXML2.IXMLDOMNodeList
Dim post As Object ' MSXML2.IXMLDOMNode
Dim i As Long
tempFile = environ("temp") & "\deliciousrecentposts.xml"
If Len(Dir(tempFile)) = 0 Or forceRefresh Then
Set xml = CreateObject("MSXML2.XMLHTTP")
xml.Open "GET", "https://" & userid & ":" & pwd & _
"@api.del.icio.us/v1/posts/recent?" & "tag=" & _
URLEncode(tags) & "&count=" & numberOfResults, False
xml.Send
result = xml.responseText
' create XML file from result
Call CreateXMLFile(tempFile, result)
End If
' create XML doc
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
With xmlDoc
.async = False
.validateOnParse = False
.Load tempFile
End With
' check that the XML doc loaded
If LoadError(xmlDoc) Then
Exit Function
End If
' get first level nodes
Set xmlDocRoot = GetRootNode(xmlDoc)
Set posts = GetChildNodes(xmlDocRoot)
' resize array
ReDim tempString(1 To posts.Length, 1 To 6)
For i = 1 To posts.Length
Set post = posts.item(i - 1)
tempString(i, 1) = post.Attributes.getNamedItem("href").nodeTypedValue
tempString(i, 2) = post.Attributes.getNamedItem("description").nodeTypedValue
tempString(i, 3) = post.Attributes.getNamedItem("extended").nodeTypedValue
tempString(i, 4) = post.Attributes.getNamedItem("hash").nodeTypedValue
tempString(i, 5) = post.Attributes.getNamedItem("tag").nodeTypedValue
tempString(i, 6) = post.Attributes.getNamedItem("time").nodeTypedValue
Next i
GetRecentPosts = tempString
End Function
Sample usage
This will return the last fifteen bookmarks for a given user.
Dim tempString() As String
Dim userid As String
Dim password As String
Dim i As Long, j As Long
userid = "some user id"
password = "some password"
tempString = GetRecentPosts(userid, password)
For i = 1 To UBound(tempString)
For j = 1 To UBound(tempString, 2)
Debug.Print tempString(i, j)
Next j
Next i
End Sub
Get bookmark dates
You can retrieve the dates that bookmarks were added to a user account using this function. Optionally, you can filter the result by tag.
Dim xml As Object ' MSXML2.XMLHTTP
Dim result As String
Dim tempFile As String
Dim tempString() As String
Dim xmlDoc As Object ' MSXML2.DOMDocument
Dim xmlDocRoot As Object ' MSXML2.IXMLDOMNode
Dim dateNodes As Object ' MSXML2.IXMLDOMNodeList
Dim dateNode As Object ' MSXML2.IXMLDOMNode
Dim i As Long
tempFile = environ("temp") & "\deliciouspostdates.xml"
Set xml = CreateObject("MSXML2.XMLHTTP")
xml.Open "GET", "https://" & userid & ":" & pwd & _
"@api.del.icio.us/v1/posts/dates?" & "tag=" & _
tag, False
xml.Send
result = xml.responseText
' create XML file from result
Call CreateXMLFile(tempFile, result)
' create XML doc
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
With xmlDoc
.async = False
.validateOnParse = False
.Load tempFile
End With
' check that the XML doc loaded
If LoadError(xmlDoc) Then
Exit Function
End If
' get first level nodes
Set xmlDocRoot = GetRootNode(xmlDoc)
Set dateNodes = GetChildNodes(xmlDocRoot)
' resize array
ReDim tempString(1 To dateNodes.Length, 1 To 2)
For i = 1 To dateNodes.Length
Set dateNode = dateNodes.item(i - 1)
tempString(i, 1) = dateNode.Attributes.getNamedItem("count").nodeTypedValue
tempString(i, 2) = dateNode.Attributes.getNamedItem("date").nodeTypedValue
Next i
GetPostDates = tempString
End Function
Sample usage
This function returns the dates that bookmarks were added and how many were added on a given day.
Dim tempString() As String
Dim userid As String
Dim password As String
Dim i As Long, j As Long
userid = "some user id"
password = "some password"
tempString = GetPostDates(userid, password)
For i = 1 To UBound(tempString)
For j = 1 To UBound(tempString, 2)
Debug.Print tempString(i, j)
Next j
Next i
End Sub
Return all bookmarks
This function will return all the bookmarks for a given user. You can filter this option several ways:
- by tag
- by date
- by count
Check out the API documentation for a detailed description of the arguments.
Optional fromDate As String, Optional toDate As String, _
Optional start As Long = 1, Optional numberOfResults As Long = 15, _
Optional meta As Boolean = False, Optional forceRefresh As Boolean = False) As String()
Dim xml As Object ' MSXML2.XMLHTTP
Dim result As String
Dim tempFile As String
Dim tempString() As String
Dim xmlDoc As Object ' MSXML2.DOMDocument
Dim xmlDocRoot As Object ' MSXML2.IXMLDOMNode
Dim posts As Object ' MSXML2.IXMLDOMNodeList
Dim post As Object ' MSXML2.IXMLDOMNode
Dim i As Long
tempFile = environ("temp") & "\deliciousallposts.xml"
If Len(Dir(tempFile)) = 0 Or forceRefresh Then
Set xml = CreateObject("MSXML2.XMLHTTP")
xml.Open "GET", "https://" & userid & ":" & pwd & _
"@api.del.icio.us/v1/posts/all?" & "tag=" & _
tag & "&start=" & start & _
"&results=" & numberOfResults & _
"&fromdt=" & fromDate & _
"&todt=" & toDate & _
"&meta=" & meta, False
xml.Send
result = xml.responseText
' create XML file from result
Call CreateXMLFile(tempFile, result)
End If
' create XML doc
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
With xmlDoc
.async = False
.validateOnParse = False
.Load tempFile
End With
' check that the XML doc loaded
If LoadError(xmlDoc) Then
Exit Function
End If
' get first level nodes
Set xmlDocRoot = GetRootNode(xmlDoc)
Set posts = GetChildNodes(xmlDocRoot)
' resize array
ReDim tempString(1 To posts.Length, 1 To 7)
For i = 1 To posts.Length
Set post = posts.item(i - 1)
tempString(i, 1) = post.Attributes.getNamedItem("href").nodeTypedValue
tempString(i, 2) = post.Attributes.getNamedItem("description").nodeTypedValue
tempString(i, 3) = post.Attributes.getNamedItem("extended").nodeTypedValue
tempString(i, 4) = post.Attributes.getNamedItem("hash").nodeTypedValue
tempString(i, 5) = post.Attributes.getNamedItem("meta").nodeTypedValue
tempString(i, 6) = post.Attributes.getNamedItem("tag").nodeTypedValue
tempString(i, 7) = post.Attributes.getNamedItem("time").nodeTypedValue
Next i
GetAllPosts = tempString
End Function
Sample usage
Dim tempString() As String
Dim userid As String
Dim password As String
Dim i As Long, j As Long
userid = "some user id"
password = "some password"
tempString = GetAllPosts(userid, password, , , , , , True)
For i = 1 To UBound(tempString)
For j = 1 To UBound(tempString, 2)
Debug.Print tempString(i, j)
Next j
Next i
End Sub
Get a change manifest of all bookmarks
Dim xml As Object ' MSXML2.XMLHTTP
Dim result As String
Dim tempFile As String
Dim tempString() As String
Dim xmlDoc As Object ' MSXML2.DOMDocument
Dim xmlDocRoot As Object ' MSXML2.IXMLDOMNode
Dim posts As Object ' MSXML2.IXMLDOMNodeList
Dim post As Object ' MSXML2.IXMLDOMNode
Dim i As Long
tempFile = environ("temp") & "\deliciousposthashes.xml"
Set xml = CreateObject("MSXML2.XMLHTTP")
xml.Open "GET", "https://" & userid & ":" & pwd & _
"@api.del.icio.us/v1/posts/all?hashes", False
xml.Send
result = xml.responseText
' create XML file from result
Call CreateXMLFile(tempFile, result)
' create XML doc
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
With xmlDoc
.async = False
.validateOnParse = False
.Load tempFile
End With
' check that the XML doc loaded
If LoadError(xmlDoc) Then
Exit Function
End If
' get first level nodes
Set xmlDocRoot = GetRootNode(xmlDoc)
Set posts = GetChildNodes(xmlDocRoot)
' resize array
ReDim tempString(1 To posts.Length, 1 To 2)
For i = 1 To posts.Length
Set post = posts.item(i - 1)
tempString(i, 1) = post.Attributes.getNamedItem("meta").nodeTypedValue
tempString(i, 2) = post.Attributes.getNamedItem("url").nodeTypedValue
Next i
GetChangeManifest = tempString
End Function
Sample usage
Dim tempString() As String
Dim userid As String
Dim password As String
Dim i As Long, j As Long
userid = "some user id"
password = "some password"
tempString = GetChangeManifest(userid, password)
For i = 1 To UBound(tempString)
For j = 1 To UBound(tempString, 2)
Debug.Print tempString(i, j)
Next j
Next i
End Sub
Suggest tags for a given URL
Dim xml As Object ' MSXML2.XMLHTTP
Dim result As String
Dim tempFile As String
Dim tempString() As String
Dim xmlDoc As Object ' MSXML2.DOMDocument
Dim xmlDocRoot As Object ' MSXML2.IXMLDOMNode
Dim tags As Object ' MSXML2.IXMLDOMNodeList
Dim tag As Object ' MSXML2.IXMLDOMNode
Dim i As Long
tempFile = environ("temp") & "\delicioustagssuggest.xml"
Set xml = CreateObject("MSXML2.XMLHTTP")
xml.Open "GET", "https://" & userid & ":" & pwd & _
"@api.del.icio.us/v1/posts/suggest?url=" & URLEncode(url), False
xml.Send
result = xml.responseText
' create XML file from result
Call CreateXMLFile(tempFile, result)
' create XML doc
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
With xmlDoc
.async = False
.validateOnParse = False
.Load tempFile
End With
' check that the XML doc loaded
If LoadError(xmlDoc) Then
Exit Function
End If
' get first level nodes
Set xmlDocRoot = GetRootNode(xmlDoc)
Set tags = GetChildNodes(xmlDocRoot)
' resize array
ReDim tempString(1 To tags.Length)
For i = 1 To tags.Length
Set tag = tags.item(i - 1)
Select Case tag.nodeName
Case "recommended"
tempString(i) = "recommended: " & tag.nodeTypedValue
Case "popular"
tempString(i) = "popular: " & tag.nodeTypedValue
Case "network"
tempString(i) = "network: " & tag.nodeTypedValue
End Select
Next i
SuggestTags = tempString
End Function
Sample usage
Dim tempString() As String
Dim userid As String
Dim password As String
Dim i As Long, j As Long
userid = "some user id"
password = "some password"
tempString = SuggestTags(userid, password, "http://peltiertech.com/")
For i = 1 To UBound(tempString)
Debug.Print tempString(i)
Next i
End Sub
Get tags used by a given user
Dim xml As Object ' MSXML2.XMLHTTP
Dim result As String
Dim tempFile As String
Dim tempString() As String
Dim xmlDoc As Object ' MSXML2.DOMDocument
Dim xmlDocRoot As Object ' MSXML2.IXMLDOMNode
Dim tags As Object ' MSXML2.IXMLDOMNodeList
Dim tag As Object ' MSXML2.IXMLDOMNode
Dim i As Long
tempFile = environ("temp") & "\delicioustags.xml"
Set xml = CreateObject("MSXML2.XMLHTTP")
xml.Open "GET", "https://" & userid & ":" & pwd & _
"@api.del.icio.us/v1/tags/get", False
xml.Send
result = xml.responseText
' create XML file from result
Call CreateXMLFile(tempFile, result)
' create XML doc
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
With xmlDoc
.async = False
.validateOnParse = False
.Load tempFile
End With
' check that the XML doc loaded
If LoadError(xmlDoc) Then
Exit Function
End If
' get first level nodes
Set xmlDocRoot = GetRootNode(xmlDoc)
Set tags = GetChildNodes(xmlDocRoot)
' resize array
ReDim tempString(1 To tags.Length, 1 To 2)
For i = 1 To tags.Length
Set tag = tags.item(i - 1)
tempString(i, 1) = tag.Attributes.getNamedItem("count").nodeTypedValue
tempString(i, 2) = tag.Attributes.getNamedItem("tag").nodeTypedValue
Next i
GetTags = tempString
End Function
Sample usage
Dim tempString() As String
Dim userid As String
Dim password As String
Dim i As Long, j As Long
userid = "some user id"
password = "some password"
tempString = GetTags(userid, password)
For i = 1 To UBound(tempString)
For j = 1 To UBound(tempString, 2)
Debug.Print tempString(i, j)
Next j
Next i
End Sub
Delete given tag
Dim xml As Object ' MSXML2.XMLHTTP
Dim result As String
Dim tempFile As String
Dim tempString() As String
Dim xmlDoc As Object ' MSXML2.DOMDocument
Dim xmlDocRoot As Object ' MSXML2.IXMLDOMNode
Dim resultCode As Object ' MSXML2.IXMLDOMNode
tempFile = environ("temp") & "\deliciousdeletetag.xml"
Set xml = CreateObject("MSXML2.XMLHTTP")
xml.Open "GET", "https://" & userid & ":" & pwd & _
"@api.del.icio.us/v1/tags/delete?" & "tag=" & _
URLEncode(tag), False
xml.Send
result = xml.responseText
' create XML file from result
Call CreateXMLFile(tempFile, result)
' create XML doc
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
With xmlDoc
.async = False
.validateOnParse = False
.Load tempFile
End With
' check that the XML doc loaded
If LoadError(xmlDoc) Then
Exit Function
End If
' get first level nodes
Set resultCode = xmlDoc.childNodes(1)
DeleteTag = (resultCode.nodeTypedValue = "done")
End Function
Sample usage
Dim tempString() As String
Dim userid As String
Dim password As String
Dim i As Long, j As Long
userid = "some user id"
password = "some password"
Debug.Print DeleteTag(userid, password, "wordpress")
End Sub
Rename tags
Dim xml As Object ' MSXML2.XMLHTTP
Dim result As String
Dim tempFile As String
Dim tempString() As String
Dim xmlDoc As Object ' MSXML2.DOMDocument
Dim xmlDocRoot As Object ' MSXML2.IXMLDOMNode
Dim resultCode As Object ' MSXML2.IXMLDOMNode
tempFile = environ("temp") & "\deliciousrenametag.xml"
Set xml = CreateObject("MSXML2.XMLHTTP")
xml.Open "GET", "https://" & userid & ":" & pwd & _
"@api.del.icio.us/v1/tags/rename?" & "old=" & _
URLEncode(oldTag) & "&new=" & URLEncode(newTag), False
xml.Send
result = xml.responseText
' create XML file from result
Call CreateXMLFile(tempFile, result)
' create XML doc
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
With xmlDoc
.async = False
.validateOnParse = False
.Load tempFile
End With
' check that the XML doc loaded
If LoadError(xmlDoc) Then
Exit Function
End If
' get first level nodes
Set resultCode = xmlDoc.childNodes(1)
RenameTag = (resultCode.nodeTypedValue = "done")
End Function
Sample usage
Dim tempString() As String
Dim userid As String
Dim password As String
Dim i As Long, j As Long
userid = "some user id"
password = "some password"
Debug.Print RenameTag(userid, password, "outlook", "Outlook 2003")
End Sub
Helper Functions
You'll also need to grab the URLEncode Function found at Free VB Code.
' returns child nodes for a given MSXML2.IXMLDOMNode
Set GetChildNodes = node.childNodes
End Function
Function CreateXMLFile(fileName As String, contents As String) As String
' creates XML file from string contents
Dim tempFile As String
Dim nextFileNum As Long
nextFileNum = FreeFile
tempFile = fileName
Open tempFile For Output As #nextFileNum
Print #nextFileNum, FixAngleBrackets(contents)
Close #nextFileNum
CreateXMLFile = tempFile
End Function
Function GetRootNode(xmlDoc As Object) As Object
' returns root node
Set GetRootNode = xmlDoc.documentElement
End Function
Function LoadError(xmlDoc As Object) As Boolean
' checks if a xml file load error occurred
LoadError = (xmlDoc.parseError.errorCode <> 0)
End Function
Function ClearCache(Optional fileExtension As String = "xml")
' deletes stored xml files from temp folder
Dim filesToDelete As String
filesToDelete = environ("temp") & "\*." & fileExtension
Kill filesToDelete
End Function
Function FixAngleBrackets(textString As String) As String
FixAngleBrackets = Replace(Replace(textString, "<", "<"), ">", ">")
End Function
Previous Post: Remove and replace special characters in VBA
Next Post: Geonames API puts geographical data at your fingertips



Speak Your Mind
Tell us what you're thinking...Certain comments (including first-time comments) are subject to moderation and will not appear immediately. Please view the Comment Policy for more information. To post VBA code in your comment, use tags like this: [cc lang='vb']Code goes here[/cc].