{"id":18725823,"url":"https://github.com/phantas0s/ottosocial","last_synced_at":"2026-01-12T02:52:19.511Z","repository":{"id":144205967,"uuid":"217733503","full_name":"Phantas0s/ottosocial","owner":"Phantas0s","description":":+1: ottosocial is a CLI to schedule tweets via CSV","archived":false,"fork":false,"pushed_at":"2021-03-20T19:53:34.000Z","size":154,"stargazers_count":24,"open_issues_count":0,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-05-06T16:47:52.735Z","etag":null,"topics":["automation","cli","csv","go","golang","social-media","twitter"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Phantas0s.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-10-26T16:01:17.000Z","updated_at":"2022-08-25T19:29:33.000Z","dependencies_parsed_at":null,"dependency_job_id":"e591a96f-e5e4-4d0d-a0c7-3cc4b176578a","html_url":"https://github.com/Phantas0s/ottosocial","commit_stats":null,"previous_names":["phantas0s/tweetwee"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/Phantas0s/ottosocial","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Phantas0s%2Fottosocial","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Phantas0s%2Fottosocial/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Phantas0s%2Fottosocial/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Phantas0s%2Fottosocial/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Phantas0s","download_url":"https://codeload.github.com/Phantas0s/ottosocial/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Phantas0s%2Fottosocial/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265672372,"owners_count":23808845,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","cli","csv","go","golang","social-media","twitter"],"created_at":"2024-11-07T14:12:05.697Z","updated_at":"2026-01-12T02:52:19.487Z","avatar_url":"https://github.com/Phantas0s.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"![ottosocial logo](./logo.png)\n![travis CLI](https://api.travis-ci.org/Phantas0s/ottosocial.svg?branch=master\u0026style=for-the-badge) ![Hits-of-Code](https://hitsofcode.com/github/phantas0s/devdash) [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) ![Go Report Card](https://goreportcard.com/badge/github.com/Phantas0s/ottosocial) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/8d788aa393a44def853e7cd90b403164)](https://www.codacy.com/manual/Phantas0s/ottosocial?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=Phantas0s/ottosocial\u0026amp;utm_campaign=Badge_Grade)\n\nottosocial is a CLI which allows you to schedule and send automatically messages on social media, from a CSV file.\n\nYou can send threads by separating your tweets with a pipe `|`. As a result, you can't use the pipe as a character in a tweet.\n\n*For now, only Twitter is supported.*\n\n*ottosocial is in beta. Breaking changes might come.*\n\n## Menu\n\n* [Installation](#installation)\n* [Getting Started](#getting-started)\n* [Commands](#commands)\n* [Configuration](#configuration)\n* [CSV Format](#csv-format)\n* [Contribute](#contribute)\n* [Licence](#licence)\n\n## Installation\n\n### General\n\nYou can simply grab the [latest released binary file](https://github.com/Phantas0s/ottosocial/releases/latest) and download the version you need, depending on your OS.\n\n### Linux script\n\nIf you use a Linux based OS, here's a simple way to download ottosocial and move it in `/usr/local/bin` to be able to use it globally.\n\n```shell\ncurl -LO https://raw.githubusercontent.com/Phantas0s/ottosocial/master/install/linux.sh \u0026\u0026 \\\n./linux.sh \u0026\u0026 \\\nrm linux.sh\n```\n\n### Manual installation\n\nYou need to clone this repository and build the binary in the root directory.\n\n## Getting Started\n\nFirst, you need to authorize ottosocial to send tweets from your twitter account. To do so:\n\n1. Go to [Twitter app management](https://developer.twitter.com/en/apps). Log in if necessary.\n2. Click on \"Create an app\".\n3. Fill the required fields.\n4. You'll need to copy the following to authorize ottosocial to send tweets:\n    * API key, \n    * API secret key, \n    * Access Token \n    * Access Token Secret provided, \n\nSee below the configuration to include everything to the configuration file.\n\n## Commands\n\nFor now, only the command `csv` is available.\n\nI advise you to use a [terminal multiplexer](https://thevaluable.dev/tmux-boost-productivity-terminal/) or `\u0026` to run ottosocial in the background.\n\n## Configuration\n\nSome configuration is required in order to run ottosocial. Here's the detail:\n\n| Name             | Description                     | Flag                       | Type         | Required   | default   |\n| ---------------- | ------------------------------- | -------------------------- | ------------ | ---------- | --------- |\n| key              | Twitter API key                 | `--key`, `-k`              | string       | yes        | -         |\n| secret           | Twitter API secret key          | `--secret`, `-s`           | string       | yes        | -         |\n| token            | Twitter Access Token            | `--token`, `-t`            | string       | yes        | -         |\n| token-secret     | Twitter Access Token Secret     | `--token-secret`, `-j`     | string       | yes        | -         |\n| logpath          | File path of the log file       | `--logpath`, `-l`          | string       | no         | -         |\n| file             | File path of the CSV            | `--filepath`, `-f`         | string       | yes        | -         |\n| verify           | Verify each tweet               | `--verify`, `-v`           | boolean      | no         | false     |\n\n**NOTES**: \n\n* If `logpath` is not filled, the default output will be the shell. I advise you to use a logpath and tailing it at all time to see every error.\n* If `verify` is `true`, ottosocial will stop if one (or more) tweets are invalid.\n\nYou can either way use flags, a configuration file, or both at the same time.\n\n### Using flags\n\nIf you use only flags, you'll need to precise every required configuration field directly when you launch ottosocial.\n\nFor example:\n\n```\nottosocial csv --key=1234 --secret=5678 --token=910-11 --token-secret=12KK --logpath=/tmp/ottosocial-logs -v -f ./test.csv\n```\n\n### Configuration File\n\nThis is the simplest way to use ottosocial. You'll need to create the file `~/ottosocial.yml` (directly in your home directory) and add your configuration there. For example:\n\n```\n---\nkey: 1234 # API key\nsecret: 5678 # API secret key\ntoken: 910-11 # Access token\ntoken-secret: 12KK # Access token secret\nlogpath: /tmp/ottosocial-logs\nfile: ~/my-tweets.csv\n```\n\nThen, you simply need to launch ottosocial.\n\n## CSV Format\n\nottosocial can send tweets from a CSV. It needs to have two columns: `date` (when the tweet will be sent) and `message`.\n\nFor example:\n\n```csv\n2020-01-23 07:57,This is a test\n2020-01-23 08:00,\"This is a test, with quotes\"\n```\n\nYou need to respect the date format. If the date is in the past, the tweet will never be sent.\n\n**NOTES**:\n\n* If you modify the CSV, you need to relaunch ottosocial. I might implement hot reloading later, if somebody is interested in that.\n\n## Contribute\n\nThanks a lot if you want to contribute to ottosocial!\n\nI think the [\"talk, then code\"](https://dave.cheney.net/tag/contributing) practice is pretty good to avoid misunderstandings and hours of work for nothing.\n\nTherefore:\n\n\"Every new feature or bug fix should be discussed with the maintainer(s) of the project before work commences. It’s fine to experiment privately, but do not send a change without discussing it first.\"\n\n## Acknowledgement\n\nThe logo uses [Maria Letta mega doodle pack](https://github.com/MariaLetta/mega-doodles-pack). Thanks for these great illustrations.\n\n## Licence\n\n[Apache Licence 2.0](https://choosealicense.com/licenses/apache-2.0/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphantas0s%2Fottosocial","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphantas0s%2Fottosocial","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphantas0s%2Fottosocial/lists"}