Форум сайта python.su
Захотел написать десктопное приложение для работы с VK.
Нашел пару примеров, получил список участников в группе и друзей. Пытался сделать отправку сообщений, но выдает 400 Bad request :
import urllib2
import urllib
import re
def nameToID(name, cookie):
host = 'http://vkontakte.ru/'+name
headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13',
'Host' : 'vkontakte.ru',
'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8',
'Connection' : 'close',
'Cookie' : 'remixlang=0; remixchk=5; audio_vol=100; %s' % cookie,
}
conn = urllib2.Request(host, None, headers)
content = urllib2.urlopen(conn).read()
ID = re.findall(r"&to=[0-9]*", content)[0].split('=')[1]
return ID
def writeMessage(to, body, cookie):
ID = nameToID(to, cookie)
title = 'Header'
host = 'http://vkontakte.ru/mail.php?act=write&to='+ID
headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13',
'Host' : 'vkontakte.ru',
'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8',
'Connection' : 'close',
'Cookie' : 'remixlang=0; remixchk=5; audio_vol=100; %s' % cookie,
}
conn = urllib2.Request(host, None, headers)
content = urllib2.urlopen(conn).read()
secure = re.findall(r'name="secure" value="(.*?)"', content)[0]
chas = re.findall(r'name="chas" value="(.*?)"', content)[0]
photo = re.findall(r'name="photo" value="(.*?)"', content)[0]
post = urllib.urlencode({'act': 'sent',
'ajax': '1',
'misc': '',
'secure': secure,
'chas': chas,
'photo': photo,
'to_id': ID,
'to_reply': '0',
'toFriends': '',
'title': title,
'message': body,
'oid': '',
'vid': '',
'fid': '',
'aid': ''})
host = 'http://vkontakte.ru/mail.php'
conn = urllib2.Request(host, post, headers)
content = urllib2.urlopen(conn).read()
print content
def getGroupMemberNames(page, cookie):
pageStr = str((page-1)*20)
host = 'http://vkontakte.ru/gsearch.php?from=people&basic=1&c[group]=13506562&c[country]=0&c[group]=13506562&c[noiphone]=1&c[section]=people&offset='+pageStr
headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13',
'Host' : 'vkontakte.ru',
'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8',
'Connection' : 'close',
'Cookie' : 'remixlang=0; remixchk=5; audio_vol=100; %s' % cookie,
}
post = urllib.urlencode({'from': 'people',
'basic': '1',
'c[group]': '13506562'})
conn = urllib2.Request(host, None, headers)
content = urllib2.urlopen(conn).read()
names = re.findall(r'href=\"/(.*?)\"', content)
setNames = set(names)
names = list(setNames)
resultNames = []
for name in names:
if 'php' in name or 'css' in name or 'ico' in name or 'club' in name:
continue
else:
resultNames.append(name)
return resultNames
def getCookie():
host = 'http://login.vk.com/?act=login'
post = urllib.urlencode({'email' : 'mymail@mail.ru',
'expire' : '',
'pass' : 'mypass',
'vk' : ''})
headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13 (.NET CLR 3.5.30729)',
'Host' : 'login.vk.com',
'Referer' : 'http://vkontakte.ru/index.php',
'Connection' : 'close',
'Pragma' : 'no-cache',
'Cache-Control' : 'no-cache',
}
conn = urllib2.Request(host, post, headers)
data = urllib2.urlopen(conn)
sValue = re.findall(r"name='s' value='(.*?)'", data.read())[0]
host = 'http://vkontakte.ru/login.php?op=slogin'
post = urllib.urlencode({'s' : sValue})
headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13',
'Host' : 'vkontakte.ru',
'Referer' : 'http://login.vk.com/?act=login',
'Connection' : 'close',
'Cookie' : 'remixchk=5; remixsid=nonenone',
'Pragma' : 'no-cache',
'Cache-Control' : 'no-cache'
}
conn = urllib2.Request(host, post, headers)
data = urllib2.urlopen(conn)
cookie_src = data.info().get('Set-Cookie')
cookie = re.sub(r'(expires=.*?;\s|path=\/;\s|domain=\.vkontakte\.ru(?:,\s)?)', '', cookie_src)
return cookie
cookie = getCookie()
writeMessage('id194484', 'message', cookie)
Офлайн
400 Bad Request (Плохой запрос)
Означает, что сервер обнаружил в запросе клиента синтаксическую ошибку.
Офлайн
Это я знаю. Вопрос в том, какие нужны правильные параметры (POST переменные), чтобы сообщение уходило.
Смотрел через FireBug какие ставятся, если отправлять через браузер. Пробовал также - ситуация аналогична.
Офлайн
TheVampireМожет тебе почитать апи вконтакте, http://vkontakte.ru/page-1_2369497
Это я знаю. Вопрос в том, какие нужны правильные параметры (POST переменные), чтобы сообщение уходило.
Смотрел через FireBug какие ставятся, если отправлять через браузер. Пробовал также - ситуация аналогична.
Офлайн
Не хотелось бы взаимодействовать с VK API, ибо придется регистрировать приложение и принимать правила размещения.
Офлайн
TheVampireContent-Length нпример, тоже правильно выставлен?
Это я знаю. Вопрос в том, какие нужны правильные параметры (POST переменные), чтобы сообщение уходило.
Смотрел через FireBug какие ставятся, если отправлять через браузер. Пробовал также - ситуация аналогична.
headers['Content-Length'] = str(len(post))
Офлайн
Неа, не помогло. :(
Офлайн
Берите любой сниффер (wireshark, например) и сравнивайте свой запрос с реальным.
Офлайн
пробовал wireshark. Переменные POST те же самые.
Офлайн
а заголовки?
Офлайн