Автоматизация загрузки видео на www.24video.net

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by cheater_man, 3 Sep 2010.

  1. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    666
    Likes Received:
    44
    Reputations:
    7
    Нужно автоматизировать процесс загрузки видео по ссылке:
    1.Авторизируюсь и сохранию cookies(только вроде как куки не сохраняются :( )
    Code:
    req = (HttpWebRequest)HttpWebRequest.Create("http://www.24video.net/auth/login");
                    req.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; WebMoney Advisor; MRA 5.3 (build 02560); MRSPUTNIK 2, 0, 1, 54 SW; .NET CLR 2.0.50727; InfoPath.1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
                    req.Accept = "image/gif, image/x-xbitmap, image/jpeg,image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
                    req.Headers.Add("Accept-Language", "ru");
                    req.Method = "POST";
                    //----------------------------
                    req.CookieContainer = cookieContainer;
                    req.AllowAutoRedirect = false; // Важный пункт
                    req.ContentType = "application/x-www-form-urlencoded";
                    byte[] SomeBytes = null;
                    string FormParams = "username=Tester&password=tester";
                    SomeBytes = Encoding.UTF8.GetBytes(FormParams);
                    req.ContentLength = SomeBytes.Length;
                    Stream newStream = req.GetRequestStream();
                    newStream.Write(SomeBytes, 0, SomeBytes.Length);
                    result = (HttpWebResponse)req.GetResponse();
                    cookieVal = result.GetResponseHeader("Set-Cookie"); // забираем куки
                    req.Headers.Add(HttpRequestHeader.Cookie, cookieVal);
                    ReceiveStream = result.GetResponseStream();
                    sr = new StreamReader(ReceiveStream, encode);
                   answer = sr.ReadToEnd();
    
    2.Получаю id своего видео(это нужно обязательно, инеаче видео не залить)
    Code:
    req = (HttpWebRequest)HttpWebRequest.Create("http://upload.24video.net/video/generateIdentifier");
                    req.Method = "POST";
                    HttpWebResponse myHttpWebResponse = (HttpWebResponse)req.GetResponse();
                    StreamReader myStreamReader = new StreamReader(myHttpWebResponse.GetResponseStream(), Encoding.UTF8);
                    id = Convert.ToInt32(myStreamReader.ReadToEnd());
    
    3.Отправляю запрос на загрузку видео
    Code:
    req = (HttpWebRequest)HttpWebRequest.Create("http://upload.24video.net/video/uploadUrl?X-Progress-ID=" + id);
                    req.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; WebMoney Advisor; MRA 5.3 (build 02560); MRSPUTNIK 2, 0, 1, 54 SW; .NET CLR 2.0.50727; InfoPath.1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
                    req.Accept = "image/gif, image/x-xbitmap, image/jpeg,image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
                    req.Headers.Add("Accept-Language", "ru");
                    req.Method = "POST";
                    req.ContentType = "application/x-www-form-urlencoded";
                    byte[] SomeBytes1 = null;
    //это видео я взял для примера
                    string FormParams1 = "uploadUrl=http%3A%2F%2Fdownload.youporn.com%2Fdownload%2F1392366%2Fflv%2F450913_Orgy_sex_party_everyone_fucking.flv";
                    SomeBytes1 = Encoding.UTF8.GetBytes(FormParams1);
                    req.ContentLength = SomeBytes1.Length;
                    Stream newStream1 = req.GetRequestStream();
                    newStream1.Write(SomeBytes1, 0, SomeBytes1.Length);
                    newStream1.Close();
    
                    myHttpWebResponse = (HttpWebResponse)req.GetResponse();
                    myStreamReader = new StreamReader(myHttpWebResponse.GetResponseStream(), Encoding.UTF8);
    //выводим и смотрим что нам ответил серв
                    textBox2.Text += answer;
    
                    textBox1.Text += id;
    
    Ответы сервера:
    1. {"result":true,"info":"Tester","adult":true}
    2. 1094550(например, так как эта переменная увеличивается с каждым разом)
    3.QUICK_SUCCESS
    4.Потом как бы должен пойти процесс загрузки но этого не происходит. И помоему он куки не сохраняет.
    Как правильно авторизироваться?
    p.s. сорри за кривой код :)
     
    #1 cheater_man, 3 Sep 2010
    Last edited: 3 Sep 2010
  2. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,599
    Likes Received:
    1,308
    Reputations:
    1,557
    Не знаю как насчет загрузки по ссылке, но при загрузке из файла еще четвертый запрос есть:
    PHP:
    POST http://upload.24video.net/video/saveMovie
    movieName=
    [
    НАЗВАНИЕ]
    &
    movieTags=
    [
    ТЭГИ]
    &
    movieDesc=
    [
    ОПИСАНИЕ]
    &
    movieTheme=
    [
    ТЕМА]
    &
    mode=file&X-Progress-ID=
    [
    ID]
    &
    originalName=
    [
    НАЗВАНИЕ_ФАЙЛА]
    Ответ возвращает такой же, как и третий запрос
     
  3. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    666
    Likes Received:
    44
    Reputations:
    7
    Там понимаешь такая мура получается:
    1.логинишься
    2.получаешь ид видео
    3.загружаешь видео
    4.только потом разрешается отсылать запрос на название описание и т.д.
    вроде так, если не так поправьте...
    Я тут всем чем можно снифал и вот результат:
    под четвертым пунктом скрывается сам результат загрузки:
    запрос get:
    Code:
    GET /video/uploadInfoInternal?_dc=[COLOR=Red]1283802887109[/COLOR]&cancelled=false&X-Progress-ID=[COLOR=Green]1096285 [/COLOR]HTTP/1.1
    Ответ
    Code:
    {"received":1954136,"size":8882966,"state":"uploading","error":null}
    запрос get:
    Code:
    GET /video/uploadInfoInternal?_dc=1283802892250&cancelled=false&X-Progress-ID=1096285 HTTP/1.1
    Ответ
    Code:
    {"received":4457992,"size":8882966,"state":"uploading","error":null}
    Ну и т.д. пока оно полностью не загрузится:
    Code:
    GET /video/uploadInfoInternal?_dc=1283802933312&cancelled=false&X-Progress-ID=1096285 HTTP/1.1
    ответ
    Code:
    {"received":8341000,"size":8882966,"state":"done","error":null}
    Вот так
    1096285 -это понятно это id видео
    1283802887109 - а вот это что за лажа не совсем понятно :confused:
    И вообще эти гет запросы формировать мне?
    Или это сервер отвечает?
    если-бы :) это ответ говорит что видео только готово к загрузке.
     
    #3 cheater_man, 6 Sep 2010
    Last edited: 7 Sep 2010
  4. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,599
    Likes Received:
    1,308
    Reputations:
    1,557
    Да, но если пришел ответ SUCCESS после запроса 3, то видео загружено и отправляешь следующий запрос.

    upd: попробуй JS и плагины отключить в браузере и залить видео
     
    #4 M_script, 7 Sep 2010
    Last edited: 7 Sep 2010
  5. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,599
    Likes Received:
    1,308
    Reputations:
    1,557
    Значит загрузка по ссылке отличается от загрузки из файла. Сделай в цикле проверку состояния загрузки, пока не будет "state":"done". Идентификатор загружаемого видео у тебя есть.
     
  6. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    666
    Likes Received:
    44
    Reputations:
    7
    Code:
    GET /video/uploadInfoInternal?_dc=[COLOR=Red][SIZE=3]1283802887109[/SIZE][/COLOR]&cancelled=false&X-Progress-ID=1096285
    Вот она и загвоздка...
    Тут непонятно откуда параметр _dc берется :confused:
    Такое ощущение что это переменная определяет общее количество байт(килобайт) загруженных на сервер
    Для просмотра данной страницы необходимо включить JavaScript :(
     
    #6 cheater_man, 7 Sep 2010
    Last edited: 7 Sep 2010
  7. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    666
    Likes Received:
    44
    Reputations:
    7
    нашел интересненькое:
    PHP:
    http://www.24video.net/js/utils.js
    особенно вот:
    Code:
    var V24 = {}; // global namespace
    
    var MAX_MOVIE_NAME_LENGTH = 45;
    var MAX_MOVIE_DESC_LENGTH = 255;
    var WORD_REGEXP = new RegExp("<(.*?)>|&[a-z]+;|[\.,:;\"\']+", "g");
    var SPACE_REGEXP = new RegExp("\\s+", "g");
    var MAX_WORD_LENGTH = 60;
    
    var filterProps = {};
    var inputValues = {};
    var base64fields = [];
    
    if (!String.prototype.trim)
    {
    	String.prototype.trim = function()
    	{
    	    return this.replace(/^\s*/, "").replace(/\s*$/, "");
    	};
    }
    
    if (!Array.prototype.indexOf)
    {
    	Array.prototype.indexOf = function(item, i)
    	{
    		i || (i = 0);
    		var length = this.length;
    		if (i < 0)
    		{
    			i = length + i;
    		}
    		for (; i < length; i++)
    		{
    			if (this[i] === item)
    			{
    				return i;
    			}
    		}
    		return -1;
    	};
    }
    
    function checkExist(obj)
    {
    	return !(obj == undefined || !obj);
    }
    
    function logToConsole(str)
    {
    	if (typeof(console) == "object")
    	{
    		console.log(str);
    	}
    }
    
    function calculateLink(href, values, addAll)
    {
    	if (values == null)
    	{
    		values = {};
    	}
    	
    	if (parseUri(href).path == parseUri(document.location.href).path) 
    	{
    		var scrollx = getScrollX();
    	    var scrolly = getScrollY();
    	    
    	    if (scrollx)
    	    {
    	    	values.scrollx = scrollx;
    	    }
    	    if (scrolly)
    	    {
    	    	values.scrolly = scrolly;
    	    }	
    	}
        return calculateLinkInternal(href, values, addAll);
    }
    
    function calculateLinkInternal(href, values, addAll)
    {
    	/**
         * @type {Array}
         */
        var parts = href.split('?');
        /**
         * @type {Array}
         */
        var paramsArray = new Array();
        /**
         * @type {Array}
         */
        var addedArray = new Array();
        if (parts.length > 1)
        {
    	    /**
    	     * @type {Array}
    	     */
    	    var params = parts[1].split('&');
    	    for (var i = 0; i < params.length; i++)
    	   	{
    	   		/**
    		     * @type {Array}
    		     */
    	   		var pair = params[i].split('=');
    	   		var key = pair[0];
    	   		addValue(paramsArray, key, pair[1], addAll);
    	   		addedArray.push(key);
    	    }
        }
        for (var key in values)
        {
        	if (addedArray.indexOf(key) < 0)
        	{
        		addValue(paramsArray, key, values[key], addAll);
        	}
        }
        href = parts[0];
        for (var i = 0; i < paramsArray.length; i++)
       	{
       		href += (i == 0 ? '?' : '&');
       		href += (paramsArray[i].key + '=' + paramsArray[i].value);
        }
        return href;
    }
    
    function parseParams(href)
    {
    	var parts = href.split('?');
        var result = {};
        if (parts.length > 1)
        {
        	/**
    	     * @type {Array}
    	     */
    	    var params = parts[1].split('&');
    	    for (var i = 0; i < params.length; i++)
    	   	{
    	   		/**
    		     * @type {Array}
    		     */
    	   		var pair = params[i].split('=');
    	   		result[pair[0]] = (base64fields.indexOf(pair[0]) != -1) ? Base64.decode(decodeURIComponent(pair[1])) : decodeURIComponent(pair[1]);
    	    }
        }
        return result;
    }
    
    function addValue(paramsArray, key, value, addAll)
    {
    	if (addAll || (value != filterProps[key]))
    	{
    		paramsArray.push(
    	   	{
    	   		key: key,
    	   		value: value
    	   	});
    	}
    }
    
    вроде здесь формируется параметр _dc?
    у кого есть какие предложения?
     
Loading...