#!/bin/sh # Origin: http://code.google.com/p/lindenb/source/browse/trunk/src/xsl/linkedin2foaf.xsl # info: http://plindenbaum.blogspot.com/2010/02/linkedinxslt-foaf-people-from.html set -e exit1() { echo "ERROR: $1" exit 1 } bindir=$(dirname "$0") #xsltdir="$bindir" turtle2foaf() { set -e inpath="$1" outpath="$2" [ -n "$outpath" ] || outpath=$(echo "$inpath" | perl -pe 's/\.ttl$/.rdf/ or exit 1') || exit1 "Failed resolving output RDF file from input Turtle file \"$inpath\"." [ -e "$inpath" ] || exit1 "Turtle file \"$inpath\" does not exist." # [ ! -e "$outpath" ] || exit1 "RDF file \"$outpath\" already exists." base="$(perl -ne '/^\@base\s+<(http.+)>/ and print $1 and exit;' "$inpath")" || true rapper ${base:+-I "$base"} -i turtle -o rdfxml-abbrev "$inpath" > "$outpath" foafsign "$outpath" } linkedin2foaf() { set -e inpath="$1" outpath="$2" [ -n "$outpath" ] || outfile=index.rdf && outpath="$(dirname "$inpath")/linkedin/$outfile" outdir=$(dirname "$outpath") tmppath="$outdir/index.html" [ -e "$inpath" ] || exit1 "Turtle file \"$inpath\" does not exist." [ ! -e "$tmppath" ] || exit1 "Tempfile \"$tmppath\" already exists." # TODO: support homepage as fallback for accountName # id=$(perl -0 -ne '/foaf:accountServiceHomepage\s+\s+;\s+foaf:(?:homepage\s+<(?=http)|accountName\s+")([^<"\s]+)/ and print $1 and exit;' "$inpath") #' # id=$(perl -0 -ne '/^:me.*?foaf:accountServiceHomepage\s+\s+;\s+foaf:accountName\s+"([^<"\s]+)/ms and print $1 and exit;' "$inpath") #' # id=62345396 id=jonassm [ -n "$id" ] || exit1 "Failed to resolve LinkedIn account name." uri="http://www.linkedin.com/in/$id" mkdir -p "$outdir" # work around unescaped &'s in linkedin pages # xsltproc --html "$bindir/linkedin2foaf.xsl" "$uri" > "$outpath" wget -q -O "$tmppath" "$uri" # perl -i -pe 's/&([a-zA-Z0-9]+=|\s)/&$1/g' "$tmppath" # xsltproc --html "$xsltdir/linkedin2foaf.xsl" "$tmppath" > "$outpath" perl "$bindir/linkedin2rdf.pl" "$tmppath" "$uri" > "$outpath" rm -f "$tmppath" foafsign "$outpath" } tidyfacebookfoaf() { set -e inpath="$1" outpath="$2" [ -e "$inpath" ] || exit1 "Facebook Exporter RDF file \"$inpath\" does not exist." perl "$bindir/fbfixup.pl" "$inpath" > "$outpath" foafsign "$outpath" } foafsign() { set -e inpath="$1" outpath="${inpath}_sig.pgp" gpg -a -o- --detach-sign "$inpath" > "$outpath" } paths="$*" [ -n "$paths" ] || paths=index.ttl for path in $paths; do basedir=$(dirname "$path") turtle2foaf "$path" linkedin2foaf "$path" || true # tidyfacebookfoaf "$basedir/facebook/foaf.xml" "$basedir/facebook/index.rdf" || true foafsign "$basedir/facebook/index.rdf" || true done