A Python wrapper for the WooCommerce API.

Overview

WooCommerce API - Python Client

A Python wrapper for the WooCommerce REST API. Easily interact with the WooCommerce REST API using this library.

Installation

pip install woocommerce

Getting started

Generate API credentials (Consumer Key & Consumer Secret) following this instructions http://woocommerce.github.io/woocommerce-rest-api-docs/#rest-api-keys.

Check out the WooCommerce API endpoints and data that can be manipulated in http://woocommerce.github.io/woocommerce-rest-api-docs/.

Setup

from woocommerce import API

wcapi = API(
    url="http://example.com",
    consumer_key="ck_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    consumer_secret="cs_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    version="wc/v3"
)

Options

Option Type Required Description
url string yes Your Store URL, example: http://woo.dev/
consumer_key string yes Your API consumer key
consumer_secret string yes Your API consumer secret
version string no API version, default is wc/v3
timeout integer no Connection timeout, default is 5
verify_ssl bool no Verify SSL when connect, use this option as False when need to test with self-signed certificates
query_string_auth bool no Force Basic Authentication as query string when True and using under HTTPS, default is False
oauth_timestamp integer no Custom timestamp for requests made with oAuth1.0a
wp_api bool no Set to False in order to use the legacy WooCommerce API (deprecated)

Methods

Params Type Description
endpoint string WooCommerce API endpoint, example: customers or order/12
data dictionary Data that will be converted to JSON
**kwargs dictionary Accepts params, also other Requests arguments

GET

  • .get(endpoint, **kwargs)

POST

  • .post(endpoint, data, **kwargs)

PUT

  • .put(endpoint, data), **kwargs

DELETE

  • .delete(endpoint, **kwargs)

OPTIONS

  • .options(endpoint, **kwargs)

Response

All methods will return Response object.

Example of returned data:

>>> r = wcapi.get("products")
>>> r.status_code
200
>>> r.headers['content-type']
'application/json; charset=UTF-8'
>>> r.encoding
'UTF-8'
>>> r.text
u'{"products":[{"title":"Flying Ninja","id":70,...' // Json text
>>> r.json()
{u'products': [{u'sold_individually': False,... // Dictionary data

Request with params example

from woocommerce import API

wcapi = API(
    url="http://example.com",
    consumer_key="ck_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    consumer_secret="cs_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    version="wc/v3"
)

# Force delete example.
print(wcapi.delete("products/100", params={"force": True}).json())

# Query example.
print(wcapi.get("products", params={"per_page": 20}).json())

Changelog

2.1.1 - 2019/07/22

  • Updated Request library to 2.22.0.
  • Updated examples.

2.1.0 - 2019/01/15

  • Uses WP REST API by default, need to force wp_api as False in order to use the legacy WooCommerce API.
  • Updated default REST API version to wc/v3.

2.0.0 - 2019/01/15

  • Updated "Requests" library to version 2.20.0.
  • Added support for custom timestamps in oAuth1.0a requests with oauth_timestamp.
  • Allow pass custom arguments to "Requests" library.

1.2.1 - 2016/12/14

  • Fixed WordPress 4.7 compatibility.

1.2.0 - 2016/06/22

  • Added option query_string_auth to allow Basic Auth as query strings.

1.1.1 - 2016/06/03

  • Fixed oAuth signature for WP REST API.

1.1.0 - 2016/05/09

  • Added support for WP REST API.
  • Added method to do HTTP OPTIONS requests.

1.0.5 - 2015/12/07

  • Fixed oAuth filters sorting.

1.0.4 - 2015/09/25

  • Implemented timeout argument for API class.

1.0.3 - 2015/08/07

  • Forced utf-8 encoding on API.__request() to avoid UnicodeDecodeError

1.0.2 - 2015/08/05

  • Fixed handler for query strings

1.0.1 - 2015/07/13

  • Fixed support for Python 2.6

1.0.1 - 2015/07/12

  • Initial version
Comments
  • wcapi.get('orders') returns 403

    wcapi.get('orders') returns 403

    I connect to my WooCommerce webshop through the WooCommerce REST API Python wrapper,

    I.e,

    from woocommerce import API
    
    wcapi = API(
        url="https://mywebshop.whatever",
        consumer_key="ck_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        consumer_secret="cs_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        wp_api=True,
        version="wc/v1"
    )
    

    API has read/write access.

    All worked fine for months up to yesterday.


    Problem

    Since yesterday latest_order = wcapi.get('orders').json() returns a JSONDecodeError: Expecting value. Also, wcapi.get('orders') returns a <Response [403]>.

    I don't know what's causing this all of a sudden and I'm not sure how to solve it either.

    opened by LucSpan 20
  • getting an import error.

    getting an import error.

    after doing the pip install WooCommerce and placing the

    from woocommerce import API

    test = API(values here)

    running this shows this below.

    from woocommerce import API ImportError: cannot import name 'API'

    opened by ecampii 11
  • Issue with authentication consumer key or consumer secret invalid

    Issue with authentication consumer key or consumer secret invalid

    I'm creating credentials using the endpoint /wc-auth/v1/authorize with scope=read_write most times the consumer key and secret that I get are valid, but a couple of times I get consumer key or consumer secrets that are invalid when I try to use them later in code like this:

    wcapi = API(
        url=  shop_url,
        consumer_key= key,
        consumer_secret= secret
    )
    response = wcapi.get("orders?page=1")
    # Then response.text is {"errors":[{"code":"woocommerce_api_authentication_error","message":"Consumer Secret is invalid"}]}
    #  or {"errors":[{"code":"woocommerce_api_authentication_error","message":"Consumer Key is invalid"}]}
    

    Has this issue been detected yet? Is it related to the python wrapper or woocommerce plugin?

    opened by assislucas 10
  • Timeout exception yet uploaded the data

    Timeout exception yet uploaded the data

    I am having a weird issue. I am using API for a Woocommerce setup on my local machine. Onr running I am getting the exceptions:

    Traceback (most recent call last):
      File "/Users/Me/Data/anaconda3/lib/python3.7/site-packages/urllib3/connectionpool.py", line 384, in _make_request
        six.raise_from(e, None)
      File "<string>", line 2, in raise_from
      File "/Users/Me/Data/anaconda3/lib/python3.7/site-packages/urllib3/connectionpool.py", line 380, in _make_request
        httplib_response = conn.getresponse()
      File "/Users/Me/Data/anaconda3/lib/python3.7/http/client.py", line 1321, in getresponse
        response.begin()
      File "/Users/Me/Data/anaconda3/lib/python3.7/http/client.py", line 296, in begin
        version, status, reason = self._read_status()
      File "/Users/Me/Data/anaconda3/lib/python3.7/http/client.py", line 257, in _read_status
        line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
      File "/Users/Me/Data/anaconda3/lib/python3.7/socket.py", line 589, in readinto
        return self._sock.recv_into(b)
    socket.timeout: timed out
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/Users/Me/Data/anaconda3/lib/python3.7/site-packages/requests/adapters.py", line 449, in send
        timeout=timeout
      File "/Users/Me/Data/anaconda3/lib/python3.7/site-packages/urllib3/connectionpool.py", line 638, in urlopen
        _stacktrace=sys.exc_info()[2])
      File "/Users/Me/Data/anaconda3/lib/python3.7/site-packages/urllib3/util/retry.py", line 368, in increment
        raise six.reraise(type(error), error, _stacktrace)
      File "/Users/Me/Data/anaconda3/lib/python3.7/site-packages/urllib3/packages/six.py", line 686, in reraise
        raise value
      File "/Users/Me/Data/anaconda3/lib/python3.7/site-packages/urllib3/connectionpool.py", line 600, in urlopen
        chunked=chunked)
      File "/Users/Me/Data/anaconda3/lib/python3.7/site-packages/urllib3/connectionpool.py", line 386, in _make_request
        self._raise_timeout(err=e, url=url, timeout_value=read_timeout)
      File "/Users/Me/Data/anaconda3/lib/python3.7/site-packages/urllib3/connectionpool.py", line 306, in _raise_timeout
        raise ReadTimeoutError(self, url, "Read timed out. (read timeout=%s)" % timeout_value)
    urllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='localhost', port=80): Read timed out. (read timeout=5)
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/Users/Me/Data/Business/NisaaPK/data_uploader_api/uploader.py", line 48, in <module>
        add_product(wcapi)
      File "/Users/Me/Data/Business/NisaaPK/data_uploader_api/uploader.py", line 31, in add_product
        print(wc.post("products", data))
      File "/Users/Me/Data/anaconda3/lib/python3.7/site-packages/woocommerce/api.py", line 112, in post
        return self.__request("POST", endpoint, data, **kwargs)
      File "/Users/Me/Data/anaconda3/lib/python3.7/site-packages/woocommerce/api.py", line 103, in __request
        **kwargs
      File "/Users/Me/Data/anaconda3/lib/python3.7/site-packages/requests/api.py", line 60, in request
        return session.request(method=method, url=url, **kwargs)
      File "/Users/Me/Data/anaconda3/lib/python3.7/site-packages/requests/sessions.py", line 533, in request
        resp = self.send(prep, **send_kwargs)
      File "/Users/Me/Data/anaconda3/lib/python3.7/site-packages/requests/sessions.py", line 646, in send
        r = adapter.send(request, **kwargs)
      File "/Users/Me/Data/anaconda3/lib/python3.7/site-packages/requests/adapters.py", line 529, in send
        raise ReadTimeout(e, request=request)
    requests.exceptions.ReadTimeout: HTTPConnectionPool(host='localhost', port=80): Read timed out. (read timeout=5)
    

    When I checked on the site the product was there! This is the code I am using:

    from woocommerce import API
    
    
    def add_product(wc):
        data = {
            "name": "Sample Product",
            "type": "simple",
            "regular_price": "1221.99",
            "sale_price": "921.99",
            "description": "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.",
            "short_description": "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.",
            "categories": [
                {
                    "id": 135
                },
            ],
            "tags": [
    
            ],
            "button_text": "Visit here to buy",
            "images": [
                {
                    "src": "http://demo.woothemes.com/woocommerce/wp-content/uploads/sites/56/2013/06/T_2_front.jpg"
                },
                {
                    "src": "http://demo.woothemes.com/woocommerce/wp-content/uploads/sites/56/2013/06/T_2_back.jpg"
                }
            ],
            "external_url": 'http://adnansiddiqi.me'
        }
        print(wc.post("products", data))
    
    
    if __name__ == '__main__':
        KEY = 'XXX'
        SECRET = 'XXX'
    
        wcapi = API(
            url="http://localhost/shop.ab/",
            consumer_key=KEY,
            consumer_secret=SECRET,
            version="wc/v3"
        )
    
        # r = wcapi.get("products")
        # products = r.json()
        # print(len(products))
        add_product(wcapi)
    
    opened by kadnan 6
  • per_page and all integer parameters does't works

    per_page and all integer parameters does't works

    While trying to get product/categories from Woocommerce I got this error: "per_page is not of type integer"

    my code:

    wcapi = API( url="http://my_web.site", consumer_key="ck_XXXXXXXXXXXXXXXXXXXXXXXXXXXX", consumer_secret="cs_XXXXXXXXXXXXXXXXXXXXXXXXXXXX", version="wc/v3" )

    categories = wcapi.get("products/categories/?per_page=1").json()

    get the same error for all integer parameters

    opened by Damiano-Franco 6
  • woocommerce_api_authentication_error

    woocommerce_api_authentication_error","message":"Consumer Secret is invalid

    When using HTTPS in the API URL parameter below the authentication fails with the error"

    "woocommerce_api_authentication_error","message":"Consumer Secret is invalid".

    HTTP works fine.

    Questions:

    • Any suggestions on how to troubleshoot this?
    • If this is a potential server side configuration issues, do you have any pointers on how to configure it correctly?
    • Could you give me an example of how to use query parameters instead? The WooCommerce REST API documentation hints at an example for servers that not properly parse the Authorization header, but it is actually missing.
    API(
                url="https://kashalife.net/",
                consumer_key   ="ck_16c59a1a0693c2723928830da52a30640c2311fd",
                consumer_secret="cs_0b4e0f17741e024b31d0ef799257b972db473305",
                wp_api=False,
                verify_ssl=False,
                version="v3",
            )
    

    Thanks - Christoph

    opened by chbichsel 6
  • Not working anymore

    Not working anymore

    Hello,

    As of a few months this module does not seem to work anymore, I found the culprit, as it seems to work when I include this header: 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:80.0) Gecko/20100101 Firefox/80.0'. This explains why CURL works, but python requests not anymore.

    Best regards,

    Evert

    opened by Evert-Arends 5
  • Download all Products

    Download all Products

    First thank you very much for this amazing work!!

    I am trying to get all the products and I don' really know how to do it.

    I have tried to do

    wcapi.get('products?per_page=100') But I have more than 100 products

    Furthermore, I have tried to introduce the pagination as it is recommended in the manual, but it does not say how to introduce it in the code...

    I would love if someone could help me out with this.

    Yours sincerely,

    opened by eduaero 5
  • REST authentication error

    REST authentication error

    Hello,

    Having truble authenticating with rest api, all the time I get the same error.

    Wordpress 4.7.4 Woocommerce 3.0.5 Python 2.7.13

    from woocommerce import API
    
    wcapi = API(
        url="http://XYZ/~aclassi2/note/",
        consumer_key="ck_YYY",
        consumer_secret="cs_XXX",
        wp_api=True,
        version="wc/v2",
        verify_ssl=False,
        query_string_auth=True
    )
    
    {"code":"woocommerce_rest_authentication_error","message":"Invalid signature - provided signature does not match.","data":{"status":401}}
    
    

    When I use Postman, it works fine. I also tested with nodeJS, is maybe python lib broken?

    opened by hrvatskibogmars 5
  • Can't use OAuth (API calls over HTTP)

    Can't use OAuth (API calls over HTTP)

    Hi,

    Tested with versions 1.0.1 and 1.0.2, I can't use this library over HTTP. It seems to be related to the OAuth signature generated by the OAuth class.

    Here is my code (adapted from the README example) :

    wcapi = API(
        url="http://0.0.0.0:8080",
        consumer_key=WC_API_KEY,
        consumer_secret=WC_API_SECRET,
        version="v2",
        verify_ssl=False
    )
    
    r = wcapi.get("products")
    
    print(r.status_code)
    print(r.text)
    

    Here is the return :

    401
    {'errors': [{'code': 'woocommerce_api_authentication_error', 'message': 'Signature invalide - la signature fournie ne correspond pas'}]}
    

    (I'm using a French translation of WooCommerce)

    Do I need to force the use of OAuth1 somewhere ?

    Thanks for your help

    opened by Djiit 5
  • api accepts url params and additional keyword args for requests module

    api accepts url params and additional keyword args for requests module

    Currently the url params that are sent to Woo-Commerce are a closed box. They should be exposed outside of the function. Additionally, there are cases where a developer needs to pass additional parameters to the requests library. These should also be exposed outside of the function.

    I've been meaning to make a pull request for this. I have previously sub-classed the woocommerce.api.API object in order to do this and think it would be helpful to others who like me need to do more complicated requests.

    opened by timjen3 4
  • unable to update a product

    unable to update a product

    I am trying to update products in my store. But, the put/post methods do not work at all. The requests are executed but there are no changes in the product's properties. I gave my homepage URL as the url param, and the permalink in the wordpress is set to something like https://my-website.co.il/year/month/day/sample-post/. below is the constructor defined wcapi = API( url=STORE, consumer_key=DEV, consumer_secret=SECRET, wp_api=True, version="wc/v2", query_string_auth=True ) and here is how I update a product wcapi.put("products/4713", data={'price':'0.15'}).json()

    and then it returns the product with old price.

    Actually, the product is not updated and still it does not give an error.

    opened by Irfan-Ahmad-byte 0
  • Add request session

    Add request session

    Issue https://github.com/woocommerce/wc-api-python/issues/76 discusses the performance issue inherent in recreating a full HTTPS connection for every request.

    This PR enables request Session.

    opened by rooprob 0
  • Fetching 'products' fails with a 403 error despite other successful API calls

    Fetching 'products' fails with a 403 error despite other successful API calls

    Hello! Thanks for this library, though I'm having a little trouble retrieving products specifically. I have no trouble retrieving e.g. orders and customers.

    This works:

    import os
    from woocommerce import API
    
    WOOCOMMERCE_API_CONSUMER_KEY = os.environ.get('WOOCOMMERCE_API_CONSUMER_KEY')
    WOOCOMMERCE_API_CONSUMER_SECRET = os.environ.get('WOOCOMMERCE_API_CONSUMER_SECRET')  # noqa
    
    wcapi = API(
        url='https://xxxxxxxx.org',
        consumer_key=WOOCOMMERCE_API_CONSUMER_KEY,
        consumer_secret=WOOCOMMERCE_API_CONSUMER_SECRET,
        version='wc/v3',
        user_agent='PostmanRuntime/7.26.5'
    )
    
    data = wcapi.get('orders')
    # data = wcapi.get('customers')
    
    print(data.status_code)
    

    Trying wcapi.get('products'), however, throws a 403 status code:

    import os
    from woocommerce import API
    
    WOOCOMMERCE_API_CONSUMER_KEY = os.environ.get('WOOCOMMERCE_API_CONSUMER_KEY')
    WOOCOMMERCE_API_CONSUMER_SECRET = os.environ.get('WOOCOMMERCE_API_CONSUMER_SECRET')  # noqa
    
    wcapi = API(
        url='https://xxxxxxxx.org',
        consumer_key=WOOCOMMERCE_API_CONSUMER_KEY,
        consumer_secret=WOOCOMMERCE_API_CONSUMER_SECRET,
        version='wc/v3',
        user_agent='PostmanRuntime/7.26.5'
    )
    
    data = wcapi.get('products')
    
    print(data.status_code)
    

    Any help is much appreciated, thanks!

    opened by cjwinchester 2
  • timeout increased to 10sec

    timeout increased to 10sec

    before timeout set to 5sec its very low some times if network is not good getting this error :

    raise ReadTimeout(e, request=request)
    requests.exceptions.ReadTimeout: HTTPSConnectionPool(host='......', port=....): Read timed out. (read timeout=5)
    

    for every two request i am getting this problem so i increased the timeout to 10 sec...

    Thank you.

    opened by Balaji-Kotni 2
  • low_stock_amount is string

    low_stock_amount is string

    Issue summary

    When I fetch a WooCommerce product using this API, the variable low_stock_amount is an empty string, I believe should be an integer '0'.

    Expected behavior

    Always return an integer. or a 0

    Actual behavior

    It returns an empty string.

    Steps to reproduce the problem

    1. response = wcapi.get('products', params={'sku':sku}).json()
    2. print(response)

    ##Related bug I believe this is a related bug


    opened by jmatah 0
Releases(3.0.0)
  • 3.0.0(Mar 13, 2021)

    2021-03-13

    Removed

    • Removed support to legacy Python versions, now supports Python 3.6+.
    • Removed ordereddict package dependency.

    Added

    • Added support for Python 3.8 and Python 3.9.
    • Added option to set custom user_agent.

    Changed

    • Updated default "User-Agent" to WooCommerce-Python-REST-API/3.0.0.
    • Updated Request library to 2.25.1.

    Fixed

    • Fixed Basic Auth in Python 3.8.
    Source code(tar.gz)
    Source code(zip)
Demonstrating attacks, mitigations, and monitoring on AWS

About Inspectaroo is a web app which allows users to upload images to view metadata. It is designed to show off many AWS services including EC2, Lambd

Alex McCormack 1 Feb 11, 2022
Easy to use reaction role Discord bot written in Python.

Reaction Light - Discord Role Bot Light yet powerful reaction role bot coded in Python. Key Features Create multiple custom embedded messages with cus

eibex 109 Dec 20, 2022
📷 An Instagram bot written in Python using Selenium on Google Chrome

📷 An Instagram bot written in Python using Selenium on Google Chrome. It will go through posts in hashtag(s) and like and comment on them.

anniedotexe 47 Dec 19, 2022
Step by Step Guide To Install Discord Py Master Branch on Replit

Guide to Install Discord Py Master Branch on Replit Step 1 Create an empty repl on replit Step 2 Add this Basic Code to the file main.py so as to chec

Pranav Saxena 7 Nov 18, 2022
A robust, low-level connector for the Discord API

Bauxite Bauxite is a robust, low-level connector for the Discord API. What is Bauxite for? Bauxite is made for two main purposes: Creating higher-leve

1 Dec 04, 2021
This repository contains ready to deploy automations on AWS

aws-automation-plugins This repository contains ready to deploy automations on AWS. How-To All projects in this repository contain a deploy.sh file wh

Akesh Patil 8 Sep 20, 2022
A library that allows you to easily mock out tests based on AWS infrastructure.

Moto - Mock AWS Services Install $ pip install moto[ec2,s3,all] In a nutshell Moto is a library that allows your tests to easily mock out AWS Services

Steve Pulec 6.5k Jan 02, 2023
Ross Virtual Assistant is a programme which can play Music, search Wikipedia, open Websites and much more.

Ross-Virtual-Assistant Ross Virtual Assistant is a programme which can play Music, search Wikipedia, open Websites and much more. Installation Downloa

Jehan Patel 4 Nov 08, 2021
The WhatsApp lib

yowsup WARNING It seems that recently yowsup gets detected during registration resulting in an instant ban for your number right after registering wit

Tarek 6.8k Jan 04, 2023
A GitHub Follower Bot that is a WIP.

GitHub Follower Bot (WIP) Work In Progress This bot is a WIP. There are still many features I plan to add and code I need to improve (I'm still fairly

Christian Deacon 71 Dec 29, 2022
Source code for Profile REST API

PROJECT PROFILE REST API Creating local development server: We will create a local development server that can run and test our API as we build it. We

1 Mar 29, 2022
Telegram Group Calls Streaming bot with some useful features, written in Python with Pyrogram and Py-Tgcalls. Supporting platforms like Youtube, Spotify, Resso, AppleMusic, Soundcloud and M3u8 Links.

Yukki Music Bot Yukki Music Bot is a Powerful Telegram Music+Video Bot written in Python using Pyrogram and Py-Tgcalls by which you can stream songs,

Team Yukki 996 Dec 28, 2022
Instant messaging client in tkinter

Concord_client_tk Instant messaging client in tkinter Contributors : Ilade-s [https://github.com/Ilade-s] Doku [https://github.com/D0kuhebi] Descripti

Raphaël Merlet 2 Jun 15, 2022
Telegram Bot to learn English by words and more.. ( in Arabic )

Get the mp3 files Extract the mp3.rar on the same file that bot.py on install requirements pip install -r requirements.txt #Then enter you bot token

Plugin 10 Feb 19, 2022
CyberTKR - CyberTK-API

CyberTKR - CyberTK-API

TKR 2 Apr 08, 2022
An open-source Discord Nuker can be used as a self-bot or a regular bot.

How to use Double click avery.exe, and follow the prompts Features Important! Make sure to use [9] (Scrape Info) before using these, or some things ma

Exortions 3 Jul 03, 2022
thumbor is an open-source photo thumbnail service by globo.com

Survey If you use thumbor, please take 1 minute and answer this survey? It's only 2 questions and one is multiple choice!!! thumbor is a smart imaging

Thumbor (by @globocom) 9.3k Dec 31, 2022
FTX auto lending bot with python

FTX auto lending bot Get the API key Check my article for step by step + screenshots Setup & Run Install python 3 Install dependency pip install -r re

Patompong Manprasatkul 1 Dec 24, 2021
AWS CloudSaga - Simulate security events in AWS

AWS CloudSaga - Simulate security events in AWS AWS CloudSaga is for customers to test security controls and alerts within their Amazon Web Services (

Amazon Web Services - Labs 325 Dec 01, 2022
A simple Python script using Telethon to log all (or some) messages a user or bot account can see on Telegram.

telegram-logger A simple Python script using Telethon to log all (or some) messages a user or bot account can see on Telegram. Requirements Python 3.6

Richard 13 Oct 06, 2022