VK自动发布机器人

注意:仅为了教育目的而创建的文章,我不鼓励您使用在课程结束时获得的产品,给您带来不便或带来好处


我们做什么



博特用于自动张贴在社区墙上或VK页的帖子



做什么的



仅供参考



我们需要什么





开始吧



要工作,我们需要一个具有挂墙和脱机权限的令牌。要接收令牌,请创建您的Vk Standalone应用程序并保存其ID。



然后,点击链接:

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

并替换您的应用程序ID而不是IDAPP。或使用我为您准备链接



如果一切都正确完成,您将被转移到另一个站点,并且在GET参数access_token的URL页面中,将需要一个令牌,将其保存。



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>


更换:



  • 我们上面收到的令牌的“令牌”
  • 帖子中应包含的消息的“文本帖子”
  • “附加”到要附加到帖子的对象
  • “版权”到源链接
  • “短名称组”(Short name group)简称为将要进行发布的社区/用户页面的短名称(没有vk.com)(必须打开墙才能发布)


让我们开始编写代码



我们导入所有必需的库,创建模块的实例,并通过令牌代表用户登录VKontakte。



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)


要发布帖子,我们将调用“ wall.post” API方法并更早地传递get参数。如果一切正常,则控制台中将显示相应的消息。



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岁。我想告诉和分享我的能力,并为他人找到乐趣。因此,尽管有一些改进的地方,但我的上一份出版物被2k +人阅读,并给40个人添加了书签。这激励了我,非常感谢。



在gitHub上项目



注意:仅为了教育目的而创建的文章,我不鼓励您使用在课程结束时获得的产品,给您带来不便或带来好处



All Articles