#!/usr/bin/env bash #set -euo pipefail # # This simple script will post the weather plots given at # IMG[1-3] to a social media Account using the Mastodon API # (at least I hope, that it's compatible to the Mastodon API # because I use Mitra on my server). # # The images must be generated by another script and have to be located # in the same directory as the script. # # =================================================================================== # Change anything in the SECTION "EDIT THESE FOR YOUR NEEDS", # =================================================================================== # # It works (for me) but is still under developement # Improvements and changes may be done at any time # mostly there is no check if any command and function # is implemented on the machine, # nor if they are being executed correctly. # Use at your own risk. # # =================================================================================== # CONFIG — "EDIT THESE FOR YOUR NEEDS" # =================================================================================== BASE="https://INSTANCE.SOCIAL" USER="YOUR_USER" IMG1="YOUR_TEMERATURE_IMAGE_WITH_FILE_EXTENSION" IMG2="YOUR_PRESSURE_IMAGE_WITH_FILE_EXTENSION" IMG3="YOUR_HUMIDITY_IMAGE_WITH_FILE_EXTENSION" VISIBILITY="YOUR_NEEDED_VISIBILITY" # possible values: public / unlisted / private / direct STATUS_TEXT="YOUR_STATUS_MESSAGE" TOKEN="TOKEN_FROM_YOUR_FEDIVERSE_ACCOUNT" # =================================================================================== # END OF THE SECTION "EDIT THESE FOR YOUR NEEDS" # =================================================================================== upload_media() { local file="$1" local desc="$2" curl -s -H "Authorization: Bearer $TOKEN" -F "file=@${file}" -F "description=${desc}" "$BASE/api/v1/media"| jq -r '.id // .media_id // empty' } mid1=$(upload_media "$IMG1" "Temperature chart for $(date +%F)") mid2=$(upload_media "$IMG2" "Pressure chart for $(date +%F)") mid3=$(upload_media "$IMG3" "Humidity chart for $(date +%F)") if [[ -z "$mid1" || -z "$mid2" || -z "$mid3" ]]; then echo "Upload failed; responses:" echo "IMG1:" curl -s -H "Authorization: Bearer $TOKEN" -F "file=@${IMG1}" "$BASE/api/v1/media" | jq . echo "IMG2:" curl -s -H "Authorization: Bearer $TOKEN" -F "file=@${IMG2}" "$BASE/api/v1/media" | jq . echo "IMG3:" curl -s -H "Authorization: Bearer $TOKEN" -F "file=@${IMG3}" "$BASE/api/v1/media" | jq . exit 1 fi media_array=$(jq -nc --arg a "$mid1" --arg b "$mid2" --arg c "$mid3" '[ $a, $b, $c ]') payload=$(jq -nc --arg status "$STATUS_TEXT" --argjson media_ids "$media_array" --arg vis "$VISIBILITY" \ '{status: $status, media_ids: $media_ids, visibility: $vis}') curl -s -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" -d "$payload" "$BASE/api/v1/statuses" | jq .