FixingParticipantLinks

From RoboWiki
Jump to: navigation, search

Unfortunately, links to bots' jar files became rotten. Sometimes the hosting website goes down, sometimes API is changed. Luckily we have archive. To fix a link to a workable one, just replace the bad link to the archived one. You can do it by hand for your favorite bot or you can run the script below

#!/bin/sh

# Check rumble page for bots with rotten links.
# If possible replace the bad link with the one pointing to archive
#  http://robocode-archive.strangeautomata.com/robots/

archiveURL="http://robocode-archive.strangeautomata.com/robots"
archiveRegEx="robocode-archive.strangeautomata.com"

logFile="changes.log"

PARTICIPANTSURL="http://robowiki.net/wiki/RoboRumble/Participants?action=raw"
TAGbegin="<pre>"
TAGend="<\/pre>"

goodJarRegEx="\(Java archive data (JAR)\)\|\(Zip\)"

# mw extension stands for MediaWiki
wikiPageFileWeb=Participants.Web.mw
wikiPageFileFixed=Participants.Fixed.mw

function getParticipantsPage () {

	curl --silent --max-time 10 "$1" > "$wikiPageFileWeb" || { echo "ERROR: cannot download participant Wiki Page at $1"; exit 1; }
}

function getBotsList () {
	cat "$1" | sed -e 0,/$TAGbegin/d  -e /"$TAGend"/,\$d
}

function getHeader () {
	cat "$1" | sed -ne 0,/$TAGbegin/p
}

function getFooter () {
	cat "$1" | sed -ne /$TAGend/,\$p
}

function isUrlValidJar () {
	# url pointing to archive are assumed good
	echo "$1" | grep -q -i "$archiveRegEx"   && return 0
	# we need about 100 bytes to see if URL is JAR
	curl --silent --location --max-time 10 --range 0-100 "$1" \
		| file --brief - | grep -q "$goodJarRegEx"
}

function makeArchiveURLforBotName () {
	echo "$archiveURL"/"$1".jar|sed -e s'/ \+/_/g'
}

function fixParticipantsLinks () {
	#reads stdin
	inRobotsList=0
	while read ln
	do
		botName=`echo "$ln" | cut -d , -f 1`
		botURL=`echo "$ln" | cut -d , -f 2`
		if  (isUrlValidJar "$botURL")
		then
			#echo url is good
			echo $ln
		else
			# echo url is rotten
			# making archive url
			# replacing white spaces with one underscore
			newUrl=`makeArchiveURLforBotName "$botName"`

			# checking that archive has this bot jar
			if (isUrlValidJar "$newUrl")
			then
				echo $botName,$newUrl
				echo "Replacing link for $botName with achieved one" >> "$logFile"
				echo "   old rotten link was" >> "$logFile"
			        echo "      $botURL" >> "$logFile"
				echo "   new link is" >> "$logFile"
		      		echo "      $newUrl" >> "$logFile"
			else
				echo "Removing all records for $botName. The link is rotten and no archived Jar file" >> "$logFile"
			       	echo "	  old record was" >> $logFile
		      		echo "        $ln" >> "$logFile"
			fi
		fi
	done

}

getParticipantsPage "$PARTICIPANTSURL"

echo "=============================================" >> "$logFile"
date >> "$logFile"
echo "=============================================" >> "$logFile"

getHeader "$wikiPageFileWeb" > "$wikiPageFileFixed"
getBotsList "$wikiPageFileWeb" | fixParticipantsLinks >> "$wikiPageFileFixed"
getFooter "$wikiPageFileWeb" >> "$wikiPageFileFixed"

echo Ready to upload Wiki page with fixed links is in the file "$wikiPageFileFixed"
echo Below are the changes done to its originanl stored in "$wikiPageFileWeb"
diff -u "$wikiPageFileWeb" "$wikiPageFileFixed"

Personal tools