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
- Conhecimento da linguagem de programação Python
- Python3
- Módulo para trabalhar com arquivos XML
- Bibliotecas Python: vk_api e tempo
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