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+"&sbtext="+textarea_msg+"&nocache="+timestamp+"&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(/&/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 ...