|
С# Средство разработки на платформе .Net |
03.03.2013, 03:30
|
#1
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Каталогизатор kinopoisk.ru
Решил написать сия программа для ненавистной Ubunt'ы, вроде не совсем все и сложно: - Отправил запрос поиска
- Принял страницу с результатами
- Распарсил
- Вывел как нужно
Только загнулось все на 2 пункте, так как кинопоиск имеет анти-бот защиту и выкидывает капчу после запроса.
Пытался в HttpWebRequest менять userAgent на реальный - не помогло.
//Как поступит?
Нашел такой скрипт, там авторизация. Но как это сделать под С#?
http://wolf-et.ru/php/kinopoisk-ru-parser/
|
(Offline)
|
|
03.03.2013, 12:57
|
#2
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Каталогизатор kinopoisk.ru
Все, научился нормально отправлять запрос:
private static string SendPost (string url, string 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; } }
|
(Offline)
|
|
03.03.2013, 15:30
|
#3
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Каталогизатор kinopoisk.ru
Как же перевести "терминатор 3" в "%F2%E5%F0%EC%E8%ED%E0%F2%EE%F0+3" ?
Uri.EscapeUriString не помогла, а HttpUtility работает только в ASP.NET
|
(Offline)
|
|
03.03.2013, 17:03
|
#4
|
быдло
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений (для 1,489 пользователей)
|
Ответ: Каталогизатор kinopoisk.ru
Сообщение от Костян
HttpUtility работает только в ASP.NET
|
С чего бы это? Всё работает и в обычном проекте.
|
(Offline)
|
|
03.03.2013, 19:02
|
#5
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Каталогизатор kinopoisk.ru
Может у меня .NET урезанный, но не робит.
Как сделать мультифильтор GetFiles()?
Эот:
string mask = "*.avi|*.mkv"; Directory.GetFiles(path,mask,SearchOption.TopDirectoryOnly)
не робит, как и этот:
private static string[] GetFiles (string sourceFolder, string filters, System.IO.SearchOption searchOption) { return filters.Split ('|').SelectMany (filter => Directory.GetFiles (sourceFolder, filter, searchOption)).ToArray (); }
Что подскажете?
|
(Offline)
|
|
03.03.2013, 23:50
|
#6
|
быдло
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений (для 1,489 пользователей)
|
Ответ: Каталогизатор kinopoisk.ru
filters.Split ('|').SelectMany
Вроде как функциональность 3.5+(4.0+?) - LINQ.
сделай через foreach.
По поводу HttpUtilits - проверял на 2.0 /NET - работает в любом проекте, нужно только подключить Syste.Web( не знаю будет ли работать в моно)
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:56.
|