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 similarly)
# 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)
Owner
Python Twitter Tools (PTT) includes a Twitter API, command-line tool, and IRC bot.
go-cqhttp API typing annoations, return data models and utils for nonebot

go-cqhttp API typing annoations, return data models and utils for nonebot

风屿 6 Jan 04, 2023
IdeasBot - Funny telegram bot to generate ideas for a project

Repository of PIdeas_bot About Funny telegram bot for generating projects ideas.

Just Koala 5 Oct 16, 2022
just a program i made cuz a friend got tokenlogged and spammed me with these scam/phishing links so i made a programm to spam these websides with fake logins

scam-webside-spammer just a program i made cuz a friend got tokenlogged and spammed me with these scam/phishing links so i made a programm to spam the

TerrificTable 3 Sep 23, 2022
Python Business Transactions Library - ContractsPY

Python Business Transactions Library - ContractsPY Declare and define business transactions in Python. Use the contracts library to validate business

Arzu Huseynov 7 Jun 21, 2022
A stable and Fast telegram video convertor bot which can compress, convert(video into audio and other video formats), rename with permanent thumbnail and trim.

ᴠɪᴅᴇᴏ ᴄᴏɴᴠᴇʀᴛᴏʀ A stable and Fast telegram video convertor bot which can compress, convert(video into audio and other video formats), rename and trim.

Mahesh Chauhan 183 Jan 04, 2023
A Python SDK for connecting devices to Microsoft Azure IoT services

V2 - We are now GA! This repository contains code for the Azure IoT SDKs for Python. This enables python developers to easily create IoT device soluti

Microsoft Azure 381 Dec 30, 2022
Python module and command line script client for http://urbandictionary.com

py-urbandict py-urbandict is a client for urbandictionary.com. Project page on github: https://github.com/novel/py-urbandict PyPI: https://pypi.org/pr

Roman Bogorodskiy 32 Oct 01, 2022
EthSema - Binary translator for Ethereum 2.0

EthSema is a novel EVM-to-eWASM bytecode translator that can not only ensure the fidelity of translation but also fix commonly-seen vulnerabilities in smart contracts.

weimin 8 Mar 01, 2022
A Discord/Xenforo bot!

telathbot A Discord/Xenforo bot! Pre-requisites pyenv (via installer) poetry Docker (with Go version of docker compose enabled) Local development Crea

Telath 4 Mar 09, 2022
Powerful and Async API for AnimeWorld.tv 🚀

Powerful and Async API for AnimeWorld.tv 🚀

1 Nov 13, 2021
A simple discord bot that generates facts!

fact-bot A simple discord bot that generates facts! How to make a bot Go to https://discord.com/developers/applications Then click on 'New Application

1 Jan 05, 2022
arweave-nft-uploader is a Python tool to improve the experience of uploading NFTs to the Arweave storage for use with the Metaplex Candy Machine.

arweave-nft-uploader arweave-nft-uploader is a Python tool to improve the experience of uploading NFTs to the Arweave storage for use with the Metaple

0xEnrico 84 Dec 26, 2022
Tickergram is a Telegram bot to look up quotes, charts, general market sentiment and more.

Tickergram is a Telegram bot to look up quotes, charts, general market sentiment and more.

Alberto Ortega 25 Nov 26, 2022
A Python script that wraps the gitleaks tool to enable scanning of multiple repositories in parallel

mpgitleaks A Python script that wraps the gitleaks tool to enable scanning of multiple repositories in parallel. The motivation behind writing this sc

Emilio Reyes 7 Dec 29, 2022
This project checks the weather in the next 12 hours and sends an SMS to your phone number if it's going to rain to remind you to take your umbrella.

RainAlert-Request-Twilio This project checks the weather in the next 12 hours and sends an SMS to your phone number if it's going to rain to remind yo

9 Apr 15, 2022
Braintree Python library

Braintree Python library The Braintree Python library provides integration access to the Braintree Gateway. TLS 1.2 required The Payment Card Industry

Braintree 230 Dec 18, 2022
Marketplace for self published books

Nile API API for the imaginary Nile marketplace for self published books. This is a project created to try out FastAPI as the post promising ASGI serv

Matt de Young 1 Jan 31, 2022
RP2 is a privacy-focused, free, open-source US cryptocurrency tax calculator

Privacy-focused, free, open-source cryptocurrency US tax calculator, up to date for 2021: it handles multiple coins/exchanges and computes long/short-term capital gains, cost bases, in/out lot relati

eprbell 123 Jan 04, 2023
A full-featured Python wrapper for the Onfleet API.

UPDATE: Please use Onfleet's wrapper instead. This repository is not maintained. https://github.com/onfleet/pyonfleet --- Python-Onfleet   python-onfl

Lionheart Software 11 Jan 13, 2022
Your custom slash commands Discord bot!

Slashy - Your custom slash-commands bot Hey, I'm Slashy - your friendly neighborhood custom-command bot! The code for this bot exists because I'm like

Omar Zunic 8 Dec 20, 2022