Skip to main content
Glama
api.cpython-311.pyc31.9 kB
� �W)h�U���ddlZddlZddlZddlZddlmZmZmZmZd�Z de de de de de f d �Z d!d e d e de de de de f d�Z d"d e de de de de f d�Zd"d e de de de de f d�Zd"de de de de de f d�Zd"dede de de de f d�Zd"dede de de de f d�Zd"de de de de fd�Zd"de de dede de de de fd�Zd"de dede de de de f d�Zd"de dede de de de f d�Zd"de dee de de de de f d�Zd"de dee de de de de f d�Zd"de de de de fd �ZdS)#�N)�Dict�List�Union�Optionalc��K�tj��4�d{V��}|�|�d�||d�����d{V��}|jdkr|jcddd���d{V��S ddd���d{V��dS#1�d{V��swxYwYdS)u 登录到qBittorrent WebUI,获取会话cookie Args: username: 用户名 password: 密码 host: qBittorrent WebUI主机地址 Returns: 成功时返回包含会话cookie的对象,失败时返回None Nz/api/v2/auth/login)�username�password)�data��)�httpx� AsyncClient�post� status_code�cookies)rr �host�client�responses �</workspace/PC-Canary/apps/qBittorrent/qbittorrent_mcp/api.py�login_to_qbittorrentrs������ �"�"��������f����� '� '� '�&�H�=�=�%� � � � � � � � �� � �3� &� &��#������������������������������������������������s�5A8�$A8�8 B�B�queryrrr �returnc ��K�tdd��5}|�d|�d���ddd��n #1swxYwYt|||���d{V��}|sdS tj|��}t |t ��r|}nNt |t��r d|vr |d}n,dS#tj$r|� ��g}YnwxYw|sd Sg}tj ��4�d{V��} |D�]�} tj �| ��s|�d | �����;i} t| d ��5}|���} tj �| ��} d | | d fi} ddd��n #1swxYwYn?#t$$r2}|�d| �dt'|������Yd}~��d}~wwxYwd|�dd���dd��d�}| �|�d�| ||����d{V��}|jdkr|�d| ������T|jdkr|�d| ������y|�d| �d|j������� ddd���d{V��n#1�d{V��swxYwYd�|��S#tj$rYdSt$$r}dt'|����cYd}~Sd}~wwxYw)u 添加种子文件到qBittorrent Args: query: 包含种子文件路径的查询字符串 host: qBittorrent WebUI主机地址 username: 用户名 password: 密码 Returns: 添加结果的状态和消息 zqbittorrent_debug.log�au接收到的查询: � N�登录失败,无法获取SID� file_pathsu@错误:JSON格式无法识别,请提供符合要求的格式u$错误:未提供种子文件路径u文件不存在: �rb�torrentszapplication/x-bittorrentu读取文件错误 z: �*/*zhttp://�zhttps://)�Accept�Hostz/api/v2/torrents/add)�filesr�headersr u成功添加种子文件: i�u无效的种子文件: u添加种子文件失败 u : 状态码 u1错误:查询字符串不是有效的JSON格式u 错误:)�open�writer�json�loads� isinstance�list�dict�JSONDecodeError�stripr r �os�path�exists�append�read�basename� Exception�str�replacerr�join)rrrr �frr r�resultsr� file_pathr#� file_content� file_name�er$rs r�add_torrent_apir>s���� �%�s� +� +�2�q� ���0�u�0�0�0�1�1�1�2�2�2�2�2�2�2�2�2�2�2����2�2�2�2�)��8�T�B�B�B�B�B�B�B�B�G� �0�/�/�;$� Z��:�e�$�$�D� �$��%�%� Z�!� � ��D�$�'�'� Z�L�D�,@�,@�!�,�/� � �Y�Y���#� )� )� )��+�+�-�-��J�J�J� )����� :�9�9����$�&�&�" n�" n�" n�" n�" n�" n�" n�&�'�! n�! n� ��w�~�~�i�0�0���N�N�#B�y�#B�#B�C�C�C������i��.�.�d�!�'(�v�v�x�x� �$&�G�$4�$4�Y�$?�$?� �!+�i��Ga�-b� c��d�d�d�d�d�d�d�d�d�d�d����d�d�d�d���!�����N�N�#N��#N�#N�c�!�f�f�#N�#N�O�O�O��H�H�H�H��������� $� �L�L��B�7�7�?�?� �B�O�O���� "(����1�1�1��#�#� "-�"�"���������'�3�.�.��N�N�#K� �#K�#K�L�L�L�L��)�S�0�0��N�N�#H�Y�#H�#H�I�I�I�I��N�N�#l�y�#l�#l�V^�Vj�#l�#l�m�m�m�m�C! n�" n�" n�" n�" n�" n�" n�" n�" n�" n�" n�" n�" n�" n�" n�" n�" n�" n�" n�" n�" n�" n�" n�" n����" n�" n�" n�" n�H�y�y��!�!�!�� � �C�C�C�B�B�B� �$�$�$�#�3�q�6�6�#�#�#�#�#�#�#�#�����$���s��9�=�=�!B1�5:K�1$C�K�C�K�K�:AJ+�;F� ;F� F�F �F�F �F�J+� G�((G�J+�G�B>J+�K�+ J5�5K�8J5�9K�L�# L�,L�=L�LFr �hashes� delete_filesc��K�t|||���d{V��}|sdS |t|�����d�}ddd�}tj��4�d{V��}|�|�d�|||����d{V��} | jd kr1|d kr ddd���d{V��d Sd |��cddd���d{V��Std | j����td| j���� d | j�d| � ����cddd���d{V��S#d | j�d| j��cYcddd���d{V��SxYw#1�d{V��swxYwYdS#t$r} dt| ����cYd} ~ Sd} ~ wwxYw)u� 删除qBittorrent中的种子 Args: hashes: 要删除的种子哈希值,多个哈希值用|分隔,或者使用'all'删除所有种子 delete_files: 如果为True,同时删除下载的文件 host: qBittorrent WebUI主机地址 username: 用户名 password: 密码 Returns: 删除操作的结果消息 Nr)r?� deleteFilesr�/application/x-www-form-urlencoded;charset=UTF-8�r!z Content-Typez/api/v2/torrents/delete�r rr$r �allu成功删除所有种子u成功删除指定种子: u$删除种子失败,HTTP状态码: u 响应体: u , 响应体: �错误: ) rr5�lowerr r rr�print�textr'r4) r?r@rrr rr r$rrr=s r�delete_torrent_apirKos�����)��8�T�B�B�B�B�B�B�B�B�G� �0�/�/�$#���|�,�,�2�2�4�4� � ���M� � �� �$�&�&� u� u� u� u� u� u� u�&�#�[�[��0�0�0���� )���������H��#�s�*�*��U�?�?�5� u� u� u� u� u� u� u� u� u� u� u� u� u� u�A��@�@� u� u� u� u� u� u� u� u� u� u� u� u� u� u� �S�X�=Q�S�S�T�T�T��3�H�M�3�3�4�4�4�u�v�(�BV�v�v�em�er�er�et�et�v�v�' u� u� u� u� u� u� u� u� u� u� u� u� u� u��(u�t�(�BV�t�t�em�er�t�t�t�t�+ u� u� u� u� u� u� u� u� u� u� u� u� u� u���� u� u� u� u� u� u� u� u� u� u���� u� u� u� u� u� u��, �#�#�#�"�#�a�&�&�"�"�"�"�"�"�"�"�����#���sx�AE�!5E �E�)E �-E�.E �/D � E� E�4E �5E�E � E�E�E�E� F�(E?�9F�?Fc���K�t|||���d{V��}|sdS d|i}ddd�}tj��4�d{V��}|�|�d�|||����d{V��}|jd kr1|d kr ddd���d{V��d Sd |��cddd���d{V��Sd |j��cddd���d{V��S#1�d{V��swxYwYdS#t $r} dt | ����cYd} ~ Sd} ~ wwxYw)u. 暂停种子 Args: hashes: 要暂停的种子哈希值,多个哈希值用|分隔,或者使用'all'暂停所有种子 host: qBittorrent WebUI主机地址 username: 用户名 password: 密码 Returns: 暂停操作的结果消息 Nrr?rrCrDz/api/v2/torrents/stoprEr rFu成功暂停所有种子u成功暂停指定种子: u暂停种子失败: 状态码 rG�rr r rrr4r5� r?rrr r�paramsr$rrr=s r�pause_torrent_apirP�s�����)��8�T�B�B�B�B�B�B�B�B�G� �0�/�/�#��F�#���M� � �� �$�&�&� O� O� O� O� O� O� O�&�#�[�[��.�.�.���� )���������H��#�s�*�*��U�?�?�5� O� O� O� O� O� O� O� O� O� O� O� O� O� O�A��@�@� O� O� O� O� O� O� O� O� O� O� O� O� O� O�O��8L�N�N� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O���� O� O� O� O� O� O�� �#�#�#�"�#�a�&�&�"�"�"�"�"�"�"�"�����#����Y�"C�5B<�6C� B<� C� B<�)C�< C�C� C� C� C5�C0�*C5�0C5c���K�t|||���d{V��}|sdS d|i}ddd�}tj��4�d{V��}|�|�d�|||����d{V��}|jd kr1|d kr ddd���d{V��d Sd |��cddd���d{V��Sd |j��cddd���d{V��S#1�d{V��swxYwYdS#t $r} dt | ����cYd} ~ Sd} ~ wwxYw)u. 恢复种子 Args: hashes: 要恢复的种子哈希值,多个哈希值用|分隔,或者使用'all'恢复所有种子 host: qBittorrent WebUI主机地址 username: 用户名 password: 密码 Returns: 恢复操作的结果消息 Nrr?rrCrDz/api/v2/torrents/startrEr rFu成功恢复所有种子u成功恢复指定种子: u恢复种子失败: 状态码 rGrMrNs r�resume_torrent_apirS�s�����)��8�T�B�B�B�B�B�B�B�B�G� �0�/�/�#��F�#���M� � �� �$�&�&� O� O� O� O� O� O� O�&�#�[�[��/�/�/���� )���������H��#�s�*�*��U�?�?�5� O� O� O� O� O� O� O� O� O� O� O� O� O� O�A��@�@� O� O� O� O� O� O� O� O� O� O� O� O� O� O�O��8L�N�N� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O���� O� O� O� O� O� O�� �#�#�#�"�#�a�&�&�"�"�"�"�"�"�"�"�����#���rQ�hashc��K�t|||���d{V��}|sdS d|i}ddd�}tj��4�d{V��} |�|�d�|||����d{V��}n;#t$r.} d t | ����cYd} ~ cddd���d{V��Sd} ~ wwxYw|jd kr�|���} | s ddd���d{V��d Sg} | D]l} | �d ��} | �d ��}| �d��}| �d��s| � | ����m| s ddd���d{V��dSd� | ��cddd���d{V��Sd|j��cddd���d{V��S#1�d{V��swxYwYdS#t$r} d t | ����cYd} ~ Sd} ~ wwxYw)u 获取种子跟踪器 Args: hash: 要获取跟踪器的种子哈希值 host: qBittorrent WebUI主机地址 username: 用户名 password: 密码 Returns: 包含种子跟踪器的格式化字符串 NrrTrrCrDz/api/v2/torrents/trackers)rOrr$rGr u该种子没有跟踪器�url�status�msgz** [u$该种子没有有效的跟踪器URL�,u'获取种子跟踪器失败: 状态码 ) rr r �getr4r5rr'� startswithr1r7)rTrrr rrOr$rrr=�trackers� tracker_urls�trackerrVrWrXs r�get_torrent_trackers_urlsr_�sB����)��8�T�B�B�B�B�B�B�B�B�G� �0�/�/�+#��$����M� � �� �$�&�&�! X�! X�! X�! X�! X�! X�! X�&� +�!'����6�6�6�!�#�#� ",�"�"���������� � +� +� +�*�#�a�&�&�*�*�*�*�*�*�*�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X����� +�����#�s�*�*�#�=�=�?�?���6�5�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�$ "� �'�6�6�G�!�+�+�e�,�,�C�$�[�[��2�2�F�!�+�+�e�,�,�C��>�>�&�1�1�6�$�+�+�s�H�5�5�5��#�B�A�;! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�>�x�x� �-�-�?! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�BX��AU�W�W�C! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X�! X����! X�! X�! X�! X�! X�! X��D �#�#�#�"�#�a�&�&�"�"�"�"�"�"�"�"�����#���s��"F3�F �"A&�%F �& B�0B�B�F �F3�B�%F �F3�A4F � F3�F �1F3� F � F3� F*�*F3�-F*�.F3�3 G�=G�G�G�limitc��K�t|||���d{V��}|sdS d|i}ddd�}tj��4�d{V��}|�|�d�|||����d{V��}|jd krd |��cddd���d{V��Sd |j��cddd���d{V��S#1�d{V��swxYwYdS#t $r} d t | ����cYd} ~ Sd} ~ wwxYw) u� 设置全局下载限速 Args: limit: 限速值,单位为字节/秒 host: qBittorrent WebUI主机地址 username: 用户名 password: 密码 Returns: 设置限速的结果消息 Nrr`rrCrDz!/api/v2/transfer/setDownloadLimitrEr �成功设置限速:�设置限速失败: 状态码 rGrM� r`rrr rrOr$rrr=s r�set_global_download_limit_apire;s\����)��8�T�B�B�B�B�B�B�B�B�G� �0�/�/�#��5�!���M� � �� �$�&�&� O� O� O� O� O� O� O�&�#�[�[��:�:�:���� )���������H��#�s�*�*�4�U�4�4� O� O� O� O� O� O� O� O� O� O� O� O� O� O�O��8L�N�N� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O���� O� O� O� O� O� O�� �#�#�#�"�#�a�&�&�"�"�"�"�"�"�"�"�����#����M�"B5�2B"�3B5� B"�B5�" B,�,B5�/B,�0B5�5 C�?C�C�Cc��K�t|||���d{V��}|sdS d|i}ddd�}tj��4�d{V��}|�|�d�|||����d{V��}|jd krd |��cddd���d{V��Sd |j��cddd���d{V��S#1�d{V��swxYwYdS#t $r} d t | ����cYd} ~ Sd} ~ wwxYw) u� 设置全局上传限速 Args: limit: 限速值,单位为字节/秒 host: qBittorrent WebUI主机地址 username: 用户名 password: 密码 Returns: 设置限速的结果消息 Nrr`rrCrDz/api/v2/transfer/setUploadLimitrEr rbrcrGrMrds r�set_global_upload_limit_apirhbs\����)��8�T�B�B�B�B�B�B�B�B�G� �0�/�/�#��5�!���M� � �� �$�&�&� O� O� O� O� O� O� O�&�#�[�[��8�8�8���� )�!�!�!�!�!�!�!�!�H� �#�s�*�*�4�U�4�4� O� O� O� O� O� O� O� O� O� O� O� O� O� O�O��8L�N�N� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O� O���� O� O� O� O� O� O�� �#�#�#�"�#�a�&�&�"�"�"�"�"�"�"�"�����#���rfc���K�t|||���d{V��}|sdS ddi}tj��4�d{V��}|�|�d�||����d{V��}|jdkr+|j���cddd���d{V��Sd|j��cddd���d{V��S#1�d{V��swxYwYdS#t$r}d t|����cYd}~Sd}~wwxYw) uM 获取qBittorrent版本 Returns: qBittorrent版本 Nrr!rz/api/v2/app/version�rr$r u)获取qBittorrent版本失败: 状态码 rG) rr r rZrrJr-r4r5�rrr rr$rrr=s r�get_application_version_apirl�sM����)��8�T�B�B�B�B�B�B�B�B�G� �0�/�/�#� �e� ���$�&�&� Z� Z� Z� Z� Z� Z� Z�&�#�Z�Z��,�,�,���(���������H� �#�s�*�*��}�*�*�,�,� Z� Z� Z� Z� Z� Z� Z� Z� Z� Z� Z� Z� Z� Z�Z�8�CW�Y�Y� Z� Z� Z� Z� Z� Z� Z� Z� Z� Z� Z� Z� Z� Z� Z� Z� Z� Z� Z� Z� Z� Z� Z� Z���� Z� Z� Z� Z� Z� Z�� �#�#�#�"�#�a�&�&�"�"�"�"�"�"�"�"�����#���sM�C�AB0�C� B0�C�0 B:�:C�=B:�>C� C)� C$�C)�$C)�id�priorityc���K�t|||���d{V��}|sdS |||d�}ddd�}tj��4�d{V��} | �|�d�|||����d{V��} | jd krd |�d |�d |��cddd���d{V��Sd | j��cddd���d{V��S#1�d{V��swxYwYdS#t $r} d t | ����cYd} ~ Sd} ~ wwxYw)u� 设置文件优先级 Args: hash: 种子哈希值 id: correspond to file position inside the array returned by torrent contents API, e.g. id=0 for first file, id=1 for second file, etc. priority: Value Description 0 Do not download 1 Normal priority 6 High priority 7 Maximal priority Returns: 设置文件优先级的结果消息 HTTP Status Code Scenario 400 Priority is invalid 400 At least one file id is not a valid integer 404 Torrent hash was not found 409 Torrent metadata hasn't downloaded yet 409 At least one file id was not found 200 All other scenarios Nr)rTrmrnrrCrDz/api/v2/torrents/filePriorEr u成功设置文件优先级:�:u'设置文件优先级失败: 状态码 rGrM) rTrmrnrrr rrOr$rrr=s r�set_file_priority_apirq�ss����0)��8�T�B�B�B�B�B�B�B�B�G� �0�/�/�#��b�h�?�?���M�O�O���$�&�&� X� X� X� X� X� X� X�&�#�[�[��2�2�2���� )�!�!�!�!�!�!�!�!�H� �#�s�*�*�L�d�L�L�R�L�L�(�L�L� X� X� X� X� X� X� X� X� X� X� X� X� X� X�X��AU�W�W� X� X� X� X� X� X� X� X� X� X� X� X� X� X� X� X� X� X� X� X� X� X� X� X���� X� X� X� X� X� X�� �#�#�#�"�#�a�&�&�"�"�"�"�"�"�"�"�����#���sM�$B=�8B*�;B=� B*�B=�* B4�4B=�7B4�8B=�= C#�C�C#�C#c���K�t|||���d{V��}|sdS ||d�}ddd�}tj��4�d{V��}|�|�d�|||����d{V��} | jd krd |�d |��cddd���d{V��Sd | j��cddd���d{V��S#1�d{V��swxYwYdS#t $r} d t | ����cYd} ~ Sd} ~ wwxYw)u! 设置种子下载限速 Args: hash: 种子哈希值 limit: 限速值,单位为字节/秒 host: qBittorrent WebUI主机地址 username: 用户名 password: 密码 Returns: 设置种子下载限速的结果消息 Nr�r?r`r�!application/x-www-form-urlencodedrDz!/api/v2/torrents/setDownloadLimitrEr u成功设置种子下载限速:rpu*设置种子下载限速失败: 状态码 rGrM� rTr`rrr rrOr$rrr=s r�set_torrent_download_limit_apirv�sg����)��8�T�B�B�B�B�B�B�B�B�G� �0�/�/�#� �5�1�1���?� � �� �$�&�&� [� [� [� [� [� [� [�&�#�[�[��:�:�:���� )�!�!�!�!�!�!�!�!�H� �#�s�*�*�G��G�G��G�G� [� [� [� [� [� [� [� [� [� [� [� [� [� [�[�H�DX�Z�Z� [� [� [� [� [� [� [� [� [� [� [� [� [� [� [� [� [� [� [� [� [� [� [� [���� [� [� [� [� [� [�� �#�#�#�"�#�a�&�&�"�"�"�"�"�"�"�"�����#����M�#B9�5B&�7B9� B&�B9�& B0�0B9�3B0�4B9�9 C�C�C�Cc���K�t|||���d{V��}|sdS ||d�}ddd�}tj��4�d{V��}|�|�d�|||����d{V��} | jd krd |�d |��cddd���d{V��Sd | j��cddd���d{V��S#1�d{V��swxYwYdS#t $r} d t | ����cYd} ~ Sd} ~ wwxYw)u! 设置种子上传限速 Args: hash: 种子哈希值 limit: 限速值,单位为字节/秒 host: qBittorrent WebUI主机地址 username: 用户名 password: 密码 Returns: 设置种子上传限速的结果消息 NrrsrrtrDz/api/v2/torrents/setUploadLimitrEr u成功设置种子上传限速:rpu*设置种子上传限速失败: 状态码 rGrMrus r�set_torrent_upload_limit_apiry�sg����)��8�T�B�B�B�B�B�B�B�B�G� �0�/�/�#� �5�1�1���?� � �� �$�&�&� [� [� [� [� [� [� [�&�#�[�[��8�8�8���� )�!�!�!�!�!�!�!�!�H� �#�s�*�*�G��G�G��G�G� [� [� [� [� [� [� [� [� [� [� [� [� [� [�[�H�DX�Z�Z� [� [� [� [� [� [� [� [� [� [� [� [� [� [� [� [� [� [� [� [� [� [� [� [���� [� [� [� [� [� [�� �#�#�#�"�#�a�&�&�"�"�"�"�"�"�"�"�����#���rwr\c���K�t|||���d{V��}|sdS ||d�}ddd�}tj��4�d{V��}|�|�d�|||����d{V��} | jd krd |�d |��cddd���d{V��Sd | j��cddd���d{V��S#1�d{V��swxYwYdS#t $r} d t | ����cYd} ~ Sd} ~ wwxYw)u$ 添加跟踪器到种子 Args: hash: 种子哈希值 url: 跟踪器URL example: hash=8c212779b4abde7c6bc608063a0d008b7e40ce32&urls=http://192.168.0.1/announce%0Audp://192.168.0.1:3333/dummyAnnounce Returns: 添加跟踪器的结果消息 Nr)rT�urlsrrtrDz/api/v2/torrents/addTrackersrEr u成功添加跟踪器:rpu!添加跟踪器失败: 状态码 rGrM) rTr\rrr rrOr$rrr=s r�add_trackers_to_torrent_apir|sg����)��8�T�B�B�B�B�B�B�B�B�G� �0�/�/�#���1�1���?� � �� �$�&�&� R� R� R� R� R� R� R�&�#�[�[��5�5�5���� )�!�!�!�!�!�!�!�!�H� �#�s�*�*�A��A�A�x�A�A� R� R� R� R� R� R� R� R� R� R� R� R� R� R�R�8�;O�Q�Q� R� R� R� R� R� R� R� R� R� R� R� R� R� R� R� R� R� R� R� R� R� R� R� R���� R� R� R� R� R� R�� �#�#�#�"�#�a�&�&�"�"�"�"�"�"�"�"�����#���rw�tagsc���K�t|||���d{V��}|sdS ||d�}ddd�}tj��4�d{V��}|�|�d�|||����d{V��} | jd krd |�d |��cddd���d{V��Sd | j��cddd���d{V��S#1�d{V��swxYwYdS#t $r} d t | ����cYd} ~ Sd} ~ wwxYw)u" 添加种子标签 Args: hash: 种子哈希值 tags: 标签列表 example: hashes=8c212779b4abde7c6bc608063a0d008b7e40ce32|284b83c9c7935002391129fd97f43db5d7cc2ba0&tags=TagName1,TagName2 Returns: 添加种子标签的结果消息 Nr)r?r}rrtrDz/api/v2/torrents/addTagsrEr u成功添加种子标签:rpu$添加种子标签失败: 状态码 rGrM) rTr}rrr rrOr$rrr=s r�add_torrent_tags_apirBsg����)��8�T�B�B�B�B�B�B�B�B�G� �0�/�/�#� �$�/�/���?� � �� �$�&�&� U� U� U� U� U� U� U�&�#�[�[��1�1�1���� )�!�!�!�!�!�!�!�!�H� �#�s�*�*�@�4�@�@�$�@�@� U� U� U� U� U� U� U� U� U� U� U� U� U� U�U�h�>R�T�T� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U���� U� U� U� U� U� U�� �#�#�#�"�#�a�&�&�"�"�"�"�"�"�"�"�����#���rwc���K�t|||���d{V��}|sdS ddi}tj��4�d{V��}|�|�d�||����d{V��}|jdkr&|���cddd���d{V��Sd|j��cddd���d{V��S#1�d{V��swxYwYdS#t $r}d t|����cYd}~Sd}~wwxYw) u 获取种子列表 Nrr!rz/api/v2/torrents/inforjr u$获取种子列表失败: 状态码 rG)rr r rZrr'r4r5rks r�get_torrent_list_apir�gsG����)��8�T�B�B�B�B�B�B�B�B�G� �0�/�/�#� �e� �� �$�&�&� U� U� U� U� U� U� U�&�#�Z�Z��.�.�.���(�!�!�!�!�!�!�!�!�H��#�s�*�*��}�}���  U� U� U� U� U� U� U� U� U� U� U� U� U� U�U�h�>R�T�T� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U� U���� U� U� U� U� U� U�� �#�#�#�"�#�a�&�&�"�"�"�"�"�"�"�"�����#���sM�B>�AB+�<B>� B+�B>�+ B5�5B>�8B5�9B>�> C$�C�C$�C$)Fr r r )r r r )r r.r'�base64�typingrrrrrr5r>�boolrKrPrSr_�intrerhrlrqrvryr|rr���r�<module>r�s�� � � � � � � � � � � � � � � � �.�.�.�.�.�.�.�.�.�.�.�.����,P$��P$�C�P$�3�P$�#�P$�RU�P$�P$�P$�P$�d6#�6#�S�6#��6#�C�6#�`c�6#�tw�6#�BE�6#�6#�6#�6#�p*#�*#�C�*#�s�*#�3�*#�WZ�*#�dg�*#�*#�*#�*#�X)#�)#�S�)#��)#�C�)#�X[�)#�eh�)#�)#�)#�)#�V;#�;#�#�;#�S�;#��;#�]`�;#�jm�;#�;#�;#�;#�z%#�%#�s�%#�#�%#�c�%#�be�%#�or�%#�%#�%#�%#�N##�##�S�##��##�C�##�`c�##�mp�##�##�##�##�J#�#�C�#��#�TW�#�ad�#�#�#�#�8-#�-#�c�-#�s�-#�c�-#��-#�]`�-#�qt�-#�B�-#�-#�-#�-#�^$#�$#�s�$#�3�$#�c�$#�Z]�$#�nq�$#�{~�$#�$#�$#�$#�N$#�$#�S�$#��$#�C�$#�X[�$#�lo�$#�y|�$#�$#�$#�$#�L!#�!#�C�!#�4��9�!#�C�!#�`c�!#�tw�!#�BE�!#�!#�!#�!#�F##�##�S�##��S� �##��##�UX�##�il�##�vy�##�##�##�##�J#�#�S�#��#�S�#�Z]�#�#�#�#�#�#r�

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/pickpppcc/qbittorrent-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server