[API, Python, ВКонтакте API] Бот для автопостинга VK
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
ВНИМАНИЕ: статья создана только в обучающих целях, я не призываю Вас использовать продукт полученный в конце урока для принесения неудобств или собственной выгоды
Что будем делать
Бота для автопостинга записей на стене сообщества или страницы Vk
Зачем
Для ознакомительных целей
Что нам понадобится
- Знание ЯП Python
- Python3
- Модуль для работы с XML файлами
- Python библиотеки: vk_api и time
Начнем
Для работы нам понадобится токен с разрешениями wall и offline. Для получения токена создайте свое Standalone-приложение Vk. И сохраните его ID.
Далее перейдите по ссылке:
oauth.vk.com/authorize?client_id=IDAPP&scope=wall,offline&redirect_uri=http://api.vk.com/blank.html&response_type=token
И вместо IDAPP подставьте ID своего приложения. Или воспользуйтесь ссылкой, которую я подготовил специально для Вас.
Если все сделано правильно Вас перекинет на другой сайт, а в URL странице в GET параметре access_token будет токен, который нам и нужен, сохраняем его.
Работа XML
Для хранения настроек созданим файл формата .xml со следующем контентом:
<settings>
<token>token</token>
<textPost>Text post</textPost>
<interval>120</interval>
<post>
<attachments>
<attachment>attachment</attachment>
</attachments>
<copyright>copyright</copyright>
<v>5.122</v>
</post>
<groups>
<group>short name group</group>
</groups>
</settings>
Замените:
- «token» на токен, который мы получили выше
- «Text post» на сообщение, которое должно быть в записи
- «attachment» на объект, который будет прикреплен к записи
- «copyright» на ссылку источника
- «short name group» на короткое имя(без vk.com) страницу сообщества/ пользователя, где будет проходить публикация(стена должна быть открытой для публикации)
Начнем писать код
Импортируем все нужные библиотеки, создадим экземпляр нашего модуля и авторизуемся во вконтакте от лица пользователя через токен.
import vk_api
import time
from modules import XML as moduleXml
XML = moduleXml.XML("settings")
VK = vk_api.VkApi(token=XML.parsingFile("token"))
Далее получим все короткие адреса, где будут публиковаться записи.
import vk_api
import time
from modules import XML as moduleXml
XML = moduleXml.XML("settings")
VK = vk_api.VkApi(token=XML.parsingFile("token"))
groupsId = []
groupsShortName = ""
for child in XML.parsingFile("groups", False):
groupsShortName += child.text + ","
for group in VK.method("groups.getById", {"group_ids": groupsShortName}):
groupsId.append(group["id"] * -1)
del groupsShortName
Теперь получим сообщение, которое будет в записи, интервал, с которым будут публиковаться записи и источник записи.
import vk_api
import time
from modules import XML as moduleXml
XML = moduleXml.XML("settings")
VK = vk_api.VkApi(token=XML.parsingFile("token"))
groupsId = []
groupsShortName = ""
for child in XML.parsingFile("groups", False):
groupsShortName += child.text + ","
for group in VK.method("groups.getById", {"group_ids": groupsShortName}):
groupsId.append(group["id"] * -1)
del groupsShortName
textPost = XML.parsingFile("textPost")
intervalPost = int(XML.parsingFile("interval"))
Теперь получим все объекты, которые будут прикреплены к записи.
import vk_api
import time
from modules import XML as moduleXml
XML = moduleXml.XML("settings")
VK = vk_api.VkApi(token=XML.parsingFile("token"))
groupsId = []
groupsShortName = ""
for child in XML.parsingFile("groups", False):
groupsShortName += child.text + ","
for group in VK.method("groups.getById", {"group_ids": groupsShortName}):
groupsId.append(group["id"] * -1)
del groupsShortName
textPost = XML.parsingFile("textPost")
intervalPost = int(XML.parsingFile("interval"))
attachments = [attachment.text for attachment in XML.parsingFile("attachments", False)]
copyright = XML.parsingFile("copyright")
v = XML.parsingFile("v")
У нас уже есть все данные, которые нам понадобятся для публикации. Осталось только сделать функцию для публикации и цикл, который будет вызывать функцию публикации.
Сначала сделаем цикл, а функцию оставим пустой. Так же код будет работать, только если будет запущен из консоли.
import vk_api
import time
from modules import XML as moduleXml
XML = moduleXml.XML("settings")
VK = vk_api.VkApi(token=XML.parsingFile("token"))
groupsId = []
groupsShortName = ""
for child in XML.parsingFile("groups", False):
groupsShortName += child.text + ","
for group in VK.method("groups.getById", {"group_ids": groupsShortName}):
groupsId.append(group["id"] * -1)
del groupsShortName
textPost = XML.parsingFile("textPost")
intervalPost = int(XML.parsingFile("interval"))
attachments = [attachment.text for attachment in XML.parsingFile("attachments", False)]
copyright = XML.parsingFile("copyright")
v = XML.parsingFile("v")
done = False
def publicPosts():
pass
if __name__ == "__main__":
done = True
while done:
publicPosts()
time.sleep(intervalPost)
Чтобы публиковать запись будем вызвать метод API «wall.post» и передавать параметры получение раньше. Если все сработает правильно будет выводится соответствующее сообщение в консоль.
import vk_api
import time
from modules import XML as moduleXml
XML = moduleXml.XML("settings")
VK = vk_api.VkApi(token=XML.parsingFile("token"))
groupsId = []
groupsShortName = ""
for child in XML.parsingFile("groups", False):
groupsShortName += child.text + ","
for group in VK.method("groups.getById", {"group_ids": groupsShortName}):
groupsId.append(group["id"] * -1)
del groupsShortName
textPost = XML.parsingFile("textPost")
intervalPost = int(XML.parsingFile("interval"))
attachments = [attachment.text for attachment in XML.parsingFile("attachments", False)]
copyright = XML.parsingFile("copyright")
v = XML.parsingFile("v")
done = False
def publicPosts():
for groupId in groupsId:
for i in range(1, 5):
result = VK.method("wall.post", {
"owner_id": groupId,
"message": textPost,
"attachments": attachments,
"copyright": copyright,
"v": v
})
if result["post_id"]:
print("Good post, id post - " + str(result["post_id"]))
else:
print("Error posting")
if __name__ == "__main__":
done = True
while done:
publicPosts()
time.sleep(intervalPost)
Заключение
Вот и все, весь код готов. Скажу Вам сразу же мне — 13 лет. И я хочу рассказать и поделиться тем, что я умею и считаю интересным для других. Так мою прошлую публикацию прочитали 2к+ человек, а 40 человек сохранили в закладки, хотя там и есть, что доработать. Это меня замотивировала, спасибо Вам большое.
Проект на gitHub.
ВНИМАНИЕ: статья создана только в обучающих целях, я не призываю Вас использовать продукт полученный в конце урока для принесения неудобств или собственной выгоды
===========
Источник:
habr.com
===========
Похожие новости:
- [Python, API, Разработка под Arduino] Как я умный аквариум делал (backend)
- [Финансы в IT] Стоимость IT-компаний США превысила капитализацию всего фондового рынка Евросоюза
- [Python, Asterisk, Социальные сети и сообщества, Flask] Реализация аудиоконференций в Telegram + Asterisk
- [API, Анализ и проектирование систем] Контрольный список для ревью кода в распределенных системах (перевод)
- [Python, Семантика] Ищем «Троллей». Алгоритм шинглов & косинусное сходство
- [Работа с видео, API, Lua] OBS Studio Lua Скриптинг
- [Open source, Python, GitHub, Искусственный интеллект] Как трекать людей в масках или универсальный подход к трекингу объектов произвольной природы
- [Здоровье, Мозг] Почему мы чувствуем себя одинокими? Нейробиология ищет ответ (перевод)
- [API, Геоинформационные сервисы, Визуализация данных, Инфографика] Кому на Руси жить хорошо? Как мы искали самый “зеленый” город с помощью OpenStreetMap и Overpass API
- [Open source, Openshift, Виртуализация, Учебный процесс в IT] Шпаргалка по Ansible k8s, практичный учебник по awk, а также 4 причины использовать Jamstack при веб-разработке
Теги для поиска: #_api, #_python, #_vkontakte_api (ВКонтакте API), #_api, #_api_vk, #_api_vkontakte, #_api_vkontakte (api вконтакте), #_python3, #_bot, #_api, #_python, #_vkontakte_api (
ВКонтакте API
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 12:43
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
ВНИМАНИЕ: статья создана только в обучающих целях, я не призываю Вас использовать продукт полученный в конце урока для принесения неудобств или собственной выгоды
Что будем делать Бота для автопостинга записей на стене сообщества или страницы Vk Зачем Для ознакомительных целей Что нам понадобится
Начнем Для работы нам понадобится токен с разрешениями wall и offline. Для получения токена создайте свое Standalone-приложение Vk. И сохраните его ID. Далее перейдите по ссылке: oauth.vk.com/authorize?client_id=IDAPP&scope=wall,offline&redirect_uri=http://api.vk.com/blank.html&response_type=token И вместо IDAPP подставьте ID своего приложения. Или воспользуйтесь ссылкой, которую я подготовил специально для Вас. Если все сделано правильно Вас перекинет на другой сайт, а в URL странице в GET параметре access_token будет токен, который нам и нужен, сохраняем его. Работа XML Для хранения настроек созданим файл формата .xml со следующем контентом: <settings>
<token>token</token> <textPost>Text post</textPost> <interval>120</interval> <post> <attachments> <attachment>attachment</attachment> </attachments> <copyright>copyright</copyright> <v>5.122</v> </post> <groups> <group>short name group</group> </groups> </settings> Замените:
Начнем писать код Импортируем все нужные библиотеки, создадим экземпляр нашего модуля и авторизуемся во вконтакте от лица пользователя через токен. import vk_api
import time from modules import XML as moduleXml XML = moduleXml.XML("settings") VK = vk_api.VkApi(token=XML.parsingFile("token")) Далее получим все короткие адреса, где будут публиковаться записи. import vk_api
import time from modules import XML as moduleXml XML = moduleXml.XML("settings") VK = vk_api.VkApi(token=XML.parsingFile("token")) groupsId = [] groupsShortName = "" for child in XML.parsingFile("groups", False): groupsShortName += child.text + "," for group in VK.method("groups.getById", {"group_ids": groupsShortName}): groupsId.append(group["id"] * -1) del groupsShortName Теперь получим сообщение, которое будет в записи, интервал, с которым будут публиковаться записи и источник записи. import vk_api
import time from modules import XML as moduleXml XML = moduleXml.XML("settings") VK = vk_api.VkApi(token=XML.parsingFile("token")) groupsId = [] groupsShortName = "" for child in XML.parsingFile("groups", False): groupsShortName += child.text + "," for group in VK.method("groups.getById", {"group_ids": groupsShortName}): groupsId.append(group["id"] * -1) del groupsShortName textPost = XML.parsingFile("textPost") intervalPost = int(XML.parsingFile("interval")) Теперь получим все объекты, которые будут прикреплены к записи. import vk_api
import time from modules import XML as moduleXml XML = moduleXml.XML("settings") VK = vk_api.VkApi(token=XML.parsingFile("token")) groupsId = [] groupsShortName = "" for child in XML.parsingFile("groups", False): groupsShortName += child.text + "," for group in VK.method("groups.getById", {"group_ids": groupsShortName}): groupsId.append(group["id"] * -1) del groupsShortName textPost = XML.parsingFile("textPost") intervalPost = int(XML.parsingFile("interval")) attachments = [attachment.text for attachment in XML.parsingFile("attachments", False)] copyright = XML.parsingFile("copyright") v = XML.parsingFile("v") У нас уже есть все данные, которые нам понадобятся для публикации. Осталось только сделать функцию для публикации и цикл, который будет вызывать функцию публикации. Сначала сделаем цикл, а функцию оставим пустой. Так же код будет работать, только если будет запущен из консоли. import vk_api
import time from modules import XML as moduleXml XML = moduleXml.XML("settings") VK = vk_api.VkApi(token=XML.parsingFile("token")) groupsId = [] groupsShortName = "" for child in XML.parsingFile("groups", False): groupsShortName += child.text + "," for group in VK.method("groups.getById", {"group_ids": groupsShortName}): groupsId.append(group["id"] * -1) del groupsShortName textPost = XML.parsingFile("textPost") intervalPost = int(XML.parsingFile("interval")) attachments = [attachment.text for attachment in XML.parsingFile("attachments", False)] copyright = XML.parsingFile("copyright") v = XML.parsingFile("v") done = False def publicPosts(): pass if __name__ == "__main__": done = True while done: publicPosts() time.sleep(intervalPost) Чтобы публиковать запись будем вызвать метод API «wall.post» и передавать параметры получение раньше. Если все сработает правильно будет выводится соответствующее сообщение в консоль. import vk_api
import time from modules import XML as moduleXml XML = moduleXml.XML("settings") VK = vk_api.VkApi(token=XML.parsingFile("token")) groupsId = [] groupsShortName = "" for child in XML.parsingFile("groups", False): groupsShortName += child.text + "," for group in VK.method("groups.getById", {"group_ids": groupsShortName}): groupsId.append(group["id"] * -1) del groupsShortName textPost = XML.parsingFile("textPost") intervalPost = int(XML.parsingFile("interval")) attachments = [attachment.text for attachment in XML.parsingFile("attachments", False)] copyright = XML.parsingFile("copyright") v = XML.parsingFile("v") done = False def publicPosts(): for groupId in groupsId: for i in range(1, 5): result = VK.method("wall.post", { "owner_id": groupId, "message": textPost, "attachments": attachments, "copyright": copyright, "v": v }) if result["post_id"]: print("Good post, id post - " + str(result["post_id"])) else: print("Error posting") if __name__ == "__main__": done = True while done: publicPosts() time.sleep(intervalPost) Заключение Вот и все, весь код готов. Скажу Вам сразу же мне — 13 лет. И я хочу рассказать и поделиться тем, что я умею и считаю интересным для других. Так мою прошлую публикацию прочитали 2к+ человек, а 40 человек сохранили в закладки, хотя там и есть, что доработать. Это меня замотивировала, спасибо Вам большое. Проект на gitHub. ВНИМАНИЕ: статья создана только в обучающих целях, я не призываю Вас использовать продукт полученный в конце урока для принесения неудобств или собственной выгоды
=========== Источник: habr.com =========== Похожие новости:
ВКонтакте API ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 12:43
Часовой пояс: UTC + 5