Comment tout a commencé ...
Le 2 février, je suis tombé sur un article intéressant:
fermer l'api pour les messages . Ma première pensée a été: "Merde, comment maintenant casser les gens, hein?" Mais ensuite je me suis demandé: mon bot sur le longfield va probablement cesser de fonctionner, et en général, ce n'est pas cool ...
Mais le 15 février, l'API fonctionnait toujours, et je pensais que VK avait à nouveau promis et ne l'a pas respecté (par exemple, comme son transfert à une entreprise publique).
Mais le 20 février, lors de la réception d'un jeton via la bibliothèque
vk_api en python, une erreur a commencé à apparaître que l'application n'a pas accès aux messages.
Et puis j'ai pensé ...
Je ne voulais vraiment pas réduire mes robots de discussion sur le longfield et j'ai commencé à chercher des solutions de contournement.
Comment être
Le moyen le plus simple est d'obéir et de désactiver le bot, mais je suis toujours un hacker)
Premièrement, il s'est avéré que les jetons reçus
AVANT de fermer l'API ont toujours accès aux messages.
Deuxièmement, utilisez l'api
d'ici : c'est-à-dire, connectez-vous à VK avec des cookies et envoyez des post-requêtes
ici avec approximativement les paramètres suivants:
Paramètresact: a_run_method
al: 1
hachage: hachage obtenu à partir de la page
méthode: messages.getConversations
param_count: 20
param_extended: 0
param_filter: tout
param_offset: 0
param_v: 5,92
Le code pour recevoir des messages en python:
Codeimport 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]
Exemple d'utilisation:
a = messages('login','password') messages_user = a.method("messages.getConversations",count=1)
PS Peu importe, voici mes bots:
1 )
bot pour télécharger de la musique depuis VK2 )
bot identifiant l'identifiant d'un autocollant VKPPS L'auteur de cet article ne porte aucune responsabilité pour l'intégralité du texte écrit ci-dessus: l'article ci-dessus a été créé
UNIQUEMENT à des fins cognitives.