Bot de publicación automática de VK

NOTA: Artículo creado solo con fines educativos, no te animo a utilizar el producto obtenido al final de la lección, para traer inconvenientes o beneficio propio


Qué hacemos



Bot para publicar automáticamente publicaciones en el muro de la comunidad o en la página Vk



Para qué



Con fines informativos



Qué necesitamos





Empecemos



Para funcionar, necesitamos un token con permisos de pared y sin conexión. Para recibir un token, cree su aplicación Vk Standalone . Y guarde su identificación.



Luego siga el enlace:

oauth.vk.com/authorize?client_id=IDAPP&scope=wall , offline & redirect_uri = http: //api.vk.com/blank.html&response_type=token

Y sustituya su ID de aplicación en lugar de IDAPP. O usa el enlace que he preparado especialmente para ti.



Si todo se hace correctamente, será transferido a otro sitio, y en la página URL en el parámetro GET access_token habrá un token que necesitamos, guárdelo.



Trabajo XML



Para almacenar la configuración, crearemos un archivo .xml con el siguiente contenido:



<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>


Reemplazar:



  • "Token" para el token que recibimos arriba
  • "Publicación de texto" para el mensaje que debería estar en la publicación
  • "Adjunto" al objeto que se adjuntará a la publicación
  • "Copyright" al enlace de la fuente
  • "Grupo de nombre corto" al nombre corto (sin vk.com ) la página de la comunidad / usuario donde se llevará a cabo la publicación (el muro debe estar abierto para la publicación)


Empecemos a escribir código



Importamos todas las bibliotecas necesarias, creamos una instancia de nuestro módulo e iniciamos sesión en VKontakte en nombre del usuario a través de un token.



import vk_api
import time

from modules import XML as moduleXml

XML = moduleXml.XML("settings")
VK = vk_api.VkApi(token=XML.parsingFile("token"))


A continuación, obtenemos todas las direcciones cortas donde se publicarán las publicaciones.



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


Ahora nos llega el mensaje que estará en la publicación, el intervalo con el que se publicarán las publicaciones y la fuente de la publicación.



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"))


Ahora obtenemos todos los objetos que se adjuntarán a la publicación.



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")


Ya tenemos todos los datos que necesitamos publicar. Todo lo que queda es crear una función para publicar y un bucle que llamará a la función para publicar.



Primero, hagamos un bucle y dejemos la función vacía. El mismo código solo funcionará si se ejecuta desde la consola.



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)


Para publicar una publicación, llamaremos al método API "wall.post" y pasaremos los parámetros de obtención antes. Si todo funciona correctamente, se mostrará el mensaje correspondiente en la consola.



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)


Conclusión



Eso es todo, todo el código está listo. Te diré enseguida que tengo 13 años. Y quiero contar y compartir lo que puedo hacer y encontrar interesante para los demás. Así que mi última publicación fue leída por más de 2000 personas, y 40 personas fueron marcadas como favoritos, aunque hay algo que mejorar. Esto me motivó, muchas gracias.



Proyecto en gitHub .



NOTA: Artículo creado solo con fines educativos, no te animo a utilizar el producto obtenido al final de la lección, para traer inconvenientes o beneficio propio



All Articles