Files
bin/postFacebook.sh
T

63 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
API="https://graph.facebook.com/v25.0"
TOKEN="${FACEBOOK_TOKEN:-}"
if [ -z "$TOKEN" ] && [ -f "$HOME/.facebook-token" ]; then
TOKEN="$(tr -d '\n' < "$HOME/.facebook-token")"
fi
if [ -z "$TOKEN" ]; then
echo "ERROR: no token. Set FACEBOOK_TOKEN or create ~/.facebook-token (long-lived Page access token)" >&2
exit 1
fi
PAGE_ID="${FACEBOOK_PAGE_ID:-}"
if [ -z "$PAGE_ID" ] && [ -f "$HOME/.facebook-page-id" ]; then
PAGE_ID="$(tr -d '\n' < "$HOME/.facebook-page-id")"
fi
if [ -z "$PAGE_ID" ]; then
echo "ERROR: no page id. Set FACEBOOK_PAGE_ID or create ~/.facebook-page-id" >&2
exit 1
fi
if [ "$#" -lt 1 ] || [ "$#" -gt 2 ]; then
echo "Usage: $0 'post caption' [image-file]" >&2
exit 1
fi
CAPTION="$1"
IMAGE="${2:-}"
json_field() {
python3 -c "import json,sys; d=json.load(sys.stdin); print(d.get('$1','') or '')"
}
if [ -n "$IMAGE" ]; then
if [ ! -f "$IMAGE" ]; then
echo "ERROR: image not found: $IMAGE" >&2
exit 1
fi
echo "--> Publishing photo to page $PAGE_ID..."
RESP="$(curl -sS -X POST "$API/$PAGE_ID/photos" \
-H "Authorization: Bearer $TOKEN" \
-F "source=@$IMAGE" \
--form-string "caption=$CAPTION")"
ID="$(echo "$RESP" | json_field id)"
if [ -z "$ID" ]; then
echo "ERROR: photo post failed: $RESP" >&2
exit 1
fi
echo "--> Posted photo, id: $ID"
echo " https://www.facebook.com/photo.php?fbid=$ID"
else
echo "--> Publishing text post to page $PAGE_ID..."
RESP="$(curl -sS -X POST "$API/$PAGE_ID/feed" \
-H "Authorization: Bearer $TOKEN" \
--data-urlencode "message=$CAPTION")"
ID="$(echo "$RESP" | json_field id)"
if [ -z "$ID" ]; then
echo "ERROR: post failed: $RESP" >&2
exit 1
fi
echo "--> Posted, id: $ID"
fi