Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   [решено] Удавалось кому нибудь подружить Custom Search Engine от гугла с сайтом? (http://forum.oszone.net/showthread.php?t=90384)

Vampire 16-09-2007 20:32 644483

Удавалось кому нибудь подружить Custom Search Engine от гугла с сайтом?
 
Пытаюсь подпружить 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 644547

А сам код?
попробуй переводить из одной кодировки в другую строку которую передал через search до выполнения скрипта

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

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

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

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

PHP код:

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

php.ru

Vampire 16-09-2007 23:06 644564

Там все с помощью яваскрипта происходит.
Вот код вызова формы поиска:
Код:

<!-- 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}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()})();


Vampire 17-09-2007 00:49 644633

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

Hitsi 17-09-2007 02:31 644652

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

$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()
} )();

ЗЫ: для пхп нашел специальный класс перекодирования На основе его можеш написать преобразование на джаве...

Vampire 17-09-2007 18:03 645118

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

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

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

steelcat 10-10-2007 09:50 657492

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

Код:

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

Vampire 10-10-2007 21:19 657933

А с кодировкой windows-1251 нужно вставить что-то типа:
Код:

<input type="hidden" name="ie" value="windows-1251" />
Так?

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

steelcat 11-10-2007 07:05 658165

Да, так должно работать. К сожаления, пока не наберу 3 постов, не могу дать ссылки на документацию.

Vampire 12-10-2007 00:16 658793

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

steelcat 12-10-2007 07:05 658843

Хм, надо попробовать 8-)

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

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

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

Vampire 13-10-2007 23:08 659882

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

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

nickolas2 14-12-2007 21:21 697415

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

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


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

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


Время: 17:16.

Время: 17:16.
© OSzone.net 2001-