1 added
1 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Всем привет! Моя первая попытка написать статью на Хекслете обернулась успехом,<a>она уже набрала 8 лайков</a>. Этот факт замотивировал написать еще одну на какую-нибудь интересную тему.</p>
1
<p>Всем привет! Моя первая попытка написать статью на Хекслете обернулась успехом,<a>она уже набрала 8 лайков</a>. Этот факт замотивировал написать еще одну на какую-нибудь интересную тему.</p>
2
<h2>Содержание</h2>
2
<h2>Содержание</h2>
3
<ul><li><a>Снова предыстория</a></li>
3
<ul><li><a>Снова предыстория</a></li>
4
<li><a>Как нам получить данные из VK</a></li>
4
<li><a>Как нам получить данные из VK</a></li>
5
<li><a>Как работает магия</a></li>
5
<li><a>Как работает магия</a></li>
6
<li><a>Работа с API VK</a></li>
6
<li><a>Работа с API VK</a></li>
7
<li><a>Отправляем запросы из Python</a></li>
7
<li><a>Отправляем запросы из Python</a></li>
8
<li><a>Как получать уведомления о новых событиях</a></li>
8
<li><a>Как получать уведомления о новых событиях</a></li>
9
<li><a>Завершение</a></li>
9
<li><a>Завершение</a></li>
10
</ul><h2>Снова предыстория</h2>
10
</ul><h2>Снова предыстория</h2>
11
<p>Когда я только начал знакомство с Python, я хотел написать что-нибудь, чем можно пользоваться. Эти амбиции были оправданы тем, что с кодом я знаком еще с ~11 лет, тогда я писал ботов для IRC (об этом я также планирую написать статейку). Первой мыслью было написать простого бота для VK, который будет реагировать на текст. По гайдам я смог слепить такого бота, но в итоге своей работы я видел некоторое количество магии: я не до конца понимал как работает Long Poll и библиотека Requests.</p>
11
<p>Когда я только начал знакомство с Python, я хотел написать что-нибудь, чем можно пользоваться. Эти амбиции были оправданы тем, что с кодом я знаком еще с ~11 лет, тогда я писал ботов для IRC (об этом я также планирую написать статейку). Первой мыслью было написать простого бота для VK, который будет реагировать на текст. По гайдам я смог слепить такого бота, но в итоге своей работы я видел некоторое количество магии: я не до конца понимал как работает Long Poll и библиотека Requests.</p>
12
<p>Хочу сразу обратить внимание на заголовок, тут будет описываться взгляд новичка. Это значит, что все описанное ниже лишь мое понимание темы и мой опыт. Ни в коем случае не претендую на какую-то истинность и научность :)</p>
12
<p>Хочу сразу обратить внимание на заголовок, тут будет описываться взгляд новичка. Это значит, что все описанное ниже лишь мое понимание темы и мой опыт. Ни в коем случае не претендую на какую-то истинность и научность :)</p>
13
<p>Также хочу сразу предупредить, тут не будет кода, который относится к написанию бота. Самое идеальное применение этой статье - создать машину времени, вернуться на 4 месяца назад и показать её самому себе. Примеры кода вы легко сможете найти в гугле, я сам по ним писал бота и не понимал что происходит.</p>
13
<p>Также хочу сразу предупредить, тут не будет кода, который относится к написанию бота. Самое идеальное применение этой статье - создать машину времени, вернуться на 4 месяца назад и показать её самому себе. Примеры кода вы легко сможете найти в гугле, я сам по ним писал бота и не понимал что происходит.</p>
14
<h2>Как нам получить данные из VK</h2>
14
<h2>Как нам получить данные из VK</h2>
15
<p>Для себя я сделал вывод, что работа программиста - это работа с данными. Мы хотим использовать магию и получать данные из VK, после чего обрабатывать их в своем Python терминале. Не буду теоретизировать о различных вариантах реализации, скажу сразу, для этого нам нужно API.</p>
15
<p>Для себя я сделал вывод, что работа программиста - это работа с данными. Мы хотим использовать магию и получать данные из VK, после чего обрабатывать их в своем Python терминале. Не буду теоретизировать о различных вариантах реализации, скажу сразу, для этого нам нужно API.</p>
16
<p>Чтобы понять что такое API, нужно четко понимать что такое интерфейс и абстракции в контексте программирования. Понимать что такое абстракции очень важно, они везде. Изучить и даже создать их вы успеете при прохождении курсов, по крайней мере в курсе Python-программиста<a>они есть</a>. После изучения этих тем расшифровка аббревиатуры "Application Programming Interface" даст исчерпывающее объяснение что такое API.</p>
16
<p>Чтобы понять что такое API, нужно четко понимать что такое интерфейс и абстракции в контексте программирования. Понимать что такое абстракции очень важно, они везде. Изучить и даже создать их вы успеете при прохождении курсов, по крайней мере в курсе Python-программиста<a>они есть</a>. После изучения этих тем расшифровка аббревиатуры "Application Programming Interface" даст исчерпывающее объяснение что такое API.</p>
17
<h2>Как работает магия</h2>
17
<h2>Как работает магия</h2>
18
<p>Если у меня получится в кротчайшие сроки собрать машину времени и показать эту статью самому себе 4 месяца назад, я не хочу, чтобы у молодого меня заболела голова от большого количества новой информации, поэтому объяснение работы<a>протокола HTTP</a>оставим профессионалам из Hexlet. Сейчас мы запустим на абстрактном сервере не менее абстрактную программу на Python, вот её код:</p>
18
<p>Если у меня получится в кротчайшие сроки собрать машину времени и показать эту статью самому себе 4 месяца назад, я не хочу, чтобы у молодого меня заболела голова от большого количества новой информации, поэтому объяснение работы<a>протокола HTTP</a>оставим профессионалам из Hexlet. Сейчас мы запустим на абстрактном сервере не менее абстрактную программу на Python, вот её код:</p>
19
-
<p>Теперь можно потыкать нашу абстрактную программу, которую мы (гипотетически) разместили по адресу<a>http://myserver.home/</a></p>
19
+
<p>Теперь можно потыкать нашу абстрактную программу, ��оторую мы (гипотетически) разместили по адресу<a>http://myserver.home/</a></p>
20
<p>Все запросы выполняем в строке браузера, хотя это не обязательно, но об этом далее.</p>
20
<p>Все запросы выполняем в строке браузера, хотя это не обязательно, но об этом далее.</p>
21
<p>http://myserver.home/ping_pong There's no text http://myserver.home/ping_pong?text=hello hello http://myserver.home/ping_pong?text=ping pong!</p>
21
<p>http://myserver.home/ping_pong There's no text http://myserver.home/ping_pong?text=hello hello http://myserver.home/ping_pong?text=ping pong!</p>
22
<p>В коде нашей программы можно указать сколько угодно функций, обращаться к ним нужно будет также из адресной строки: Как видно из картинки, в функцию можно передать сколько угодно переменных через амперсанд, но не забывайте, что если в функцию передать больше аргументов, чем она сможет обработать, функция вернет ошибку.</p>
22
<p>В коде нашей программы можно указать сколько угодно функций, обращаться к ним нужно будет также из адресной строки: Как видно из картинки, в функцию можно передать сколько угодно переменных через амперсанд, но не забывайте, что если в функцию передать больше аргументов, чем она сможет обработать, функция вернет ошибку.</p>
23
<h2>Работа с API VK</h2>
23
<h2>Работа с API VK</h2>
24
<p>Теперь вернемся из абстрактного мира в реальный. В<a>официальном гайде</a>разработчики VK приводят такой пример взаимодействия с API: Теперь мы понимаем, что программа, отдающая нам данные, находится по адресу<a>https://api.vk.com/method/</a>В качестве примера разработчики предлагают нам использовать их функцию users.get, куда мы передадим переменную user_id равную 210700286 и v=5.52.</p>
24
<p>Теперь вернемся из абстрактного мира в реальный. В<a>официальном гайде</a>разработчики VK приводят такой пример взаимодействия с API: Теперь мы понимаем, что программа, отдающая нам данные, находится по адресу<a>https://api.vk.com/method/</a>В качестве примера разработчики предлагают нам использовать их функцию users.get, куда мы передадим переменную user_id равную 210700286 и v=5.52.</p>
25
<p>Вы без проблем можете ввести этот адрес в браузер и отправить самый настоящий запрос к API VK и получить самые настоящие данные вида<a>JSON</a>, где вам вежливо откажут в выполнении этого метода. Откажут потому, что API VK не позволяет пользоваться своими методами неавторизованным пользователям. Чтобы получить доступ к методам, вы должны получить токен, как его получить также без проблем подскажет гугл, либо<a>сам VK</a>. Этот токен вы передаете в запрос как обычную переменную через амперсанд.</p>
25
<p>Вы без проблем можете ввести этот адрес в браузер и отправить самый настоящий запрос к API VK и получить самые настоящие данные вида<a>JSON</a>, где вам вежливо откажут в выполнении этого метода. Откажут потому, что API VK не позволяет пользоваться своими методами неавторизованным пользователям. Чтобы получить доступ к методам, вы должны получить токен, как его получить также без проблем подскажет гугл, либо<a>сам VK</a>. Этот токен вы передаете в запрос как обычную переменную через амперсанд.</p>
26
<h2>Отправляем запросы из Python</h2>
26
<h2>Отправляем запросы из Python</h2>
27
<p>Для представления мне все таки придется совсем чуть-чуть тронуть тему HTTP. Когда мы жмем Enter после ввода адреса в строку, браузер посылает запрос по этому адресу. Обычно сервера отвечают нам HTML документами и некоторыми другими статическими файлами, которые наш браузер умеет исполнять и отображать в привычном для нас виде. Те же самые запросы мы можем посылать через Python с помощью библиотеки requests. Чтобы понять как это работает, вам предстоит пройти курсы<a>"Введение в веб-разработку"</a>и<a>Протокол HTTP</a></p>
27
<p>Для представления мне все таки придется совсем чуть-чуть тронуть тему HTTP. Когда мы жмем Enter после ввода адреса в строку, браузер посылает запрос по этому адресу. Обычно сервера отвечают нам HTML документами и некоторыми другими статическими файлами, которые наш браузер умеет исполнять и отображать в привычном для нас виде. Те же самые запросы мы можем посылать через Python с помощью библиотеки requests. Чтобы понять как это работает, вам предстоит пройти курсы<a>"Введение в веб-разработку"</a>и<a>Протокол HTTP</a></p>
28
<p>Итак, импортируем requests, для теста отправляем get запрос по адресу google.com, выглядеть это будет примерно так:</p>
28
<p>Итак, импортируем requests, для теста отправляем get запрос по адресу google.com, выглядеть это будет примерно так:</p>
29
<p>На взгляд новичка мы получили объект, поняли мы это потому что строка обрамлена в угловые скобки. Попробуем вызвать метод text, получим много строк HTML кода. По сути мы сделали абсолютно то же, что и делает браузер, только браузер умеет работать с HTML, а наш терминал просто отображает данные как есть.</p>
29
<p>На взгляд новичка мы получили объект, поняли мы это потому что строка обрамлена в угловые скобки. Попробуем вызвать метод text, получим много строк HTML кода. По сути мы сделали абсолютно то же, что и делает браузер, только браузер умеет работать с HTML, а наш терминал просто отображает данные как есть.</p>
30
<p>Адрес, на который мы отправили запрос, подразумевает, что им будут пользоваться браузеры, поэтому нам работать с этими данными не удобно. Что касается API, тут все наоборот. В браузере нам непривычно видеть обычный голый текст, уж тем более в JSON формате, но от Python мы хотим именно этого. Нам просто нужны данные, которые мы потом обработаем и используем в своих целях.</p>
30
<p>Адрес, на который мы отправили запрос, подразумевает, что им будут пользоваться браузеры, поэтому нам работать с этими данными не удобно. Что касается API, тут все наоборот. В браузере нам непривычно видеть обычный голый текст, уж тем более в JSON формате, но от Python мы хотим именно этого. Нам просто нужны данные, которые мы потом обработаем и используем в своих целях.</p>
31
<p>Я надеюсь, что на момент прочтения этого абзаца вы уже получили API токен и успели поиграться с методами в строке браузера. Ничего особо нового я тут не открою, вам всего лишь нужно отправить запрос с помощью библиотеки requests и получить те же самые данные, которые вы видели в браузере. Далее эти данные необходимо распарсить, в этом вам поможет встроенная библиотека json.</p>
31
<p>Я надеюсь, что на момент прочтения этого абзаца вы уже получили API токен и успели поиграться с методами в строке браузера. Ничего особо нового я тут не открою, вам всего лишь нужно отправить запрос с помощью библиотеки requests и получить те же самые данные, которые вы видели в браузере. Далее эти данные необходимо распарсить, в этом вам поможет встроенная библиотека json.</p>
32
<h2>Как получать уведомления о новых событиях</h2>
32
<h2>Как получать уведомления о новых событиях</h2>
33
<p>Для этого используется<a>Long Polling</a>. Это точно такой же запрос, только ответ мы получаем не сразу, а после того, как на сервере произойдет событие. Чтобы получать события постоянно, Long Poll запросы нужно посылать постоянно, например в бесконечном цикле.</p>
33
<p>Для этого используется<a>Long Polling</a>. Это точно такой же запрос, только ответ мы получаем не сразу, а после того, как на сервере произойдет событие. Чтобы получать события постоянно, Long Poll запросы нужно посылать постоянно, например в бесконечном цикле.</p>
34
<h2>Завершение</h2>
34
<h2>Завершение</h2>
35
<p>Я не стал в очередной раз описывать работу библиотек requests, json. Каждая из них требует отдельного внимания, а requests - знания протокола HTTP. Примеры кода для создания бота также можно найти на просторах интернета, я постарался описать свое видение этой темы, объяснить как этот код работает.</p>
35
<p>Я не стал в очередной раз описывать работу библиотек requests, json. Каждая из них требует отдельного внимания, а requests - знания протокола HTTP. Примеры кода для создания бота также можно найти на просторах интернета, я постарался описать свое видение этой темы, объяснить как этот код работает.</p>
36
<p>Надеюсь эта статья кому-нибудь поможет, желаю успехов :)</p>
36
<p>Надеюсь эта статья кому-нибудь поможет, желаю успехов :)</p>