Package: api2ch
api2ch⚡️ Async API Wrapper for 2ch Imageboard with typingsDocs:https://2ch.hk/api/res/1.html📝 Table of Contents🎒 Installation🛠 ExamplesSimpleSimple AsyncBoardsBoards AsyncTop threadsTop Threads AsyncComplexComplex Async📜 ManualMethodsTypesIn case of unsupported types💬 Contributing📝 License🎒 InstallationJustpip install api2ch🛠 ExamplesSimplefromapi2chimportApi2chapi=Api2ch()resp=api.threads('vg')fortinresp.threads[:3]:print(f'—{t.subject},{t.posts_count}💬,{t.views}👁')Output:— Paradox Thread №6 стрессовый, 771 💬, 1879 👁
— BioWare General: Varric Tethras Edition, 207 💬, 644 👁
— Fate/Grand Order #193, 683 💬, 4804 👁Simple Asyncimportasynciofromapi2chimportApi2chAsyncasyncdefmain():asyncwithApi2chAsync()asapi:resp=awaitapi.threads('hw')fortinresp.threads[:3]:print(f'—{t.subject},{t.posts_count}💬,{t.views}👁')asyncio.run(main())Output:— Видеокарты AMD #95, 418 💬, 3778 👁
— Сап. Впервые в этом разделе. Как научится разбираться в железе?, 3 💬, 9 👁
— Ноутбукотред №36, 185 💬, 970 👁Boardsfromapi2chimportApi2chapi=Api2ch()forboardin('tv','hw','fiz'):c=api.catalog(board)print(f'/{c.board}|{c.board_name}, "{c.board_info_outer}", bump limit:{c.bump_limit}')Output:/tv | Сериалы, "сериалы для домохозяек, игры престолов в /got/", bump limit: 500
/hw | Компьютерное железо, "железо, видеокарты, ноутбуки, intel, amd, nvidia, ati", bump limit: 500
/fiz | Физкультура, "физкультура, здоровье, сбросить вес, набрать вес, бицуха", bump limit: 800Boards Asyncimportasynciofromapi2chimportApi2chAsyncasyncdefmain():asyncwithApi2chAsync()asapi:coros=[api.catalog(board)forboardin('spc','un','math')]forcoroinasyncio.as_completed(coros):c=awaitcoroprint(f'/{c.board}|{c.board_name}, "{c.board_info_outer}", bump limit:{c.bump_limit}')asyncio.run(main())Output:/un | Образование, "образование, вуз, школа, поступление, гиа, егэ, уже не школьник", bump limit: 500
/spc | Космос и астрономия, "космос, астрономия, вселенные, звезды, огурцы", bump limit: 500
/math | Математика, "Доска о модулях над кольцами, пучках на многообразиях и гомологиях с когомологиями.", bump limit: 500Top threadsfromapi2chimportApi2chapi=Api2ch()boards=api.boards_by_types()forboardinboards.Art:threads=api.threads(board.id)top_thread=threads.sorted_by_views()[0]print(f'— /{threads.request.board}|{board.name}| Top thread:{top_thread.subject},{top_thread.views}👁')Output:— /di | Столовая | Top thread: НОВОЙ БАНОЧКИ НИТЬ ИДИ, 123475 👁
— /de | Дизайн | Top thread: Зарплата, 48958 👁
— /diy | Хобби | Top thread: Кристаллический тред, 1620541 👁
— /mus | Музыканты | Top thread: Язычковых тред., 153772 👁
— /pa | Живопись | Top thread: Сталин 3000, 40392 👁
— /p | Фотография | Top thread: Ссылкотред, 34182 👁
— /wp | Обои и высокое разрешение | Top thread: Милитари пак, 38348 👁
— /wrk | Работа и карьера | Top thread: Яндекс Дзена /zen тред 11, 33648 👁Top Threads Asyncimportasynciofromapi2chimportApi2chAsyncasyncdefmain():asyncwithApi2chAsync()asapi:boards=awaitapi.boards_by_types()coros=[api.threads(board.id)forboardinboards.Technology]forcoroinasyncio.as_completed(coros):threads=awaitcorotop_thread=threads.sorted_by_views()[0]print(f'— /{threads.request.board}| Top thread:{top_thread.subject},{top_thread.views}👁')asyncio.run(main())Output:— /ra | Top thread: OsmocomBB - Motorola, 1517590 👁
— /hw | Top thread: VR тред возрожденный #4, 17638 👁
— /t | Top thread: Выбираем робот-пылесос, 22336 👁
— /s | Top thread: Форки лиса, 49613 👁
— /pr | Top thread: Советов ньюфагу тред, 25838 👁
— /gd | Top thread: В этом треде ищем напарников для создания своих, 38633 👁
— /mobi | Top thread: PUBG MOBILE/Пупок мобайл-THREAD, 70643 👁Compleximportapi2chapi=api2ch.Api2ch()defparse_post(url:str)->str:valid,board,thread_id=api2ch.parse_url(url)ifnotvalid:raiseapi2ch.Api2chError(404,'Invalid URL')thread=api.thread(board,thread_id)post=thread.posts[0]text=''text+=f'{post.dt().isoformat()}| Пост №{post.post_id}:{post.url(thread.board)}:\n\n'text+=f'{post.header}\n'ifthread.enable_subjectelse''text+=f'{post.body_text}\n\n'ifpost.files:text+='Файлы:\n'forfinpost.files:text+=f'—{f.original_name},{f.size_string}:{f.url()}\n'returntextdefpretty_print_post(url:str):try:text=parse_post(url)exceptapi2ch.Api2chErrorase:print('Request Error',e.code,e.reason)else:print(text)if__name__=='__main__':pretty_print_post('https://2ch.hk/cg/res/1323206.html')Output:2018-07-19T10:13:24 | Пост №1323206: https://2ch.hk/cg/res/1323206.html#1323206:

Тред для междоусобных холиваров
Сравниваем платформы, а так же помогаем ньюфагам определиться с выбором приставки и техническими вопросами.

Обязателен к прочтению FAQ раздела: https://2ch.hk/faq/faq_cg.html

Файлы:
— изображение.png, 84 Кб: https://2ch.hk/cg/src/1323206/15319844042830.pngComplex Asynccomplex_async.py, same as previous but:api = api2ch.Api2chAsync()andthread = await api.thread(board, thread_id)📜 ManualMethodsApi2chmethods (and same forApi2chAsyncbut withasync):classApi2ch(Api2chBase):...defthread(self,board:str,thread:Union[str,int])->ResponseThread:...defthreads(self,board:str)->ResponseThreads:...defcatalog(self,board:str)->ResponseCatalog:...defcatalog_by_date(self,board:str)->ResponseCatalogByDate:...defpage(self,board:str,page:Union[str,int])->ResponsePage:...defboards(self)->ResponseBoards:...defboards_by_types(self)->ResponseBoardsByTypes:...defthread_posts_by_num(self,board:str,thread:Union[str,int],num:Union[str,int])->ResponseThreadPostsByNum:...defthread_posts_by_post(self,board:str,thread:Union[str,int],post:Union[str,int])->ResponseThreadPostsByPost:...defsingle_post(self,board:str,post:Union[str,int])->ResponseSinglePost:...Also available methoddownload_thread_media(default path:./dowloads_2ch/%thread_id%/):fromapi2chimportdownload_thread_mediadownload_thread_media(url='https://2ch.hk/api/res/1.html',with_thumbnails=True,skip_if_exists=True)TypesThis library usespydanticfor parsing API responses. You can see data models inapi2ch/models.In case of unsupported typesAPI results can change and the library may not parse the new result. So you can request «raw» dicts:api=Api2ch(raw_results=True)💬 ContributingContributions, issues and feature requests are welcome!📝 LicenseThis project isMITlicensed.