• Как сделать парсер id фильмов c кинопоиска как в dle только на php по тайтл?

    Gorily
    @Gorily
    Официального открытого API нет.
    Если неофициально, то всё довольно просто.
    Формируем GET запрос:
    https://www.kinopoisk.ru/handler_search.php?ajax=1&q=%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B0%D1%82%D0%BE%D1%80&topsuggest=true

    В ответ получаем JSON с элементами вида:
    id: "507"
    is_serial: ""
    link: "/film/507/sr/2/"
    name: "The Terminator"
    rus: "Терминатор"
    type: "first"
    ur_rating: "8.0"
    year: "1984"

    Тут ID, рейтинг, год и прочее.
    Чтобы результат был наиболее верным, лучше указывать в поисковом запросе год, а название на английском (если не российский). Также нужно выкинуть символы, апострафы и всё лишнее.
    Ответ написан
    Комментировать
  • Какое регулярное выражение в regex для имени?

    Gorily
    @Gorily
    Если кратко по сути: {255} означает, что должно быть строго 255 символов, не меньше и не больше. Т.е. валидные у вас имена только длиной 256 символов (включая первую заглавную). Поменяйте на {1,255} и всё будет хорошо.
    Но, вдадимся в детали:
    1. Почему 255? Если вы хотите, чтобы запись не превышала размер поля в базе (допустим, это SQL char с лимитом 255), то тут облом - у вас выходит 256 символов с первым обязательным, ставьте лимит {1,254}. Либо замените на обычный +, думаю фреймворк должен где-то сам проверять вхождение в поле, либо просто база обрежет имя шутника.
    2. Есть имена составные, из двух и более слов через пробел, причём не обязательно все части пишутся с большой буквы.
    3. У имён латинских, особенно если ресурс будем международный, часто встречаются диакритические знаки, которые не будут срабатывать с вашей регуляркой. Один из способов их проверки: \p{L}

    Я бы сделал из всего этого такой вывод: разрешите дополнительно диакритические знаки, разрешите любой регистр и пробелы. Дайте возможность людям написать своё имя так, как им нужно.
    Ответ написан
  • Как решить проблему с пробуждением из спящего режима?

    Gorily
    @Gorily
    Не увидел ничего на тему Wake-On-Lan, смотрели? Это пробуждение компьютера по сети. Сигнал на пробуждение может идти как от неправильно настроенного устройства, так и от оператора или зараженного компьютера.
    Выставляется настройкой в сетевой карте:
    5bc981e8e9d2e417887949.png
    Ответ написан
  • Как спарсить весь html код - C#?

    Gorily
    @Gorily
    Метод 1. Качественно, но сложно.
    Подгрузка контента происходит обычно GET-запросами с параметрами, где указаны параметры сколько статей с начала пропустить и по сколько получать. В ответе обычно прилетает готовый HTML код, который просто встраивается в страницу и его спокойно можно распарсить.
    Вектор для изучения:
    • WebClient, HttpClient и т.п. - для формирования запросов
    • Консоль разработчика браузера (Shift+Ctrl+i, вкладка Network) и Fiddler - для изучения поведения страницы и вылавливания содержимого запроса
    Метод 2. Быстро и без заморочек.
    Взять Selenium + Chrome (для наглядности), открывать в них страницу и эмулировать стандартными средствами либо нажатие кнопки (например, "Показать ещё"), либо нажатие пробела (пролистывает страницу вниз). Время от времени проверять используя XPath достигнуто ли дно.
    Вектор для изучения:
    • Selenium - статей полно
    • XPath - язык запросов к XML подобной разметке


    Оба пути очень доступные в изучении.
    Ответ написан
    Комментировать
  • Регулярное выражение для поиска слов в кавычках?

    Gorily
    @Gorily
    Вариант 1. Вытаскиваем всё, что в кавычках двух видов, даже если там несколько слов с пробелами и цифрами:
    https://regex101.com/r/LfzdAx/2
    ("|')([^"']+)

    Вариант 2. Аналогично, но результаты не надо вытаскивать из групп:
    https://regex101.com/r/MhTPOB/1
    (?<=["'])[^"']+
    Ответ написан
    Комментировать
  • Чем просмотреть usb токен?

    Gorily
    @Gorily
    Посмотрите картинки по ссылке: usb токен зеленый, найдите похожий визуально.
    Думаю, у вас eToken Alladin, они очень популярны: https://www.aladdin-rd.ru
    На токене информацию об интернет-магазине не хранится.
    И по VEN DEV идентификаторам в интернете найти можно.
    Ответ написан
    Комментировать
  • Как отрисовать html код из строки в WPF-приложении?

    Gorily
    @Gorily
    Верно ли я вас понял: программа запрашивает некую страницу (запрос), результаты возвращаются в виде HTML строки. Ваша задача - красиво отобразить элементы в WPF приложении.
    Варианты:
    • Отобразить содержимое строки в WebBrowser:
      var browser = new System.Windows.Controls.WebBrowser();
      browser.NavigateToString(string strHtml);

    • Использовать конвертер во FLOWDOCUMENT, подробно тут: blogs.spencen.com/?p=672
    • Можно также воспользоваться любым HTML парсером, например Html Agility Pack и вручную пройтись по элементам кода, попутно создавая элементы интерфейса:
      var doc = new HtmlDocument();
      doc.LoadHtml(html);

    Ответ написан
    Комментировать
  • При рассылке полученное сообщение в GMAIL (при открытии) уходит в корзинку, как это обойти?

    Gorily
    @Gorily
    Думаю, что программа рассылки тут не при чём. Погуглил "mails forwarded to trash gmail" - проблема встречается.
    Из того, что написано складываются два варианта:
    • в Gmail настроены фильтры, под которые попадает письмо;
    • в настройках почты установлена пересылка данных писем с автоматическим удалением с вашего аккаунта.

    Честно говоря, других вариантов я себе не представляю.
    Попробуйте отправить письмо на другие аккаунты и посмотрите на поведение.
    Ответ написан
  • Как свернуть процесс в трей на C#?

    Gorily
    @Gorily
    var driver = new ChromeDriver();
    driver.Manage().Window.Minimize();
    Ответ написан
    Комментировать
  • Есть ли плагин для скидки по ссылке для WordPress (Woocommerce)?

    Gorily
    @Gorily
    Посмотрите https://discountsuiteforwp.com - там есть скидки по партнёрский ссылкам. В демке можете протестировать. Скидка для подписчиков рассылок тоже должна подойти.
    Ответ написан
    3 комментария
  • Есть 5 progress-bar, как узнать, какое значение progress-bar больше и дать разные цвета?

    Gorily
    @Gorily
    Попробовал угадать - вопрос в том, как по ходу движения менять цвет прогрессбара?
    Если это так, то вот пример: https://codepen.io/anon/pen/WKpNdG
    Грубоват, но принцип работы должен быть ясен.
    Ответ написан
    Комментировать
  • Парсер уцененных товаров в dns-shop?

    Gorily
    @Gorily
    На каком языке пишете парсер? Если нужна стабильность результата и отсутствие дальнейших проблем при изменениях полей и защит, то можно использовать Selenium. Загружаете страницу, забираете данные, нажимаете следующую кнопку - и так по расписанию.
    В противном случае воспользуйтесь советом Evgen и реализуйте считывание и передачу CSRF токена.
    Ответ написан
    3 комментария
  • Как удалить все символы, кроме последних?

    Gorily
    @Gorily
    удалить все знаки кроме пяти последних, чтобы получилось "930-1"

    Решение: [a-zA-Z0-9-]{5}$
    Рабочий пример: regexr.com/3spqe.
    Находим перед концом строки 5 символов, можете добавить нужные символы.

    удалить все знаки кроме пяти последних после последнего дефиса "38930"

    Решение #1: (?<last>[a-zA-Z0-9-]{5})-(.*?)$
    Рабочий пример: regexr.com/3spqb. Наведите на найденный фрагмент, чтобы увидеть содержимое первой группы.
    Находим тире перед концом строки и забираем 5 символов до. Они в группе #1 или по имени "last".
    5b53185433df0151116339.pngРешение #2: [^]{5}(?=-(.*?)$)
    Рабочий пример: regexr.com/3spsa
    Тут использована опережающая проверка.
    Ответ написан
    4 комментария
  • Как пропускать только ":" и цифры?

    Gorily
    @Gorily
    this.value.match(/[^0-9:]/g)
    Ответ написан
    Комментировать
  • Как автоматически получить транскрипцию английского слова из Яндекс-переводчика?

    Gorily
    @Gorily
    Сразу предупреждаю: вы должны понимать, что нарушаете правила пользования сервисами Яндекса и ни в коем случае не должны использовать такие решения в коммерческих целях. Надеюсь на ваше благоразумие.

    По поводу решения: лучше зайти со стороны внутреннего API, используемого на сайте.
    Вот простейший вариант решения. Для парсинга Json используется библиотека Json.Net (можете переписать на парсинг стандартной библиотекой .Net, мне просто так было быстрее написать пример).
    const string text = "dog";
    var translateUrl = "https://dictionary.yandex.net/dicservice.json/lookup?ui=ru&text="
                        + text + "&lang=en-ru&flags=23";
    
    using (var wc = new WebClient())
    {
        wc.Encoding = Encoding.UTF8;
        var resultHtml = wc.DownloadString(translateUrl);
        dynamic trsJson = JObject.Parse(resultHtml);
    
        var trs = trsJson.def[0].ts;
        Console.WriteLine("Транскрипция: " + trs);
    }
    Ответ написан
    Комментировать
  • Как улучшить регулярку номера телефона?

    Gorily
    @Gorily
    А вам валидировать или парсить из текста?
    Если валидировать, то я для этих целей использую libphonenumber (https://github.com/googlei18n/libphonenumber), он есть для многих языков программирования. Очень удобная штука.
    Если говорить про регулярки, то для извлечения из текста использую подобную (C#):
    new Regex(@"(7|8)?\s*(\(|-|\s)?\d{3}(\)|-|\s)?\s*\d{3}(-|\s)?\d{2}(-|\s)?\d{2}([^\d]|$)", RegexOptions.Compiled)
    Ответ написан
    1 комментарий
  • Лучший GeoIP решение для определения Страны, Штана/Области, Города?

    Gorily
    @Gorily
    Тема довольно сложная, даже крупные сервисы грешат неправильным определением координат (тот же Google с невероятными возможностями иногда меня в другие города закидывает).
    Я решал к тому же вопрос как автономной системы с регулярными обновлениями, так и онлайн версии. У меня на практике вышло примерно такое:
    1. Вначале прокатываю по базе ipgeobase.ru, они действительно хороши по России и Украине. Не безгрешны, но гораздо лучше того же MaxMind (который содержит города вроде Ulitsa Leninya и т.п.).
    2. Дальше, если IP не в той базе, то MaxMind. Он не плох по зарубежью.
    3. В качестве вспомогательной обратите внимание на ipdip.org (я использую их выгрузки для автономного определения провайдера) и ipinfodb.com, у них неплохое стабильное API и можно выгрузить базу.
    Ответ написан
    Комментировать
  • Как увеличить Timeout сокета библиотеки?

    Gorily
    @Gorily
    Вот обсуждение на GitHub: https://github.com/andyedinborough/aenetmail/issues/80
    Почитайте, попробуйте пример оттуда, переделав под IMAP:
    var fromAddress = new MailAddress(from);
    var toAddress = new MailAddress(to);
    var smtp = new SmtpClient
    {
    Host = "smtp.gmail.com",
    Port = 587,
    Timeout = -1,
    EnableSsl = true,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    UseDefaultCredentials = false,
    Credentials = new NetworkCredential(fromAddress.Address, frompw)
    };
    using (var message = new MailMessage(fromAddress, toAddress)
    {
    Subject = subject,
    Body = body
    })
    {
    smtp.Send(message);
    }
    Ответ написан
    Комментировать
  • Источники взятые интернета?

    Gorily
    @Gorily
    Лицензии CC-BY-SA-3.0 и GFDL, по которым публикуются и распространяются текстовые материалы русской Википедии, позволяют их распространение, изменение и использование в любых (в том числе коммерческих) целях при условии, что лицензии остаются в силе и указывается ссылка на Википедию как на источник. В Википедии отсутствуют неизменяемые разделы, а также вступительные и заключительные тексты.

    Подробно тут: https://ru.wikipedia.org/wiki/%D0%92%D0%B8%D0%BA%D...
    Ответ написан
    Комментировать
  • "Всего 12 анкет" - замена окончания слова "анкет" в зависимости от цифры. Есть готовые решения?

    Gorily
    @Gorily
    Пользуюсь таким решением:
    /// <summary>
    ///     Склонение существительных после числительных.
    /// </summary>
    /// <param name="iNumber">Число</param>
    /// <param name="aEndings">Массив слов или окончаний для чисел (1, 4, 5)</param>
    /// <returns>Вовращает вариант окончания или слова для числительного</returns>
    public static string GetNumEnding(long iNumber, string[] aEndings)
    {
    	string sEnding;
    	iNumber = iNumber%100;
    	if (iNumber >= 11 && iNumber <= 19)
    	{
    		sEnding = aEndings[2];
    	}
    	else
    	{
    		var i = iNumber%10;
    		switch (i)
    		{
    			case (1):
    				sEnding = aEndings[0];
    				break;
    			case (2):
    			case (3):
    			case (4):
    				sEnding = aEndings[1];
    				break;
    			default:
    				sEnding = aEndings[2];
    				break;
    		}
    	}
    	return sEnding;
    }

    Пример:
    GetNumEnding(notices.Count, new[] {"объявление", "объявления", "объявлений"})
    Ответ написан
    1 комментарий