注意:仅为了教育目的而创建的文章,我不鼓励您使用在课程结束时获得的产品,给您带来不便或带来好处
我们做什么
博特用于自动张贴在社区墙上或VK页的帖子
做什么的
仅供参考
我们需要什么
- 编程语言Python知识
- Python3
- 用于处理XML文件的模块
- Python库:vk_api和时间
开始吧
要工作,我们需要一个具有挂墙和脱机权限的令牌。要接收令牌,请创建您的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上项目。
注意:仅为了教育目的而创建的文章,我不鼓励您使用在课程结束时获得的产品,给您带来不便或带来好处