Cross post на yVision

Герман Ильин 2010 M06 29
782
5
0
0

В день отлета из Алматы мне захотелось замутить кросс-постинг на yVision со своего блога. Я подумал, что было бы здорово если бы у меня была, например, такая кнопочка Попытки погуглить crossposting...

В день отлета из Алматы мне захотелось замутить кросс-постинг на yVision со своего блога. Я подумал, что было бы здорово если бы у
меня была, например, такая кнопочка

Попытки погуглить crossposting на yVision ничего не дали. И тогда я поискал что есть у Питона
по этой теме. Остановился я на ClientCookie, ClienForm библиотеках. В тот же день добился вот такого результата, с помошью которого я смог закинуть свой первый Test Post.

 

 

#coding: utf-8
import urllib2, cookielib
import ClientCookie
from ClientForm import *

YVI_LOGIN = "your login"
YVI_PASSWORD = "and password"
# если знаете можно указать ID своего логина
# но не обязательно.
YVI_USER_ID = None

# нам надо получить куки авторизации
request = ClientCookie.Request("http://yvision.kz/auth/")
response = ClientCookie.urlopen(request)

# парсим все формы, на страничке
forms = ParseResponse(response, backwards_compat=False)
# нам нужна вторая, первая это фома поиска
form = forms[1]

# заполняем форму, меням экшн. через аякс данный отправляются именно сюда
form.action = 'http://yvision.kz/ajax/auth/login.php'
form['login'] = YVI_LOGIN
form['password'] = YVI_PASSWORD
request = form.click()
# получили куки
response = ClientCookie.urlopen(request)

# теперь идем на нашу форму добавления поста
request = ClientCookie.Request('http://%s.yvision.kz/manage/article/add' % YVI_LOGIN)

# если надо подрелактировать существующий пост, тогда идем сюда
#POST_ID = 55019
#request = ClientCookie.Request('http://%s.yvision.kz/manage/article/edit/%s' % (YVI_LOGIN,POST_ID))

response = ClientCookie.urlopen(request)
# парсим все формы, на страничке
forms = ParseResponse(response, backwards_compat=False)
# нам нужна третяя, первая это фома поиска, вторая форма логаут
form = forms[2]

# заполняем форму, меням экшн. через аякс данный отправляются именно сюда
form.action = 'http://%s.yvision.kz/ajax/post/article.php?publicate=1' % YVI_LOGIN
form['blog_title'] = "Python-Yvi Crosspost Test"
form['blog_post'] = "<p>Python-Yvi Crosspost Test</p>"
form['blog_tags'] = "test,crosspost"
if YVI_USER_ID is not None:
    form.new_control('hidden','user-id',{'id':'user-id','value':YVI_USER_ID})
form.new_control('hidden','save',{'value':'Сохранить (останется скрытой)'})
form.new_control('hidden','saveexit',{'value':'Опубликовать'})

#form.controls.remove(form.find_control('publ'))
#request.add_header('X-Requested-With', 'XMLHttpRequest')
#request.add_header('X-Prototype-Version', '1.6.0.2')

# постим
request = form.click()
response = ClientCookie.urlopen(request)

 

 

потом начал прикручивать, это дело к своему блогу и тут у меня вышли проблемы с кодировкой.
когда пишешь на русском, выходит exception. И я не смог доделать эту фичу в тот же день.
Мы улeтели в анкару.

И вот сегодня на работе, добравшись до интернета решил снова покопаться.
очень долго сверлил гугл, надеясь нарваться на что-нибудь похожее.
В результате нашел... :) причина оказалось в беспанотовости urllib.quote_plus.
в общем я немного подредактировал ClientForm.py, и все заработало.

вот тут лежит архив c библиотеками и моей реализацией задачи

yvi_crosspost.tar.gz

ну вот. как-то так. вроде работает. :)

Оцените пост

0

Комментарии

0
а как же первое из семи правил?)
0
дык кросс-пост и копи-паст немножко разные вещи, а кросспост дохрена кем нарушается, один самых активных тот же таупорт.кз

на самом деле на правила давно все успешно забили к сожалению и администрация почти ничего не делает для их соблюдения
0
Поздравляю, ты нашел уязвимость ))) Или я чего-то не понимаю? Ты со своего домена высылаешь данные на юви через post и получаешь в ответ куку? )))
0
ну не уязвимость.. я как бы имитирую процесс от аутентификации до написания поста. вот если бы там где-то была captcha то не получилось бы.
0
Я так понимаю, что "имитация процесса аутентификации" - это тоже XSS. Разве нет? Почему я не могу просто так взять и отправить данные методом пост на сайт ВКонтакте.Ру и войти в систему со своего домена?
Показать комментарии
Дальше