forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   С# (http://forum.boolean.name/forumdisplay.php?f=128)
-   -   Каталогизатор kinopoisk.ru (http://forum.boolean.name/showthread.php?t=17958)

RegIon 03.03.2013 03:30

Каталогизатор kinopoisk.ru
 
Решил написать сия программа для ненавистной Ubunt'ы, вроде не совсем все и сложно:
  1. Отправил запрос поиска
  2. Принял страницу с результатами
  3. Распарсил
  4. Вывел как нужно
Только загнулось все на 2 пункте, так как кинопоиск имеет анти-бот защиту и выкидывает капчу после запроса.
Пытался в HttpWebRequest менять userAgent на реальный - не помогло.
//Как поступит?
Нашел такой скрипт, там авторизация. Но как это сделать под С#?
http://wolf-et.ru/php/kinopoisk-ru-parser/

RegIon 03.03.2013 12:57

Ответ: Каталогизатор kinopoisk.ru
 
Все, научился нормально отправлять запрос:
PHP код:

private static string SendPost (string urlstring postData)
    {
        try {
            
//отправка запроса
            
var httpWebRequest = (HttpWebRequest)WebRequest.Create (url);
            
httpWebRequest.AllowAutoRedirect false;
            
httpWebRequest.Method "GET";
            
httpWebRequest.Host "www.kinopoisk.ru";
            
httpWebRequest.UserAgent "User-Agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)";
            
httpWebRequest.Headers.Add (HttpRequestHeader.AcceptLanguage, @"ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3");
            
httpWebRequest.Headers.Add (HttpRequestHeader.AcceptEncoding, @"gzip, deflate");
            
httpWebRequest.AutomaticDecompression DecompressionMethods.Deflate DecompressionMethods.GZip;
            
httpWebRequest.ContentType "application/x-www-form-urlencoded";
            
httpWebRequest.ProtocolVersion HttpVersion.Version11;
            
httpWebRequest.Referer "http://kinopoisk.ru";
        
            
CookieContainer cookie = new CookieContainer ();
            
httpWebRequest.CookieContainer cookie;
            
            var 
buffer Encoding.ASCII.GetBytes (postData);
            
httpWebRequest.ContentLength buffer.Length;
            
//принятие ответа
            
HttpWebResponse response = (HttpWebResponse)httpWebRequest.GetResponse ();
            
CookieCollection cookies = new CookieCollection ();
            
cookies response.Cookies;
            
Encoding responseEncoding Encoding.GetEncoding (response.CharacterSet);
            
StreamReader strReader = new StreamReader (response.GetResponseStream (), responseEncoding);
                
            
string htmlText strReader.ReadToEnd ();
                
            
response.Close ();
            
//Console.WriteLine (htmlText);
            
return htmlText;
        } catch (
Exception e) {
            
//Console.WriteLine (e.Message);
            //return false;
            
return e.Message "\n" e.Source;
        }
    } 


RegIon 03.03.2013 15:30

Ответ: Каталогизатор kinopoisk.ru
 
Как же перевести "терминатор 3" в "%F2%E5%F0%EC%E8%ED%E0%F2%EE%F0+3" ?
Uri.EscapeUriString не помогла, а HttpUtility работает только в ASP.NET

Dream 03.03.2013 17:03

Ответ: Каталогизатор kinopoisk.ru
 
Цитата:

Сообщение от Костян (Сообщение 254135)
HttpUtility работает только в ASP.NET

С чего бы это? Всё работает и в обычном проекте.

RegIon 03.03.2013 19:02

Ответ: Каталогизатор kinopoisk.ru
 
Может у меня .NET урезанный, но не робит.
Как сделать мультифильтор GetFiles()?
Эот:
PHP код:

string mask "*.avi|*.mkv";
Directory.GetFiles(path,mask,SearchOption.TopDirectoryOnly

не робит, как и этот:
PHP код:

private static string[] GetFiles (string sourceFolderstring filtersSystem.IO.SearchOption searchOption)
        {
            return 
filters.Split ('|').SelectMany (filter => Directory.GetFiles (sourceFolderfiltersearchOption)).ToArray ();
        } 

Что подскажете?

Dream 03.03.2013 23:50

Ответ: Каталогизатор kinopoisk.ru
 
PHP код:

filters.Split ('|').SelectMany 

Вроде как функциональность 3.5+(4.0+?) - LINQ.
сделай через foreach.

По поводу HttpUtilits - проверял на 2.0 /NET - работает в любом проекте, нужно только подключить Syste.Web( не знаю будет ли работать в моно)


Часовой пояс GMT +4, время: 16:51.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot