Obtenir un mot clé à partir d'une URL de renvoi (moteur de recherche) à l'aide de PHP

StackOverflow https://stackoverflow.com/questions/1805296

  •  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

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top