| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- #!/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 .
|