Bot de postagem automática VK

NOTA: Artigo criado apenas para fins educacionais, não incentivo a utilizar o produto obtido ao final da aula, para trazer transtorno ou benefício próprio


O que nós fazemos



Bot para postagens automáticas no mural da comunidade ou na página Vk



Pelo que



Para fins informativos



O que nós precisamos





Vamos começar



Para funcionar, precisamos de um token com permissões de parede e offline. Para receber um token, crie seu aplicativo Vk Standalone . E salve seu ID.



Em seguida, siga o link:

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

E substitua seu ID de aplicativo em vez de IDAPP. Ou use o link que preparei especialmente para você.



Se tudo for feito corretamente, você será transferido para outro site, e na página URL do parâmetro GET access_token haverá um token de que precisamos, salve-o.



Trabalho XML



Para armazenar as configurações, criaremos um arquivo .xml com o seguinte conteúdo:



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


Substituir:



  • "Token" para o token que recebemos acima
  • "Postagem de texto" para a mensagem que deve estar na postagem
  • "Anexo" ao objeto a ser anexado à postagem
  • "Copyright" para o link da fonte
  • "Grupo de nomes curtos" para o nome curto (sem vk.com ) a página da comunidade / usuário onde a publicação ocorrerá (o mural deve estar aberto para publicação)


Vamos começar a escrever código



Importamos todas as bibliotecas necessárias, criamos uma instância do nosso módulo e logamos no VKontakte em nome do usuário através de um token.



import vk_api
import time

from modules import XML as moduleXml

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


Em seguida, obtemos todos os endereços curtos onde as postagens serão publicadas.



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


Agora temos a mensagem que estará no post, o intervalo com que os posts serão publicados e a fonte do 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"))


Agora temos todos os objetos que serão anexados à postagem.



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


Já temos todos os dados de que precisamos para publicar. Tudo o que resta é criar uma função para publicação e um loop que chamará a função para publicação.



Primeiro, vamos fazer um loop e deixar a função vazia. O mesmo código só funcionará se for executado no console.



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 uma postagem, chamaremos o método API "wall.post" e passaremos os parâmetros get mais cedo. Se tudo funcionar corretamente, uma mensagem correspondente será exibida no console.



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)


Conclusão



É isso, todo o código está pronto. Direi imediatamente que tenho 13 anos. E quero contar e compartilhar o que posso fazer e achar interessante para os outros. Portanto, minha última publicação foi lida por mais de 2 mil pessoas e 40 pessoas foram marcadas, embora haja algo a melhorar. Isso me motivou, muito obrigado.



Projeto no gitHub .



NOTA: Artigo criado apenas para fins educacionais, não incentivo a utilizar o produto obtido ao final da aula, para trazer transtorno ou benefício próprio



All Articles