Obtenir un mot clé à partir d'une URL de renvoi (moteur de recherche) à l'aide de PHP
-
05-07-2019 - |
Question
J'essaie d'obtenir le mot clé de recherche à partir d'une URL de référence. Actuellement, j'utilise le code suivant pour les URL de Google. Mais parfois, ça ne marche pas ...
$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);
Existe-t-il un autre moyen / propre / efficace pour le faire?
Merci Prasad
La solution
Si vous utilisez PHP5, consultez http://php.net/parse_url et http://php.net/parse_str
Exemple:
// 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'];
Autres conseils
Il existe différentes chaînes de requête sur différents moteurs de recherche. Après avoir essayé la méthode de Wiliam, j'ai découvert ma propre méthode. (Parce que Yahoo utilise 'p', mais parfois '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"
Merci Prasad
Pour compléter les autres réponses, notez que le paramètre de chaîne de requête qui contient les termes de recherche varie selon le fournisseur de recherche. Cet extrait de PHP montre le paramètre correct à utiliser:
$search_engines = array(
'q' => 'alltheweb|aol|ask|ask|bing|google',
'p' => 'yahoo',
'wd' => 'baidu',
'text' => 'yandex'
);
Source: 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);
Celui-ci devrait fonctionner pour Google, Bing et parfois Yahoo Search:
if( isset( Celui-ci devrait fonctionner pour Google, Bing et parfois Yahoo Search:
<*>SERVER['HTTP_REFERER']) && Celui-ci devrait fonctionner pour Google, Bing et parfois Yahoo Search:
<*>SERVER['HTTP_REFERER']) {
$query = getSeQuery( Celui-ci devrait fonctionner pour Google, Bing et parfois Yahoo Search:
<*>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;
}
Je pense que Google et Yahoo ont mis à jour leur algorithme pour exclure les mots clés de recherche et autres paramètres de l'URL qui ne peuvent pas être reçus à l'aide de la méthode http_referrer.
Faites-moi savoir si les recommandations ci-dessus fourniront toujours les mots-clés de recherche.
Voici ce que je reçois maintenant lorsque j'utilise http referrer sur mon site Web.
à partir de Google: https://www.google.co.in/ depuis yahoo: https://in.yahoo.com/
Réf.: https: //webmasters.googleblog .com / 2012/03 / futures-modifications-à-googles-http.html