PDA

Просмотр полной версии : Исходник пригласителя в группу VК


lukmus
13.03.2010, 04:40
Уважаемые модераторы, я так посчитал, что эта тема больше относиться к кодингу, чем к соцсетям.
Короче, заказывали у меня скрипт способный приглашать друзей в группу, а так же вступать самим аккам в группу для VК, я скрипт написал, а заказчик забил на эту тему.


#made by lukmus 06.03.2010
#!/usr/bin/ruby
require 'lib_fs.rb'

#CONFIG=========================================== ==
$togrp=15 #count of friends for one invite attemp
$wait_time=25 #time between invalid attemp
$log_f='log.log' #log file
#================================================= ==

help=<<EOF
<acc_file> <group_id> [-iaf]
acc_file file with accounts, format: login:pass
group_id group number, integer
iaf invite all friends

made by lukmus 06.03.2010
EOF

if ARGV.size<2 or ARGV.size>3
puts help
exit
end

$acc_f=ARGV[0]
gr=ARGV[1].to_i
invite_a_f=false

if ARGV.size==3 and ARGV[2]=='-iaf' then invite_a_f=true end

$all_f_count=0
$all_if_count=0


def log(str)
fl=File.new($log_f,'a')
fl.puts str
fl.close
end

def iaf(account,gr_id)
friends=account.get_all_friends_ids
suc_count=0
good=0
if friends==-1 then puts " get friends FAILED" else
print " \ninviting"
$all_f_count+=friends.size
STDOUT.flush
end_p=$togrp
start_p=0
while start_p<friends.size do
end_p=start_p+$togrp
if end_p>friends.size-1 then end_p=friends.size-1 end
if account.invite_f_in_group(gr_id,friends[start_p..end_p])==0 then
print '.'
$all_if_count+=end_p-start_p
suc_count+=end_p-start_p
good=1
else print '?' end
STDOUT.flush

start_p+=$togrp


end
$all_if_count+=good
print " [suc_count=#{suc_count+good}/f_count=#{friends.size}]"
STDOUT.flush
end
end

fil=File.new($acc_f,"r")
while !fil.eof
str=fil.gets
str.chop!
mail,pass=str.split(':')
print "\n #{mail} "
acc=Account.new(mail,pass)
if acc.logon==0
if acc.enter_in_group(gr)==0 then print " OK " else print " WARNING: Can't enter in group " end
if invite_a_f==true then iaf(acc,gr) end
else
puts " ERROR: Invalid login or password "
log("Invalid #{mail.gsub('%40','@')}:#{pass}")
wait($wait_time,1)
end
end
fil.close
puts "\n[all_f_count=#{$all_f_count}/all_invite_f_count=#{$all_if_count}]"



Как установить Ruby и как запустить скрипт (http://habrahabr.ru/blogs/ruby/30786/)
библиотека необходимая для скрипта (http://www.sendspace.com/file/r9ngax)
все файлы в одном архиве (http://www.sendspace.com/file/pt61s9)

О работе скрипта
Скрипт считывает из файла пару логин:пароль, каждая пара на новой строке. Далее логиниться и выполняет следующие действия:
-вступает в группу с номером <group_id>
-если указан параметр -iaf, то приглашает в группу всех своих друзей
Последняя функция работает не всегда, принцип по которому VК отсеивает выяснить не удалось т.к. зачастую эта функция не работает и через браузер.

Пару слов о библиотеке
В файле так называемой библиотеки содержиться class Account, который собственно и содержит методы, которые реализуют функции скрипта.

Для рубистов
Насколько я знаю, на этом форуме их очень не много.
Как я уже писал все самое интересное в библиотеке, в кратце опишу методы класса Account:
-enter_in_group(gr_id)
вступает в группу gr_id
-invite_f_in_group(gr_id,user_ids)
приглашает в группу gr_id, юзеров массива user_ids
-count_of_users_in_grp(gr_id)
возвращает количество акков в группе gr_id, данные берет с главной страницы группы, поэтому в случае быстрого инвайта запаздывает
-get_all_friends_ids()
возвращает массив с id друзей
-logon()
самая интересная функция, может пригодиться для брута, но только через прокси. логиниться.
-get_my_id()
возвращает id акка
-get_friends_count()
возвращает кол-во друзей акка
-get_hash_4_invite_2_group(prehash)
разгадывает загадку, по которой VК шифрует хэш для инвайта по prehash (якобы хэш выводящийся в явном виде)
-get_hash(path,id,n)
возвращает остальные бесхитростные хэши

К чему все это
Все методы библиотеки понятны далеко не только рубистам, основная фишка это конечно формирование нужного запроса. Так вот давайте развивать эту Open Source библиотеку на языке котором знаешь.