メッセージAPI VKの制限-対処方法

それがすべて始まった方法...



2月2日、興味深い記事に出会いました: メッセージのAPIを閉じる 。 私の最初の考えは、「いまいましい、どうやって人々をクラックするのですか?」 しかし、その後、私は疑問に思いました:おそらくロングフィールドのボットは動作しなくなり、一般的にはクールではありません...



しかし、2月15日、APIはまだ機能しており、VKは再び約束し、それを実現しなかったと考えました(たとえば、公開会社への移転として)。



しかし、2月20日、Pythonのvk_apiライブラリを介してトークンを受信すると、アプリケーションがメッセージにアクセスできないというエラーがポップアップし始めました。



そして、私は思った...



私は本当にロングフィールドでチャットボットを削減したくなかったので、回避策を探し始めました。



になる方法



最も簡単な方法は、ボットに従い、ボットを無効にすることですが、私はまだハッカーです)



まず、APIを閉じる前に受け取ったトークンがメッセージにアクセスできることが判明しました。



次に、 ここから api 使用します 。つまり、Cookieを使用してVKにログインし、次のパラメーターについてポストリクエストを送信します。



パラメータ
act:a_run_method

al:1

hash:ページから取得したハッシュ

メソッド: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気にする人、ここに私のボットがあります:



1VKから音楽をダウンロードするためのボット

2VKステッカーのIDを識別するボット



PPSこの記事の著者は、上記の文章全体について一切の責任を負いません。上記の記事は、認知目的でのみ作成されました。



All Articles