这一切是如何开始的...
2月2日,我看到了一篇有趣的文章:
关闭api以获得消息 。 我的第一个念头是:“该死,现在怎么打人,是吧?” 但后来我想:我在长场上的机器人可能会停止工作,总的来说,这并不酷...
但是在2月15日,该api仍在起作用,我认为VK再次承诺并没有兑现它(例如,将其转让给一家上市公司)。
但是在2月20日,当通过python中的
vk_api库接收令牌时,弹出了一个错误,提示该应用程序无权访问消息。
然后我想...
我真的不想削减我的聊天机器人,而是开始寻找解决方法。
如何成为
最简单的方法是服从并禁用该机器人,但我仍然是黑客)
首先,事实证明,
在关闭api
之前收到的令牌仍然可以访问消息。
其次,
从此处使用api:即,使用cookie登录到VK并
在此处发送有关以下参数的后请求:
参量行动:a_run_method
al:1
哈希:从页面获得的哈希
方法:messages.getConversations
param_count:20
param_extended:0
param_filter:全部
param_offset:0
param_v:5.92
在python中接收消息的代码:
代号import requests,lxml.html,re,json class invalid_password(Exception): def __init__(self, value):self.value = value def __str__(self):return repr(self.value) class not_valid_method(Exception): def __init__(self, value):self.value = value def __str__(self):return repr(self.value) class messages(object): def __init__(this,login,password): this.login = login this.password = password this.hashes = {} this.auth() def auth(this): headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language':'ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3', 'Accept-Encoding':'gzip, deflate', 'Connection':'keep-alive', 'DNT':'1'} this.session = requests.session() data = this.session.get('https://vk.com/', headers=headers) page = lxml.html.fromstring(data.content) form = page.forms[0] form.fields['email'] = this.login form.fields['pass'] = this.password response = this.session.post(form.action, data=form.form_values()) if "onLoginDone" not in response.text: raise invalid_password(" !") return def method(this,method,v=5.87,**params): if method not in this.hashes: this._get_hash(method) data = {'act': 'a_run_method','al': 1, 'hash': this.hashes[method], 'method': method, 'param_v':v} for i in params: data["param_"+i] = params[i] answer = this.session.post('https://vk.com/dev',data=data) return json.loads(re.findall("<!>(\{.+)",answer.text)[-1]) def _get_hash(this,method): html = this.session.get('https://vk.com/dev/'+method) hash_0 = re.findall('onclick="Dev.methodRun\(\'(.+?)\', this\);',html.text) if len(hash_0)==0: raise not_valid_method("method is not valid") this.hashes[method] = hash_0[0]
用法示例:
a = messages('login','password') messages_user = a.method("messages.getConversations",count=1)
PS谁在乎,这是我的机器人:
1 )
从VK下载音乐的机器人2 )
机器人识别任何VK标签的IDPPS本文的作者对上面撰写的全文不承担任何责任:以上文章
仅出于认知目的而创建。