Python Twitter API

Overview

Python Twitter Tools

Tests Coverage Status

The Minimalist Twitter API for Python is a Python API for Twitter, everyone's favorite Web 2.0 Facebook-style status updater for people on the go.

Also included is a Twitter command-line tool for getting your friends' tweets and setting your own tweet from the safety and security of your favorite shell and an IRC bot that can announce Twitter updates to an IRC channel.

For more information:

  • install the package pip install twitter
  • import the twitter package and run help() on it
  • run twitter -h for command-line tool help

twitter - The Command-Line Tool

The command-line tool lets you do some awesome things:

  • view your tweets, recent replies, and tweets in lists
  • view the public timeline
  • follow and unfollow (leave) friends
  • various output formats for tweet information

The bottom line: type twitter, receive tweets.

twitterbot - The IRC Bot

The IRC bot is associated with a Twitter account (either your own account or an account you create for the bot). The bot announces all tweets from friends it is following. It can be made to follow or leave friends through IRC /msg commands.

twitter-log

twitter-log is a simple command-line tool that dumps all public tweets from a given user in a simple text format. It is useful to get a complete offsite backup of all your tweets. Run twitter-log and read the instructions.

twitter-archiver and twitter-follow

twitter-archiver will log all the tweets posted by any user since they started posting. twitter-follow will print a list of all of all the followers of a user (or all the users that user follows).

Programming with the Twitter API classes

The Twitter and TwitterStream classes are the key to building your own Twitter-enabled applications.

The Twitter class

The minimalist yet fully featured Twitter API class.

Get RESTful data by accessing members of this class. The result is decoded python objects (lists and dicts).

The Twitter API is documented at:

https://developer.twitter.com/en/docs

The list of most accessible functions is listed at:

https://developer.twitter.com/en/docs/api-reference-index

Examples:

from twitter import *

t = Twitter(
    auth=OAuth(token, token_secret, consumer_key, consumer_secret))

# Get your "home" timeline
t.statuses.home_timeline()

# Get a particular friend's timeline
t.statuses.user_timeline(screen_name="boogheta")

# to pass in GET/POST parameters, such as `count`
t.statuses.home_timeline(count=5)

# to pass in the GET/POST parameter `id` you need to use `_id`
t.statuses.show(_id=1234567890)

# Update your status
t.statuses.update(
    status="Using @boogheta's sweet Python Twitter Tools.")

# Send a direct message
t.direct_messages.events.new(
    _json={
        "event": {
            "type": "message_create",
            "message_create": {
                "target": {
                    "recipient_id": t.users.show(screen_name="boogheta")["id"]},
                "message_data": {
                    "text": "I think yer swell!"}}}})

# Get the members of maxmunnecke's list "network analysis tools" (grab the list_id within the url) https://twitter.com/i/lists/1130857490764091392
t.lists.members(owner_screen_name="maxmunnecke", list_id="1130857490764091392")

# Favorite/like a status
status = t.statuses.home_timeline()[0]
if not status['favorited']:
    t.favorites.create(_id=status['id'])

# An *optional* `_timeout` parameter can also be used for API
# calls which take much more time than normal or twitter stops
# responding for some reason:
t.users.lookup(
    screen_name=','.join(A_LIST_OF_100_SCREEN_NAMES), _timeout=1)

# Overriding Method: GET/POST
# you should not need to use this method as this library properly
# detects whether GET or POST should be used, Nevertheless
# to force a particular method, use `_method`
t.statuses.oembed(_id=1234567890, _method='GET')

# Send images along with your tweets:
# - first just read images from the web or from files the regular way:
with open("example.png", "rb") as imagefile:
    imagedata = imagefile.read()
# - then upload medias one by one on Twitter's dedicated server
#   and collect each one's id:
t_upload = Twitter(domain='upload.twitter.com',
    auth=OAuth(token, token_secret, consumer_key, consumer_secret))
id_img1 = t_upload.media.upload(media=imagedata)["media_id_string"]
id_img2 = t_upload.media.upload(media=imagedata)["media_id_string"]
# - finally send your tweet with the list of media ids:
t.statuses.update(status="PTT ★", media_ids=",".join([id_img1, id_img2]))

# Or send a tweet with an image (or set a logo/banner similarily)
# using the old deprecated method that will probably disappear some day
params = {"media[]": imagedata, "status": "PTT ★"}
# Or for an image encoded as base64:
params = {"media[]": base64_image, "status": "PTT ★", "_base64": True}
t.statuses.update_with_media(**params)

# Attach text metadata to medias sent, using the upload.twitter.com route
# using the _json workaround to send json arguments as POST body
# (warning: to be done before attaching the media to a tweet)
t_upload.media.metadata.create(_json={
  "media_id": id_img1,
  "alt_text": { "text": "metadata generated via PTT!" }
})
# or with the shortcut arguments ("alt_text" and "text" work):
t_upload.media.metadata.create(media_id=id_img1, text="metadata generated via PTT!")

Searching Twitter:

# Search for the latest tweets about #pycon
t.search.tweets(q="#pycon")

# Search for the latest tweets about #pycon, using [extended mode](https://developer.twitter.com/en/docs/tweets/tweet-updates)
t.search.tweets(q="#pycon", tweet_mode='extended')

Retrying after reaching the API rate limit

Simply create the Twitter instance with the argument retry=True, then the HTTP error codes 429, 502, 503, and 504 will cause a retry of the last request.

If retry is an integer, it defines the maximum number of retry attempts.

Using the data returned

Twitter API calls return decoded JSON. This is converted into a bunch of Python lists, dicts, ints, and strings. For example:

x = twitter.statuses.home_timeline()

# The first 'tweet' in the timeline
x[0]

# The screen name of the user who wrote the first 'tweet'
x[0]['user']['screen_name']

Getting raw XML data

If you prefer to get your Twitter data in XML format, pass format="xml" to the Twitter object when you instantiate it:

twitter = Twitter(format="xml")

The output will not be parsed in any way. It will be a raw string of XML.

The TwitterStream class

The TwitterStream object is an interface to the Twitter Stream API. This can be used pretty much the same as the Twitter class, except the result of calling a method will be an iterator that yields objects decoded from the stream. For example::

twitter_stream = TwitterStream(auth=OAuth(...))
iterator = twitter_stream.statuses.sample()

for tweet in iterator:
    ...do something with this tweet...

Per default the TwitterStream object uses public streams. If you want to use one of the other streaming APIs, specify the URL manually.

The iterator will yield until the TCP connection breaks. When the connection breaks, the iterator yields {'hangup': True} (and raises StopIteration if iterated again).

Similarly, if the stream does not produce heartbeats for more than 90 seconds, the iterator yields {'hangup': True, 'heartbeat_timeout': True} (and raises StopIteration if iterated again).

The timeout parameter controls the maximum time between yields. If it is nonzero, then the iterator will yield either stream data or {'timeout': True} within the timeout period. This is useful if you want your program to do other stuff in between waiting for tweets.

The block parameter sets the stream to be fully non-blocking. In this mode, the iterator always yields immediately. It returns stream data, or None.

Note that timeout supercedes this argument, so it should also be set None to use this mode, and non-blocking can potentially lead to 100% CPU usage.

Twitter Response Objects

Response from a Twitter request. Behaves like a list or a string (depending on requested format), but it has a few other interesting attributes.

headers gives you access to the response headers as an httplib.HTTPHeaders instance. Use response.headers.get('h') to retrieve a header.

Authentication

You can authenticate with Twitter in three ways: NoAuth, OAuth, or OAuth2 (app-only). Get help() on these classes to learn how to use them.

OAuth and OAuth2 are probably the most useful.

Working with OAuth

Visit the Twitter developer page and create a new application:

https://dev.twitter.com/apps/new

This will get you a CONSUMER_KEY and CONSUMER_SECRET.

When users run your application they have to authenticate your app with their Twitter account. A few HTTP calls to Twitter are required to do this. Please see the twitter.oauth_dance module to see how this is done. If you are making a command-line app, you can use the oauth_dance() function directly.

Performing the "oauth dance" gets you an oauth token and oauth secret that authenticate the user with Twitter. You should save these for later, so that the user doesn't have to do the oauth dance again.

read_token_file and write_token_file are utility methods to read and write OAuth token and secret key values. The values are stored as strings in the file. Not terribly exciting.

Finally, you can use the OAuth authenticator to connect to Twitter. In code it all goes like this:

from twitter import *

MY_TWITTER_CREDS = os.path.expanduser('~/.my_app_credentials')
if not os.path.exists(MY_TWITTER_CREDS):
    oauth_dance("My App Name", CONSUMER_KEY, CONSUMER_SECRET,
                MY_TWITTER_CREDS)

oauth_token, oauth_secret = read_token_file(MY_TWITTER_CREDS)

twitter = Twitter(auth=OAuth(
    oauth_token, oauth_secret, CONSUMER_KEY, CONSUMER_SECRET))

# Now work with Twitter
twitter.statuses.update(status='Hello, world!')

Working with OAuth2

Twitter only supports the application-only flow of OAuth2 for certain API endpoints. This OAuth2 authenticator only supports the application-only flow right now.

To authenticate with OAuth2, visit the Twitter developer page and create a new application:

https://dev.twitter.com/apps/new

This will get you a CONSUMER_KEY and CONSUMER_SECRET.

Exchange your CONSUMER_KEY and CONSUMER_SECRET for a bearer token using the oauth2_dance function.

Finally, you can use the OAuth2 authenticator and your bearer token to connect to Twitter. In code it goes like this::

twitter = Twitter(auth=OAuth2(bearer_token=BEARER_TOKEN))

# Now work with Twitter
twitter.search.tweets(q='keyword')

License

Python Twitter Tools are released under an MIT License.

Comments
  • TwitterStream.user() fails on production server, works in local development environment

    TwitterStream.user() fails on production server, works in local development environment

    OK, this is a hard one.... when I've gotten this error before, it typically meant I lost the connection to twitter, and a quick restart fixes everything, but not anymore...

    Here is the stack trace:

    auth = twitter.Oauth( ... keys )

    Code:

    from twitter import * stream = twitter.stream.TwitterStream(auth=auth, domain='userstream.twitter.com') stream.user()

    Trace:

    Traceback (most recent call last): File "", line 1, in File "/usr/local/lib/python2.7/dist-packages/twitter/api.py", line 308, in call return self._handle_response(req, uri, arg_data, _timeout) File "/usr/local/lib/python2.7/dist-packages/twitter/stream.py", line 284, in _handle_response _timeout or timeout, heartbeat_timeout) File "/usr/local/lib/python2.7/dist-packages/twitter/stream.py", line 209, in handle_stream_response raise TwitterHTTPError(e, uri, 'json', arg_data) File "/usr/local/lib/python2.7/dist-packages/twitter/api.py", line 72, in init data = json.loads(data.decode('utf8')) File "/usr/lib/python2.7/json/init.py", line 338, in loads return _default_decoder.decode(s) File "/usr/lib/python2.7/json/decoder.py", line 366, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "/usr/lib/python2.7/json/decoder.py", line 384, in raw_decode raise ValueError("No JSON object could be decoded") ValueError: No JSON object could be decoded

    =========

    This code is from my program, which works just FINE in my local development environment.

    Local Dev =

    Ubuntu 14 Python 2.7 WingIDE VirtualEnvirnment with depenedencies installed.

    However, on my server, hosted on EC2 it fails:

    Ubuntu 14 Python 2.7 Virtual Environment Run from command line with python manage.py shell , then load program with execfile('mybot.py')

    The same code has been working, but stopped suddenly with the above JSON error.

    If I run the same code in DEV on my local system, it works, however running on production server, it fails.

    If compared the environments between both systems, and they SEEM to be the same...

    On the production server I CAN do OTHER streaming functionality like SENDING DM's to my twitter account.... So SENDING works, but listening with stream.user() FAILS with this JSON error.

    I would appreciate ANY suggestions. :)

    Thank you,

    PS: Love this tool, I think it's better than the other Python Twitter options out there.

    opened by lmaloney 23
  • Fix broken userstream and all other streams supposed to break after Jan 13 + add image support + fix diverses issues

    Fix broken userstream and all other streams supposed to break after Jan 13 + add image support + fix diverses issues

    Merry Christmas!... Twitter is moving all of its streaming APIs towards HTTP1.1 chunked encoded transfer and breaking the whole lib for us! https://dev.twitter.com/blog/deprecating-http-1.0-streaming-api

    Userstream passed already mid-november and has been broken since, cf #190 I first didn't pay much more attention to it than reading the issue thread since I only use the public statuses.filter stream. But I just found out about this announce and browsing issues it became clear the userstream issue here was coming from this change, which did happen on November 23rd in fact (https://dev.twitter.com/discussions/23224#comment-53758) just as the issues reported here confirm.

    The thing is the announce also says that on January 13, Twitter will apply it as well for all the other streaming calls, meaning they probably will all be broken as well. So this motivated me to fix the issue for userstream and supposedly for the other ones further on.

    The solution was to stop asking for gzip encoded data for streaming calls since they already answer not zipped with the HTTP1.0 calls (like statuses/filter for now) and should not be zipped when dealing with chunked transfer. This also required to adjust the parsing of the chunks to separate "delimited" length sent by twitter from actual data.

    I've tried it out successfully on a combination of calls on (public stream HTTP1.0 | user stream HTTP1.1chunked) x (not blocking | blocking | with timeout) x (low traffic | high traffic | high traffic with argument 'delimited') with python 2.6 & 2.7 only. I don't believe I've modified anything incompatible but any tryout from py3 users would be great.

    I also took the occasion to fix a couple other issues, including fixing some hanging when using the timeout with low traffic, providing TwitterHTTPErrors on streaming calls errors, fixing the broken follow create/destroy with cmdline and the irc bot, and completing the POST methods list.

    Considering the urge, I will personnally migrate my IRC bot gazouilleur to my branch until this is pulled or handled otherwise.

    git+https://github.com/RouxRC/[email protected]

    Happy tweeting holidays!

    PS: Twitter also announced an SSL change for Jan 6, but since all the calls are already using secure by default, we should't be at risk here.

    edit 28/12: I've completed this with fixing the tilde sending issue for python 2, and I added the support for API calls to send images as discussed in #127 , it now works when feeding the corresponding argument with raw read of a file. For instance:

    twitter.update_with_media(status="Youpi !", 'media[]' = open('img.jpg', 'rb').read())
    opened by RouxRC 21
  • Twitter Stream API + OAuth not working

    Twitter Stream API + OAuth not working

    I've used the code some months ago, with the streaming API and the OAuth method and it worked.

    Today I tried again and I'm getting a

    HTTP Error 401: Unauthorized
    

    passing through

     stream.py", line 52, in handle_stream_response
    

    and originating in

     urllib2.py, line 521, in http_error_default
    

    The same OAuth works fine with other methods: I tried both statuses.home_timeline() and direct_messages.new()

    opened by kuzeko 18
  • Twitter changed Trends API (again) so trends() no longer works

    Twitter changed Trends API (again) so trends() no longer works

    See https://dev.twitter.com/blog/changing-trends-api for an overview of the new API that is no longer compatible with this Python package (AFAICT.)

    In short, the previous Twitter(...).trends() approach no longer works, and a call of the form http://api.twitter.com/1/trends/1.json doesn't seem to be compatible with the design philosophy that's worked so well up till this point. We've previously brainstormed some ideas in https://github.com/sixohsix/twitter/issues/24 that might be worth revisiting here considering that there does seem to be a gravitation towards this particular scheme of encoding parameters as part of the URL itself.

    I'm happy to help work out a patch if we can come to agreement on what should be done here. As it stands, some new errata has been introduced into my book/code for Mining the Social Web, which uses this package extensively, so I'd like to help push though something quickly. Thanks.

    opened by ptwobrussell 17
  • Autodeploy to PyPI

    Autodeploy to PyPI

    As suggested in https://github.com/sixohsix/twitter/issues/356, I'll set up automated deploys:

    • Deploy to TestPyPI on merge to master, to make sure the release mechanism is working smoothly and avoid surprises on release day
    • Deploy to production PyPI for GitHub releases/tags

    I've set up a test twitter project on TestPyPI.

    @RouxRC If you create an account on https://test.pypi.org, I'll give you access too.

    Then, to use https://github.com/pypa/gh-action-pypi-publish, we then need to create API tokens for TestPyPI and PyPI and store them as secrets under https://github.com/sixohsix/twitter/settings.

    TODO:

    1. Add an API token called (say) twitter-ci at https://test.pypi.org/manage/account/token/
    2. Paste the token as TEST_PYPI_PASSWORD at https://github.com/sixohsix/twitter/settings/secrets/actions/new
    3. Repeat for production PyPI https://pypi.org/manage/account/token/, save as PYPI_PASSWORD

    More info on PyPI API tokens: https://pypi.org/help/#apitoken

    I don't have access to https://github.com/sixohsix/twitter/settings. @RouxRC Please could you either give me access to that, or please could you follow the instructions above to add the tokens?

    opened by hugovk 16
  • Fix streams timeout & hangup behavior + ensure python2.6 compat

    Fix streams timeout & hangup behavior + ensure python2.6 compat

    Here are the changes to fix the misbehavior of the timeout in case of low tweets by catching Twitter's keep-alive heartbeat signals thanks to the select.select originally added in #178 and still problematic as pointed out by @ksecrist in #202

    I also generalized the hangup to all cases since there is no reason to stay in infinite loop after a hangup in non-blocking mode.

    And to make things easier and avoid merging issues, I adapted the refacto and fixed python2.6 compatibility from @adonoho's #201

    opened by RouxRC 16
  • Test on GitHub Actions

    Test on GitHub Actions

    This tests with the same as Travis CI, and I replaced nightly with 3.10-dev, the nearest equivalent.

    Example: https://github.com/hugovk/twitter/actions/runs/360319693

    They fail for me because:

    details: {u'errors': [{u'message': u'User is over daily status update limit.', u'code': 185}]}
    

    Will try again tomorrow.

    opened by hugovk 15
  • A Simpler Fix to the Streaming Code due to Changes from Twitter on Jan. 13, 2014.

    A Simpler Fix to the Streaming Code due to Changes from Twitter on Jan. 13, 2014.

    Gentlefolk,

    First allow me to applaud and thank RouxRC on his fine work pushing this little library forward. This pull request would not have been possible without his efforts. That said, RouxRC has dropped a quite large pull request that had problems in my Python3 system. When I rolled back to Python2, the system started working but would not stay connected for very long.

    As a result of the above, I felt I needed to look into RouxRC's pull request in more detail and use just the parts I needed to get my streams running again. Any errors in this pull request are mine and do not reflect negatively on RouxRC or his code.

    RouxRC's streaming patch falls into two main areas. First, it modifies the api.py to respect a new property, gzip. I have largely copied his work here. I did simplify how he set the headers from 3 lines to one. The second fix occurs in stream.py. Once the gzip compression was turned off, I was able to see what Twitter is now sending us. Even though length delimiters are turned off, Twitter nonetheless is inserting a hex encoded number and a \r\n between JSON items. RouxRC and I differ in how we chose to address these changes. My fix is focussed upon handling those extra items if they appear in the stream, removing them and then returning to the existing control flow. The important code block is below and my changes occur with the if statement:

        while True:
            try:
                utf8_buf = self.buf.decode('utf8').lstrip()
                if utf8_buf and utf8_buf[0] != '{':  # Remove the hex delimiter length and extra whitespace.
                    utf8_buf = utf8_buf.lstrip('0123456789abcdefABCDEF')
                    utf8_buf = utf8_buf.lstrip()
                res, ptr = self.decoder.raw_decode(utf8_buf)
                self.buf = utf8_buf[ptr:].encode('utf8')
                yield wrap_response(res, self.handle.headers)
    

    RouxRC's code does this in a different way. I believe my solution is both shorter and more robust. But you, gentle reader, are the ultimate arbiter. RouxRC did identify in his code some opportunities to raise TwitterHTTPErrors. I've tried to duplicate those.

    I've run this set of fixes under Python 3.3.3 and Python 2.7.6 both on OS X 10.8.5 (Mountain Lion).

    In addition to the changes to the library, I modernized a test script, stream-example to take the OAuth parameters needed by modern Twitter. As I also use PyCharm, I've added .idea to the .gitignore file.

    Again, this simpler fix would not have been possible without the fine work of RouxRC. Thank you RouxRC.

    Anon, Andrew

    opened by adonoho 14
  • Userstream not working anymore.

    Userstream not working anymore.

    I'm having problems with user streams since a few days back. I can use the example in the README file and it seems to connect fine.

    But I don't get any messages what so ever.. And the stream connection seems to still be alive. I seems to be alive because even if I set the socket timeout to be about 1 min it never times out.

    It doesn't seem to raise any errors either so I don't really know what to do now.

    "Normal" streams IE just TwitterStream without specifying domain works so I have no Idea what the problem could be.

    opened by DarkDefender 14
  • Fix for broken PUT methods #414

    Fix for broken PUT methods #414

    Pass _method directly to urllib_request to enable PUT requests and also ensure consistency between signature and actual request,.

    Pass id parameter into auth.encode_params() for PUT requests, as required by two existing API methods using PUT.

    opened by snail-coupe 13
  • NameError: name 'Twitter' is not defined

    NameError: name 'Twitter' is not defined

    I'm using Python3.5 on ubuntu 16

    from twitter import *
    
    t = Twitter(auth=OAuth(access_token, access_secret, 
    	consumer_key, consumer_secret))
    print(t)
    

    when i run the code I get the error "NameError: name 'Twitter' is not defined"

    opened by prateekkrjain 13
  • Media uploading

    Media uploading

    I've been testing media uploading following the examples provided in the README. The method is based on creating a new instance of the Twitter class:

     t_upload = Twitter(domain='upload.twitter.com', auth=OAuth(token, token_secret, consumer_key, consumer_secret))
    

    And later using the old instance to add the uploaded media to a tweet:

      t.statuses.update(status="PTT ★", media_ids=",".join([id_img1, id_img2]))
    

    I've been testing a different approach, that could be like:

    1. Changing the domain in the instance of the Twitter class:

      t.domain = 'upload.twitter.com'

    2. Uploading the images with the original instance of the Twitter class (but with different domain).

    3. Changing the domain to the original one:

      t.domain = 'api.twitter.com'

    4. Publishing the tweet containing the images.

    I was wondering if this approach is ok (and, I believe, more simple than creating a secondary instance to upload images). If this is true, maybe it would be nice to modify de upload methods to change internally the domain and so on. Or, at least, maybe providing the adequate methods for changing the domains when needed.

    opened by fernand0 1
  • Test CI on Windows and macOS

    Test CI on Windows and macOS

    Follow on from https://github.com/python-twitter-tools/twitter/pull/451#issuecomment-1246747905.

    ~Drop support for Python 3.6, end-of-life on 2021-12-23.~ Moved to #454.

    On the CI, test Ubuntu with:

    • Python 2.7 (CPython and PyPy)
    • the lowest and highest 3.x versions
    • Any dev versions

    And also test Windows on 3.8 and macOS 3.9.

    opened by hugovk 4
  • twitter-archiver only works with recent tweets

    twitter-archiver only works with recent tweets

    hello, as said in the title i would like to archive all the tweets of an user even if they've been active for years and, then, have posted thousands of tweets. however, twitter-archiver allows me to collect only a couple of tweets throughout the current year - or sometimes end of last year.

    why is there a limit? and how can i bypass it, please?

    opened by msw9 1
  • twitter-archiver not working

    twitter-archiver not working

    i use this line of command (ms-dos) twitter-archiver <user> but here are the error messages that i get: Fail: Twitter sent status 400 for URL: 1.1/statuses/user_timeline.json using parameters (count=200&include_rts=1&screen_name=osezlefeminisme&tweet_mode=extended) details: {'errors': [{'code': 215, 'message': 'Bad Authentication data.'}]}

    CLI 
    opened by msw9 1
  • Roadmap Twitter v2

    Roadmap Twitter v2

    • [X] ensure code compatibility
    • [x] add helper class Twitter2
    • [x] add helper class TwitterStream2
    • [ ] update tests
    • [x] handle :id argument in middle of urls (i.e. /2/tweets/id/retweeted_by)
    • [x] better document middle arguments use and _id
    • [ ] complete internal help doc
    • [ ] improve expansions, fields arguments use
    • [ ] cleanup _json / params mess
    • [ ] Test all open v2 routes https://developer.twitter.com/en/docs/api-reference-index#Twitter
    • [ ] complete documentation
    • [ ] cleanup shell tools & irc bot ?

    example calls

    feature Documentation 
    opened by boogheta 2
Releases(twitter-1.19.6)
💰 Import your ING Germany bank statements via FinTS into YNAB.

Import your ING Germany bank statements via FinTS into YNAB. Setup Before setting this up, please register your FinTS product – it's free and takes on

Arne Bahlo 23 Jan 21, 2022
A simple and modular Discord bot with various functionalities.

All-In-Bot for Discord A simple and modular Discord bot with various functionalities. How to use the bot? Simple! Just invite the bot to your server u

Th3J0nny 3 Jan 29, 2022
A simple python bot that serves to send some notifications about GitHub events to Slack.

github alerts slack bot 🤖 What is it? 🔍 This is a simple bot that serves to send some notifications about GitHub events to Slack channels. These are

Jackson Alves 10 Dec 10, 2022
Bill is a bot capable to Chat with you, search everything on web to you, and send message to yours contacts for you.

Bill Bot The inteligent Bot Bill is a intelligent bot, it can chat, search and send messages to you. Chat with You Send messages on WhatsApp for you S

João Assalim 3 Sep 12, 2021
Kyura-Userbot: a modular Telegram userbot that runs in Python3 with a sqlalchemy database

Kyura-Userbot Telegram Kyura-Userbot adalah userbot Telegram modular yang berjal

Kyura 17 Oct 29, 2022
Modern Desktop Jellyfin Client written in Python and Vue for the UI [WIP]

JellyPlayer Modern Jellyfin Client Installation Install Requirements: Install Python 3 Install dependencies Install node deps for frontend, go to Jell

Prayag Prajapati 57 Dec 12, 2022
This Telegram bot allows you to create direct links with pre-filled text to WhatsApp Chats

WhatsApp API Bot Telegram bot to create direct links with pre-filled text for WhatsApp Chats You can check our bot here. The bot is based on the API p

RobotTrick • רובוטריק 17 Aug 20, 2022
自动每天给女友发邮件

github acitons 发邮件 python 脚本 每天 7点半左右给女朋友发送邮件 天气来自: http://www.tianqiapi.com/ 文字图片来源:http://wufazhuce.com/ 风景图:https://qqlykm.cn/api/fengjing 土味情话:htt

gogobody 7 May 12, 2022
An EmbedBuilder for Discord bots in Python.

An EmbedBuilder for Discord bots in Python. You need discord.py to use this module.

6 Jan 13, 2022
Herramienta para transferir eventos de Sucuri WAF hacia Azure Monitor Log Analytics.

Transfiere eventos de Sucuri hacia Azure LogAnalytics Script para transferir eventos del Sucuri Web Application Firewall (WAF) hacia Azure LogAnalytic

CSIRT-RD 1 Dec 22, 2021
A comand-line utility for taking automated screenshots of websites

shot-scraper A comand-line utility for taking automated screenshots of websites For background on this project see shot-scraper: automated screenshots

Simon Willison 837 Jan 07, 2023
ClassesMD5-64 - Get whatsapp md5 code using python

Hello Installation Clone Repo & install bash $ git clone https://github.com/Pito

PitoDev 1 Jan 03, 2022
A stock information collector and parser for Taiwan and US market. Automatically send LINE message if the pre-defined rules are triggered.

agastock 開發動機 就在海運飆漲的2021年7月,差點跪在地上喜迎財富自由的當下,EPS超高好消息不斷的長榮竟然套在202元一去不回,有圖有真相(哭) 忽然體會到追高殺低不是辦法,魯蛇我得靠邏輯分析也能出頭天,經過三個月無數個不出門的周末,產出簡單的爬蟲和分析工具。 上過金融研訓院的量化交易

Gavin Lee 12 Nov 16, 2022
A Telegram Bot with(Forwarder Bot + User Bot + More Features )

A Telegram Bot with(Forwarder Bot + User Bot + More Features )

Kaif 3 Feb 16, 2022
Offline reverse geocoder in Python using sqlite3

rgeocode Offline reverse geocoder rgeocode accepts a geographic coordinate pair (latitude and longitude) and returns a list containing the name of: A

Venkat 7 Dec 01, 2021
You can connect with Sanila Ranatunga using this bot😉😉

Sanila-Ranatunga-s-Assistant-Bot You can connect with Sanila Ranatunga using this bot 😉 😉 Reach me on Telegram Sanila's Assistant Bot What is Telegr

Sanila Ranatunga 5 Feb 01, 2022
A simple telegram bot that resolves video urls using yt-dlp

URL to Video Telegram Bot A simple telegram bot that resolves video urls using yt-dlp Copyright (C) 2021 Vítor Vasconcellos This program is free softw

Vítor 1 Nov 18, 2021
The most versatile torrent leecher and youtube-dl bot for telegram

TorToolkit Telegram So basically Tortoolkit is aimed to be the most versatile torrent leecher and youtube-dl bot for telegram. This bot is highly cust

αвιנтн 1 Nov 11, 2021
alpaca-trade-api-python is a python library for the Alpaca Commission Free Trading API.

alpaca-trade-api-python is a python library for the Alpaca Commission Free Trading API. It allows rapid trading algo development easily, with support for both REST and streaming data interfaces

Alpaca 1.5k Jan 09, 2023
A collective list of free APIs for use in software and web development.

Public APIs A collective list of free APIs for use in software and web development. A public API for this project can be found here! For information o

222.5k Jan 02, 2023