A lightweight Python wrapper for the IG Markets API

Overview
Latest Version Supported Python versions Wheel format License Development Status Downloads monthly Requirements Status Documentation Status Test Coverage

trading_ig

A lightweight Python wrapper for the IG Markets API. Simplifies access to the IG REST and Streaming APIs with a live or demo account.

What is it?

IG Markets provides financial spread betting and CFD platforms for trading equities, forex, commodities, indices, cryptocurrencies, bonds, rates, options and more.

IG provide APIs so that developers can access their platforms programmatically. Using the APIs you can get live and historical data, automate your trades, or create apps. For details about the IG APIs please see their site:

https://labs.ig.com/

NOTE: this is not an IG project. Use it at your own risk

Installation

From Python package index:

$ pip install trading_ig

with Poetry:

$ git clone https://github.com/ig-python/ig-markets-api-python-library
$ cd ig-markets-api-python-library
$ poetry install

or with optional packages:

$ poetry install --extras "pandas munch"

From source:

$ git clone https://github.com/ig-python/ig-markets-api-python-library
$ cd ig-markets-api-python-library
$ python setup.py install

or direct from Github:

$ pip install git+https://github.com/ig-python/ig-markets-api-python-library

Dependencies

For full details, see pyproject.toml

Docs

https://trading_ig.readthedocs.io/

License

BSD (See LICENSE)

Comments
  • Open and close position with API

    Open and close position with API

    'm trying using API and i want open a position.

    I'm following the Documentation and i'm in

    https://labs.ig.com/rest-trading-api-reference/service-detail?id=542

    I'm using POST request but i understand some params like:

    currencyCode,dealReferenc, expiry, level orderType,quoteID,timeInForce,trilingStop and trilingStopIncrement

    Yes, are practically all params. Can someone explain better me what do this params? Or can someone do a example request and them i try to understand all this.

    Thank you and sorry for my bad english

    opened by StebsV2 22
  • Market data not printed

    Market data not printed

    Hi, I tried the sample with my account, and the log has such error:

    TransientError: ERROR -1: Invalid account type

    I used my LIVE account, which works fine with REST api and minute data, but I want to have tick data with stream api. The account information is exactly the same.

    So, could anyone give me some hint?

    Thanks

    opened by ljcljc 22
  • Issue#82 Encrypt password during login.

    Issue#82 Encrypt password during login.

    The IG API in some countries require an encrypted password during login. Otherwise you'll get an error error.public-api.failure.encryption.required. We get the encryption key first, then create session with the encrypted password.

    Use the optional parameter encryption=True to enable this feature

    from trading_ig import IGService
    from trading_ig.config import config
    
    ig_service = IGService(config.username, config.password, config.api_key, config.acc_type)
    ig_service.create_session(encryption=True)
    
    opened by doggyeh 16
  • Lightstreamer stops after 2 hours

    Lightstreamer stops after 2 hours

    Hello everyone,

    Hope you're all ok in those tough times,

    I have an issue with the lightstreamer stream api : it works fine for about 2 hours and then stops. I have found online that it's a problem with the LOOP that "finishes its natural cycle" so I need to reconnect and subscribe to all the feeds that I had but I can't find a way to detect that "end of cycle".

    I tried to log something everytime I receive a loop message but I don't log anything.

    Please help! It drives me crazy! :)

    Thanks in advance, Sacha

    opened by sacharbit 13
  • sphinx is an unnecessary requirement

    sphinx is an unnecessary requirement

    Not sure when this happened, but suddenly sphinx is a requirement for this project. At least, when I run pip-compile --upgrade, I am seeing the following new requirements:

    snowballstemmer==2.1.0
        # via sphinx
    sphinx==4.2.0
        # via sphinx-rtd-theme
    sphinx-rtd-theme==0.5.2
        # via trading-ig
    sphinxcontrib-applehelp==1.0.2
        # via sphinx
    sphinxcontrib-devhelp==1.0.2
        # via sphinx
    sphinxcontrib-htmlhelp==2.0.0
        # via sphinx
    sphinxcontrib-jsmath==1.0.1
        # via sphinx
    sphinxcontrib-qthelp==1.0.3
        # via sphinx
    sphinxcontrib-serializinghtml==1.1.5
        # via sphinx
    

    I don't think sphinx should be necessary for running this library, and frankly is not a package I'm super happy to be adding as a requirement for my project.

    Is this perhaps a mistake on my end? I can't really see where the sphinx requirement is coming in, other than in https://github.com/ig-python/ig-markets-api-python-library/blob/master/pyproject.toml .

    opened by Doggie52 11
  • Error on LIVE, not on DEMO: KeyError: 'cst'

    Error on LIVE, not on DEMO: KeyError: 'cst'

    Dear @femtotrader, DEMO version is ok. When I change from DEMO to LIVE (username, password etc... are changed), I get the folloging error: KeyError: 'cst' (see below).

    Any help? Thank you in advance, Gilberto

    This is the error output:

    KeyError                                  Traceback (most recent call last)
    <ipython-input-10-de3f99b49acd> in <module>()
         74 
         75 if __name__ == '__main__':
    ---> 76     main()
    
    <ipython-input-10-de3f99b49acd> in main()
         34 
         35     ig_stream_service = IGStreamService(ig_service)
    ---> 36     ig_session = ig_stream_service.create_session()
         37     accountId = ig_session[u'accounts'][0][u'accountId']
         38     ig_stream_service.connect(accountId)
    
    /Users/gb/anaconda/lib/python3.5/site-packages/trading_ig/stream.py in create_session(self)
         19 
         20     def create_session(self):
    ---> 21         ig_session = self.ig_service.create_session()
         22         self.ig_session = ig_session
         23         return ig_session
    
    /Users/gb/anaconda/lib/python3.5/site-packages/trading_ig/rest.py in create_session(self, session)
        942         action = 'create'
        943         # this is the first create (BASIC_HEADERS)
    --> 944         response = self._req(action, endpoint, params, session)
        945         data = self.parse_response(response.text)
        946         self.ig_session = data # store IG session
    
    /Users/gb/anaconda/lib/python3.5/site-packages/trading_ig/rest.py in _req(self, action, endpoint, params, session)
        202         """Creates a CRUD request and returns response"""
        203         session = self._get_session(session)
    --> 204         response = self.crud_session.req(action, endpoint, params, session)
        205         return response
        206 
    
    /Users/gb/anaconda/lib/python3.5/site-packages/trading_ig/rest.py in req(self, action, endpoint, params, session)
        119             'delete': self.delete
        120         }
    --> 121         return d_actions[action](endpoint, params, session)
        122 
        123     def _set_headers(self, response_headers, update_cst):
    
    /Users/gb/anaconda/lib/python3.5/site-packages/trading_ig/rest.py in _create_first(self, endpoint, params, session)
         70                                 data=json.dumps(params),
         71                                 headers=self.HEADERS['BASIC'])
    ---> 72         self._set_headers(response.headers, True)
         73         self.create = self._create_logged_in
         74         return response
    
    /Users/gb/anaconda/lib/python3.5/site-packages/trading_ig/rest.py in _set_headers(self, response_headers, update_cst)
        124         """Sets headers"""
        125         if update_cst:
    --> 126             self.CLIENT_TOKEN = response_headers['CST']
        127 
        128         if 'X-SECURITY-TOKEN' in response_headers:
    
    /Users/gb/anaconda/lib/python3.5/site-packages/requests/structures.py in __getitem__(self, key)
         52 
         53     def __getitem__(self, key):
    ---> 54         return self._store[key.lower()][1]
         55 
         56     def __delitem__(self, key):
    
    KeyError: 'cst'
    

    This is the main code (modules and credentials account imports are omitted):

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    
    """
    IG Markets Stream API sample with Python
    2015 FemtoTrader
    """
    
    import time
    import sys
    import traceback
    import logging
    
    from trading_ig import (IGService, IGStreamService)
    #from trading_ig.config import config
    from trading_ig.lightstreamer import Subscription
    
    
    # A simple function acting as a Subscription listener
    def on_prices_update(item_update):
        # print("price: %s " % item_update)
        print("{stock_name:<19}: Time {UPDATE_TIME:<8} - "
              "Bid {BID:>5} - Ask {OFFER:>5}".format(stock_name=item_update["name"], **item_update["values"]))
    
    def on_account_update(balance_update):
        print("balance: %s " % balance_update)
    
    def main():
        logging.basicConfig(level=logging.INFO)
        # logging.basicConfig(level=logging.DEBUG)
    
        #ig_service = IGService(config.username, config.password, config.api_key, config.acc_type)
        ig_service = IGService(username, password, api_key, acc_type)
    
        ig_stream_service = IGStreamService(ig_service)
        ig_session = ig_stream_service.create_session()
        accountId = ig_session[u'accounts'][0][u'accountId']
        ig_stream_service.connect(accountId)
    
        # Making a new Subscription in MERGE mode
        subcription_prices = Subscription(
            mode="MERGE",
            items=['L1:CS.D.GBPUSD.CFD.IP', 'L1:CS.D.USDJPY.CFD.IP'],
            fields=["UPDATE_TIME", "BID", "OFFER", "CHANGE", "MARKET_STATE"],
            )
            #adapter="QUOTE_ADAPTER")
    
    
        # Adding the "on_price_update" function to Subscription
        subcription_prices.addlistener(on_prices_update)
    
        # Registering the Subscription
        sub_key_prices = ig_stream_service.ls_client.subscribe(subcription_prices)
    
    
        # Making an other Subscription in MERGE mode
        subscription_account = Subscription(
            mode="MERGE",
            items='ACCOUNT:'+accountId,
            fields=["AVAILABLE_CASH"],
            )
        #    #adapter="QUOTE_ADAPTER")
    
        # Adding the "on_balance_update" function to Subscription
        subscription_account.addlistener(on_account_update)
    
        # Registering the Subscription
        sub_key_account = ig_stream_service.ls_client.subscribe(subscription_account)
    
        input("{0:-^80}\n".format("HIT CR TO UNSUBSCRIBE AND DISCONNECT FROM \
        LIGHTSTREAMER"))
    
        # Disconnecting
        ig_stream_service.disconnect()
    
    if __name__ == '__main__':
        main()
    
    opened by alienoia 10
  • error.security.client-token-invalid in create_session()

    error.security.client-token-invalid in create_session()

    It happens after an application is idle for some time. Doing logout() does not help.

    Any ideas?

    See some logs below:
    create_session()
      File "/usr/lib/python3.6/site-packages/trading_ig/rest.py", line 1093, in create_session
        data = self.parse_response(response.text)
      File "/usr/lib/python3.6/site-packages/trading_ig/rest.py", line 236, in parse_response_with_exception
        raise(Exception(response['errorCode']))
    Exception: error.security.client-token-invalid
    
    opened by abialy 9
  • Replace bunch by munch

    Replace bunch by munch

    Use Munch instead of Bunch

    Bunch does not detect python version in python3_compat file. Bunch uses platform.version() instead of sys.version_info. As a result, the python version is set as 2 instead of 3 and generates the following error.

    Traceback (most recent call last):
      File "api_test.py", line 1, in <module>
        from trading_ig import IGService
      File ".../site-packages/trading_ig/__init__.py", line 17, in <module>
        from .rest import IGService
      File ".../site-packages/trading_ig/rest.py", line 15, in <module>
        from .utils import (_HAS_PANDAS, _HAS_BUNCH)
      File ".../site-packages/trading_ig/utils.py", line 21, in <module>
        from infi.bunch import bunchify
      File ".../site-packages/infi/bunch/__init__.py", line 31, in <module>
        from .python3_compat import *
      File ".../site-packages/infi/bunch/python3_compat.py", line 20, in <module>
        iteritems = dict.iteritems
    AttributeError: type object 'dict' has no attribute 'iteritems'
    
    opened by cimourdain 9
  •  [SSL: CERTIFICATE_VERIFY_FAILED]

    [SSL: CERTIFICATE_VERIFY_FAILED]

    Hi, i am testing stream_ig.py and I got this issue

    OError: [Errno socket error] [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)
    

    ideas?

    thanks

    opened by oliveriopt 9
  • Pandas object to_offset is unhashable

    Pandas object to_offset is unhashable

    https://github.com/ig-python/ig-markets-api-python-library/blob/b5799390752551f28038c258684259636ede8c8f/trading_ig/utils.py#L38

    TypeError: unhashable type: 'pandas._libs.tslibs.offsets.Minute'

    opened by Weizhang2017 8
  • I'm getting lightstreamer deamon not available, what should I do?

    I'm getting lightstreamer deamon not available, what should I do?

    Is there some package I need to install? This is the warning:

    WARNING:trading_ig.lightstreamer:systemd.daemon not available, no watchdog notifications will be sent.
    
    opened by jappeace 8
  • ValueError: columns cannot be a set

    ValueError: columns cannot be a set

    I'm trying to update my code to use the latest version of trading_ig and I'm getting the error below. Can anyone help please? Python 3.10 Pandas 1.5.2 File "site-packages/trading_ig/rest.py", line 895, in fetch_open_positions data = pd.DataFrame(columns=self.colname_unique(cols)) File "site-packages/pandas/core/frame.py", line 639, in init raise ValueError("columns cannot be a set") ValueError: columns cannot be a set

    opened by oliverpolden 3
  • can stream account info but not prices info

    can stream account info but not prices info

    Hi, the following code tries to stream two things :

    • some info on my account
    • some prices

    while the account info are streamed correctly, it seems I never receive the price data, do you know why ? would it be because the config I tried is my demo account config ?

    Thanks in advance

            
    import logging
    
    from trading_ig import IGService, IGStreamService
    from trading_ig.config import config
    from trading_ig.lightstreamer import Subscription
    
    
    def on_prices_update(item_update):
        print("---------- tag on prices update")
        if 0:print("price: %s " % item_update)
        if 0:print(
            "{stock_name:<19}: Time {UPDATE_TIME:<8} - "
            "Bid {BID:>5} - Ask {OFFER:>5}".format(
                stock_name=item_update["name"], **item_update["values"]
            )
        )
    
    def on_update(item):
        print("{UPDATE_TIME:<8} {stock_name:<19} Bid {BID:>5} Ask {OFFER:>5}".format(stock_name=item["name"], **item["values"]))
    
    def on_account_update(balance_update):
        print("---------- tag on account update")
        print("balance: %s " % balance_update)
    
    if 1:logging.basicConfig(level=logging.INFO)
    if 0:logging.basicConfig(level=logging.DEBUG)
    ig_service = IGService(config.username, config.password, config.api_key, config.acc_type, acc_number=config.acc_number)
    ig_stream_service = IGStreamService(ig_service)
    if 1:ig_stream_service.create_session()
    if 0:ig_stream_service.create_session(version='3')
    
    # subscription prices
    subscription_prices = Subscription(
        mode="MERGE",
        #items=["L1:CS.D.GBPUSD.CFD.IP", "L1:CS.D.USDJPY.CFD.IP"], # sample CFD epics
        #items=["L1:CS.D.GBPUSD.TODAY.IP", "L1:IX.D.FTSE.DAILY.IP"], # sample spreadbet epics
        items=["CS.D.EURUSD.MINI.IP"],
        fields=["UPDATE_TIME", "BID", "OFFER", "CHANGE", "MARKET_STATE"],
    )
    if 0:subscription_prices.addlistener(on_prices_update)
    if 1:subscription_prices.addlistener(on_prices2_update)
    sub_key_prices = ig_stream_service.ls_client.subscribe(subscription_prices)
    
    # subscription account
    subscription_account = Subscription(mode="MERGE", items=["ACCOUNT:" + config.acc_number], fields=["AVAILABLE_CASH"],)
    subscription_account.addlistener(on_account_update)
    sub_key_account = ig_stream_service.ls_client.subscribe(subscription_account)
    
    input(
        "{0:-^80}\n".format(
            "HIT CR TO UNSUBSCRIBE AND DISCONNECT FROM \
    LIGHTSTREAMER"
        )
    )
    
    # Disconnecting
    ig_stream_service.disconnect()
    
    opened by xiajya 0
  • IG Rest API gives error.security.client-token-invalid after 13-14 hours of continuous usage

    IG Rest API gives error.security.client-token-invalid after 13-14 hours of continuous usage

    I observed that the IG Rest API gives the error.security.client-token-invalid error after 13-14 hours of continuous usage in the demo account.

    I would appreciate guidance on possible ways to overcome this error.

    Thank you.

    opened by MilindRCodes 5
  • Create working order with force_open parameter

    Create working order with force_open parameter

    Hi all,

    I found a bug in the rest.py, create_working_order method:

        if force_open:
            params["forceOpen"] = 'true'
    

    it needs to be:

        if force_open:
            params["forceOpen"] = 'true'
        else:
            params["forceOpen"] = 'false'
    

    as IG's default forceOpen is true. when even the method defaults force_open as False, but it is not offsetting position.

    opened by jackyclever 1
  • pycryptodome lib deprecated

    pycryptodome lib deprecated

    bandit, the static code analysis library for Python, reports that the pycryptodome library has been deprecated, and that we should be using cryptography instead:

    https://bandit.readthedocs.io/en/1.7.4/blacklists/blacklist_imports.html#b413-import-pycrypto

    opened by bug-or-feature 0
Releases(0.0.19)
  • 0.0.19(Jan 5, 2023)

    • fix for 'ValueError: columns cannot be a set' error with pandas 1.5.2+ (PR #267)
    • fetch_historical_prices*() methods improvements (Issue #272)
    • remove requirements status badge (Issue #259)
    • publish with API token (Issue #260)
    • specify importlib-metadata version to prevent flake8 problems with python 3.7
    • updating github actions to latest versions
    Source code(tar.gz)
    Source code(zip)
  • 0.0.18(Aug 23, 2022)

  • 0.0.17(Jan 26, 2022)

  • 0.0.16(Jan 1, 2022)

    • fix for http error 405 response from IG when confirming deal (PR#237)
    • updating Poetry for automated testing
    • removing some unused legacy project config
    • removing support for unsupported Python 3.6, adding 3.10
    • better handling and docs for optional dependencies (#216, #240)
    • fixing occasional KeyError when deleting session headers (#238)
    Source code(tar.gz)
    Source code(zip)
  • 0.0.15(Oct 19, 2021)

  • 0.0.14(Oct 4, 2021)

    • fixes the bug where guaranteed stop loss was replaced with a normal stop loss on working order update (#224)
    • legacy 'setup.py' style project config files removed
    Source code(tar.gz)
    Source code(zip)
  • 0.0.13(Oct 2, 2021)

  • 0.0.12(Jul 28, 2021)

  • 0.0.11(Jul 19, 2021)

    0.0.11

    • code samples improved, new FAQ
    • Adds support for update open position v2
    • new function to calculate mid prices for historic data
    • Adds support for getting and updating account prefs
    • Adds support for /markets endpoint for getting details of multiple markets
    • new sample script to traverse navigation tree and get epics, new FAQ
    Source code(tar.gz)
    Source code(zip)
  • 0.0.10(Jul 10, 2021)

    0.0.10

    • simplified request headers: requests.Session now handles persistence
    • adds support for v3 session creation (#157)
    • implementation and test for fetch_working_orders() v2 (like PR #187)
    • adds support for fetch_historical_prices_by_epic_and_date_range() v2
    • adds support for fetch_open_positions() v2
    • dependency management with Python Poetry (#149)
    • more robust handling of IG API rate limits
    • support for all the /history/activity endpoints
    • better test coverage. now 80% for rest.py (#38)
    • documentation improvements
    Source code(tar.gz)
    Source code(zip)
  • 0.0.9(Mar 19, 2021)

    0.0.9

    • integration and unit tests improved
    • remove reference to adapter (#190)
    • pandas 1.2.0 (#184)
    • paged historical data can be captured with one request (#183)
    • paging fixed for historical data (#175)
    • error fixed when closing stream (#174)
    Source code(tar.gz)
    Source code(zip)
  • 0.0.8(Oct 23, 2020)

    • docs restructured and reintegrated with readthedocs.io
    • Fix for a bug in 'expand-columns()' that would cause an error if values were missing/null
    • unit tests for v3 historic prices method
    • Tidy up usage of "version" across the REST API to make it consistent
    • Marked methods that use an outdated version with TODOs
    • Fixed issues with switch_account(), delete_working_order() etc. which were not specifying a version correctly
    • unit tests for v1, v2 historic prices methods
    • allowing historic prices format to be defined at runtime
    • new optional flatter format for historic prices
    • release notes
    Source code(tar.gz)
    Source code(zip)
Owner
IG Python
A GitHub organization for Python developers who use IG Markets REST and Stream API. This organization is not related to IG Markets.
IG Python
This is a Anti Channel Ban Robots

AntiChannelBan This is a Anti Channel Ban Robots delete and ban message sent by channels Heroku Deployment 💜 Heroku is the best way to host ur Projec

BᵣₐyDₑₙ 25 Dec 10, 2021
Ts-matterbridge - Integrate TeamSpeak Chat with MatterBridge

TeamSpeak-MatterBridge Bot You can use this bot to integrate TeamSpeak Chat with

4 Sep 25, 2022
An attempt to make a bot that can auto-archive Danganronpa KG RPs on Discord.

Danganronpa Killing Game Archiving Bot An attempt to make a bot that can auto-archive Danganronpa KG RPs on Discord. The final format is meant to look

Astrea 1 Nov 30, 2021
Jika ada pertanyaan lebih lanjut, hubungi kontak dibawah ini. Terimakasih...

⚡ Lynx Userbot ⚡ Userbot Used for Fun on Telegram, and for Maintianing Your Group. This is a Repo Lynx-Userbot. This is Repo was Created by Axel From

29 Aug 30, 2021
Telephus is a connection pooled, low-level client API for Cassandra in Twisted python.

Telephus Son of Heracles who loved Cassandra. He went a little crazy, at one point. One might almost say he was twisted. Description Telephus is a con

Brandon Williams 93 Apr 29, 2021
A repo containing toolings and software useful for a DevOps Engineer

DevOps-Tooling A repo containing toolings and software useful for a DevOps Engineer (or if you're setting up your Mac from the beginning) Currently se

Mohamed Abukar 45 Dec 12, 2022
Just a python library to make reddit post caching easier

Reddist Just a python library to make reddit post caching easier. Caching Options In Memory Caching Redis Caching Pickle Caching Usage Installation: D

Samrid Pandit 3 Jan 16, 2022
search different Streaming Platforms for movie titles.

Install git clone and cd to directory install Selenium download chromedriver.exe to same directory First Run Use --setup True for the first run. Platf

34 Dec 25, 2022
The Official Dropbox API V2 SDK for Python

The offical Dropbox SDK for Python. Documentation can be found on Read The Docs. Installation Create an app via the Developer Console. Install via pip

Dropbox 828 Jan 05, 2023
Telegram bot using python

Telegram bot using python

Masha Kubyshina 1 Oct 11, 2021
a simple quant trading bot with CLI interface

shepherd a simple quant trading bot with CLI interface CLI shell command docs coming soon after I brush up the code and add more features :) Minimal R

m00n 0 Jun 06, 2022
Bagas Mirror&Leech Bot is a multipurpose Telegram Bot written in Python for mirroring files on the Internet to our beloved Google Drive. Based on python-aria-mirror-bot

- [ MAYBE UPDATE & ADD MORE MODULE ] Bagas Mirror&Leech Bot Bagas Mirror&Leech Bot is a multipurpose Telegram Bot written in Python for mirroring file

4 Nov 23, 2021
Gorrabot is a bot made to automate checks and processes in the development process.

Gorrabot is a Gitlab bot made to automate checks and processes in the Faraday development. Features Check that the CHANGELOG is modified By default, m

Faraday 7 Dec 14, 2022
Unarchive Bot for Telegram

Telegram UnArchiver Bot UnArchiveBot: 🇬🇧 Bot that allows you to extract supported archive formats in telegram. 🇹🇷 Desteklenen arşiv biçimleri tele

Hüzünlü Artemis [HuzunluArtemis] 25 May 07, 2022
Discord bot to monitor collection of mods on the Steam Workshop and notify on update to selected discord server via Nextcordbot API.

Steam-Workshop-Monitor Discord bot to monitor collection of mods on the Steam Workshop and notify on update to selected Discord channel via Nextcordbo

7 Nov 03, 2022
Telegram bot to trim and download videos from youtube.

Inline-YouTube-Trim-Bot Telegram bot to trim and download youtube videos Deploy You can deploy this bot anywhere. Demo - YouTubeBot Required Variables

SUBIN 56 Dec 11, 2022
Petpy is an easy-to-use and convenient Python wrapper for the Petfinder API.

Petpy is an easy-to-use and convenient Python wrapper for the Petfinder API. Includes methods for parsing output JSON into pandas DataFrames for easier data analysis

Aaron Schlegel 27 Nov 19, 2022
Discord bot that generates boba drinks. Submission for sunhacks 2021

boba-bot Team Poggies' submission for Sunhacks 2021. Find our project page on Devpost, and a video demonstration can be found on YouTube. Commands $he

Joshua Tenorio 3 Nov 02, 2022
Bot for automated buying boxes on Binance

V 1.0 Bot for automated buying boxes on Binance В settings.py выставляем свои COOKIE и свой CSRFTOKEN В settings.py для headers выставляем свои параме

Matvey 3 Jan 18, 2022
A Python library for PagerDuty.

Pygerduty Python Library for PagerDuty's REST API and Events API. This library was originally written to support v1 and is currently being updated to

Dropbox 164 Dec 20, 2022