SkillAgentSearch skills...

Serveradmindowntime

ServerAdmin Downtime - rockin' ASCII art, retail API CLI browser for BASH.

Install / Use

/learn @speeves/Serveradmindowntime
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

ServerAdmin Downtime

ServerAdmin Downtime is a command-line web services browser. It is my tongue-in-cheek entry for Recommerce Hack Day (http://www.recommerceday.com) on Sept. 17, 2011. It allows one to search various APIs, and browse ASCII art versions of their catalog. It has a simple, driver interface, allowing you to add any searchable JSON-returning web server API. It was fun to participate with the Zappos team, and Sierra Trading Post, whos APIs are currently implemented.

Use a BLACK BACKGROUND for best results!

INSTALL

I have successfully tested this on a bare Debian Squeeze with the following additional packages:

apt-get install imagemagick html2text spidermonkey-bin

NOTE: spidermonkey-bin has been dropped from Ubuntu 11.04 Natty, so I compiled from source for the competition.

ADD DRIVERS

  1. copy an existing driver: cp /appinstall/location/drivers/Sierra_Trading_Post.sh /appinstall/location/drivers/Zappos.sh
  2. create a matching images folder to hold your related images mkdir /appinstall/location/images/Zappos
  3. copy your favorite homepage image into the new folder, (NOTE: I found that large letters at about 1200xsomething worked nicely) cp mylogo.jpg /appinstall/location/images/Zappos
  4. copy your favorite error photo into the same folder cp myerror.jpg /appinstall/location/images/Zappos
  5. open your driver file in your favorite editor emacs /appinstall/location/drivers/Zappos.sh 5a. modify your driver variables:

DRIVERNAME="Sierra_Trading_Post" HOMEPAGEPIC="sierra2.jpg" APIURL="http://apps.sierratradingpost.com/api/1.0/products/search" SIERRAAPIKEY="MYAPIKEY"

to:

DRIVERNAME="Zappos" HOMEPAGEPIC="zappos.jpg" APIURL="http://api.zappos.com/Search" APIPRODUCTURL="http://api.zappos.com/Product/id/" ZAPPOSAPIKEY="MYAPIKEY"

5b. change setitemvariables() to reflect the JSON for your API

setitemvariables() { ITEMID=$(echo ${SEARCHJSON} | ${JSAWKME} "return this.Result[${ITER}].Id") ITEMNAME=$(echo ${SEARCHJSON} | ${JSAWKME} "return this.Result[${ITER}].Name") ITEMURL=$(echo ${SEARCHJSON} | ${JSAWKME} "return this.Result[${ITER}].Url") ITEMWEBURL=$(echo ${SEARCHJSON} | ${JSAWKME} "return this.Result[${ITER}].WebUrl")

# REVIEWS
ITEMREVIEWSURL=$(echo ${SEARCHJSON} | ${JSAWKME} "return this.Result[${ITER}].Reviews.ReviewsUrl")
ITEMREVIEWSCOUNT=$(echo ${SEARCHJSON} | ${JSAWKME} "return this.Result[${ITER}].Reviews.ReviewCount")
ITEMREVIEWSAVERAGERATING=$(echo ${SEARCHJSON} | ${JSAWKME} "return this.Result[${ITER}].Reviews.AverageRating")

# SIZES
ITEMSIZES=$(echo ${SEARCHJSON} | ${JSAWKME} "return this.Result[${ITER}].SizesAvailable.SIZE")

# IMAGE
ITEMIMAGEMEDIUM=$(echo ${SEARCHJSON} | ${JSAWKME} "return this.Result[${ITER}].Images.PrimaryMedium")
ITEMIMAGESMALL=$(echo ${SEARCHJSON} | ${JSAWKME} "return this.Result[${ITER}].Images.PrimarySmall")

#DESCRIPTION
ITEMDESCRIPTIONHTMLSIMPLE=$(echo ${SEARCHJSON} | ${JSAWKME} "return this.Result[${ITER}].DescriptionHtmlSimple")

# PRICING
ITEMLISTPRICE=$(echo ${SEARCHJSON} | ${JSAWKME} "return this.Result[${ITER}].ListPrice")
ITEMFINALPRICE=$(echo ${SEARCHJSON} | ${JSAWKME} "return this.Result[${ITER}].FinalPrice")

}

to:

setitemvariables() { ITEMSTATUSCODE=$(echo ${SEARCHJSON} | ${JSAWKME} "return this.statusCode")

ITEMSTYLEID=$(echo ${SEARCHJSON} | ${JSAWKME} "return this.results[${ITER}].styleId")
ITEMPRICE=$(echo ${SEARCHJSON} | ${JSAWKME} "return this.results[${ITER}].price")
ITEMORIGINALPRICE=$(echo ${SEARCHJSON} | ${JSAWKME} "return this.results[${ITER}].originalPrice")
ITEMPRODUCTURL=$(echo ${SEARCHJSON} | ${JSAWKME} "return this.results[${ITER}].productUrl")
ITEMCOLORID=$(echo ${SEARCHJSON} | ${JSAWKME} "return this.results[${ITER}].colorId")
ITEMPRODUCTNAME=$(echo ${SEARCHJSON} | ${JSAWKME} "return this.results[${ITER}].productName")
ITEMBRANDNAME=$(echo ${SEARCHJSON} | ${JSAWKME} "return this.results[${ITER}].brandName")
ITEMTHUMBNAILIMAGEURL=$(echo ${SEARCHJSON} | ${JSAWKME} "return this.results[${ITER}].thumbnailImageUrl")
ITEMPERCENTOFF=$(echo ${SEARCHJSON} | ${JSAWKME} "return this.results[${ITER}].percentOff")
ITEMPRODUCTID=$(echo ${SEARCHJSON} | ${JSAWKME} "return this.results[${ITER}].productId")

ITEMTERM=$(echo ${SEARCHJSON} | ${JSAWKME} "return this.term")
ITEMCURRENTRESULTCOUNT=$(echo ${SEARCHJSON} | ${JSAWKME} "return this.currentResultCount")
ITEMTOTALRESULTCOUNT=$(echo ${SEARCHJSON} | ${JSAWKME} "return this.totalResultCount")

}

6c. unset those variables in unsetitemvariables():

unsetitemvariables() { unset ITEMID unset ITEMNAME unset ITEMURL unset ITEMWEBURL

# REVIEWS
unset ITEMREVIEWSURL
unset ITEMREVIEWSCOUNT
unset ITEMREVIEWSAVERAGERATING

# SIZES
unset ITEMSIZES

# IMAGE
unset ITEMIMAGE

#DESCRIPTION
unset ITEMDESCRIPTIONHTMLSIMPLE

# PRICING
unset ITEMLISTPRICE
unset ITEMFINALPRICE

}

to:

unsetitemvariables() { unset ITEMSTATUSCODE

unset ITEMSTYLEID
unset ITEMPRICE
unset ITEMORIGINALPRICE
unset ITEMPRODUCTURL
unset ITEMCOLORID
unset ITEMPRODUCTNAME
unset ITEMBRANDNAME
unset ITEMTHUMBNAILIMAGEURL
unset ITEMPERCENTOFF
unset ITEMPRODUCTID

unset ITEMTERM
unset ITEMCURRENTRESULTCOUNT
unset ITEMTOTALRESULTCOUNT

}

6d. do the same with setsearchresultcount()

setsearchresultcount() { RESULTCOUNT=$(echo ${SEARCHJSON} | ${JSAWKME} "return this.Count") }

to:

setsearchresultcount() { RESULTCOUNT=$(echo ${SEARCHJSON} | ${JSAWKME} "return this.totalResultCount") }

6e. etc. etc. etc. You get the 'picture'...

THANKS

  • Crystal Chang, the boss of the Zappos API team, for contacting me and inviting me out to the competition. (Thank you!)
  • The rest of the Zappos API team, and developers, who made me feel welcome and kept me safe on Fremont St. (That's you, Will!)
  • Mike Tran from Sierra Trading Post (http://www.sierratradingpost.com) hanging out and supporting my wild ideas! (I still think there is something to that concierge idea of yours!)
  • Micha Niskin, creator of jsawk, without which I would still be figuring out a way to parse my JSON with BASH. (https://github.com/micha)
  • For everything!
View on GitHub
GitHub Stars4
CategoryDevelopment
Updated2mo ago
Forks1

Languages

Shell

Security Score

85/100

Audited on Dec 31, 2025

No findings