Bibsonomy Macro

Last modified by Vincent Massol on 2024/07/05 17:47

cogIntegrates XWiki and bibsonomy
TypeDoc (Velocity Macro)
Category
Developed by

xwiki:XWiki.yish

Rating
0 Votes
LicenseGNU Lesser General Public License 2.1

Table of contents

Description

It allows you to display publications on an XWiki page based on their tag in bibsonomy, and also to discuss individual entries.

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, [email protected]                                                                ##
##################################################################################################


#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" />&nbsp;Show abstracts&nbsp;
<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



##publications("XWiki")

Get Connected