Skip to main content
Glama
main.cpython-312.pyc14.8 kB
� �/9hu8���UddlmZmZddlmZddlZddlZddlmZm Z m Z ddl m Z ddl mZmZddlmZe�ej&e�ZGd�d e�Ze�Zdaee ed <daeeed <d �Zej9d �d��Zej9d�d��ZGd�de�ZGd�de�Z ejCde ��d��Z"ejCde��d��Z#Gd�de�Z$ejKde$��d��Z&Gd�de�Z'ejKd e'��d!efd"��Z(ejCd#�d$��Z)ed%k(r,ddl*Z*ejWd&�e*jXd'd(d)d*�+�yy),�)�FastAPI� HTTPException)� BaseModelN)�Optional�Any�Dict)� ZhihuAuth)�ZhihuPublisher� ArticleData)� setup_loggingc�"�eZdZUdZeeed<y)�ArticleDataApiN� cover_image)�__name__� __module__� __qualname__rr�str�__annotations__��� C:\code\zhihu_mcp_server\main.pyrrs��"&�K��#��%rr�auth_manager_instance�publisher_instancec� �tjd�tr+tjd�tj�da tj j tj jt��}tj j|d�}tjd|���t|��att��a tjd�tjd � �}|d urtjd �y|d urtjd �ytjd�y#t$r(}tj!d|��d ��dada Yd}~yd}~wwxYw)z1Initializes or re-initializes service components.u开始服务组件初始化...u>检测到现有AuthManager实例,正在关闭其WebDriver...Nzzhihu_cookies.jsonu(AuthManager将使用Cookie文件路径: )�cookies_file_path)� auth_manageru服务组件初始化成功。F��require_browser_sessionTu*用户已登录 (通过启动时检查)。u*用户未登录 (通过启动时检查)。u<用户登录状态未知 (通过启动时轻量级检查)。u2服务组件初始化过程中发生严重错误: ��exc_info)�logger�infor� close_driver�os�path�dirname�abspath�__file__�joinr r r�check_login_status�warning� Exception�error)�project_root_dirr�initial_login_status�es r�initialize_service_componentsr1s/�� �K�K�0�1��� � �T�U��*�*�,� $��!"��7�7�?�?�2�7�7�?�?�8�+D�E���G�G�L�L�)9�;O�P��� � �>�?P�>Q�R�S�!*�<M� N��+�9N�O��� � �4�5� 5�G�G�`e�G�f�� �4� '� �K�K�D� E� !�U� *� �N�N�G� H� �K�K�V� W�� �"�� � �I�!��M�X\� �]� $��!��� "�s%�CE�!E�;E� F�E=�=F�startupc��tK�tjd�t�tjd�y�w)Nu-MCP服务器正在启动生命周期事件...u6MCP服务器已启动并完成组件初始化尝试。)r!r"r1rrr� startup_eventr4Ss&���� �K�K�?�@�!�#� �K�K�H�I�s�68�shutdownc��K�tjd�tr)tjd�tj�tjd�y�w)Nu-MCP服务器正在关闭生命周期事件...u,正在关闭AuthManager持有的WebDriver...uMCP服务器已成功关闭。)r!r"rr#rrr�shutdown_eventr7[s>���� �K�K�?�@��� � �B�C��*�*�,� �K�K�0�1�s�AAc�P�eZdZUeed<eed<eeed<dZeeee fed<y)�ReinitializeResponse�status�message� login_statusN�details) rrrrrr�boolr=rrrrrr9r9ds-�� �K� �L��4�.� �(,�G�X�d�3��8�n� %�,rr9c�F�eZdZUeed<eeed<dZeeed<eed<y)�HealthResponser:r<Nr;�service_initialized)rrrrrrr>r;rrrr@r@js%�� �K��4�.� �!�G�X�c�]�!��rr@z/zhihu-mcp-server/health)�response_modelc��@K�tjd�d}d}d}tr0tr*d} tj d��}|durd}n |durd}nd }nd }t|rdnd|||��S#t $r)}tj d |��d� �d |��}Yd}~�@d}~wwxYw�w)ul轻量级健康检查,主要检查服务是否初始化以及缓存的登录状态。不启动浏览器。u0收到 /health (轻量级) 健康检查请求...FN�Tru0服务已初始化,缓存状态为已登录。u0服务已初始化,缓存状态为未登录。u?服务已初始化,缓存的登录状态未知或已过期。u%/health 检查登录状态时出错: r�检查登录状态时出错: u>核心服务组件 (AuthManager 或 Publisher) 未初始化。�okr-)r:r<r;rA)r!r"rrr*r,r-r@)rA�login_s�msgr0s r� health_checkrIps����� �K�K�B�C����G� �C��!3�"�� 6�+�>�>�W\�>�]�G��$��H���E�!�H��W��� O�� �*�t����/�  ���� 6� �L�L�@���D�t�L� T�1�!��5�C�� 6�s.�*B�&A)�B�) B�2B�B�B�Bz/zhihu-mcp-server/reinitializec ���K�tjd� t�d}d}i}trDtj d��}|dur|dz }tj �}n8|dur|dz }n.|d z }n(d }tj |�td |dd d i��Std|||��S#t$rA}tj d|��d��td d|��dd t|�i��cYd}~Sd}~wwxYw�w)uc强制重新初始化服务组件,并执行完整的登录状态检查 (可能启动浏览器)。u6收到 /reinitialize (强制刷新与检查) 请求...Nu'服务实例已成功重新初始化。Tru 用户已登录。Fu. 用户未登录。可能需要手动登录。u= 登录状态检查未能明确确定 (可能发生错误)。uA服务实例重新初始化后,AuthManager未能成功创建。r-� error_detailzAuthManager is None after init)r:r;r<r=�successu2服务重新初始化过程中发生未知错误: ru重新初始化过程失败: ) r!r"r1rr*� get_user_infor-r9r,r)rGr;� details_dictr0s r�reinitialize_service_endpointrO�s=���� �K�K�H�I�V�%�'�"&��;��� � �+�>�>�W[�>�\�G��$���0�0��4�B�B�D� ��E�!��K�K���Z�Z��Y�G� �L�L�� !�'�w��VZ�es�vV�eW�X� X�#�9�g�T[�eq�r�r�� �V�� � �I�!��M�X\� �]�#�7�>[�\]�[^�<_�nr�~L�NQ�RS�NT�}U�V� V��V�sA�C7�BB*�C7�B*�)C7�* C4�36C/�)C4�*C7�/C4�4C7c�"�eZdZUeed<eed<y)�BrowserControlResponser:r;N)rrrrrrrrrQrQ�s �� �K� �LrrQz/zhihu-mcp-server/close_browserc��rK�tjd�tr7 tj�tjd�t dd��Stjd �t d d ��S#t $r4}tj d|��d��t d d |����cYd }~Sd }~wwxYw�w)uD尝试关闭由AuthManager管理的任何活动的浏览器会话。u收到 /close_browser 请求...u-通过API请求关闭浏览器会话成功。rLu!浏览器会话已尝试关闭。)r:r;u&关闭浏览器会话时发生错误: Trr-u关闭浏览器时出错: Nu5/close_browser 请求,但AuthManager未初始化。u2AuthManager未初始化,无法关闭浏览器。)r!r"rr#rQr,r-r+)r0s r�close_browser_sessionrS�s����� �K�K�1�2�� d� !� .� .� 0� �K�K�G� H�)��Dg�h� h� ���N�O�%�W�>r�s�s�� � d� �L�L�A�!��E�PT�L� U�)��D^�_`�^a�Bb�c� c�� d�s4�B7�5A7�#B7�7 B4�)B/�)B4�*B7�/B4�4B7c�6�eZdZUeed<eed<dZeeed<y)�ArticleResponser:r;N�data)rrrrrrVr�dictrrrrUrU�s�� �K� �L��D�(�4�.�rrUz /zhihu-mcp-server/create_article� article_datac ��K�tjd|j�dt|jxsd��dt|j xsg��d|j �d|j�� �trtsdtjd� tjd�t�trts"tjd �td d � �� tjd��}|dur%tjd�tddddi��S tj!|j|j|j |j|j ��}|j#d�r1tjd|j�d��tdd|��Stjd|j�d|j#d����td|j#dd �|��S#t$r/}tjd |��d��td d|��� ��d}~wwxYw#t$r7}tjd|��d��tdd|��ddi��cYd}~Sd}~wwxYw#t$rN}tjd!|j�d"|��d��tdd#|��dt%|�d$���cYd}~Sd}~wwxYw�w)%Nu"收到文章发布请求: 标题: u, 内容长度: rDu, 图片数量: u , 封面图: u , 标签: u*发布文章:核心服务未初始化。u9发布文章:尝试自动重新初始化核心服务...uE发布文章:自动重新初始化后核心服务仍然不可用。i�u6核心服务在自动重新初始化后仍不可用。)� status_code�detailu8发布文章:自动重新初始化核心服务失败: Tru)核心服务自动重新初始化失败: ru<发布文章:用户未登录或登录状态无法确认。r-uW用户未登录或登录状态无法确认,请先通过 /reinitialize 确保登录。rLF)r:r;rVu2发布文章:检查登录状态时发生错误: rE)�title�content� image_paths�tagsru文章 'u' 发布成功。u文章发布成功u' 发布失败: r;u$文章发布失败,未知原因。u发布文章 'u%' 过程中发生未处理的异常: u,发布文章时发生服务器内部错误: )rLr[)r!r"r\�lenr]r^rr_rrr-r1rr,r*rU�create_article�getr)rX�e_init�current_login_status�e_check�result� e_publishs r�create_article_endpointrh�s_���� �K�K�4�\�5G�5G�4H�HX�Y\�]i�]q�]q�]w�uw�Yx�Xy�zJ�KN�O[�Og�Og�Om�km�Kn�Jo�o|�}I�}U�}U�|V�V`�am�ar�ar�`s�t�u� �(:�� � �A�B� n� �K�K�S� T� )� +�(�0B�� � �d�e�#��<t�u�u�1C�{�4�G�G�`d�G�e�� �t� +� �L�L�W� X�"�'�<U�]f�hm�\n�o� o� ,�f�#�2�2��$�$� �(�(�$�0�0��"�"�$�0�0� 3� �� �:�:�i� � �K�K�(�<�#5�#5�"6�6G�H� I�"�)�=Q�X^�_� _� �L�L�8�L�$6�$6�#7�7G�� � �S\�H]�G^�_� `�"�'�6�:�:�i�Qw�;x�@F�G� G��7� n� �L�L�S�TZ�S[�\�gk�L� l��C�:c�dj�ck�8l�m� m�� n�� �{�� � �I�'��S�^b� �c��g�9V�W^�V_�7`�hq�sx�gy�z�z��{��$ �f�� � �~�l�&8�&8�%9�9^�_h�^i�j�uy� �z��g�9e�fo�ep�7q�EJ�VY�Zc�Vd�ye�f� f��f�s��BK�A H�"K�$>I�"K�%B J�2K�3AJ�K� H=�*H8�8H=�=K� J� ,I;�5J�6K�;J�K� K� AK�K�K�K�Kz/zhihu-mcp-server/statusc��K�tjd�d}d}trtrtj d��}d}|rdnd||dd�S�w) NuT接口 /zhihu-mcp-server/status 已被弃用,请使用 /zhihu-mcp-server/health。FrT�running�degraded_or_uninitializedz�This endpoint is deprecated. Please use /zhihu-mcp-server/health for lightweight status or /zhihu-mcp-server/reinitialize for a full check and refresh.)�service_statusr<�service_components_initialized�deprecation_warning)r!r+rrr*)rG�service_initialized_properlys r�get_status_deprecatedrp�s_���� �N�N�i�j��G�#(� ��!3�'�:�:�SX�:�Y��'+�$�(D�)�Id��*F� y�  ��s�A A �__main__uI以直接脚本方式启动Uvicorn服务器 (主要用于开发测试)...zmain:appz0.0.0.0iET)�host�port�reload)-�fastapirr�pydanticr�loggingr$�typingrrr�zhihu_mcp_server.authr �zhihu_mcp_server.publisherr r �PublisherArticleData�zhihu_mcp_server.utilsr � getLoggerrr!r�apprrrr1�on_eventr4r7r9r@rbrIrOrQ�postrSrUrhrp�uvicornr"�runrrr�<module>r�s���*�*��� �&�&� ,�Z�0��� �� � �8� $��&�)�&� �i��.2��x� �*�1�/3��H�^�,�3�-"�h���i��J��J����j��2��2�-�9�-� �Y�� ��� #�N��C��D��@��� )�:N��O�V�P�V�@�Y����� +�<R��S�t�T�t�  �i� � ��� ,�_��M�,f��,f�N�,f�^��� #�$��%��" �z��� �K�K�[�\��G�K�K� ���d�C� r

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/chemany/zhihu_mcp_server'

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