markdown-tweet-scheduler
markdown-tweet-scheduler copied to clipboard
Schedule daily tweets from markdown files in your repo, posted via github actions.
markdown-tweet-scheduler
Schedule tweets from markdown files in your repo, posted to twitter via github actions.
Now supports .txt as well as .md files!
Why
- View, edit, and post your tweets without logging into twitter
- Keep source controlled backups of your tweets
- Free and open source
Setup
- Clone this repo and push it to your own private repo.
- Get your credentials by creating a twitter app (https://developer.twitter.com/apps)
- Add your twitter credentials to the repository's secrets (https://docs.github.com/en/actions/reference/encrypted-secrets)
- API_KEY (known as consumer_key in twitter API)
- API_SECRET_KEY (known as consumer_secret in twitter API)
- ACCESS_TOKEN
- ACCESS_TOKEN_SECRET
Scheduling Tweets By Date
- Create a markdown file in the
./tweets/folder with a future date in either theYYYY-Mon-DDorMonth dd, YYYYformat, for example,2021-Sep-05.mdorSeptember 5, 2021.md, and write the content of your tweet in it. - Commit the file(s) and push to the remote repo. When the daily action runs on the specified date, the tweet should be posted.
Configuration
-
By default, posts tweets around 7:02AM PT (2:02 UTC). To change the time of day tweets are posted:
- Set the
cronsection of.github/workflows/go.ymlto the time you want the tweet to post https://cron.help/
- Set the
-
Changing the tweet directory:
- Change the
FILE_PATHenvironment variable in.github/workflows/go.yml
- Change the
Running locally
- rename
.env-SAMPLEto.envand fill in your twitter credentials- consumer_key == API_KEY
- consumer_secret == API_SECRET_KEY
- In your terminal, from the root directory:
go run .
Notes
- Fails silently on bad credentials, make sure you set those correctly.
- Only allows one tweet per day by design. If requested, this can be modified to allow tweets by the minute or hour.
- Tweets will not be posted exactly at the cron time set in
go.yml. In my experience in can be 5-10 minutes late. If you need minute precision, run this script locally on a cronjob.