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
- Conocimiento de la programación de Java Python
- Python3
- Módulo para trabajar con archivos XML
- Bibliotecas de Python: vk_api y time
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