commit 6aae7a73f0c90bb618878e3119a181faa4303229 from: Aleksey Ryndin date: Sun Jan 19 15:32:20 2025 UTC Add /capsule/python/avk.gmi commit - 3d83924f0dd1189b4c870f743323c1529bf527f9 commit + 6aae7a73f0c90bb618878e3119a181faa4303229 blob - fc762803c499ce2fddcd1e7856cc72cd75a1f909 blob + 88c057339c44ad9c22b0d3f790bad7bcc9608c43 --- capsule/atom.xml +++ capsule/atom.xml @@ -8,7 +8,13 @@ continue continue@to.any-key.press - 2025-01-08T09:33:35.328393+00:00 + 2025-01-19T15:05:20.498204+00:00 + + gemini://any-key.press/python/avk.gmi + + avk ⚛️ формирование Atom-ленты для пабликов ВКонтакте + 2025-01-19T15:05:20.498204+00:00 + gemini://any-key.press/trap/2025-01-02_barking_fox.gmi blob - a0c9d939de268bffba476adea0fa63c10785536a blob + 58bc81810870ae1d06fa95768c3e88c53e8aab38 --- capsule/python/index.gmi +++ capsule/python/index.gmi @@ -2,6 +2,7 @@ Язык программирования Python +=> avk.gmi avk ⚛️ формирование Atom-ленты для пабликов ВКонтакте => ../vostok/atom2gemfeed.gmi Gemini-лента публикаций из Atom-ленты (реализовано на Python) => python3.11-tools.gmi Утилиты, встроенные в Python => ../yah2g/ yah2g: ещё один http-в-gemini прокси (реализовано на Python) blob - /dev/null blob + ab80c0fd15d67be3edd86f6ce7f98b7431a4a298 (mode 644) --- /dev/null +++ capsule/python/avk.gmi @@ -0,0 +1,70 @@ +# avk ⚛️ формирование Atom-ленты для пабликов ВКонтакте + +Ещё с конца 2024 года (и, как минимум, первую половину января 2025-го) RSS-bridge стал просто отвратительно работать с ВКонтакте. Видимо всё началось после какого-то обновления со стороны ВК. Сервер https://rss-bridge.org/bridge01/ просто отказался работать. Через какое-то время, спасибо sn4il'у, на сервере https://rss.thedroth.rocks/ стал работать второй мост (VK2). Но и он работал как-то не идеально: чем дальше, тем чаще стал возвращать ошибку (Bridge returned error 500!). + +Я, например, не пользуюсь рекомендательными алгоритмами музыкальных платформ и предпочитаю следить напрямую за интересующими меня музыкантами. А некоторые русскоязычные артисты ведут только свой ВК. Но, конечно, зарегистрироваться и сидеть из-за этого в ВК я не намерен. + +Поэтому я решил написать свой скапер содержимого пабликов ВКонтакте. Я заметил, что мобильная версия сайта (https://m.vk.com/) отдаёт содержимое последних пяти записей. Точнее закреплённую запись (или их может быть несколько?) и четырёх наиболее свежих (или менее). После беглого просмотра дампа работы браузера, я понял что ВК отдаёт содержимое записей при заполненности некоторых кук (cookies). Основную массу значений он отдаёт сам в ответе, но нужно ещё добавить куку с именем "remixmdevice" и значением, например, "1920/1080/1/!". То есть нехитрыми шагами (запрос, добавление куки, второй запрос) мы получаем заглавную станицу ВК-паблика с содержимым пяти записей. + +Далее дело за малым: разбираем HTML, следим за тэгами и их классами, запоминаем текущий стек классов элементов
и (на основе всего этого) формируем Atom-ленту. Я понимаю, что имена классов это не самое надёжное средство ориентирования в содержимом страницы, но мне кажется, что в будущем мне проще будет перебить новые константы после обновления интерфейса со стороны ВК, чем тащить ради этой задачи какой-нибудь Beautiful Soup, который всё равно не будет универсальным средством. + +Простоя реализация avk.py позволила не использовать внешних зависимостей. Для решения задачи хватило стандартной библиотеки Python: +* urllib.request для выполнения запроса к m.vk.com +* html.parser для разбора ответа от m.vk.com +* http.server для HTTP сервера, который и отдаёт Atom-ленту + +Получившийся HTTP сервер (https://avk.any-key.press/) ожидает имя ВК-паблика в параметре name. Например, что бы получить Atom-ленту для страницы https://vk.com/security нужно выполнить запрос https://avk.any-key.press/?name=security + +``` +$ curl "https://avk.any-key.press/?name=security" + + + Безопасность | ВКонтакте + https://m.vk.com/security + 2025-01-17T14:31:00+03:00 + Anonymous Atom feed generator (by VK) + + https://m.vk.com/wall-777107_188655 + 2025-01-16T17:22:00+03:00 + Беспарольная авторизация — это безопасность, скорость и никакого стресса + + +
+

Беспарольная авторизация — это безопасность, скорость и никакого стресса. Ещё не попробовали? Пора это исправить! 💙

+
+

Новый год встретили, а об итогах 2024-го не рассказали. 🤗 Исправляемся и делимся с вами главными

+ достижениями +

VK ID.

+
+
+

За прошедший год ⃣ ⃣ млн пользователей VK ID перешли на быстрый вход без пароля — по скану лица, отпечатку пальца или одноразовому коду. Это не только удобно, но и безопасно: такие способы авторизации лучше защищают от взлома путём перебора паролей.

+
+
+

🚀 Всего в 2024 году ежемесячная активная аудитория VK ID достигла 126 млн — на 10% больше, чем годом раньше.

+
+
+

А количество сайтов, куда можно войти в один клик, увеличилось на 20 000 🔥

+
+
+

Продолжаем двигаться только вперёд и совершенствовать VK ID. Следите за новостями и нашими новыми запусками 💙

+
+ +
+
+
+``` + +Если кому-то будет полезно - добро пожаловать, пользуйтесь. + +Но стоит учитывать, что сервер не хранит состояние. То есть в формируемой ленте всегда будет пять записей (включая закреплённые). Поэтому, если это возможно, стоит настроить частоту обновления в вашем RSS-агрегаторе так, что бы не терять данные. Если между двумя запросами Atom-ленты в ВК-паблике будет опубликовано более пяти сообщений, то часть публикаций будет утеряна. + +Исходный код можно найти в git-репозитории: +``` +ssh://anonymous@got.any-key.press/avk +``` +=> https://got.any-key.press/?action=summary&path=avk.git Web интерфейс к git репозиторию + +Вопросы, предложения и тому подобное вы можете: +* слать по электронной почте: avk@to.any-key.press +* оформить ответом к моему посту в ActivityPub: +=> https://honk.any-key.press/u/continue/h/V32H5ywt345wKmJ3N2