kostenloser Webspace werbefrei: lima-city


Suche auf lima-city

  • in: suggestqueries.google unvollständig ?

    geschrieben von prosuche

    Hallo

    ja echt komisch, denn bei direktem Aufruf mit Browser (FF) am PC bekommt man ja die Daten

    Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0


    also denke ich, es könnte am User-Agent liegen

    also ... zuerst habe ich es mit stream_context_create() versucht

    $useragent = $_SERVER['HTTP_USER_AGENT']; 
    $header_str = 	"User_Agent: ".$useragent."\r\n"; 
    			
    $context_get = stream_context_create(array(
    	'http' => array(
    		'method'  => 'GET',
    		'header'  => $header_str, 
    	),
    ));
    
    $search = 'bie'; 
    $url_json = 'http://suggestqueries.google.com/complete/search?output=firefox&client=firefox&hl=de-DE&q='.$search.''; 
    
    $strg_json = file_get_contents($url_json, false, $context_get); 
    $data_json = json_decode($strg_json, true); 
    
    print "<pre style=\"margin:16px 8px; padding:4px; text-align:left; background:#DEDEDE; color:#000099;\">\n";
    print_r($data_json); 
    print "</pre>\n";


    aber damit weiterhin keine Daten bekommen ...

    Habe ich das stream_context_create() irgendwie falsch gemacht
    oder muss man noch andere Header-Angaben machen ?


    ... dann habe ich es mit curl versucht
    function get_data($url) { 
    
    	$user_agent = $_SERVER['HTTP_USER_AGENT']; 
    
    	$ch = curl_init();
    	$timeout = 5;
    	curl_setopt ($ch, CURLOPT_URL, $url);
    	curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    	curl_setopt ($ch, CURLOPT_USERAGENT, $user_agent); 
    	curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    	$data = curl_exec($ch);
    	curl_close($ch);
    	
    	return $data;
    }
    
    $search = 'bie'; 
    $url_json = 'http://suggestqueries.google.com/complete/search?output=firefox&client=firefox&hl=de-DE&q='.$search.''; 
    
    $strg_curl = get_data($url_json); 
    $data_curl = json_decode($strg_curl, true); 
    
    print "<pre style=\"margin:16px 8px; padding:4px; text-align:left; background:#DEDEDE; color:#000099;\">\n";
    print_r($data_curl);
    print "</pre>\n";


    ... und siehe da ... mit CURL kommen die Daten auch im Script an

    Array
    (
        [0] => bie
        [1] => Array
            (
                [0] => bielefeld
                [1] => bienenstich
                [2] => biene maja
                [3] => bienen
                [4] => bier
                [5] => bien zenker
                [6] => bier kalorien
                [7] => bierkönig
                [8] => biergarten münchen
                [9] => bierbörse
            )
    
    )


    also mit curl und User-Agent geht es, ... was war "falsch" bei stream_context_create()
    bzw. funktioniert das überhaupt, damit einen User-Agent mit zu senden bei GET Abfrage ?

    weitere Fragen dazu:

    Kann man damit auch mehr als 10 Ergebnisse bekommen (Limit-Parameter) ?

    und ... Welche Alternativen zu diesem Google Suggestions gibt es ?
    bei Yahoo nichts gefunden, bzw nur BOSS Api die aber Geld kostet :(
  • in: suggestqueries.google unvollständig ?

    geschrieben von prosuche

    Hallo

    wenn ich die Google Suggestions abfrage mit "bie" als Such-String

    XML ---> Google Suggest "bie" Abfrage
    JSON ---> Google Suggest "bie" Abfrage

    kommt im Browser als Ergebnis: bienenstich, bielefeld, biene maja, bier, etc ..

    aber wenn ich die Datei per PHP auslese (egal ob json oder xml)
    ... dann kommt kein Ergebnis / leer ?!

    Test-CODE:

    <?php 
    // --------------------------------------------------------- 
    
    header("Cache-Control: no-cache, must-revalidate" ); 
    header("Pragma: no-cache" );
    header("Content-Type: text/html; charset=utf-8");
    
    // --------------------------------------------------------- 
    
    
    if (isset($_REQUEST['search']) && $_REQUEST['search'] != '') { 
    $go_search = trim($_REQUEST['search']);
    }
    else { 
    $go_search = ''; 
    }
    
    // --------------------------------------------------------- 
    
    print "<br />\n"; 
    print "<br />\n"; 
    
    print '
    <form name="form1" method="post" action="">
      Suche: <input type="text" name="search" value="'.$go_search.'" size="30" maxlength="100" />
      OK: <input type="submit" name="Abschicken" value="SUCHEN" />
    </form>
    '; 
    
    print "<br />\n"; 
    print "<br />\n"; 
    
    // --------------------------------------------------------- 
    
    if (!empty($go_search)) { 
    
    $search = $go_search;
    
    print "<h2>".$go_search."</h2>\n"; 
    
    print "<br />\n"; 
    print "<br />\n"; 
    
    // -------------------------------------- 
    
    $url_json = 'http://suggestqueries.google.com/complete/search?output=firefox&client=firefox&hl=de-DE&q='.$search.''; 
    
    print "<br />URL: <a href=\"".$url_json."\" target=\"_blank\">JSON</a> \n";
    print "<br />\n";
    
    $strg_json = file_get_contents($url_json);
    $data_json = json_decode($strg_json, true); 
    
    print "<pre style=\"margin:16px 8px; padding:4px; text-align:left; background:#DEDEDE; color:#000099;\">\n";
    print_r($data_json); 
    print "</pre>\n";
    
    print "<br />\n";
    print "<br />\n";
    
    // -------------------------------------- 
    
    $url_xml = 'http://suggestqueries.google.com/complete/search?output=toolbar&client=toolbar&hl=de-DE&q='.$search.''; 
    
    print "<br />URL: <a href=\"".$url_xml."\" target=\"_blank\">XML</a> \n";
    print "<br />\n";
    
    $data_xml = simplexml_load_file($url_xml); 
    
    print "<pre style=\"margin:16px 8px; padding:4px; text-align:left; background:#DEDEDE; color:#000099;\">\n";
    print_r($data_xml); 
    print "</pre>\n";
    
    print "<br />\n";
    print "<br />\n";
    
    }
    // --------------------------------------------------------- 
    ?>

    ? ... gibt es da noch irgedwelche Parameter die man setzen muss
    oder warum komen im Script manchmal einfach gar keine Suggestions ... ?
    ... mach ich da irgendwas falsch ?!?

    + Welche Alternativen gibt es zu Google Suggestions ?

  • in: this.form.submit() und onsubmit="" Problem

    geschrieben von prosuche

    ja, wenn der POST Request "richtig" abgesetzt wird, dann klappt es auch :)

    hier mal ein funktionierendes Beispiel;


    Datei: /test.htm
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    
    <head>
    <title>TEST</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    
    <script type="text/javascript">
    
    function getXmlHttpRequestObject() {
    	if (window.XMLHttpRequest) {
    		return new XMLHttpRequest();
    	} 
    	else if(window.ActiveXObject) {
    		return new ActiveXObject("Microsoft.XMLHTTP");
    	} 
    	else {
    		alert("... ActiveXObject Error ... ");
    	}
    }
    
    
    
    function saveShoutbox(elem) {
    	
    	/* ---- Variablen ein-sammeln ---- */ 	
    	var timestamp = new Date().getTime(); 
    	var textarea_id = elem.id; 
    	var textarea_msg = elem.value;
    	
    	/* ---- Hier der AJAX POST Request ---- */
    	
    	
    	var post_ziel = "/run/send_shoutbox.php";
    	
    	var timestamp = new Date().getTime();
    	var textarea_msg = elem.value;
    	var username = document.getElementById("username").value;
    	var ts_send = document.getElementById("sendtoTS").checked;
    	
    	ts_send_nfo = (ts_send === true)?'ja':'nein';
    	var parameter = "sbname="+username+"&amp;sbtext="+textarea_msg+"&amp;nocache="+timestamp+"&amp;sbtots="+ts_send_nfo+""; 
    	
    	/* --- 
    	alert("\n Ziel: " + post_ziel + "\n Daten: "+ parameter + "\n Time: "+ timestamp + "\n"); 
    	--- */
    	
    	var ajax_http = getXmlHttpRequestObject();
    	
    	ajax_http.open("POST", post_ziel, true);
    	
    	ajax_http.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    	ajax_http.setRequestHeader("Content-length", parameter.length);
    	ajax_http.setRequestHeader("Connection", "close");
    	
    	ajax_http.onreadystatechange = function() { 
    		if(ajax_http.status == 200) {
    			document.getElementById("result").innerHTML = ajax_http.responseText; 
    		}
    		else { 
    			alert("Error ... Status: " + ajax_http.status); 
    		}
    	}
    	
    	/* ---- Das Element (textarea) leeren ---- */ 
    	elem.value = '';  
    	
    	parameter = parameter.replace(/&amp;/gi,'&'); 
    	ajax_http.send(parameter);
    
    }
    </script>
    
    </head>
    
    <body>
    
    <br />
    <br /> User: <input type="text" id="username" name="user" size="30" maxlength="100" value="Hans_Dampf" />
    <br />
    <br /> Auch an TS senden? <input type="checkbox" id="sendtoTS" name="sendtoTS" value="ja" />
    <br />
    <br /> Nachricht: 
    <br />
    <textarea id="testfeld" name="test" cols="40" rows="5" onkeydown="if (event.keyCode == 13) { saveShoutbox(this);  return false; }"></textarea>
    <br />
    <br />
    
    <div id="result" style="margin:4px; padding:6px; background:#DEDEDE;"></div>
    
    <br />
    <br />
    
    </body>
    </html>



    Datei: /run/send_shoutbox.php
    <?php 
    // ------------------------------------ 
    
    print "<pre>\n"; 
    print_r($_REQUEST); 
    print "</pre>\n"; 
    
    // ------------------------------------ 
    ?>



    anstatt das Ergebnis in <div id="result" ..> auszugeben,
    kannst Du ja auch ne andere Ausgabe (Erfolgs-Meldung) machen

    :)
  • in: this.form.submit() und onsubmit="" Problem

    geschrieben von prosuche

    naja, wen Du bei onKeydown einen submit absetzt,
    dann wird halt das Formular auch gesendet (Browser-Refresh)

    deshalb als Event nicht das Formular absenden, sondern die AJAX Funktion aufrufen

    ... onkeydown="if (event.keyCode == 13) { saveShoutbox(); return false; } ...

    nur so als Idee ...

    hier mal ein TEST / Beispiel
    <html>
    <head>
    <title>TEST</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    
    <script type="text/javascript">
    function saveShoutbox(elem) {
    
    /* ---- Variablen ein-sammeln ---- */ 	
    	var timestamp = new Date().getTime(); 
    	var textarea_id = elem.id; 
    	var textarea_msg = elem.value;
    	
    /* ---- Hier anstatt alert() Dein AJAX POST Request ---- */
    	alert("\n ID: " + textarea_id + "\n Text: "+ textarea_msg + "\n Timestamp: "+ timestamp + "\n");
    
    /* ---- Das Element (textarea) leeren ---- */ 
    	elem.value = '';  
    	
    }
    </script>
    
    </head>
    
    <body>
    
    <br>
    
    <textarea id="testfeld" name="test" cols="40" rows="5" onkeydown="if (event.keyCode == 13) { saveShoutbox(this);  return false; }"></textarea>
    
    <br>
    
    </body>
    </html>


    Du brauchst also nichtmal ein <form> Element, es genügt auch nur <textarea> mit einer ID
    aber Du kannst auch gerne das Element über <form> ansprechen .... eigentlich egal.

    Wenn Du timestamp als Variable in JS willst, muss die auch erst erstellt werden

    und anstatt dem alert() einfach Deinen AJAX POST Request mit den Variablen
    und dann fehlt noch eine Ausgabe, ob der POST geklappt hat, bzw. das Ergebnis.

    ich hoffe das hilft weiter :)
  • in: Titel zur Rewrite URL umwandeln?

    geschrieben von prosuche

    Hallo

    du muss nichtmal den String utf8_decode() machen um Umlaute zu filtern,

    mach einfach direkt im Pattern mit Modifier /u (für utf-8)
    und nur die die Umlaute selber als utf-8 machen ... $umlx = utf8_encode('äöüß');

    ...
        $umlx = utf8_encode('äöüß'); 
         
        $string = preg_replace("/[^0-9a-z".$umlx."-]/us", $spacer, $string); 
    ...


    ohne das $string = utf8_decode($string); und ohne $string = utf8_encode($string);
    // ---------------------------------------------
     
    function clean_title($string, $spacer='-') {
         
        $string = strtolower($string);
        $string = utf8_decode($string);
         
        $umlx = utf8_encode('äöüß');
         
        $string = preg_replace("/[^0-9a-z".$umlx."-]/us", $spacer, $string); 
        $string = preg_replace("/\$spacer{2,}/", $spacer, $string);
        $string = trim($string, $spacer);
         
        $umlz = array( utf8_encode('ä'), utf8_encode('ö'), utf8_encode('ü'), utf8_encode('ß') );
        $rplz = array( 'ae', 'oe', 'ue', 'ss' );
         
        $string = str_replace($umlz,$rplz,$string);
    
        return $string;
     
    }
     
    // ---------------------------------------------


    und darauf achten, dass der String auch als utf-8 an die Funktion übergeben wird
    ... zum Beispiel mit mb-detect-encoding prüfen

    if (mb_detect_encoding($str, 'UTF-8', true) === false) { 
    $str = utf8_encode($str); 
    }
    
    $clean = clean_title($str);


    ob das auch mit € (EURO-Zeichen) funktioniert kannn ich nicht sagen.

    EDIIT .. PS: ..... das hier
    $umlz = array( utf8_encode('ä'), utf8_encode('ö'), utf8_encode('ü'), utf8_encode('ß') );

    kann man sicher auch noch "schöner" machen ...

Login zum Webhosting ohne Werbung!