/**
* Онлайн словарь 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 .= '&dictionary=' . $direction;
$url .= '&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 строке проставьке ручками амперсанды - форум их заменяет…