#!/bin/bash # Copyright (c) 2012 Fabio Comuni # Copyright (c) 2010, 2012 Yu-Jie Lin # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is furnished to do # so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. FCLI_RC="$HOME/.shred.rc" usage () { echo "usage: $0 options OPTIONS: -h Show this message -c Command -C Config-Filename Valid Commands: statuses_update home_timeline Use -h -c command to get options for the command. " exit $1 } show_config_help () { echo "Please create $FCLI_RC with: hubzilla_url=YOR_SERVER_URL (no trailing /) oauth_consumer_key=YOUR_CONSUMER_KEY oauth_consumer_secret=YOUR_CONSUMER_SECRET You can register new app consumer key and secret at http://yourserver.com/settings/oauth " exit $1 } show_statuses_update () { echo "Command statuses_update Requires: -s status Optional: -r in_reply_to_status_id " exit $1 } show_home_timeline () { echo "Command home_timeline" exit $1 } #json helper # # usage: # echo "$parsed_json" | js key1 [key2 [key3 ...]][,] # # echoes the value of json[key1][key2][key3], without surronding quotes # with "," as last argument, no newline is printed # js () { local arg local rg='^\[' local ret for arg in $@ do [[ "$arg" == "," ]] && break; if [[ $arg == ${arg//[0-9]/} ]] then rg="${rg}\"$arg\"," else rg="${rg}$arg," fi done rg="${rg%?}\]" ret=$(grep $rg | cut -f 2 | sed 's/^"\(.*\)"$/\1/' | sed "s/\\\\\//\//g" ) if [[ "$arg" == "," ]] then echo -e "$ret" | tr -d '\012\015' else echo -e "$ret" fi } load_config () { # Source Config [[ -f "$FCLI_RC" ]] && . "$FCLI_RC" || show_config_help 1 THISDIR=$(dirname $0) if [ $THISDIR == '' ]; then THISDIR=. ; fi PATH=$THISDIR:$PATH # Source ShredOAuth.sh OAuth_sh=$(which ShredOAuth.sh) (( $? != 0 )) && echo 'Unable to locate ShredOAuth.sh! Make sure it is in searching PATH.' && exit 1 source "$OAuth_sh" # Source JSON.sh JSON_sh=$(which JSON.sh) (( $? != 0 )) && echo 'Unable to locate JSON.sh! Make sure it is in searching PATH.' && exit 1 source "$JSON_sh" [[ "$oauth_consumer_key" == "" ]] && show_config_help 1 [[ "$oauth_consumer_secret" == "" ]] && show_config_help 1 FO_init if [[ "$oauth_token" == "" ]] || [[ "$oauth_token_secret" == "" ]]; then FO_access_token_helper if (( $? == 0 )); then oauth_token=${FO_ret[0]} oauth_token_secret=${FO_ret[1]} echo "oauth_token='${FO_ret[0]}'" >> "$FCLI_RC" echo "oauth_token_secret='${FO_ret[1]}'" >> "$FCLI_RC" echo "Token saved." else echo 'Unable to get access token' exit 1 fi fi } main () { fcli_command= fcli_status= fcli_in_reply_to_status_id= fcli_file= fcli_help_flag= fcli_opts= fcli_post= while getopts "C:c:s:r:f:q:hp" name do case $name in c) fcli_command="$OPTARG";; C) FCLI_RC="$OPTARG";; s) fcli_status="$OPTARG";; r) fcli_in_reply_to_status_id="$OPTARG";; f) fcli_file="$OPTARG";; h) fcli_help_flag="1";; p) fcli_post="1";; q) fcli_opts=("${fcli_opts[@]}" "$OPTARG");; ?) usage exit 2;; esac done load_config if [[ "$fcli_help_flag" == "1" ]]; then case $fcli_command in # statuses_update) # show_statuses_update 0 # ;; home_timeline) show_home_timeline 0 ;; *) [[ "$fcli_command" == "" ]] && usage 0 usage 1 esac ; fi case $fcli_command in home_timeline) FO_statuses_home_timeline 'json' '' 5 JS_Parsed=$(echo "$FO_ret" | tokenize | parse) for id in 0 1 2 3 4 do echo "$JS_Parsed" | js $id "user" "name" , echo -n " - " echo "$JS_Parsed" | js $id "created_at" echo "$JS_Parsed" | js $id "text" echo "" echo "------------------------------------------------------------------------------" done return $FO_rval ;; statuses_update) [[ "$fcli_status" == "" ]] && show_statuses_update 1 FO_statuses_update 'json' "$fcli_status" "$fcli_in_reply_to_status_id" JS_Parsed=$(echo "$FO_ret" | tokenize | parse) echo "$JS_Parsed" | js "user" "name" , echo -n " - " echo "$JS_Parsed" | js "created_at" echo "$JS_Parsed" | js "text" echo "" echo "------------------------------------------------------------------------------" return $FO_rval ;; *) # echo "${fcli_opts[@]}" FO_command "$fcli_command" "$fcli_post" fcli_opts[@] echo $FO_ret return $FO_rval ;; esac return 0 } main "$@"