Песочница →
            Массовое переименование аудиозаписей вконтакте, 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
    
        
            
            
            
        