63 lines
1.8 KiB
Bash
Executable File
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
|