Регулярка для автозаполнения Яндекса

Статус
В этой теме нельзя размещать новые ответы.

Albert22

Старатель
Регистрация
30 Мар 2008
Сообщения
270
Реакции
11
Всем привет
Хочу уворовать автокомплит от Яндекса.
Вот что имеется:
Для просмотра ссылки Войди или Зарегистрируйся
(vk — уже введенные символы, по которым и производится автозаполнение)
Яндекс возвращает:
suggest.apply("vk", ["vkontakte.ru", "vkontakte", "vkontakte.ru вход", "vklife", "vko", "vkrugudruzei.ru", "vkontakt", "vkmusic", "vkontakte.ru регистрация", "vkon"])
А вот как нужно передать это же работающему у меня Для просмотра ссылки Войди или Зарегистрируйся:
<li>vkontakte.ru</li><li>vkontakte</li><li>vkontakte.ru вход</li><li>vklife</li><li>vko</li><li>vkrugudruzei.ru</li><li>vkontakt</li><li>vkmusic</li><li>vkontakte.ru регистрация</li><li>vkon</li>

Я напыхтел вот такой скрипт:
Код:
<?php
$file=file_get_contents("http://suggest.yandex.ru/suggest-ya.cgi?ct=text/html&part=".$_REQUEST['value']."&v=2");
preg_match_all('#"([-_\w\s\d]{3,})"#i', $file, $matches);
foreach($matches[0] as $key=>$val){
if(!empty($val)){print '<li>'.$val.'</li>';}
}
?>
, возвращающий следующее:
<li>"vkontakte"</li><li>"vklife"</li><li>"vko"</li><li>"vkontakt"</li><li>"vkmusic"</li><li>"vkon"</li>

Вопрос даже не сколько в том, как убрать кавычки. Хотелось бы знать как максимально оптимизировать этот скрипт. Или, как обойтись без него — вскормить непосредственно Яндексовские предположения (без моих промежуточных стараний) этому Для просмотра ссылки Войди или Зарегистрируйся.
Заранее спасибо.

Добавлено через 5 минут
UPD:
Код:
print '<li>'.str_replace('"', '', $val).'</li>';
Пока работает так, однако что-то мне подсказывает что это — не самый лучший вариант.
 
Если кртична скорость, то имеет смысл обойтись без регулярки, написать скрипт проходящий по строке. Из регулярок же думаю будет наиболее производительно "\K[^"]* - на вскидку, теста не проводил:) Еще зависит от того какие входные данные, если в строке могут содержатся кавычки, например "vk", то надо соответственно усложнить обработку.
 
вот так побыстрее должно работать

HTML:
$str=preg_replace('/^.+?\[([^\[]+)\].+$/','\1',$file);
$matches=explode(',',$str);
foreach($matches as $val)
	print '<li>'.str_replace('"', '', $val).'</li>';
 
Сомневаюсь. Сохраняющие скобки, плюс после регулярки еще строку дополнительно обрабатываем, зачем, уж лучше сразу одним кодом обойтись.
 
Это же JSON!
PHP:
<?
$temp='suggest.apply("vk", ["vkontakte.ru", "vkontakte", "vkontakte.ru вход", "vklife", "vko", "vkrugudruzei.ru", "vkontakt", "vkmusic", "vkontakte.ru регистрация", "vkon"])';

$temp=strrchr($temp,"[");
$temp=substr($temp,0,strpos($temp,"]"))."]";
$temp=iconv("CP1251","UTF-8",$temp);//яша возвращает windows-1251, а JSON принимается в UTF-e только
$arr=json_decode($temp);
var_dump($arr);//здесь строки все в UTF.если надо перекодируйте обратно
?>
посто, и со вкусом используем встроенные средства.
на основе этого кода можно и другую выдачу в JSON распарсивать
 
Alternator, спасибо. Вот что получилось на базе Вашего скрипта:
PHP:
<?php
$file=file_get_contents("http://suggest.yandex.ru/suggest-ya.cgi?ct=text/html&part=".urlencode($_REQUEST['value'])."&v=2");
$file=strrchr($file,"[");
$file=substr($file,0,strpos($file,"]"))."]";
$file=iconv("CP1251","UTF-8",$file);//яша возвращает windows-1251, а JSON принимается в UTF-e только
$data=json_decode($file);
header("Content-type: text/html; charset=utf-8");
print_r($data); // там уже по ситуации
?>
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху