Bibsonomy Macro

This is a Velocity macro, which isn't bundled with any XWiki product by default.
Macro contributed by Yishay Mor.
This macro can be downloaded.

Bibsonomy Macro

I've created a quick hack for integrating XWiki and bibsonomy. It allows you to display publications on an XWiki page based on their tag in bibsonomy, and also to discuss individual entries.

Error: This script is currently broken. There is a simple workaround, and a simple way to fix it, but I can't do it right now. Any help will be welcome, please contact me: yishaym at gmail dot com

this script pulls data from bibsonomy.org using RSS and parses the feed:

#set($feed = $xwiki.feed.getFeeds("http://www.bibsonomy.org/publrssN/tag/${tag}?items=1000"))
#foreach ($entry in $feed.entries)
  #set($val = $entry.getDescription().value)
  ## get title
  #set($index = $val.indexOf("bmtitle") +10)
  #set($val = $val.substring($index))
  #set($index = $val.indexOf("</div>"))
  #set($headline = $val.substring(0, $index))
  #set($index = $index +6)
  #set($val = $val.substring($index))
  etc..
#end
As was bound to happen at some point, the format of the feed content has changed, and the code is now broken. As a quick fix, I replaced it with:
#set($feed = $xwiki.feed.getFeeds("http://www.bibsonomy.org/publrssN/tag/${tag}?items=1000"))
#foreach ($entry in $feed.entries)
$entry.getDescription().value)
I don't know if the change in the feed format is on the provider's side (i.e. bibsonomy) or on XWiki's side. In any case, I should use bibsonomy's API instead: http://www.bibsonomy.org/help/doc/api.html

Anyone interested in helping?

You can see a demo here: http://patternlanguagenetwork.myxwiki.org/xwiki/bin/view/scripts/BibsonomyDemo and the code here: http://patternlanguagenetwork.myxwiki.org/xwiki/bin/view/scripts/Bibsonomy?viewer=code&showlinenumbers=0

Its a very crude piece of code, I needed something for a project ASAP, and didn't have the time to do a decent job. But it works, and its a good proof of concept. If anyone is up to writing a cleaner, more efficient version - please do, and share.

This gizmo is pure velocity. To use it, copy the code below into a page on your site, say "script.Bibsonomy" and then, on any other page, you can use it by:

#includeInContext("scripts.Bibsonomy")
#publications_pp("MyTag")

Copy this code

##################################################################################################
## This is a dirty, ugly hack. it does the job, but its probably very inefficient and unstable. ##
##################################################################################################
## The following is a set of scripts which allow you to display a list of publications from     ##
## bibsonomy. This list is retrieved from the RSS feed of a tag. There's no option to limit the ##
## list to a specific user, etc. The easiest way to use this is to add the following two lines  ##
## to your page:                                                                                ##
##    #includeInContext("scripts.Bibsonomy")                                                    ##
##    #publications_pp("MyTag")                                               ##
##################################################################################################
## to make this code decent, we should use the bibsnomy API, retrieve the list in XML and       ##
## process that, probably in groovy.                                                            ##
##################################################################################################
## This code is provided as is, with no warranties, guaranties, or liabilities.                 ##
## It is licensed under a Creative Commons BY-NC-SA 2.0 UK: England & Wales License.            ##
## http://creativecommons.org/licenses/by-nc-sa/2.0/uk/                                         ##
## Yishay Mor, yishaym@gmail.com                                                                ##
##################################################################################################

#set ($basename = $doc.getFullName()+".") #set ($createUrl = "?create=")

#### create a new discussion page for bibsonomy entry #macro(createPage $item $pagename) #set ($newdoc = $xwiki.getDocument($pagename)) $newdoc.setParent($doc.getFullName()) #set ($content = '<div style="border: 3px coral solid;">'+$item.getDescription().value+'</div>') $newdoc.setContent($content) $newdoc.save() ## this should work, but needs programming rights: ## $context.setDoc($newdoc) <script type="text/javascript"> <!-- window.location = "$newdoc.getExternalURL()" //--> </script>

#end ### createPage

#### display a bibsonomy tag feed #macro(bibsonomyfeed $feed $label $raw) #if ($label) <h3> $label </h3> #end #foreach ($entry in $feed.entries) $entry.getDescription().value <br /> #if(0) #set($val = $entry.getDescription().value) #if(!$raw) ## get title #set($index = $val.indexOf("bmtitle") +10) #set($val = $val.substring($index)) #set($index = $val.indexOf("</div>")) #set($headline = $val.substring(0, $index)) #set($index = $index +6) #set($val = $val.substring($index))

---- <h4> $headline </h4> ## xtract bibsonomy key #set ($index = $headline.indexOf("/bibtex/") + 8) #if ($index <0) #set($index = 0) <!-- /bibtex/ --> #end #set ($bibkey = $headline.substring($index)) #set ($index = $bibkey.indexOf("/")) #if ($index <0) #set($index = 0) <!-- / --> #end #set ($bibkey = $bibkey.substring(0, $index)) ## generate link to discussion doc #set($itempagename = $basename+$bibkey) #if ($request.create == $bibkey) #createPage($entry $itempagename) #end

## page exists? #if ($xwiki.exists($itempagename)) #set ($comcount = 0) #set ($bibdoc = $xwiki.getDocument($itempagename)) #set ($comcount = $bibdoc.getComments().size()) <a href="$bibdoc.getURL()">$comcount comments</a> #else <a href="$createUrl$bibkey">Discuss (new)</a> #end #if ($request.showabstracts.equalsIgnoreCase("true")) ## do nothing #else ## cut after the reference #set ($index = $val.indexOf("</div>") +6) #if ($index <0) #set($index = 0) <!-- /div --> #end #set ($val = $val.substring(0,$index)) #end

<blockquote> \{pre\} <div> #else ---- \{pre\} #end ## raw $val \{/pre\} </blockquote> #end #end #end #### macro(bibsonomy $tag)

############## bibsonomy publications feed #macro(publications $tag) #if ($request.filter && $request.filter.length() > 0) #set ($tag = $tag+'+'+$request.filter) #end #set($feed = $xwiki.feed.getFeeds("http://www.bibsonomy.org/publrssN/tag/${tag}?items=1000")) #set($title = '<a href="http://www.bibsonomy.org/tag/'+$tag+'">'+$tag+'</a> publications' ) #bibsonomyfeed( $feed $title false) #end ############## /bibsonomy publications feed

############## bibsonomy publications feed with controls #macro(publications_pp $tag) <form action="" id="publications" method="post"> <input type="checkbox" #if ($request.showabstracts) checked #end name="showabstracts" value="true" /> Show abstracts  <input type="text" size="20" name="filter" value="$!request.filter" /> <input type="submit" name="filter" value="Filter" /> </form>

#publications($tag) #end ############## /bibsonomy publications feed with controls #macro(publicationspp $tag) #publications_pp($tag) #end

############## bibsonomy links feed #macro(links $tag) #set($feed = $xwiki.feed.getFeeds("http://www.bibsonomy.org/rss/tag/${tag}?items=1000")) #set($title = '<a href="http://www.bibsonomy.org/tag/"'+$tag+'">'+$tag+'</a> links' ) #bibsonomyfeed( $feed $title true) #end ############## /bibsonomy publications feed

############## bibsonomy all NOT WORKING #macro(bibsonomyall $tag) <div style="float:left;width:40%;padding:5px;border:1px solid black;"> #publications( $tag) </div> <div style="float:left;width:40%;padding:5px;border:1px solid black;"> #links( $tag) </div>

#end ############## /bibsonomy all

Tags:
Created by Yishay Mor on 2008/06/18 11:45
Last modified by Vincent Massol on 2009/01/25 19:18

This wiki is licensed under a Creative Commons license
2.2.1.27354