Social Networks on Delicious

One of the many things that the delicious social networking site appears to have got wrong is how to gain traction from its social network. As well as the incidental social network that arises from two or more different users using the same tag or bookmarking the same resource (for example, Visualising Delicious Tag Communities Using Gephi), there is also an explicit social network constructed using an asymmetric model similar to that used by Twitter: specifically, you can follow me (become a “fan” of me) without my permission, and I can add you to my network (become a fan of you, again without your permission).

Realising that you are part of a social network on delicious is not really that obvious though, nor is the extent to which it is a network. So I thought I’d have a look at the structure of the social network that I can crystallise out around my delicious account, by:

1) grabbing the list of my “fans” on delicious;
2) grabbing the list of the fans of my fans on delicious and then plotting:
2a) connections between my fans and and their fans who are also my fans;
2b) all the fans of my fans.

(Writing “fans” feels a lot more ego-bollox than writing “followers”; is that maybe one of the nails in the delicious social SNAFU coffin?!)

Here’s the way my “fans” on delicious follow each other (maybe? I’m not sure if the fans call always grabs all the fans, or whether it pages the results?):

The network is plotted using Gephi, of course; nodes are coloured according to modularity clusters, the layout is derived from a Force Atlas layout).

Here’s the wider network – that is, showing fans of my fans:

In this case, nodes are sized according to betweenness centrality and coloured according to in-degree (that is, the number of my fans who have this people as fans). [This works in so far as we’re trying to identify reputation networks. If we’re looking for reach in terms of using folk as a resource discovery network, it would probably make more sense to look at the members of my network, and the networks of those folk…)

If you want to try to generate your own, here’s the code:

import simplejson

def getDeliciousUserFans(user,fans):
  url='http://feeds.delicious.com/v2/json/networkfans/'+user
  #needs paging? or does this grab all the fans?
  data = simplejson.load(urllib.urlopen(url))
  for u in data:
    fans.append(u['user'])
    #time also available: u['dt']
  #print fans
  return fans

def getDeliciousFanNetwork(user):
  f=openTimestampedFile("fans-delicious","all-"+user+".gdf")
  f2=openTimestampedFile("fans-delicious","inner-"+user+".gdf")
  f.write(gephiCoreGDFNodeHeader(typ="min")+"\n")
  f.write("edgedef> user1 VARCHAR,user2 VARCHAR\n")
  f2.write(gephiCoreGDFNodeHeader(typ="min")+"\n")
  f2.write("edgedef> user1 VARCHAR,user2 VARCHAR\n")
  fans=[]
  fans=getDeliciousUserFans(user,fans)
  for fan in fans:
    time.sleep(1)
    fans2=[]
    print "Fetching data for fan "+fan
    fans2=getDeliciousUserFans(fan,fans2)
    for fan2 in fans2:
      f.write(fan+","+fan2+"\n")
      if fan2 in fans:
        f2.write(fan+","+fan2+"\n")
  f.close()
  f2.close()

So what”s the next step…?!

Author: Tony Hirst

I'm a Senior Lecturer at The Open University, with an interest in #opendata policy and practice, as well as general web tinkering...

10 thoughts on “Social Networks on Delicious”

  1. When I started using Delicious I couldn’t believe there wasn’t a way to find other people with similar bookmarks, it seems so obvious that this would be very useful for finding new content that you’re likely to be interested in.
    I don’t imagine this would be a very complex feature to implement, just matching lists against one another for similarity, perhaps some accounting for the number of bookmarks, or the tags used.

    1. @felix: you can always look up other folk who have bookmarked a specific URL… On my to do list is a script that that samples your 100 most recent bookmarks, and up to 100 or so folk who have most recently bookmarked the same URLs to see if there are any matches. But I’m guessing that the graph is either sparse, with few other folk who have bookmarked the same links as you, or resembles your own network or fans graphs?

  2. One of the things that delicious got wrong. How true. I am so often reminded these days of the numbers who want to use bookmarking and citation tools purely for storage and not for social resource discovery. the only way out of that I can see would be for sites to automate the process – not easy to do with accuracy.

  3. Hi,

    I did something strange with my delicious account when I had two (I think a couple of yrs ago) tried to merge them back into one and my network disappeared. However I can still save stuff for people who aren’t in my network, so have not added them all back – which I think is slightly different to some aspects of twitter (unless my old network is somehow still there albeit invisible).

    1. Hi! I’m interested in your approach, but couldn’t get the python code to run; it doesn’t find the “openTimestampedFile” function — is that one of yours? Best, Mitch (noob)

      1. @Mitch Oops – yes, that is one of my own functions. You could just replace it with:
        f=open(“yourfilename.gdf”)

        Here’s the function I actually use:

        def openTimestampedFile(fpath,fname,timestamp=True):
          fpath='reports/'+fpath
          now = datetime.datetime.now()
          ts = now.strftime("_%Y-%m-%d-%H-%M-%S")
          checkDir(fpath)
          fpart=fname.split('.')
          if timestamp:
            f=open(fpath+'/'+fpart[0]+'%s.'%ts+fpart[1],'w')
          else:
            f=open(fpath+'/'+fname,'w')
          return f
        
        def checkDir(dirpath):
          if not os.path.exists(dirpath):
            os.makedirs(dirpath)
        

        You’ll also need to add this to the top of the file:
        import os,datetime

Comments are closed.