Skip to main content
Glama
jonathan-politzki

Official Substack MCP Server

substack.cpython-313.pyc4.83 kB
� �@�g� ���SrSSKrSSKJr SSKJr SSKrSSKrSSKrSSKJ r SSK J r J r \R"\5r"SS\ 5rg) z/ Substack scraper for Writer Context Protocol. �N)�datetime)�List)� BeautifulSoup)� BaseScraper�Postc�H�\rSrSrSrS\\4Sjr\S\ S\ 4Sj5r Sr g) �SubstackScraper�zScraper for Substack blogs.�returnc ��b# �[RSUR35 [R"SS9IShv�N nUR URS35IShv�N nUR 5 [R"UR5n[RS[UR535 SSS5IShv�N /nWRSUR H�nS U;aUR"S R$O UR&n[)US 5nUR+UR-S SS 95n Sn [/US5(a"[0R2"UR4S5n [;UR+UR<5UR>U U SS9n URAU 5 M� [RS[U5S35 U$GN�GN�GN!,IShv�N (df  GN4=f![Ra$n[RSU35 /sSnA$SnAf[a-n[RS[U535 /sSnA$SnAff=f![6aZ [0R2"UR4S5n GN,![6a' [R9SUR435 GN\f=ff=f![a@n[RSUR SS5S[U535 SnAGM8SnAff=f7f)zc Scrape posts from a Substack blog. Returns: A list of Post objects with content and metadata zFetching Substack posts from: T)�follow_redirectsN�feedzNumber of entries in feed: z HTTP error: zError fetching Substack feed: �contentrz html.parser� )� separator�strip� publishedz%a, %d %b %Y %H:%M:%S %zz%a, %d %b %Y %H:%M:%SzCould not parse date: �)�title�urlr�date�subtitlezError processing Substack post �link�unknownz: zScraped z posts from Substack)!�logger�infor�httpx� AsyncClient�get�raise_for_status� feedparser�parse�text�len�entries�HTTPStatusError�error� Exception�str� max_postsr�value�summaryr�_clean_content�get_text�hasattrr�strptimer� ValueError�warningrrr�append) �self�client�responser�e�posts�entryr�soup� cleaned_text�pub_date�posts �O/Users/jonathanpolitzki/Desktop/Coding/mcp-writer-substack/scrapers/substack.py�scrape�SubstackScraper.scrapes���� � �K�K�8���� �C� D��(�(�$�?�?�6�!'���t�x�x�j��,=�!>�>���)�)�+�!�'�'�� � �6��� � �9�#�d�l�l�:K�9L�M�N� @�?����\�\�/�4�>�>�2�E� i�4=��4F�%�-�-��*�0�0�E�M�M��$�W�m�<��#�2�2�4�=�=�3�VZ�=�3[�\� � ���5�+�.�.�W�#+�#4�#4�U�_�_�F`�#a����-�-�e�k�k�:�� � �(�!�� ��� � �T�"�53�< � � �h�s�5�z�l�*>�?�@�� �Y@�>�@�?�?�?�� �$�$� � �L�L�<��s�+� ,��I��� � �L�L�9�#�a�&��B� C��I�� ��"&�W�W�'/�'8�'8����Ja�'b�H��)�W�"�N�N�-C�E�O�O�CT�+U�V�V�W�� W��� i�� � �>�u�y�y��QZ�?[�>\�\^�_b�cd�_e�^f�g�h�h�� i�s�L/�:H �G'�H �"G0�$G*�%AG0� H �G-�H �L/�3A)K"�!I;�>AK"�?(L/�'H �*G0�-H �0H�6G9 �7 H�H �L/�H � I8�H>�8I8�9L/�> I8� "I3�-I8�.L/�3I8�8L/�; K�!J*�'K"�*,K�K�K"�K�K�K"�" L,�,4L'� L/�'L,�,L/rc�R�[R"SSU5R5nU$)z+Remove extra whitespace and normalize text.z\s+r)�re�subr)rs r>r-�SubstackScraper._clean_contentLs$���&�&���g�.�4�4�6�����N) �__name__� __module__� __qualname__�__firstlineno__�__doc__rrr?� staticmethodr)r-�__static_attributes__rFrEr>r r s8��%�5�d�4�j�5�n�������rEr )rK�loggingr�typingrrBr!r�bs4r� scrapers.baserr� getLoggerrGrr rFrEr>�<module>rSs@������ �� ��+� � � �8� $��?�k�?rE

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/jonathan-politzki/mcp-writer-substack'

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