Сегодня я расскажу тебе один способ, как все-таки загрузить граффити на страницу ВКонтакте. Ведь не секрет, что с выходом FlashPlayer 10, пустая страница с наднисью noGraffiti стала знакома многим линуксоидам-пользователям ВКонтакте...
Итак, наметим план действий: мы нарисуем картинку в графическом редакторе, загрузим ее с помощью Python-скрипта и подтвердим в браузере
Какие ж мы в конце концов линуксоиды без консоли и скриптов?
Начнем. Создаем новый рисунок:
- Тип изображения: png (Формат изображений PNG)
- Ширина: 586 пикселов
- Высота: 293 пиксела
Я для этих целей использую GIMP, ты же можешь использовать свой любимый графический редактор. Рисуем на нем свое граффити, сохраняем. Предположим, что мы сохранили его с именем
graffiti.png в папку
~/uploader.
В эту же папку сохрани наш скрипт, например, под именем
guploader.py:
#!/usr/bin/python
import hashlib
import base64
import pycurl
import os
from StringIO import *
#Based on http://showmecode.com/code/675/ by mayhem
#Translated into class by Ulltor (ulltor@gmail.com)
class GUploader:
def __init__(self, userID, myID, myEMail, myPassword, myRemixId, graffitiFile):
self.userID = userID
self.myID = myID
self.myEMail = myEMail
self.myPassword = hashlib.md5(myPassword).hexdigest()
self.myRemixId = myRemixId
self.graffitiFile = os.path.abspath(graffitiFile);
self.curl = pycurl.Curl()
self.st = StringIO()
def __del__(self):
self.curl.close()
def pngsigMD5(self):
pngsize = os.path.getsize(self.graffitiFile)
pngcontent = open(self.graffitiFile, 'rb').read(pngsize)
pngsigB64 = base64.b64encode(pngcontent)[0:1024]
return hashlib.md5(pngsigB64).hexdigest()
def makeCookie(self):
return 'remixlang=0; remixchk=5; remixautobookmark=14; remixmid=' + self.myID + '; remixemail=' + self.myEMail + '; remixpass=' + self.myPassword + '; remixsid=' + self.myRemixId + ';'
def config(self):
def setoptArray(curlObj, optArray):
for optName, optValue in optArray.iteritems():
opt = getattr(pycurl, optName)
curlObj.setopt(opt, optValue)
options = {
"URL" : 'http://vkontakte.ru/graffiti.php?to_id=' + self.userID + '&group_id=0',
"WRITEFUNCTION" : self.st.write,
"HTTPPOST" : [
('Signature', self.pngsigMD5()),
('Filedata', (pycurl.FORM_FILE, self.graffitiFile)),
('Upload','Submit Query')
],
"REFERER" : 'http://vkontakte.ru/swf/Graffiti.swf?15',
"USERAGENT" : 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8 (.NET CLR 3.5.30729) FirePHP/0.2.4',
"COOKIE" : self.makeCookie(),
"HTTPHEADER" : [
'Host: vkontakte.ru',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language: ru,en-us;q=0.7,en;q=0.3',
'Accept-Encoding: gzip,deflate',
'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7',
'Keep-Alive: 300',
'Connection: keep-alive',
],
}
setoptArray(self.curl, options)
def execute(self):
self.curl.perform()
def GetValue(self):
return self.st.getvalue()
#Imperative part begining
upl = GUploader(
'ID юзера, на стену которого вешается картинка',
'мой ID',
'мой e-mail в формате username%40example.com',
'мой пароль',
'мой RemixId',
'graffiti.png')
upl.config()
upl.execute()
Не забудь заменить нужные строки валидную информацию. Подсказка: чтобы узнать свой RemixId, нужно на своей странице ВКонтакте набрать в адресной строке:
javascript:document.write(document.cookie);
Там найдешь всю информацию.
Сделай скрипт исполняемым:
$chmod +x guploader.py
Теперь устави нужные пакеты:
$sudo apt-get install python-pycurl
PyCurl утянет за собой Python и libcurl.
Самое время питону приняться за работу
$./guploader.py
Как только ты снова увидишь приглашение терминала, переходи по ссылке
http://vkontakte.ru/graffiti.php?act=last. Любуйся результатом