Erhalten Schlüsselwort aus einer (Suchmaschine) Referrer URL mit PHP
-
05-07-2019 - |
Frage
Ich versuche, die Suche Schlüsselwort aus einer Referrer-URL zu erhalten. Derzeit bin ich mit dem folgenden Code für Google URLs. Aber manchmal ist es nicht funktioniert ...
$query_get = "(q|p)";
$referrer = "http://www.google.com/search?hl=en&q=learn+php+2&client=firefox";
preg_match('/[?&]'.$query_get.'=(.*?)[&]/',$referrer,$search_keyword);
Gibt es eine andere / sauber / Arbeits Art und Weise, dies zu tun?
Danke, Prasad
Lösung
Wenn Sie mit PHP5 einen Blick auf http://php.net/parse_url und http://php.net/parse_str
Beispiel:
// The referrer $referrer = 'http://www.google.com/search?hl=en&q=learn+php+2&client=firefox'; // Parse the URL into an array $parsed = parse_url( $referrer, PHP_URL_QUERY ); // Parse the query string into an array parse_str( $parsed, $query ); // Output the result echo $query['q'];
Andere Tipps
Es gibt verschiedene Abfrage-Strings auf verschiedene Suchmaschinen. Nach Wiliam Methode versucht, ich habe meine eigene Methode herausgefunden. (Weil, Yahoo wird mit 'p', aber manchmal 'q')
$referrer = "http://search.yahoo.com/search?p=www.stack+overflow%2Ccom&ei=utf-8&fr=slv8-msgr&xargs=0&pstart=1&b=61&xa=nSFc5KjbV2gQCZejYJqWdQ--,1259335755";
$referrer_query = parse_url($referrer);
$referrer_query = $referrer_query['query'];
$q = "[q|p]"; //Yahoo uses both query strings, I am using switch() for each search engine
preg_match('/'.$q.'=(.*?)&/',$referrer,$keyword);
$keyword = urldecode($keyword[1]);
echo $keyword; //Outputs "www.stack overflow,com"
Danke, Prasad
die anderen Antworten Ergänzung zu beachten, dass die Query-String-Parameter, der die Suchbegriffe enthalten, die durch Suchanbieter variieren. Dieser Code-Schnipsel von PHP zeigt den richtigen Parameter zu verwenden:
$search_engines = array(
'q' => 'alltheweb|aol|ask|ask|bing|google',
'p' => 'yahoo',
'wd' => 'baidu',
'text' => 'yandex'
);
Quelle: http://betterwp.net/wordpress-tips / get-search-Keywords-from-Referrer /
<?php
class GET_HOST_KEYWORD
{
public function get_host_and_keyword($_url) {
$p = $q = "";
$chunk_url = parse_url($_url);
$_data["host"] = ($chunk_url['host'])?$chunk_url['host']:'';
parse_str($chunk_url['query']);
$_data["keyword"] = ($p)?$p:(($q)?$q:'');
return $_data;
}
}
// Sample Example
$obj = new GET_HOST_KEYWORD();
print_r($obj->get_host_and_keyword('http://www.google.co.in/search?sourceid=chrome&ie=UTF-&q=hire php php programmer'));
// sample output
//Array
//(
// [host] => www.google.co.in
// [keyword] => hire php php programmer
//)
// $search_engines = array(
// 'q' => 'alltheweb|aol|ask|ask|bing|google',
// 'p' => 'yahoo',
// 'wd' => 'baidu',
// 'text' => 'yandex'
//);
?>
$query = parse_url($request, PHP_URL_QUERY);
Dies sollte für Google, Bing arbeiten und manchmal, Yahoo Search:
if( isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER']) {
$query = getSeQuery($_SERVER['HTTP_REFERER']);
echo $query;
} else {
echo "I think they spelled REFERER wrong? Anyways, your browser says you don't have one.";
}
function getSeQuery($url = false) {
$segments = parse_url($url);
$keywords = null;
if($query = isset($segments['query']) ? $segments['query'] : (isset($segments['fragment']) ? $segments['fragment'] : null)) {
parse_str($query, $segments);
$keywords = isset($segments['q']) ? $segments['q'] : (isset($segments['p']) ? $segments['p'] : null);
}
return $keywords;
}
Ich glaube, Google und Yahoo hatte ihren Algorithmus aktualisiert Suche Schlüsselwörter und andere params in der URL ausschließen, die HTTP_REFERRER Methode wird nicht empfangen werden.
Bitte lassen Sie mich wissen, ob über Empfehlungen immer noch die Suche Schlüsselwörter liefern.
Was erhalte ich bin jetzt unten, wenn Referrer auf meiner Website Ende verwendet wird.
von Google: https://www.google.co.in/ von Yahoo: https://in.yahoo.com/
Ref: https: //webmasters.googleblog .com / 2012/03 / bevorstehenden-Änderungen in googles-http.html