An elegant mirai-api-http v2 Python SDK.

Overview

Ariadne

Licence PyPI PyPI - Python Version Code style: black Imports: isort


一个适用于 mirai-api-http v2 的 Python SDK。

本项目适用于 mirai-api-http 2.0 以上版本

目前仍处于开发阶段,内部接口可能会有较大的变化。

安装

poetry add graia-ariadne

pip install graia-ariadne

鸣谢&相关项目

这些项目也很棒, 去他们的项目页看看, 点个 Star 以鼓励他们的开发工作, 毕竟没有他们也没有 Ariadne.

特别感谢 mamoe 给我们带来这些精彩的项目:

  • mirai: 一个高性能, 高可扩展性的 QQ 协议库
  • mirai-console: 一个基于 mirai 开发的插件式可扩展开发平台
  • mirai-api-http: 为本项目提供与 mirai 交互方式的 mirai-console 插件

GraiaProject 的其他项目:

  • Broadcast Control: 扩展性强大, 模块间低耦合, 高灵活性的事件系统支持,是 Ariadne 的底层。兼容
  • Components: 简单的消息链元素选择器 不兼容,将提供移植
  • Template: 消息模板 不兼容,将提供移植
  • Saya 间接但简洁的模块管理系统. 兼容
  • Scheduler: 简洁的基于 asyncio 的定时任务实现. 兼容
  • Application (a.k.a v4): 本项目的结构基础,支持 mirai-api-http v1.x 版本 。不完全兼容,建议参照项目内实现名称进行移植工作
  • Avilla (a.k.a v5): 下一代即时通讯框架。The Future不兼容

Ariadne 在开发中还参考了如下项目:

许可证

GNU AGPLv3 是本项目的开源许可证.

Comments
  • [Bug] Adapter 无报错无限重启

    [Bug] Adapter 无报错无限重启

    使用中遇到的问题

    ~~Adapter 无报错无限重启~~
    (经检查是个人问题,误打误撞发现了日志输出信息不够的另一个潜在问题,感谢 BlueGlassBlock 耐心指导)

    运行环境

    • Windows 11 (22000.282)
    • Python 3.10.0 x64

    依赖版本

    • aiohttp 3.7.4.post0
    • graia-ariadne 0.2.2
    • graia-broadcast 0.13.1
    • pydantic 1.8.2

    所用的代码

    import asyncio
    
    from graia.ariadne.adapter import DefaultAdapter
    from graia.ariadne.app import Ariadne
    from graia.ariadne.message.chain import MessageChain
    from graia.ariadne.message.element import Plain
    from graia.ariadne.model import Friend, MiraiSession
    from graia.broadcast import Broadcast
    
    loop = asyncio.new_event_loop()
    
    bcc = Broadcast(loop=loop)
    app = Ariadne(
            broadcast=bcc,
            adapter=DefaultAdapter(
                    bcc,
                    MiraiSession(
                            host='http://localhost:8080',  # noqa # 填入 httpapi 服务运行的地址
                            account=********,  # 你的机器人的 qq 号
                            verify_key='********'  # 填入 verifyKey
                    ),
            ),
    )
    
    
    @bcc.receiver("FriendMessage")
    async def friend_message_listener(app: Ariadne, friend: Friend):
        await app.sendFriendMessage(friend, MessageChain.create([Plain("Hello, World!")]))
    
    
    try:
        loop.run_until_complete(app.lifecycle())
    except KeyboardInterrupt:
        loop.run_until_complete(app.stop())
    

    控制台输出

    此处为手动结束,不结束则一直重复下去

    image

    bug good first issue 
    opened by Redlnn 9
  • :tada: 0.7.0

    :tada: 0.7.0

    更改说明 参见 #124

    向后兼容性 破坏性更改

    • [x] MessageChain: Amnesia implementation
    • [x] GraiaProject/Amnesia#8
    • [x] Switch to snake_case on default
    • [x] ariadne.connection: AbstractRouter ~Amnesia 那边咕咕了~
    opened by BlueGlassBlock 7
  • [Bug] NudgeEvent

    [Bug] NudgeEvent

    问题 当陌生人触发戳一戳事件的时候,会因为没有陌生人的戳一戳事件而报错,导致程序意外停止 如何复现 陌生人在没有添加bot时通过群聊进行临时会话,直接进行戳一戳 预期行为 添加陌生人的触发事件

    Ariadne version: 0.4.9 Broadcast version: 0.14.4 Scheduler version: Not Installed Saya version: Not Installed

    错误信息: pydantic.error_wrappers.ValidationError: 1 validation error for NudgeEvent context_type unexpected value; permitted: 'friend', 'group', None (type=value_error.const; given=stranger; permitted=('friend', 'group', None))

    bug 
    opened by YUASDS 6
  • ModuleNotFoundError: No module named 'graia'

    ModuleNotFoundError: No module named 'graia'

    问题 运行文件的时候出现了ModuleNotFoundError: No module named 'graia' 但我已经安装了graia包 如何复现 如何复现错误.

    预期行为 你希望如何更改/原本应该是怎样的.

    使用环境:

    • 系统: Windows 10
    • MAH 版本:
    • Ariadne 版本: 0.5.3.post3
    • Python 版本: 3.10.2
    • 其他 Graia 库版本:
    • 其他 有关 库版本:

    日志/截图 将任何有关的日志/截图放到这里(控制台输出/MAH 输出/...) image image

    bug invalid 
    opened by lingtian152 5
  • 💡add skip_for_unmatch arg

    💡add skip_for_unmatch arg

    更改说明 加入一个kwonly的参数 skip_for_unmatch, 默认为True 该参数为True时, 若当前Alconna解析失败, 会抛出ExecutionStop

    向后兼容性 当skip_for_unmatch为False时, 解析结果依然会被分配给事件监听器. 届时可能会出现一个命令发出导致多个事件监听器被调用

    opened by RF-Tar-Railt 3
  • [Feature]提供预设Interrupt

    [Feature]提供预设Interrupt

    使用场景. 在需要较为简单的中断的时候

    你想要的解决方案 跟V4一样的中断预设

    是否已有相关实现 https://github.com/GraiaProject/Application/blob/master/src/graia/application/interrupts.py

    其他内容 你认为重要的其他内容。

    enhancement 
    opened by I-love-study 3
  • ValueError: Invalid stage transition: finished -> blocking

    ValueError: Invalid stage transition: finished -> blocking

    问题

    在启动时报错.

    已多次检查mirai以及mirai-api-http的配置,并使用不同版本的py尝试运行,且更新了框架,仍无法解决问题. 也无法在日志中找出问题的关键. 看了closed的issue无果(如果是我看漏了拜托指个路)

    (曾经可以在此环境下运行)

    使用环境:

    • 系统:
    • MAH 版本: 请原谅我不知道什么是mah,如果是mirai的话,版本应该是:2.13.2
    • Ariadne 版本: 0.10.2
    • Python 版本: 3.9.13
    • 其他 Graia 库版本:
      • graia-amnesia 0.7.1
      • graia-ariadne 0.10.2
      • graia-broadcast 0.19.1
      • graia-saya 0.0.17
      • graia-scheduler 0.1.4
    • 其他 有关 库版本:
      • mirai-api-http-2.6.2
      • mcl-addon-2.1.1
    • 系统版本: windows server 2012r2

    日志/截图 日志:

    Microsoft Windows [版本 6.3.9600]
    (c) 2013 Microsoft Corporation。保留所有权利。
    
    C:\Users\Administrator\Desktop\QMGR\bot>python bot.py
    
    C:\Users\Administrator\Desktop\QMGR\bot>C:\Users\Administrator\AppData\Local\Pro
    grams\Python\Python39\python bot.py
    2023-01-03 20:50:06.938 | INFO     | launart.manager:launch_blocking:480 - Start
    ing launart main task...
    2023-01-03 20:50:06.938 | INFO     | launart.manager:launch:333 - Launching 5 co
    mponents as async task...
    2023-01-03 20:50:07.000 | INFO     | graia.ariadne.service:base_telemetry:144 -
    
        _         _           _
       / \   _ __(_) __ _  __| |_ __   ___
      / _ \ | '__| |/ _` |/ _` | '_ \ / _ \
     / ___ \| |  | | (_| | (_| | | | |  __/
    /_/   \_\_|  |_|\__,_|\__,_|_| |_|\___|
    
    graia-amnesia: 0.7.1
    graia-ariadne: 0.10.2
    graia-broadcast: 0.19.1
    launart: 0.6.2
    statv: 0.3.2
    2023-01-03 20:50:07.000 | INFO     | launart.manager:_launchable_task_done_callback:68 - [elizabeth.connection.3520295800.http_client_connection] completed.
    2023-01-03 20:50:07.000 | SUCCESS  | launart.manager:launch:385 - Layer #1:[cache.client/memcache, http.client/aiohttp] preparation completed.
    2023-01-03 20:50:07.000 | SUCCESS  | launart.manager:launch:385 - Layer #3:[elizabeth.service] preparation completed.
    2023-01-03 20:50:07.000 | INFO     | launart.manager:launch:390 - All components prepared, start blocking phase.
    2023-01-03 20:50:07.000 | ERROR    | launart.manager:_launchable_task_done_callback:43 - [elizabeth.connection.3520295800.websocket_client_connection] raised aexception.
    Traceback (most recent call last):
    
    > File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\graia\ariadne\connection\ws.py", line 178, in launch
        async with self.stage("blocking"):
                   │    └ <function Launchable.stage at 0x00000061039B31F0>
                   └ <WebsocketClientConnection <ConnectionStatus connected=False alive=False verified=False stage=finished> with 2 callbacks>
    
      File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\contextlib.py", line 181, in __aenter__
        return await self.gen.__anext__()
                     │    │   └ <slot wrapper '__anext__' of 'async_generator' objects>
                     │    └ <async_generator object Launchable.stage at 0x0000006104B8E550>
                     └ <contextlib._AsyncGeneratorContextManager object at 0x0000006104D86790>
    
      File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\launart\component.py", line 154, in stage
        self.status.stage = "blocking"
        │    │      └ <statv.Stats object at 0x00000061039CB1F0>
        │    └ <ConnectionStatus connected=False alive=False verified=False stage=finished>
        └ <WebsocketClientConnection <ConnectionStatus connected=False alive=False verified=False stage=finished> with 2 callbacks>
    
      File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\statv.py", line 67, in __set__
        value = self._validator(self, past_value, value)
                │    │          │     │           └ 'blocking'
                │    │          │     └ 'finished'
                │    │          └ <statv.Stats object at 0x00000061039CB1F0>
                │    └ <function LaunchableStatus._ at 0x00000061039C0A60>
                └ <statv.Stats object at 0x00000061039CB1F0>
    
      File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\launart\component.py", line 79, in _
        raise ValueError(f"Invalid stage transition: {past} -> {current}")
    
    ValueError: Invalid stage transition: finished -> blocking
    

    程序:

    from graia.ariadne.event.message import GroupMessage
    from graia.ariadne.app import Ariadne
    from graia.ariadne.entry import config
    from graia.ariadne.message.chain import MessageChain
    from graia.ariadne.model import Group
    
    app = Ariadne(
        config(
            verify_key="ServiceVerifyKey",  # 填入 VerifyKey
            account='原本是qq号',  # 你的机器人的 qq 号
        ),
    )
    
    
    @app.broadcast.receiver(GroupMessage)
    async def friend_message_listener(app: Ariadne, msg: MessageChain, group: Group):
        if group.id == '原本是群号':
            await app.send_message(group, "test")
    
    
    app.launch_blocking()
    

    配置文件:

    # file: "MCL/config/net.mamoe.mirai-api-http/setting.yml"
    ## 配置文件中的值,全为默认值
    
    ## 启用的 adapter, 内置有 http, ws, reverse-ws, webhook
    adapters:
      - http
      - ws
    
    ## 是否开启认证流程, 若为 true 则建立连接时需要验证 verifyKey
    enableVerify: true
    verifyKey: ServiceVerifyKey
    
    ## 开启一些调试信息
    debug: false
    
    ## 是否开启单 session 模式, 不建议开启
    singleMode: false
    
    ## 历史消息的缓存大小
    ## 同时,也是 http adapter 的消息队列容量
    cacheSize: 4096
    
    ## adapter 的单独配置,键名与 adapters 项配置相同
    ## 注意: 如果 mirai 读取配置时出错可以尝试删除并重新写入
    adapterSettings:
      ## HTTP 服务的主机, 端口和跨域设置
      http:
        host: localhost
        port: 8080
        cors: ["*"]
    
      ## Websocket 服务的主机, 端口和事件同步ID设置
      ws:
        host: localhost
        port: 8080
        reservedSyncId: -1
    
    bug 
    opened by hsn8086 2
  • ariadne无法连接到mirai

    ariadne无法连接到mirai

    mirai连接失败

    如何复现 按照mirai正常配置后启动:

    2022-12-08 13:16:46 I/http adapter: >>> [http adapter] is listening at http://localhost:8080
    2022-12-08 13:16:46 I/Mirai HTTP API: Http api server is running with verifyKey: 12345678
    2022-12-08 13:16:46 I/Mirai HTTP API: adaptors: [http]
    2022-12-08 13:16:46 I/Mirai HTTP API: ********************************************************
    2022-12-08 13:16:46 W/stderr: ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...
    2022-12-08 13:16:47 I/Soyuz: iTXTech Soyuz is listening on ws://localhost:9876
    2022-12-08 13:16:47 I/MCL Addon: iTXTech MCL Version: 2.1.2-61c8bd8
    2022-12-08 13:16:47 I/main: 3 plugin(s) enabled.
    2022-12-08 13:16:47 I/WindowHelperJvm: Mirai 正在使用桌面环境. 如遇到验证码将会弹出对话框. 可添加 JVM 属性 `mirai.no-desktop` 以关闭.
    2022-12-08 13:16:47 I/WindowHelperJvm: Mirai is using desktop. Captcha will be thrown by window popup. You can add `mirai.no-desktop` to JVM properties (-Dmirai.no-desktop) to disable it.
    2022-12-08 13:16:47 I/main: Auto-login 2633865252, protocol: ANDROID_PHONE, heartbeatStrategy: STAT_HB
    2022-12-08 13:16:47 I/Bot.2633865252: Loaded account secrets from local cache.
    2022-12-08 13:16:48 I/Bot.2633865252: Saved account secrets to local cache for fast login.
    2022-12-08 13:16:48 I/Bot.2633865252: Login successful.
    2022-12-08 13:16:49 V/Bot.2633865252: Event: BotOnlineEvent(bot=Bot(2633865252))2022-12-08 13:16:49 I/Bot.2633865252: Bot login successful.
    2022-12-08 13:16:49 I/main: mirai-console started successfully.
    

    使用araidne连接

    from graia.ariadne.app import Ariadne
    from graia.ariadne.connection.config import config
    from graia.ariadne.model import Friend
    
    app = Ariadne(config(verify_key="12345678", account=2633865252))
    
    
    @app.broadcast.receiver("FriendMessage")
    async def friend_message_listener(app: Ariadne, friend: Friend):
        await app.send_message(friend, "Hello, World!")
    
    Ariadne.launch_blocking()
    

    然后报错:

    graia-broadcast: 0.19.0
    launart: 0.6.1
    statv: 0.3.2
    2022-12-08 13:22:36.420 | INFO     | launart.manager:_launchable_task_done_callback:59 - [elizabeth.connection.2633865252.http_client_connection] completed.
    2022-12-08 13:22:36.421 | SUCCESS  | launart.manager:launch:351 - Layer #1:[http.client/aiohttp, cache.client/memcache] preparation completed.
    2022-12-08 13:22:36.421 | SUCCESS  | launart.manager:launch:351 - Layer #3:[elizabeth.service] preparation completed.
    2022-12-08 13:22:36.421 | INFO     | launart.manager:launch:356 - All components prepared, start blocking phase.
    2022-12-08 13:22:38.533 | ERROR    | graia.amnesia.builtins.aiohttp:connection_manage:231 - 404, message='Invalid response status', url=URL('http://localhost:8080/all?qq=2633865252&verifyKey=12345678')
    Traceback (most recent call last):
    
      File "C:\Users\lzq\PycharmProjects\pythonProject\chatgpt-mirai-qq-bot-master\test.py", line 13, in <module>
    
    invalid 
    opened by freehugr 2
  • ImportError: cannot import name 'adapter_ctx' from 'graia.ariadne.context'

    ImportError: cannot import name 'adapter_ctx' from 'graia.ariadne.context'

    问题

    小弟不才,移植了个人写的项目之后发现adapter_ctx的Import error,重装MCL和graia-ariadne都试过了,还是如此。

    使用环境:

    • 系统:
    • Ariadne 版本:graia_ariadne-0.7.18-py3-none-any.whl
    • Python 版本:3.105

    日志 PS C:\Users\Administrator\Desktop\bot> python .\main.py Traceback (most recent call last): File "C:\Users\Administrator\Desktop\bot\main.py", line 8, in from graia.ariadne.context import adapter_ctx ImportError: cannot import name 'adapter_ctx' from 'graia.ariadne.context' (C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\graia\ariadne\context.py)

    invalid wontfix 
    opened by bakaEC 2
  • [Feature] 0.7.0 auto-port tool

    [Feature] 0.7.0 auto-port tool

    使用场景 0.7.0 的自动迁移工具

    你想要的解决方案utils/convert.py 给出 使用 ast 模块解析用户的调用,并自动替换 用户执行 convert.py <directory_or_file> 即可

    其他内容 See #156

    • [x] 修复 MessageChain 部分调用
    • [x] 修复 camelCase
    • [x] 对 Adapterget_running 发出警告
    • [x] 提供更好的警告高亮
    • [x] 支持不同的输出方式
    enhancement 
    opened by BlueGlassBlock 2
  • :arrow_up:(deps): Bump fastapi from 0.76.0 to 0.77.1

    :arrow_up:(deps): Bump fastapi from 0.76.0 to 0.77.1

    Bumps fastapi from 0.76.0 to 0.77.1.

    Release notes

    Sourced from fastapi's releases.

    0.77.1

    Upgrades

    Docs

    • 📝 Add link to german article: REST-API Programmieren mittels Python und dem FastAPI Modul. PR #4624 by @​fschuermeyer.
    • 📝 Add external link: PyCharm Guide to FastAPI. PR #4512 by @​mukulmantosh.
    • 📝 Add external link to article: Building an API with FastAPI and Supabase and Deploying on Deta. PR #4440 by @​aUnicornDev.
    • ✏ Fix small typo in docs/en/docs/tutorial/security/first-steps.md. PR #4515 by @​KikoIlievski.

    Translations

    Internal

    0.77.0

    Upgrades

    • ⬆ Upgrade Starlette from 0.18.0 to 0.19.0. PR #4488 by @​Kludex.
      • When creating an explicit JSONResponse the content argument is now required.

    Docs

    • 📝 Add external link to article: Seamless FastAPI Configuration with ConfZ. PR #4414 by @​silvanmelchior.
    • 📝 Add external link to article: 5 Advanced Features of FastAPI You Should Try. PR #4436 by @​kaustubhgupta.
    • ✏ Reword to improve legibility of docs about TestClient. PR #4389 by @​rgilton.
    • 📝 Add external link to blog post about Kafka, FastAPI, and Ably. PR #4044 by @​Ugbot.
    • ✏ Fix typo in docs/en/docs/tutorial/sql-databases.md. PR #4875 by @​wpyoga.
    • ✏ Fix typo in docs/en/docs/async.md. PR #4726 by @​Prezu.

    Translations

    • 🌐 Update source example highlights for docs/zh/docs/tutorial/query-params-str-validations.md. PR #4237 by @​caimaoy.
    • 🌐 Remove translation docs references to aiofiles as it's no longer needed since AnyIO. PR #3594 by @​alonme.
    • ✏ 🌐 Fix typo in Portuguese translation for docs/pt/docs/tutorial/path-params.md. PR #4722 by @​CleoMenezesJr.
    • 🌐 Fix live docs server for translations for some languages. PR #4729 by @​wakabame.
    • 🌐 Add Portuguese translation for docs/pt/docs/tutorial/cookie-params.md. PR #4112 by @​lbmendes.
    • 🌐 Fix French translation for docs/tutorial/body.md. PR #4332 by @​Smlep.
    • 🌐 Add Japanese translation for docs/ja/docs/advanced/conditional-openapi.md. PR #2631 by @​sh0nk.
    • 🌐 Fix Japanese translation of docs/ja/docs/tutorial/body.md. PR #3062 by @​a-takahashi223.
    • 🌐 Add Portuguese translation for docs/pt/docs/tutorial/background-tasks.md. PR #2170 by @​izaguerreiro.
    • 🌐 Add Portuguese translation for docs/deployment/deta.md. PR #4442 by @​lsglucas.
    • 🌐 Add Russian translation for docs/async.md. PR #4036 by @​Winand.

    ... (truncated)

    Commits
    • 2aaac14 🔖 Release version 0.77.1
    • 03cbdd4 📝 Update release notes
    • a7e659e 📝 Update release notes
    • 350745c 🌐 Add Polish translation for docs/pl/docs/tutorial/index.md (#4516)
    • d0e4015 📝 Update release notes
    • b1e6910 ✏ Fix typo in deployment (#4629)
    • 9b4e675 📝 Update release notes
    • 8082b45 📝 Update release notes
    • 86c459d 🌐 Add Portuguese translation for docs/pt/docs/help-fastapi.md (#4583)
    • 2a91ee9 📝 Add link to german article: REST-API Programmieren mittels Python und dem F...
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 2
  • [Feature] 通用的 help 解决方案

    [Feature] 通用的 help 解决方案

    使用场景

    通过一个统一的方式注册help菜单,然后通过特定的格式输出

    你想要的解决方案

    例如使用类似:

    @help.register("name1")
    @channel.use(
        ListenerSchema(
            listening_events=[FriendMessage],
            inline_dispatchers=[
                Twilight(
                    [FullMatch("添加管理员"), "adminid" @ WildcardMatch(optional=True)],
                )
            ],
        )
    )
    
    ...
    
    @help.register("name1")
    @channel.use(
        ListenerSchema(
            listening_events=[FriendMessage],
            inline_dispatchers=[
                Twilight(
                    [FullMatch("添加黑名单"), "userid" @ WildcardMatch(optional=True)],
                )
            ],
        )
    )
    
    ...
    
    @help.register("name2")
    @channel.use(
        ListenerSchema(
            listening_events=[FriendMessage],
            inline_dispatchers=[
                Twilight(
                    [FullMatch("查看状态")],
                )
            ],
        )
    )
    
    
    >> print(help.gen_help())
    
    1. name1
       添加管理员 <adminid>
       添加黑名单 <userid>
    
    2. name2
       查看状态
    

    大概就是这样的实现(? 当然只是举个例子,实际应该不会这么草率

    enhancement 
    opened by djkcyl 6
Releases(v0.10.3)
Owner
Graia Project
Creation & Exploration
Graia Project
A Python 2.7/3.x module for Amcrest Cameras using the SDK HTTP API.

A Python 2.7/3.x module for Amcrest Cameras using the SDK HTTP API. Amcrest and Dahua devices share similar firmwares. Dahua Cameras and NVRs also work with this module.

Marcelo Moreira de Mello 176 Dec 21, 2022
Graviti-python-sdk - Graviti Data Platform Python SDK

Graviti Python SDK Graviti Python SDK is a python library to access Graviti Data

Graviti 13 Dec 15, 2022
Python SDK for Facebook's Graph API

Facebook Python SDK This client library is designed to support the Facebook Graph API and the official Facebook JavaScript SDK, which is the canonical

Mobolic 2.7k Jan 7, 2023
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 5, 2023
Unofficial Medium Python Flask API and SDK

PyMedium - Unofficial Medium API PyMedium is an unofficial Medium API written in python flask. It provides developers to access to user, post list and

Engine Bai 157 Nov 11, 2022
Python SDK for the Buycoins API.

This library provides easy access to the Buycoins API using the Python programming language. It provides all the feature of the API so that you don't need to interact with the API directly. This library can be used with Python 3.6+

Musa Rasheed 48 May 4, 2022
qualysclient - a python SDK for interacting with the Qualys API

qualysclient - a python SDK for interacting with the Qualys API

null 5 Oct 28, 2022
Python SDK for accessing the Hanko Authentication API

Hanko Authentication SDK for Python This package is maintained by Hanko. Contents Introduction Documentation Installation Usage Prerequisites Create a

Hanko.io 3 Mar 8, 2022
Balsam Python client API & SDK

balsam No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) This Python package is automatically

Darren Govoni 1 Oct 22, 2021
Python SDK for interacting with the Frame.io API.

python-frameio-client Frame.io Frame.io is a cloud-based collaboration hub that allows video professionals to share files, comment on clips real-time,

Frame.io 37 Dec 21, 2022
DongTai API SDK For Python

DongTai-SDK-Python Quick start You need a config file config.json { "DongTai":{ "token":"your token", "url":"http://127.0.0.1:90"

huoxian 50 Nov 24, 2022
Python 3 SDK/Wrapper for Huobi Crypto Exchange Api

This packages intents to be an idiomatic PythonApi wrapper for https://www.huobi.com/ Huobi Api Doc: https://huobiapi.github.io/docs Showcase TODO Con

null 3 Jul 28, 2022
A wrapper for aqquiring Choice Coin directly through a Python Terminal. Leverages the TinyMan Python-SDK.

CHOICE_TinyMan_Wrapper A wrapper that allows users to acquire Choice Coin directly through their Terminal using ALGO and various Algorand Standard Ass

Choice Coin 16 Sep 24, 2022
HTTP Calls to Amazon Web Services Rest API for IoT Core Shadow Actions 💻🌐💡

aws-iot-shadow-rest-api HTTP Calls to Amazon Web Services Rest API for IoT Core Shadow Actions ?? ?? ?? This simple script implements the following aw

AIIIXIII 3 Jun 6, 2022
AWS SDK for Python

Boto3 - The AWS SDK for Python Boto3 is the Amazon Web Services (AWS) Software Development Kit (SDK) for Python, which allows Python developers to wri

the boto project 7.8k Jan 8, 2023
Box SDK for Python

Box Python SDK Installing Getting Started Authorization Server-to-Server Auth with JWT Traditional 3-legged OAuth2 Other Auth Options Usage Documentat

Box 371 Dec 29, 2022
Evernote SDK for Python

Evernote SDK for Python Evernote API version 1.28 This SDK is intended for use with Python 2.X For Evernote's beta Python 3 SDK see https://github.com

Evernote 612 Dec 30, 2022