#!/bin/bash # Parse Tellico database to BioOSM index.htm # $1 = tellico .tc file # Print result to stdout # # # // vectorLayer.removeFeatures(atol) # // map.removeLayer(vectorLayer) # # # Creates: # (to stdout) HTML file with the map and static entries # ./det/ID.htm details of each and every entry # ./bioosm.json JSON of all entries # ./bioosm.rss updated RSS feed # ./plainlog.htm sorted entries for easy human/alg # rm -rfv "./det/*" mkdir -p "./det" ICON_animalia="animalia.png" ICON_bacteria="bacteria.png" ICON_fungi="fungi.png" ICON_chromista="chromista.png" ICON_plantae="plantae.svg" ICON_plostenkoid="plostenkoid.png" ICON_protista="protista.png" ICON_biohazard="biohazard.svg" json="" rss=$'\n' rss+=$'\n' rss+=$'\n' rss+=$'Brmlab BioOSM RSS feed\n' rss+=$'New entries on BioOSM database\n' rss+=$'https://bioosm.s0c4.net\n' rss+=$'\n' rss+=$'\n' rss+=$'86400\n' # Return icon by Regnum function geticon () { case "$1" in "Animalia") echo "$ICON_animalia";; "Bacteria") echo "$ICON_bacteria";; "Fungi") echo "$ICON_fungi";; "Chromista") echo "$ICON_chromista";; "Plantae") echo "$ICON_plantae";; "Protista") echo "$ICON_protista";; *) echo "$ICON_biohazard";; esac } function safehtml () { echo "$1" | sed -e "s/'/\'/g" -e 's/"/\"/g' -e 's//\>/g' -e 's/^[ ]*//g' -e 's/[ ]*$//g' } i=1 # GLOBAL increment must persist multiple spagety() calls; incremented to infinity # Core function generating entries matching selection criteria (ie Kingdom) # !!! BEZ ODSAZENI !!! # $1 = list of entries # $2 = layer name # $3 = icon of the points function spagety () { bylo="" # Minula pozice sam="" # HTML samostatneho zaznamu osam="" # predchozi $sam spoj="" # HTML had z popisu stejnych pozic ospoj="" # Predchozi $spoj ox="" # Old X oy="" # Old Y datelog="" # Entries sorted by date for plaintext log json="var data='{\"version\":\"$(date --rfc-3339=seconds)\",\"arma\":[" while IFS='' read -r radek || [[ -n "$radek" ]]; do co=$(echo "$radek" | grep -oe ' .* ' | sed -E 's/( )*<(\/)?title>( )*//g') co=$(safehtml "$co") obr=$(echo "$radek" | grep -oe ' .* ' | sed -E 's/( )*<(\/)?image>( )*//g' | grep -oPe '[^/]*$') obr=$(safehtml "$obr") kde=$(echo "$radek" | grep -oe '.*' | grep -oPe '[0-9]+\.[0-9]{1,10}[, ]*[0-9]+\.[0-9]{1,10}') kde=$(safehtml "$kde") kdex=$(echo "$kde" | grep -oPe '[0-9]+\.[0-9]{1,10}$') kdex=$(safehtml "$kdex") kdey=$(echo "$kde" | grep -oPe '^[0-9]+\.[0-9]{1,10}') kdey=$(safehtml "$kdey") kdy=$(echo "$radek" | grep -oe ' .* ' | sed -E 's/( )*<(\/)?taken-date>( )*//g' | sed -E 's/([0-9]+)\.([0-9]+)\.([0-9]{4})/\3-\2-\1/g' | sed -E 's/-([0-9])-/-0\1-/g' | sed -E 's/-([0-9])$/-0\1/g') kdy=$(safehtml "$kdy") skop_typ=$(echo "$radek" | grep -oe ' .* ' | sed -E 's/( )*<(\/)?new-field-1>( )*//g') skop_typ=$(safehtml "$skop_typ") skop=$(echo "$radek" | grep -oe ' .* ' | sed -E 's/( )*<(\/)?microscope>( )*//g') skop=$(safehtml "$skop") imp=$(echo "$radek" | grep -oe ' .* ' | sed -E 's/( )*<(\/)?new-field-3>( )*//g') imp=$(safehtml "$imp") reg=$(echo "$radek" | grep -oe ' .* ' | sed -E 's/( )*<(\/)?new-field-4>( )*//g') reg=$(safehtml "$reg") phy=$(echo "$radek" | grep -oe ' .* ' | sed -E 's/( )*<(\/)?phylum>( )*//g') phy=$(safehtml "$phy") cla=$(echo "$radek" | grep -oe ' .* ' | sed -E 's/( )*<(\/)?class>( )*//g') cla=$(safehtml "$cla") ord=$(echo "$radek" | grep -oe ' .* ' | sed -E 's/( )*<(\/)?order>( )*//g') ord=$(safehtml "$ord") fam=$(echo "$radek" | grep -oe ' .* ' | sed -E 's/( )*<(\/)?family>( )*//g') fam=$(safehtml "$fam") gen=$(echo "$radek" | grep -oe ' .* ' | sed -E 's/( )*<(\/)?genus( )*>//g') gen=$(safehtml "$gen") spe=$(echo "$radek" | grep -oe ' .* ' | sed -E 's/( )*<(\/)?species>( )*//g') spe=$(safehtml "$spe") loc=$(echo "$radek" | grep -oe ' .* ' | sed -E 's/( )*<(\/)?locality---plaintext>( )*//g') loc=$(safehtml "$loc") des=$(echo "$radek" | grep -oe ' .* ' | sed -E 's/( )*<(\/)?description>( )*//g') des=$(safehtml "$des") vid=$(echo "$radek" | grep -oe ' .* ' | sed -E 's/( )*<(\/)?videolink>( )*//g') vid=$(safehtml "$vid") bio=$(echo "$radek" | grep -oe ' .* ' | sed -E 's/( )*<(\/)?biotope>( )*//g') bio=$(safehtml "$bio") eng=$(echo "$radek" | grep -oe ' .* ' | sed -E 's/( )*<(\/)?enlargement>( )*//g') eng=$(safehtml "$eng") obs=$(echo "$radek" | grep -oe ' .* ' | sed -E 's/( )*<(\/)?observer>( )*//g') obs=$(safehtml "$obs") lnk=$(echo "$radek" | grep -oe ' .* ' | sed -E 's/( )*<(\/)?localitylink>( )*//g') lnk=$(safehtml "$lnk") har=$(echo "$radek" | grep -oe ' .* ' | sed -E 's/( )*<(\/)?harvesting-method>( )*//g') den=$(echo "$radek" | grep -oe ' .* ' | sed -E 's/( )*<(\/)?population-density>( )*//g') dur=$(echo "$radek" | grep -oe ' .* ' | sed -E 's/( )*<(\/)?min>( )*//g') lor=$(echo "$radek" | grep -oe ' .* ' | sed -E 's/( )*<(\/)?locality-reference>( )*//g') lrl=$(echo "$radek" | grep -oe ' .* ' | sed -E 's/( )*<(\/)?locality-reference---link>( )*//g') lov=$(echo "$radek" | grep -oe ' .* ' | sed -E 's/( )*<(\/)?locality---vobrazek>( )*//g' | grep -oPe '[^/]*$') # >&2 echo "$co - $har - $den - $dur - $lor - $lrl - $lov" detid=$(echo "brmlab$co$obr$kde$kdy" | md5sum | grep -oe '[a-zA-Z0-9]*') if [[ "$kdex" = "" ]]; then >&2 echo -e "\033[31m" $(echo "$radek" | grep -oe '.*') " $co\033[0m" continue; fi zkurvenetellico=$(echo "$obr" | grep -oe '\.[a-zA-Z]*$') if [[ "$zkurvenetellico" = ".jpeg" ]]; then >&2 echo -e "\033[31m$obr $co\033[0m" continue; fi if [[ "$spe" = "sp." ]]; then wikisp="https://en.wikipedia.org/wiki/$gen" else wikisp="https://en.wikipedia.org/wiki/$gen $spe" fi json+="{" json+=" \"qualis\":\"$co\"," json+=" \"imperium\":\"$imp\"," json+=" \"regnum\":\"$reg\"," json+=" \"phylum\":\"$phy\"," json+=" \"classis\":\"$cla\"," json+=" \"ordo\":\"$ord\"," json+=" \"familia\":\"$fam\"," json+=" \"genus\":\"$gen\"," json+=" \"specie\":\"$spe\"," json+=" \"locus\":\"$kde\"," json+=" \"x\":\"$kdex\"," json+=" \"y\":\"$kdey\"," json+=" \"locplain\":\"$loc\"," json+=" \"depictio\":\"$des\"," json+=" \"quando\":\"$kdy\"," json+=" \"obr\":\"$obr\"," json+=" \"micro\":\"$skop\"," json+=" \"microtyp\":\"$skop_typ\"," json+=" \"vid\":\"$vid\"," json+=" \"bio\":\"$bio\"," json+=" \"amp\":\"$eng\"," json+=" \"spec\":\"$obs\"," json+=" \"detid\":\"$detid\"," json+=" \"har\":\"$har\"," json+=" \"den\":\"$den\"," json+=" \"dur\":\"$dur\"," json+=" \"lor\":\"$lor\"," json+=" \"lrl\":\"$lrl\"," json+=" \"lov\":\"$lov\"," json+=" \"lnk\":\"$lnk\"" # Lastone without ',' json+="}," rss+=$'\n' rss+=$' '"$co"$'\n' rss+=$' '"$des"$'\n' rss+=$' http://brmlab.s0c4.net/bioosm/det/'"$detid"$'.htm\n' rss+=$' '"$detid"$'\n' rss+=$' '"$kdy"$'\n' rss+=$'\n' # Generate detail page detid=$(echo "brmlab$co$obr$kde$kdy" | md5sum | grep -oe '[a-zA-Z0-9]*') detpg="" detpg+="" detpg+="" detpg+="Brmlab - BioOSM $co $kde" detpg+="" detpg+="" detpg+="

$co (wiki)

" detpg+="
" if [[ "$imp" != "" ]]; then detpg+="Imperium: $imp
" fi if [[ "$reg" != "" ]]; then detpg+="Regnum: $reg
" fi if [[ "$phy" != "" ]]; then detpg+="Phylum: $phy
" fi if [[ "$cla" != "" ]]; then detpg+="Classis: $cla
" fi if [[ "$ord" != "" ]]; then detpg+="Ordo: $ord
" fi if [[ "$fam" != "" ]]; then detpg+="Familia: $fam
" fi if [[ "$gen" != "" ]]; then detpg+="Genus: $gen
" fi if [[ "$spe" != "" ]]; then detpg+="Specie: $spe
" fi detpg+="
" if [[ "$kdy" != "" ]]; then detpg+="Quando: $kdy
" fi if [[ "$lnk" != "" ]]; then loc="$loc" # Yes, escaped " fi detpg+="Locus: $kde ($loc)
" if [[ "$obs" != "" ]]; then detpg+="Spectator: $obs
" fi if [[ "$bio" != "" ]]; then detpg+="Biotope: $bio
" fi if [[ "$skop" != "" ]]; then detpg+="Microscopium: $skop ($skop_typ)
" fi if [[ "$eng" != "" ]]; then detpg+="Amplificatio: $eng
" fi if [[ "$vid" != "" ]]; then detpg+="Video: $vid
" fi if [[ "$har" != "" ]]; then detpg+="Collecting method: $har
" fi if [[ "$den" != "" ]]; then detpg+="Individuals found: $den
" fi if [[ "$dur" != "" ]]; then detpg+="Duration on stage: $dur
" fi if [[ "$lrl" != "" ]]; then detpg+="Locality reference: $lor
" elif [[ "$lor" != "" ]]; then detpg+="Locality reference: $lor
" fi if [[ "$des" != "" ]]; then detpg+="Depictio: $des
" fi detpg+="
More on BioOSM map
" detpg+="
" lhx=$(echo "$kdex-0.022" | bc) lhy=$(echo "$kdey-0.010" | bc) pdx=$(echo "$kdex+0.022" | bc) pdy=$(echo "$kdey+0.010" | bc) detpg+="" detpg+="
" if [[ "$obr" != "" ]]; then detpg+="\"$co\"" else if [[ "$vid" != "" ]]; then detyt=$(echo "$vid" | sed -e 's/youtube.com\/watch?v=/youtube.com\/embed\//g') detpg+="" else detpg+="\"video\"" fi fi if [[ "$lov" != "" ]]; then detpg+="\"Locality
" fi detpg+="
" detpg+="" echo "$detpg" > "./det/$detid.htm" # Plain log of entries datelog+="$kdy $kde $co
\n" >&2 echo -e "\033[32m$co $obs\033[0m" ox="$kdex" oy="$kdey" i=$(($i+1)) done <<< $(echo "$1") # Zere parametr spaget, nikoli $1 scriptu !!! echo "$json{}]}" | sed -e "s/^var data='//g" > "./bioosm.json" echo "$json{}]}'" rss+=$'
\n' rss+=$'
\n' echo "$rss" > "./bioosm.rss" } # KONEC FCE SPAGETY # Parse Tellico file to list of entries praseTC=$(unzip -p "$1" tellico.xml | tr -d '\n' | sed -e $'s//<\/entry>\\\n/g' | grep -Pe '^yep" | sed -E 's/(^.*)(.*<\/locality>)(.*$)/\2\1\3/' | sort) # Sorted unique Kingdoms (to be passed as selection criteria) kingdoms=$(echo "$praseTC" | grep -oe ' .* ' | sed -E 's/( )*<(\/)?new-field-4>( )*//g' | sort | uniq) echo '' echo '' echo '' echo ' ' echo ' brmlab - BioOSM' echo ' ' echo ' ' echo ' ' echo '' echo '' # Generate select echo "" echo "

BioOSM - arma biologica in tuis vicinia

" ksel="" echo "Regnum: $ksel " echo "Phylum: " echo "Classis: " echo "Ordo: " echo "Familia: " echo "Genus: " echo "Specie: " echo "
" echo " Springs" #echo "" echo "

" echo "

Welcome! You can download the source data as JSON file
" echo "This site is owned by members of the hackerspace brmlab. See our wiki page for details and contact info
License: CC-BY-SA

" echo "" echo "' echo '' # Must be after JSON echo "" # Create plaintext log dateloghtm="" dateloghtm+="" dateloghtm+="" dateloghtm+="Brmlab - BioOSM plaintext log" dateloghtm+="" datelogsort=$(echo -e "$datelog" | sort -r | uniq) dateloghtm+="$datelogsort" dateloghtm+="" echo "$dateloghtm" > "./plainlog.htm"