Песочница →
Массовое переименование аудиозаписей вконтакте, PHP
Доброго времени суток. Пару дней назад, один мой хороший знакомый, попросил меня написать скрипт для массового переименования аудиозаписей в заданной группе вконтакте. Язык, на котором должен быть написан скрипт оказался PHP. Честно признаться, с PHP я до этого не работал, да и вообще кодером не являюсь, так пара пар(прошу прощения за тавтологию) в университете, на почти гуманитарном факультете. Но, всегда было интересно начать, поэтому от задания не отказался. Собственно, вот что получилось:
Таким образом, с помощью операций конкатенации, мы можем прикрепить любой текст к названию песни, либо исполнителя. К примеру:
В результате, к названию каждой композиции в необходимой группе, приклеится текст [Здесь был Вася]. Разумеется, для данной операции вы должны обладать соответствующими правами в группе, на которую нацелились. Возможно, что кому-то помимо моего знакомого, пригодится этот скрипт, поэтому выкладываю на всеобщее обозрение.
#Ввод логина и пароля
$login = 'EMAIL';
$passwd = 'PASSWORD';
$vk = auth($login,$passwd);
if ($vk) {
#GID группы вконтакте, $vk
renameRecords('GID',$vk);
curl_close($vk);
}
function auth($login, $passwd) {
#Маскируемся под браузер
$userAgent = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.186 Safari/535.1';
$cookie = '';
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_URL, 'http://login.vk.com/?act=login');
#Создаем POST-запрос для авторизации
$post = array(
'act' => 'login',
'al_frame' => '1',
'from_host' => 'vk.com',
'email' => $login,
'pass' => $passwd
);
#Получаем куки
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
$answer = curl_exec($ch);
#В ответе от сервера приходит js-скрипт, содержащий строку печенья
$value = substr($answer, strpos($answer, "setCookieEx('sid', '") + 20, 60);
#Если пароль был неверным, строка будет содержать кусок js,
#с пробелами и прочими мусорными символами
if (strpos($value, " ")) {
echo "Неверный пароль";
return 0;
}
#Устанавливаем кук на cURL-сессию
$cookie = 'remixsid=' . $value;
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
echo "Auth complete";
return $ch;
}
function renameRecords($gid, $vk) {
#Аналогично блоку авторизации, создаем POST-запрос
$post = array(
'act' => 'load_audios_silent',
'al' => 1,
'edit' => 0,
'gid' => $gid,
'id' => 0
);
curl_setopt($vk, CURLOPT_URL, 'http://vk.com/audio');
curl_setopt($vk, CURLOPT_POSTFIELDS, http_build_query($post));
#В ответе получаем дерево всех аудиозаписей группы
$response = curl_exec($vk);
#Из ответа, с помощью регулярных выражений, достаем
#значения 'aid', наименования исполнителей и песен ('names')
#а так-же значение hash, необходимое для редактирования записей
preg_match_all("#'-{$gid}'\,'(\d+)'#", $response, $aid);
preg_match_all("#'\d+:\d+'\,'(.+?)'\,'(.+?)'#", $response, $names);
preg_match("#\"edit_hash\":\"(.+?)\"#", $response, $hash);
unset($response);
unset($post);
#Запрос для редактирования названия песни
$post = array(
'act' => 'edit_audio',
'al' => 1,
'text' => 'notext',
'oid' => "-" . $gid,
'hash' => $hash[1]
);
for($i = 0, $cnt = count($aid[1]); $i < $cnt; $i++) {
#Цикл пробегает по массиву значений полученных с помощью
#регулярных выражений и устанавливает необходимые значения в тело запроса
$post['aid'] = $aid[1][$i];
$post['performer'] = iconv('windows-1251', 'utf-8', $names[1][$i]);
$post['title'] = iconv('windows-1251', 'utf-8', $names[2][$i]);
curl_setopt($vk, CURLOPT_POSTFIELDS, http_build_query($post));
curl_exec($vk);
}
}
Таким образом, с помощью операций конкатенации, мы можем прикрепить любой текст к названию песни, либо исполнителя. К примеру:
$post['title'] = iconv('windows-1251', 'utf-8', $names[2][$i]) . " [Здесь был Вася]";
В результате, к названию каждой композиции в необходимой группе, приклеится текст [Здесь был Вася]. Разумеется, для данной операции вы должны обладать соответствующими правами в группе, на которую нацелились. Возможно, что кому-то помимо моего знакомого, пригодится этот скрипт, поэтому выкладываю на всеобщее обозрение.
14.10.2011 16:49+0400