Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Web
  • » Вконтакте : Отправка сообщения [RSS Feed]

#1 Ноя. 22, 2010 23:03:13

TheVampire
От:
Зарегистрирован: 2010-04-07
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Вконтакте : Отправка сообщения

Захотел написать десктопное приложение для работы с 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)
Гугл указал на похожие темы, но без ответа :-((
Быть может кто-нибудь подскажет в чем косяк ?



Офлайн

#2 Ноя. 23, 2010 07:39:30

yanka
От:
Зарегистрирован: 2010-07-27
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Вконтакте : Отправка сообщения

400 Bad Request (Плохой запрос)
Означает, что сервер обнаружил в запросе клиента синтаксическую ошибку.



Офлайн

#3 Ноя. 23, 2010 08:50:16

TheVampire
От:
Зарегистрирован: 2010-04-07
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Вконтакте : Отправка сообщения

Это я знаю. Вопрос в том, какие нужны правильные параметры (POST переменные), чтобы сообщение уходило.
Смотрел через FireBug какие ставятся, если отправлять через браузер. Пробовал также - ситуация аналогична.



Офлайн

#4 Ноя. 23, 2010 09:04:10

yanka
От:
Зарегистрирован: 2010-07-27
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Вконтакте : Отправка сообщения

TheVampire
Это я знаю. Вопрос в том, какие нужны правильные параметры (POST переменные), чтобы сообщение уходило.
Смотрел через FireBug какие ставятся, если отправлять через браузер. Пробовал также - ситуация аналогична.
Может тебе почитать апи вконтакте, http://vkontakte.ru/page-1_2369497
Попробуй, я просто не интересовалась этим вопросом



Офлайн

#5 Ноя. 23, 2010 09:15:40

TheVampire
От:
Зарегистрирован: 2010-04-07
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Вконтакте : Отправка сообщения

Не хотелось бы взаимодействовать с VK API, ибо придется регистрировать приложение и принимать правила размещения.



Офлайн

#6 Ноя. 23, 2010 20:26:47

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Вконтакте : Отправка сообщения

TheVampire
Это я знаю. Вопрос в том, какие нужны правильные параметры (POST переменные), чтобы сообщение уходило.
Смотрел через FireBug какие ставятся, если отправлять через браузер. Пробовал также - ситуация аналогична.
Content-Length нпример, тоже правильно выставлен?
он должен соответствовать длине передаваемых данных

добавь что-то типа
headers['Content-Length'] = str(len(post))
мне как-то помогло (правда это не контакт был :)
с такой же ошибкой откидывало



Офлайн

#7 Ноя. 23, 2010 23:47:49

TheVampire
От:
Зарегистрирован: 2010-04-07
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Вконтакте : Отправка сообщения

Неа, не помогло. :(



Офлайн

#8 Ноя. 24, 2010 12:57:41

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Вконтакте : Отправка сообщения

Берите любой сниффер (wireshark, например) и сравнивайте свой запрос с реальным.

Офлайн

#9 Ноя. 26, 2010 18:57:58

TheVampire
От:
Зарегистрирован: 2010-04-07
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Вконтакте : Отправка сообщения

пробовал wireshark. Переменные POST те же самые.



Офлайн

#10 Ноя. 26, 2010 19:54:11

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Вконтакте : Отправка сообщения

а заголовки?



Офлайн

  • Начало
  • » Web
  • » Вконтакте : Отправка сообщения[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version