Войти

Показать полную графическую версию : [решено] Удавалось кому нибудь подружить Custom Search Engine от гугла с сайтом?


Vampire
16-09-2007, 20:32
Пытаюсь подпружить Custom Search Engine от гугла с сайтом. Зарегился на гугле, настроил поисковик, получил 2 кода, один для вызова поискового запроса с кнопочкой сеарчь, а другой с выводом результата. Оба этих кода поставил на одной страничке. Если забивать в форму английское слово, то поиск срабатывает и выдает результаты, а вот если его по русски спросить, то ничего не выходит. Если разнести эти 2 кода на разные странички, то и с русским языком проблем не возникает, но охота сделать на одной. Еще нашел решение этой проблемы - выставить кодировку на странице в utf-8, но опять-же хочется иметь страничку с windows-1251.

Есть идеи?
поисковик от гугла http://www.google.com/coop/cse/
страничка, на которой у меня возникли проблемы: http://tools-of-death.ru/2.html

Hitsi
16-09-2007, 22:34
А сам код?
попробуй переводить из одной кодировки в другую строку которую передал через search до выполнения скрипта

iconv -- Преобразовывает символы строки в другую кодировку

string iconv ( string in_charset, string out_charset, string str )

Производит преобразование кодировки символов строки str из начальной кодировки in_charset в конечную out_charset. Возвращает строку в новой кодировке, или FALSE в случае ошибки.

Если добавить //TRANSLIT к параметру out_charset будет включена транслитеризация. Это означает, что вслучае, когда символа нет в конечной кодировке, он заменяется одним или несколькими аналогами. Если добавить //IGNORE, то символы, которых нет в конечной кодировке, будут опущены. Иначе, будет возвращена строка str, обрезанная до первого недопустимого символа


<?php
echo iconv("KOI8-U", "UTF-8", "Пора переходить на юникод.");
?>

php.ru (http://php.ru/manual/function.iconv.html)

Vampire
16-09-2007, 23:06
Там все с помощью яваскрипта происходит.
Вот код вызова формы поиска:

<!-- Google CSE Search Box Begins -->
<form id="searchbox_000809898124376604728:dywleb5svrq" action="http://tools-of-death.ru/2.html">
<input type="hidden" name="cx" value="000809898124376604728:dywleb5svrq" />
<input name="q" type="text" size="40" />
<input type="submit" name="sa" value="Search" />
<input type="hidden" name="cof" value="FORID:11" />
</form>
<!-- Google CSE Search Box Ends -->

А вот код вызова полученных результатов поиска:

<!-- Google Search Result Snippet Begins -->
<div id="results_000809898124376604728:dywleb5svrq"></div>
<script type="text/javascript">
var googleSearchIframeName = "results_000809898124376604728:dywleb5svrq";
var googleSearchFormName = "searchbox_000809898124376604728:dywleb5svrq";
var googleSearchFrameborder = 0;
var googleSearchFrameWidth = 600;
var googleSearchFrameHeight = "300px";
var googleSearchDomain = "www.google.com";
var googleSearchPath = "/cse";
</script>
<script type="text/javascript" src="http://www.google.com/afsonline/show_afs_search.js"></script>
<!-- Google Search Result Snippet Ends -->

А вот листинг того яваскрипта, который упомянут в предыдущем коде, только там такая мешанина :( фиг разберешь

(function(){var f=null,a=window,j="sitesearch",s=a.googleSearchResizeIframe||a.googleSearchPath&&a.googleSearchPath=="/cse"&&typeof a.googleSearchResizeIframe=="undefined",p,o,k;function t(c,b,l,m){var d={},g=c.split(l);for(var e=0;e<g.length;e++){var h=g[e],n=h.indexOf(b);if(n>0){var i=h.substring(0,n);if(m){i=i.toUpperCase()}else{i=i.toLowerCase()}var w=h.substring(n+1,h.length);d[i]=w}}return d}function x(){var c=document.location.search;if(c.length<1){return""}c=c.substring(1,c.length);var b=
t(c,"=","&",false);if(a.googleSearchQueryString!="q"&&b[a.googleSearchQueryString]){b.q=b[a.googleSearchQueryString];delete b[a.googleSearchQueryString]}if(b.cof){var l=t(decodeURIComponent(b.cof),":",";",true),m=l.FORID;if(m){p=parseInt(m,10)}}var d=document.getElementById(a.googleSearchFormName);if(d){if(d.q&&b.q&&(!b.ie||b.ie.toLowerCase()=="utf-8")){d.q.value=decodeURIComponent(b.q.replace(/\+/g," "))}if(d[j]){for(var g=0;g<d[j].length;g++){if(b[j]==f&&d[j][g].value==""){d[j][g].checked=true}else if(d[j][g].value==
b[j]){d[j][g].checked=true}else{d[j][g].checked=false}}}}var e="";for(var h in b){e+="&"+h+"="+b[h]}return e.substring(1,e.length)}function q(c,b){if(b){return"&"+c+"="+encodeURIComponent(b)}else{return""}}function r(c,b){if(c){return Math.max(c,b)}else{return b}}function u(){var c="http://";if(a.googleSearchDomain){c+=a.googleSearchDomain}else{c+="www.google.com"}if(a.googleSearchPath){c+=a.googleSearchPath}else{c+="/custom"}c+="?";if(a.googleSearchQueryString){a.googleSearchQueryString=a.googleSearchQueryString.toLowerCase()}c+=
x();c+=q("ad","w"+o);c+=q("num",k);c+=q("adtest",a.googleAdtest);if(s){var b=a.location.href,l=b.indexOf("#");if(l!=-1){b=b.substring(0,l)}c+=q("rurl",b)}return c}function v(){o=a.googleSearchNumAds;if(!o){o=9}k=a.googleNumSearchResults;if(k){k=Math.min(k,20)}else{k=10}va r c={};c[9]=795;c[10]=795;c[11]=500;var b={};b[9]=300+90*k;b[10]=300+50*Math.min(o,4)+90*k;b[11]=300+50*o+90*k;var l=u();if(!a.googleSearchFrameborder){a.googleSearchFrameborder="0"}var m=document.getElementById(a.googleSearchIframeName);
if(m&&c[p]){var d=r(a.googleSearchFrameWidth,c[p]),g=r(a.googleSearchFrameHeight,b[p]),e=document.createElement("iframe"),h={name:"googleSearchFrame",src:l,frameBorder:a.googleSearchFrameborder,width:d,height:g,marginWidth:"0",marginHeight:"0",hspace:"0",vspace:"0",allowTransparency:"true",scrolling:"no"};for(var n in h){e.setAttribute(n,h[n])}m.appendChild(e);if(e.attachEvent){e.attachEvent("onload",function(i){window.scrollTo(0,0)})}else{e.addEventListener("load",function(){window.scrollTo(0,0)},
false)}if(s){a.setInterval(function(){if(a.location.hash&&a.location.hash!="#"){var i=a.location.hash.substring(1)+"px";if(e.height!=i&&i!="0px"){e.height=i}}},10)}}a.googleSearchIframeName=f;a.googleSearchFormName=f;a.googleSearchResizeIframe= f;a.googleSearchQueryString=f;a.googleSearchDomain=f;a.googleSearchPath=f;a.googleSearchFrameborder= f;a.googleSearchFrameWidth=f;a.googleSearchFrameHeight=f;a.googleSearchNumAds=f;a.googleNumSearchRes ults=f;a.googleAdtest=f}v()})();

Vampire
17-09-2007, 00:49
Нашел одну зацепку в явоскрипте. Теперь возник вопрос, как с помощью яваскрипта преобразовать русские символы переданные с помощью метода get и превращенные в %EF%F0%EE%E2%E5%F0%EA%E0 преобразовать в русские символы в кодировке win-1251?

Hitsi
17-09-2007, 02:31
%EF%F0%EE%E2%E5%F0%EA%E0 это и есть утф8.. я тебе написал функцию (пхп) которая переводит из одной кодирвки в другую.. на яве я такой не знаю %)

$string=iconv("UTF-8", "WINDOWS-1251", $string);


Только вроде она не переводит сразу в кодировку WINDOWS-1251.. сначала надо в исо а потом в кирилицу %)
ЗЫ: а мешанину мог бы и разобрать....... тебе же лучше потом будет

( function()
{
var f=null,a=window,j="sitesearch",s=a.googleSearchResizeIframe||a.googleSearchPath&&a.googleSearchPath=="/cse"&&typeof a.googleSearchResizeIframe=="undefined",p,o,k;

function t(c,b,l,m) {
var d={},g=c.split(l);
for(var e=0;e<g.length;e++) {
var h=g[e],n=h.indexOf(b);
if(n>0) {
var i=h.substring(0,n);
if(m) {
i=i.toUpperCase()
} else {
i=i.toLowerCase()
}
var w=h.substring(n+1,h.length);
d[i]=w
}
}
return d
}

function x(){
var c=document.location.search;
if(c.length<1) {
return""
}
c=c.substring(1,c.length);
var b=t(c,"=","&",false);
if(a.googleSearchQueryString!="q"&&b[a.googleSearchQueryString]) {
b.q=b[a.googleSearchQueryString];
delete b[a.googleSearchQueryString]
}
if(b.cof) {
var l=t(decodeURIComponent(b.cof),":",";",true),m=l.FORID;
if(m) {
p=parseInt(m,10)
}
}
var d=document.getElementById(a.googleSearchFormName);
if(d) {
if(d.q&&b.q&&(!b.ie||b.ie.toLowerCase()=="utf-8")) {
d.q.value=decodeURIComponent(b.q.replace(/\+/g," "))
}
if(d[j]) {
for(var g=0;g<d[j].length;g++) {
if(b[j]==f&&d[j][g].value=="") {
d[j][g].checked=true
} else if(d[j][g].value==b[j]) {
d[j][g].checked=true
}else {
d[j][g].checked=false
}
}
}
}
var e="";
for(var h in b) {
e+="&"+h+"="+b[h]
}
return e.substring(1,e.length)
}

function q(c,b) {
if(b) {
return"&"+c+"="+encodeURIComponent(b)
} else {
return""
}
}

function r(c,b) {
if(c) {
return Math.max(c,b)
}else {
return b
}
}

function u() {
var c="http://";
if(a.googleSearchDomain) {
c+=a.googleSearchDomain
} else {
c+="www.google.com"
}
if(a.googleSearchPath) {
c+=a.googleSearchPath
} else {
c+="/custom"}c+="?";
if(a.googleSearchQueryString) {
a.googleSearchQueryString=a.googleSearchQueryString.toLowerCase()
}
c+=x();
c+=q("ad","w"+o);
c+=q("num",k);
c+=q("adtest",a.googleAdtest);
if(s) {
var b=a.location.href,l=b.indexOf("#");
if(l!=-1) {
b=b.substring(0,l)
}
c+=q("rurl",b)
}
return c
}

function v() {
o=a.googleSearchNumAds;
if(!o) {
o=9
}
k=a.googleNumSearchResults;
if(k) {
k=Math.min(k,20)
} else {
k=10
}
var c={};
c[9]=795;
c[10]=795;
c[11]=500;
var b={};
b[9]=300+90*k;
b[10]=300+50*Math.min(o,4)+90*k;
b[11]=300+50*o+90*k;
var l=u();
if(!a.googleSearchFrameborder) {
a.googleSearchFrameborder="0"
}
var m=document.getElementById(a.googleSearchIframeName);
if(m&&c[p]) {
var d=r(a.googleSearchFrameWidth,c[p]), g=r(a.googleSearchFrameHeight, b[p]), e=document.createElement("iframe"), h={name:"googleSearchFrame",src:l,frameBorder:a.googleSearchFrameborder,width:d,height:g,marginWidth:"0",marginHeight:"0",hspace:"0",vspace:"0",allowTransparency:"true",scrolling:"no"};
for(var n in h) {
e.setAttribute(n,h[n])
}
m.appendChild(e);
if(e.attachEvent) {
e.attachEvent("onload",function(i) { window.scrollTo(0,0)})
} else {
e.addEventListener("load",function(){window.scrollTo(0,0)},false)
} if(s) {
a.setInterval(function() {
if(a.location.hash&&a.location.hash!="#") {
var i=a.location.hash.substring(1)+"px";
if(e.height!=i&&i!="0px") {
e.height=i
}
}
},10)
}
}
a.googleSearchIframeName=f;
a.googleSearchFormName=f;
a.googleSearchResizeIframe=f;
a.googleSearchQueryString=f;
a.googleSearchDomain=f;
a.googleSearchPath=f;
a.googleSearchFrameborder=f;
a.googleSearchFrameWidth=f;
a.googleSearchFrameHeight=f;
a.googleSearchNumAds=f;
a.googleNumSearchResults=f;
a.googleAdtest=f
}
v()
} )();


ЗЫ: для пхп нашел специальный класс перекодирования (http://www.grebenshikov.ru/written.phtml?a=1&id=166) На основе его можеш написать преобразование на джаве...

Vampire
17-09-2007, 18:03
Спасибо за приведение мешанины в нормальный вид. Сам я ее кусками только в нужных местах к нормальному виду привел. Вручную долго ее приводить, а из автоматики ничего под рукой нету ;)

В пхп делать не хочу, так как все на джаве сделано, вот и хочу гугловскую джаву переделать под свои нужды :)

Класс перекодирования гляну, а на яве случаем ничего нету уже предусмотренного для перекодировки из одной таблицы в другую, ведь наверное не я один этим заморачиваюсь?

steelcat
10-10-2007, 09:50
Сегодня уперся в такую же проблему с кодировками. Ларчик открывается довольно просто -- для кодировки KOI8-R в код формы поиска нужно добавить следующий код:

<input type="hidden" name="ie" value="KOI8-R" />

Vampire
10-10-2007, 21:19
А с кодировкой windows-1251 нужно вставить что-то типа:
<input type="hidden" name="ie" value="windows-1251" />
Так?

Я до этого просто скачал аваскрипт гугловский и его немного поковеркал, там где в форму обратно передавался запрос.

steelcat
11-10-2007, 07:05
Да, так должно работать. К сожаления, пока не наберу 3 постов, не могу дать ссылки на документацию.

Vampire
12-10-2007, 00:16
Так напиши еще чего-нить интересного и будет 3 пост ;)
Сам додумался на прописывание строчки с кодировкой или подсказал кто?

steelcat
12-10-2007, 07:05
Хм, надо попробовать 8-)

Додумался не сам. Поиск рулит.

Сначало нашлось вот это:
http://googlecustomsearch.blogspot.com/2006/11/custom-search-in-your-language.html, потом по ссылке вот это:
http://www.google.com/coop/docs/cse/hosting.html

Где, собственно все и описано.

Vampire
13-10-2007, 23:08
Да чегото с инглишем у меня туговато :( Мне б документик на раше :)
А так я прописал как ты советовал, только не кои 8, а вин-1251 и все вроде нормально работает. Правда когда была кодировка утф-8 в форму набранные слова подставлялись есче после нажатия на кнопку поиск...

А случаем не пытался разобраться с выводом популярных запросов на странице? Чего-то их скрипт ничего не показывает :(

nickolas2
14-12-2007, 21:21
> Правда когда была кодировка утф-8 в форму набранные слова подставлялись есче после нажатия на кнопку поиск...

да та же проблема. если русский вводишь то он пропадает. Если английский остается. Прийдется наверное php использовать.


>А случаем не пытался разобраться с выводом популярных запросов на странице?

в google/adsense в расширенном отчете показывает:)




© OSzone.net 2001-2012