ФорумПрограммированиеПыхнуть хотите?Готовые решения → Перевод слов с помощью ver-dict.ru

Перевод слов с помощью ver-dict.ru

  • kendo

    Сообщения: 446 Репутация: N Группа: Адекваты

    Spritz 1 февраля 2009 г. 11:21

    Результат моего знакомства с библиотекой CURL. Если необходимо - можно переписать под сокеты.

    /**
    * Онлайн словарь VerDict
    *
    * @uses curl
    * @version 0.1b
    * @author KENDO <[email protected]>
    */
    class VerDict {
       private $curl;

       /* Supported Languages */
       const English2Russian = 'er';
       const Russian2English = 're';
       const German2Russian  = 'gr';
       const Russian2German  = 'rg';
       const French2Russian  = 'fr';
       const Russian2French  = 'rf';
       const Spain2Russian   = 'sr';
       const Russian2Spain   = 'rs';
       const Italian2Russian = 'ir';

       /**
        * Translate
        *
        * @param string $word Слово для перевода
        * @param string $direction Направление перевода. Задается одной из констант.
        * @return array|bool Возвращает массив с вариантами перевода, либо false, если слово не найдено или при ошибке curl.
        */
       public function translate($word, $direction) {
           // TODO неизвестный параметр 'base'
           $url  = 'http://www.ver-dict.ru/online/?base=0';
           $url .= '&#38;dictionary=' . $direction;
           $url .= '&#38;word=' . urlencode($word);
           curl_setopt($this -> curl, CURLOPT_URL, $url);
           $page = curl_exec($this -> curl);
           if (curl_errno($this -> curl)) return false;
           preg_match('/<div style="padding:5px;height:260px;overflow:auto;"?>(.*?)<\/div>/is', $page, $result);
           // TODO строка для сравнения должна быть в кодировке UTF-8
           if (strpos($result[0], 'Перевод в словарях не найден') !== false) return false;
           preg_match_all('/<b?>(.*?)<\/b>/is', $result[1], $translation);
           $translation = array_slice($translation[1], 1);
           $translation = array_map('trim', $translation);
           return $translation;
       }

       public function __construct() {
           $this -> curl = curl_init();
           curl_setopt($this -> curl, CURLOPT_RETURNTRANSFER, 1);
       }

       public function __destruct() {
           curl_close($this -> curl);
       }
    }

    // Примеры
    $verdict = new VerDict();
    $result = $verdict -> translate('волк', VerDict::Russian2English);
    echo $result[0]; // Wolf
    $result = $verdict -> translate('eye', VerDict::English2Russian);
    echo $result[0]; // Глаз

    Пожалуй, единственный минус - это то, что файл должен быть в кодировке UTF8, иначе на 39 строке всегда будет значение false, даже если слово отсутствует в словаре.
    Жду ваших отзывов :)
    P.S. на 32-33 строке проставьке ручками амперсанды - форум их заменяет…
  • disc

    Сообщения: 843 Репутация: N Группа: Джедаи

    Spritz 1 февраля 2009 г. 11:23, спустя 1 минуту 17 секунд

    заюзай iconv для перевода файлов в утф8 и минуса не будет)
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 1 февраля 2009 г. 11:25, спустя 2 минуты 20 секунд

    а на чо тут смотреть то? 61 никому ненужная строка :) на file_get_contents + preg_match это 8 строк.
    Сапожник без сапог
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 2 февраля 2009 г. 5:07, спустя 17 часов 42 минуты 20 секунд

    это что переводит лучше чем гугл?
    и судя по всему курл там ваще не нужен

  • kendo

    Сообщения: 446 Репутация: N Группа: Адекваты

    Spritz 2 февраля 2009 г. 6:28, спустя 1 час 20 минут 44 секунды

    По поводу курла согласен. Просто надо было на каком-нибудь примере его попробовать.
    Только это не переводчик, это словарик :)
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 2 февраля 2009 г. 6:34, спустя 5 минут 49 секунд


    По поводу курла согласен. Просто надо было на каком-нибудь примере его попробовать.
    Только это не переводчик, это словарик :)
    ты в своем примере даже не почувствовал что такое курл.

    http://phpdude.ru/archives/470

    мб поможет, да и писать на самом курле - как заниматься сексом с мужчиной … медленно и неприятно :(
    Сапожник без сапог
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 2 февраля 2009 г. 8:43, спустя 2 часа 9 минут 22 секунды

    медленно и неприятно

    че правда? xDDD

Пожалуйста, авторизуйтесь, чтобы написать комментарий!