Schedule Twitter updates with easy

Overview

Logo

coo: schedule Twitter updates with easy

PyPI version Build Status codecov Docs License

Coo is an easy to use Python library for scheduling Twitter updates. To use it, you need to first apply for a developer account in the Twitter Developers Platform and generate the Keys and Access Tokens.

pip install coo

Initializing

from coo import Coo

at = Coo(
    "consumer_key",
    "consumer_secret",
    "access_token",
    "access_token_secret",
    preview=False
)

Alternatively, you can set preview=True and print your tweets in the terminal instead to post them on Twitter.

Scheduling Twitter updates:

from coo import Coo

at = Coo(
    "consumer_key",
    "consumer_secret",
    "access_token",
    "access_token_secret"
)

tweets = [
    ("2030-10-28 18:50", template, "My Twitter update with a template."),
    ("2030-10-29 18:15", template2, "Update with a different template."),
    ("2030-11-01 13:45", None, "Awesome Twitter update without a template."),
]

at.schedule(tweets, time_zone="America/Santiago")

Or you can use a list of strings and add a delay, interval and a template:

tweets = [
    "My first awesome Twitter Update",
    "My second awesome Twitter Update",
    "My third awesome Twitter Update",
    "My fourth awesome Twitter Update",
    "My fifth awesome Twitter Update",
    "My sixth awesome Twitter Update",
]

at.tweet(tweets, delay="13:45", interval="four_hours", template=my_template)

For more detailed options and usage, keep reading or check the documentation 📘 .

Scheduling Twitter Updates

Schedule updates with datetime strings or integers and use custom templates if needed.

Coo.schedule(updates, time_zone, media)

Full example:

from coo import Coo

at = Coo(
    "consumer_key",
    "consumer_secret",
    "access_token",
    "access_token_secret"
)

tweets = [
    # datetime with and without templates
    ("2030-10-28 18:50", template, "My Twitter update with a template."),
    ("2030-10-29 18:15", template2, "Update with a different template."),
    ("2030-11-01 13:45", None, "Awesome Twitter update without a template."),

    # date with and without templates
    ("2030-12-25", template3, "Merry christmas!"),
    ("2031-01-01", None, "And a happy new year!"),

    # time with and without templates
    ("18:46", template2, "Will be post today at 18:46."),
    ("23:00", None, "A tweet for today at 23:00."),

    # integer (seconds) with and without templates
    (3600, template, "This tweet will be posted in an hour."),
    (86400, None, "This one, tomorrow at the same hour."),
]

at.schedule(tweets, time_zone="America/Santiago")

Notes for parsing DateTime strings

  • If a time zone is not specified, it will set to local.
  • The time will be set to 00:00:00 if it's not specified.
  • When passing only time information the date will default to today.
  • A future date is needed, otherwise a ScheduleError is raised.

Here you can find all the Time Zones available.

Media files

There are two ways to add media files to your tweets. The first and easiest is to use one global file for all the updates:

at.schedule(tweets, time_zone="America/Santiago", media="path/to/file.png")

Also, an individual file can be set for each one of the updates:

tweets = [
    ("2030-10-28 18:50", template, "Update with an image.", "pics/owl.png"),
    ("2030-10-29 18:15", template, "Update with other media.", "videos/funny_video.mp4"),
    ("2030-11-01 13:45", template, "Tweet without media."),
]

Finally, it is possible to combine these to ways. For example, if most of the tweets are gonna use the same media and just a few will have a different or none:

tweets = [
    ("2030-11-01 13:45", template, "Tweet with global media."),
    ("2030-11-02 13:45", template, "Tweet with global media."),
    ("2030-11-03 13:45", template, "Tweet with global media."),
    ("2030-11-04 13:45", template, "Tweet with global media."),
    ("2030-11-05 13:45", template, "Tweet with global media."),
    ("2030-11-06 13:45", template, "Tweet with global media."),
    ("2030-11-07 13:45", template, "Tweet with global media."),
    ("2030-11-08 13:45", template, "Tweet without media.", None),
    ("2030-11-09 13:45", template, "Tweet without media.", None),
    ("2030-12-10 18:50", template, "Update with an image.", "pics/owl.png"),
    ("2030-12-11 18:15", template, "Update with other media.", "videos/funny_video.mp4"),
]

at.schedule(tweets, time_zone="America/Santiago", media="path/to/global_media.png")

Tweet a list of strings

Post ordered updates with delay, interval, and a template if needed.

Coo.tweet(updates, delay, interval, template, media, time_zone, aleatory)
from coo import Coo

at = Coo(
    "consumer_key",
    "consumer_secret",
    "access_token",
    "access_token_secret"
)

tweets = [
    "My first awesome Twitter Update",
    "My second awesome Twitter Update",
    "My third awesome Twitter Update",
    "My fourth awesome Twitter Update",
    "My fifth awesome Twitter Update",
    "My sixth awesome Twitter Update",
]

# post the twitter updates
at.tweet(tweets)

Delay

You can use datetime, date and time strings, integers as seconds and some strings as keywords: half_hour, one_hour, one_day and one_week between others to delay the post of your first update.

# datetime, date and time strings
at.tweet(tweets, delay="2030-11-24 13:45", time_zone="America/Santiago")
at.tweet(tweets, delay="2030-11-24", time_zone="Australia/Sydney")
at.tweet(tweets, delay="13:45", time_zone="America/New_York")

# "keywords"
at.tweet(tweets, delay="one_week")

# integer
at.tweet(tweets, delay=604800)

Remember to read the Notes for parsing DateTime strings.

Interval

Use integers as seconds or some strings as keywords: half_hour, one_hour, one_day and one_week between others.

# "keywords"
at.tweet(tweets, interval="four_hours")

# integers
at.tweet(tweets, interval=14400)

Template

And of course, you can also set one template for each one of the updates.

at.tweet(tweets, template=template)

Media files

Use one media file for all of your updates:

at.tweet(tweets, media="path/to/media.jpeg")

Random updates

To tweet your updates randomly:

at.tweet(tweets, aleatory=True)

Delay and Interval Keywords

Keyword Seconds
now 0
half_hour 1800
one_hour 3600
two_hours 7200
four_hours 14400
six_hours 21600
eight_hours 28800
ten_hours 36000
twelve_hours 43200
fourteen_hours 50400
sixteen_hours 57600
eighteen_hours 64800
twenty_hours 72000
twenty_two_hours 79200
one_day 86400
two_days 172800
three_days 259200
four_days 345600
five_days 432000
six_days 518400
one_week 604800

Templates

Templates are very simple, just use a multiline string and add a $message where you want your message to appear.

template = """My awesome header

$message

#python #coding #coo
"""

The Twitter API

Coo is written using the Python Twitter wrapper, and through Coo.api you gain access to all of his models:

# get your followers
followers = at.api.GetFollowers()

# get your direct messages
d_messages = at.api.GetDirectMessages()

# favorited tweets
favorites = at.api.GetFavorites()

# mentions
mentions = at.api.GetMentions()

# retweets
retweets = at.api.GetRetweets()

And a lot more. If you are interested, check their documentation.

TODO's

  • Add support for random updates.
  • Add support for media files.
  • Add support for multiple media files.
  • Add support for a history of tweets.
  • Add support for media files from URLs.
  • Add support for one template for all updates on Coo.schedule.
  • Support .toml files for configuration and tweets.
  • Support resume after a process restart (see apscheduler).
  • Add a CLI.

Documentation

Documentation available at coo.readthedocs.io.

You might also like...
Policy and data administration, distribution, and real-time updates on top of Open Policy Agent
Policy and data administration, distribution, and real-time updates on top of Open Policy Agent

⚡ OPAL ⚡ Open Policy Administration Layer OPAL is an administration layer for Open Policy Agent (OPA), detecting changes to both policy and policy dat

An App to get Ko-Fi payment updates on Telegram.
An App to get Ko-Fi payment updates on Telegram.

Deployments. Heroku.com 🚀 Replit.com 🌀 Make sure your app runs 24*7 Zeet.co 💪 Use this :~ Get Bot token from @botfather 🤖 Get ID where you want to

This is a simple bot that can be used to upload images to a third-party cloud (image hosting). Currently, only the imgbb.com website supports the bot. I Will do future updates

TGImageHosting This is a simple bot that can be used to upload images to a third party cloud (image hosting). Currently, only the imgbb.com website su

Send GitHub Issues, PRs or Discussions Updates to Wechat
Send GitHub Issues, PRs or Discussions Updates to Wechat

Send GitHub Issues, PRs or Discussions Updates to Wechat

Live Weather Updates using Flask and OpenWeather

AuraX Live Weather Updates using Flask and OpenWeather Installation To setup this project on your local machine, first clone this repository and insta

A bot that updates about the most subscribed artist' channels on YouTube
A bot that updates about the most subscribed artist' channels on YouTube

A bot that updates about the most subscribed artist' channels on YouTube. A weekly top chart report is provided every Monday. It posts updates on Twitter

Battle.net and PlayStation title watcher that reports updates via Discord.
Battle.net and PlayStation title watcher that reports updates via Discord.

Renovate Renovate is a Battle.net and PlayStation title watcher that reports updates via Discord. Usage Open config_example.json and provide the confi

 A bot to view Garfield comics directly from Discord and get updates of the comics automatically
A bot to view Garfield comics directly from Discord and get updates of the comics automatically

Garfield-Bot A bot to view Garfield comics directly from Discord and get updates of the comics automatically. Instructions to use the bot: Invite the

Program that uses Python to monitor grade updates in the Genesis Platform

Genesis-Grade-Monitor Program that uses Python to monitor grade updates in the Genesis Platform Guide: Install by either cloning the repo or downloadi

Comments
  • Preventing Runtime Error caused by

    Preventing Runtime Error caused by "Event loop is closed"

    This PR aims to improve test reliability by initializing coo_preview_instance.loop before executing asyncio.run_until_complete by calling method asyncio.new_event_loop in order to prevent Runtime Error caused by "Event loop is closed".

    The test can fail in the following way if coo_preview_instance.loop is not initialized:

    >       coo_preview_instance.schedule(updates, time_zone="Canada/Yukon", media="../coo.png")
    
    tests/test_coo.py:149: 
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    coo/coo.py:228: in schedule
        self.loop.run_until_complete(self._async_tasks(updates))
    /usr/lib/python3.8/asyncio/base_events.py:591: in run_until_complete
        self._check_closed()
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    
    self = <_UnixSelectorEventLoop running=False closed=True debug=False>
    
        def _check_closed(self):
            if self._closed:
    >           raise RuntimeError('Event loop is closed')
    E           RuntimeError: Event loop is closed
    
    opened by sturmianseq 0
Releases(0.1.3)
  • 0.1.3(Dec 13, 2018)

    Added

    • Added support to post updates randomly on Coo.tweet(aleartory=True).
    • Added support for updates with a single media file for all tweets on Coo.tweet().
    • Added support for updates with a single media file for all tweets on Coo.schedule().
    • Added support for updates with a different media file for each tweet on Coo.schedule().
    Source code(tar.gz)
    Source code(zip)
  • 0.1.2(Nov 29, 2018)

    Added

    • Added changes to CHANGELOG.md.
    • Added changes to the documentation.
    • Added releases.

    Fixed

    • Fixed template overwriting the tweets when $message is not provided.
    • Fixed lots of typos.
    Source code(tar.gz)
    Source code(zip)
  • 0.1.1(Nov 29, 2018)

Images to PDF Telegram Bot

ilovepdf Convert Images to PDF Bot This bot will helps you to create pdf's from your images [without leaving telegram] 😉 By Default: your pdf fil

✰Naͥbiͣlͫ A Navab✰ 116 Dec 29, 2022
Debugging with Stack Overflow: Web Search Behavior in Novice and Expert Programmers

Debugging with Stack Overflow: ICSE SEET, 2022 This is the GitHub repository associated with the 2022 ICSE SEET paper, Debugging with Stack Overflow:

Madeline Endres 1 Jan 31, 2022
Library written in Python that wraps Halo Infinite API.

haloinfinite Library written in Python that wraps Halo Infinite API. Before start It's unofficial, reverse-engineered, neither stable nor production r

Miguel Ferrer 4 Dec 28, 2022
Telegram Voice Chat Music Player UserBot Written with Pyrogram Smart Plugin and tgcalls

Telegram Voice Chat UserBot A Telegram UserBot to Play Audio in Voice Chats. This is also the source code of the userbot which is being used for playi

Dash Eclipse 7 May 21, 2022
ResolveURL - Fork of UrlResolver by eldorados, tknorris and jsergio123

ResolveURL Fork of UrlResolver by eldorados, tknorris and jsergio123 I am in no

gujal 60 Jan 03, 2023
Filters to block and remove copycat-websites from DuckDuckGo and Google. Specific to dev websites like StackOverflow or GitHub.

uBlock-Origin-dev-filter Filters to block and remove copycat-websites from DuckDuckGo and Google. Specific to dev websites like StackOverflow or GitHu

1.7k Dec 30, 2022
A Telegram bot that searches for the original source of anime, manga, and art

A Telegram bot that searches for the original source of anime, manga, and art How to use the bot Just send a screenshot of the anime, manga or art or

Kira Kormak 9 Dec 28, 2022
Мои личные наработки по новому API Тинькофф. Не официально.

TinkoffNewAPI Мои личные наработки по новому API Тинькофф. Не официально. Официально по ссылке: https://github.com/Tinkoff/investAPI/ Выложено по прос

1 Jan 20, 2022
LimitatiBot - A simple telegram bot to establish a conversation with a user without having to use private chats

🤖 LimitatiBot [0.2] LimitatiBot is a simple telegram bot to establish a convers

xMrPente 9 Dec 27, 2022
An async python wrapper to interact with the Steam API and its CMs

steam.py A modern, easy to use, and async ready package to interact with the Steam API. Heavily inspired by discord.py and borrowing functionality fro

James Hilton-Balfe 90 Dec 15, 2022
Easily report Instagram pages and close the page

Program Features - 📌 Delete target post on Instagram. - 📌 Delete Media Target post on Instagram - 📌 Complete deletion of the target account on Inst

hack4lx 11 Nov 25, 2022
A python based all-in-one tool for Google Drive

gdrive-tools A python based all-in-one tool for Google Drive Uses For Gdrive-Tools ✓ generate SA ✓ Add the SA and Add them to TD automatically ✓ Gener

XcodersHub 32 Feb 09, 2022
A telegram bot for generate fake details. Written in python using telethon

FakeDataGenerator A telegram bot for generate fake details. Written in python using telethon. Mandatory variables API_HASH Get it from my telegram.org

Oxidised-Man 6 Dec 19, 2021
Get an SNS alert for High Severity GuardDuty findings

Automation AWS-GuardDuty findings Get an SNS alert for High Severity GuardDuty findings Problem: Getting notified when there is Red finding in AWS Gua

Giten Mitra 4 Nov 18, 2022
⚡ Simple mass dm selfbot for Discord written in python3.

Zapp Simple mass dm selfbot for Discord written in python3. Warning. This project was made for educational purposes only! I take no responsibility for

Ѵιcнч 34 Nov 01, 2022
An integrated information collection tool

infoscaner 环境配置 目前infoscaner仅支持在linux上运行,建议运行在最新版本的kali中 infoscaner是基于python3版本实现的,运行之前首先安装python库 如果同时存在python2和python3,请输入以下命令 pip3 install -r requi

CMACCKK 74 Sep 13, 2021
Discord Voice Call DoS

VC DoS Simple, effective Discord DM/GC voice call Denial of Service. How to Use & FAQ 1. Download the script (obviously). 2. In CMD prompt, find the l

Roover 4 Feb 28, 2022
A visualization of people a user follows on Twitter

Twitter-Map This software allows the user to create maps of Twitter accounts. Installation git clone Oliver Greenwood 12 Jul 20, 2022

A python based Telegram Bot for Compressing Videos with negligible Quality change

𝕍𝕚𝕕𝕖𝕠 ℂ𝕆𝕄ℙℝ𝔼𝕊𝕊𝕆ℝ 𝔹𝕆𝕋 ᴍᴜʟᴛɪғᴜɴᴄᴛɪᴏɴ ǫᴜᴀʟɪᴛʏ ᴄᴏᴍᴘʀᴇssᴏʀ A Telegram Video CompressorBot it compress videos with negligible Quality change.

Danish 154 Dec 04, 2022
The official source code for Ghost Discord selfbot.

👻 Ghost Selfbot The official code for Ghost which was recently discontinued and released to the public. Feel free to use any of the code found in thi

Ghost 121 Nov 09, 2022